{
  "version": 3,
  "sources": ["../../common/temp/node_modules/.pnpm/commander@14.0.2/node_modules/commander/lib/error.js", "../../common/temp/node_modules/.pnpm/commander@14.0.2/node_modules/commander/lib/argument.js", "../../common/temp/node_modules/.pnpm/commander@14.0.2/node_modules/commander/lib/help.js", "../../common/temp/node_modules/.pnpm/commander@14.0.2/node_modules/commander/lib/option.js", "../../common/temp/node_modules/.pnpm/commander@14.0.2/node_modules/commander/lib/suggestSimilar.js", "../../common/temp/node_modules/.pnpm/commander@14.0.2/node_modules/commander/lib/command.js", "../../common/temp/node_modules/.pnpm/commander@14.0.2/node_modules/commander/index.js", "../../common/temp/node_modules/.pnpm/@commander-js+extra-typings@14.0.0_commander@14.0.2/node_modules/@commander-js/extra-typings/index.js", "../../common/temp/node_modules/.pnpm/@sentry+utils@7.120.4/node_modules/@sentry/src/is.ts", "../../common/temp/node_modules/.pnpm/@sentry+utils@7.120.4/node_modules/@sentry/src/string.ts", "../../common/temp/node_modules/.pnpm/@sentry+utils@7.120.4/node_modules/@sentry/src/aggregate-errors.ts", "../../common/temp/node_modules/.pnpm/@sentry+utils@7.120.4/node_modules/@sentry/src/worldwide.ts", "../../common/temp/node_modules/.pnpm/@sentry+utils@7.120.4/node_modules/@sentry/src/browser.ts", "../../common/temp/node_modules/.pnpm/@sentry+utils@7.120.4/node_modules/@sentry/src/debug-build.ts", "../../common/temp/node_modules/.pnpm/@sentry+utils@7.120.4/node_modules/@sentry/src/logger.ts", "../../common/temp/node_modules/.pnpm/@sentry+utils@7.120.4/node_modules/@sentry/src/dsn.ts", "../../common/temp/node_modules/.pnpm/@sentry+utils@7.120.4/node_modules/@sentry/src/error.ts", "../../common/temp/node_modules/.pnpm/@sentry+utils@7.120.4/node_modules/@sentry/src/object.ts", "../../common/temp/node_modules/.pnpm/@sentry+utils@7.120.4/node_modules/@sentry/src/node-stack-trace.ts", "../../common/temp/node_modules/.pnpm/@sentry+utils@7.120.4/node_modules/@sentry/src/stacktrace.ts", "../../common/temp/node_modules/.pnpm/@sentry+utils@7.120.4/node_modules/@sentry/src/instrument/_handlers.ts", "../../common/temp/node_modules/.pnpm/@sentry+utils@7.120.4/node_modules/@sentry/src/instrument/console.ts", "../../common/temp/node_modules/.pnpm/@sentry+utils@7.120.4/node_modules/@sentry/src/misc.ts", "../../common/temp/node_modules/.pnpm/@sentry+utils@7.120.4/node_modules/@sentry/src/instrument/dom.ts", "../../common/temp/node_modules/.pnpm/@sentry+utils@7.120.4/node_modules/@sentry/src/supports.ts", "../../common/temp/node_modules/.pnpm/@sentry+utils@7.120.4/node_modules/@sentry/src/instrument/fetch.ts", "../../common/temp/node_modules/.pnpm/@sentry+utils@7.120.4/node_modules/@sentry/src/instrument/globalError.ts", "../../common/temp/node_modules/.pnpm/@sentry+utils@7.120.4/node_modules/@sentry/src/instrument/globalUnhandledRejection.ts", "../../common/temp/node_modules/.pnpm/@sentry+utils@7.120.4/node_modules/@sentry/src/vendor/supportsHistory.ts", "../../common/temp/node_modules/.pnpm/@sentry+utils@7.120.4/node_modules/@sentry/src/instrument/history.ts", "../../common/temp/node_modules/.pnpm/@sentry+utils@7.120.4/node_modules/@sentry/src/instrument/xhr.ts", "../../common/temp/node_modules/.pnpm/@sentry+utils@7.120.4/node_modules/@sentry/src/instrument/index.ts", "../../common/temp/node_modules/.pnpm/@sentry+utils@7.120.4/node_modules/@sentry/src/env.ts", "../../common/temp/node_modules/.pnpm/@sentry+utils@7.120.4/node_modules/@sentry/src/node.ts", "../../common/temp/node_modules/.pnpm/@sentry+utils@7.120.4/node_modules/@sentry/src/isBrowser.ts", "../../common/temp/node_modules/.pnpm/@sentry+utils@7.120.4/node_modules/@sentry/src/memo.ts", "../../common/temp/node_modules/.pnpm/@sentry+utils@7.120.4/node_modules/@sentry/src/normalize.ts", "../../common/temp/node_modules/.pnpm/@sentry+utils@7.120.4/node_modules/@sentry/src/path.ts", "../../common/temp/node_modules/.pnpm/@sentry+utils@7.120.4/node_modules/@sentry/src/syncpromise.ts", "../../common/temp/node_modules/.pnpm/@sentry+utils@7.120.4/node_modules/@sentry/src/promisebuffer.ts", "../../common/temp/node_modules/.pnpm/@sentry+utils@7.120.4/node_modules/@sentry/src/cookie.ts", "../../common/temp/node_modules/.pnpm/@sentry+utils@7.120.4/node_modules/@sentry/src/url.ts", "../../common/temp/node_modules/.pnpm/@sentry+utils@7.120.4/node_modules/@sentry/src/requestdata.ts", "../../common/temp/node_modules/.pnpm/@sentry+utils@7.120.4/node_modules/@sentry/src/severity.ts", "../../common/temp/node_modules/.pnpm/@sentry+utils@7.120.4/node_modules/@sentry/src/time.ts", "../../common/temp/node_modules/.pnpm/@sentry+utils@7.120.4/node_modules/@sentry/src/baggage.ts", "../../common/temp/node_modules/.pnpm/@sentry+utils@7.120.4/node_modules/@sentry/src/tracing.ts", "../../common/temp/node_modules/.pnpm/@sentry+utils@7.120.4/node_modules/@sentry/src/envelope.ts", "../../common/temp/node_modules/.pnpm/@sentry+utils@7.120.4/node_modules/@sentry/src/clientreport.ts", "../../common/temp/node_modules/.pnpm/@sentry+utils@7.120.4/node_modules/@sentry/src/ratelimit.ts", "../../common/temp/node_modules/.pnpm/@sentry+utils@7.120.4/node_modules/@sentry/src/userIntegrations.ts", "../../common/temp/node_modules/.pnpm/@sentry+utils@7.120.4/node_modules/@sentry/src/cache.ts", "../../common/temp/node_modules/.pnpm/@sentry+utils@7.120.4/node_modules/@sentry/src/eventbuilder.ts", "../../common/temp/node_modules/.pnpm/@sentry+utils@7.120.4/node_modules/@sentry/src/anr.ts", "../../common/temp/node_modules/.pnpm/@sentry+utils@7.120.4/node_modules/@sentry/src/lru.ts", "../../common/temp/node_modules/.pnpm/@sentry+utils@7.120.4/node_modules/@sentry/src/buildPolyfills/_nullishCoalesce.ts", "../../common/temp/node_modules/.pnpm/@sentry+utils@7.120.4/node_modules/@sentry/src/buildPolyfills/_asyncNullishCoalesce.ts", "../../common/temp/node_modules/.pnpm/@sentry+utils@7.120.4/node_modules/@sentry/src/buildPolyfills/_asyncOptionalChain.ts", "../../common/temp/node_modules/.pnpm/@sentry+utils@7.120.4/node_modules/@sentry/src/buildPolyfills/_asyncOptionalChainDelete.ts", "../../common/temp/node_modules/.pnpm/@sentry+utils@7.120.4/node_modules/@sentry/src/buildPolyfills/_optionalChain.ts", "../../common/temp/node_modules/.pnpm/@sentry+utils@7.120.4/node_modules/@sentry/src/buildPolyfills/_optionalChainDelete.ts", "../../common/temp/node_modules/.pnpm/@sentry+utils@7.120.4/node_modules/@sentry/src/vendor/escapeStringForRegex.ts", "../../common/temp/node_modules/.pnpm/@sentry+utils@7.120.4/node_modules/@sentry/utils/cjs/index.js", "../../common/temp/node_modules/.pnpm/@sentry+core@7.120.4/node_modules/@sentry/src/debug-build.ts", "../../common/temp/node_modules/.pnpm/@sentry+core@7.120.4/node_modules/@sentry/src/constants.ts", "../../common/temp/node_modules/.pnpm/@sentry+core@7.120.4/node_modules/@sentry/src/eventProcessors.ts", "../../common/temp/node_modules/.pnpm/@sentry+core@7.120.4/node_modules/@sentry/src/session.ts", "../../common/temp/node_modules/.pnpm/@sentry+core@7.120.4/node_modules/@sentry/src/utils/spanUtils.ts", "../../common/temp/node_modules/.pnpm/@sentry+core@7.120.4/node_modules/@sentry/src/utils/prepareEvent.ts", "../../common/temp/node_modules/.pnpm/@sentry+core@7.120.4/node_modules/@sentry/src/exports.ts", "../../common/temp/node_modules/.pnpm/@sentry+core@7.120.4/node_modules/@sentry/src/utils/getRootSpan.ts", "../../common/temp/node_modules/.pnpm/@sentry+core@7.120.4/node_modules/@sentry/src/tracing/dynamicSamplingContext.ts", "../../common/temp/node_modules/.pnpm/@sentry+core@7.120.4/node_modules/@sentry/src/utils/applyScopeDataToEvent.ts", "../../common/temp/node_modules/.pnpm/@sentry+core@7.120.4/node_modules/@sentry/src/scope.ts", "../../common/temp/node_modules/.pnpm/@sentry+core@7.120.4/node_modules/@sentry/src/version.ts", "../../common/temp/node_modules/.pnpm/@sentry+core@7.120.4/node_modules/@sentry/src/hub.ts", "../../common/temp/node_modules/.pnpm/@sentry+core@7.120.4/node_modules/@sentry/src/tracing/utils.ts", "../../common/temp/node_modules/.pnpm/@sentry+core@7.120.4/node_modules/@sentry/src/tracing/errors.ts", "../../common/temp/node_modules/.pnpm/@sentry+core@7.120.4/node_modules/@sentry/src/tracing/spanstatus.ts", "../../common/temp/node_modules/.pnpm/@sentry+core@7.120.4/node_modules/@sentry/src/utils/handleCallbackErrors.ts", "../../common/temp/node_modules/.pnpm/@sentry+core@7.120.4/node_modules/@sentry/src/utils/hasTracingEnabled.ts", "../../common/temp/node_modules/.pnpm/@sentry+core@7.120.4/node_modules/@sentry/src/tracing/trace.ts", "../../common/temp/node_modules/.pnpm/@sentry+core@7.120.4/node_modules/@sentry/src/metrics/metric-summary.ts", "../../common/temp/node_modules/.pnpm/@sentry+core@7.120.4/node_modules/@sentry/src/semanticAttributes.ts", "../../common/temp/node_modules/.pnpm/@sentry+core@7.120.4/node_modules/@sentry/src/tracing/span.ts", "../../common/temp/node_modules/.pnpm/@sentry+core@7.120.4/node_modules/@sentry/src/tracing/transaction.ts", "../../common/temp/node_modules/.pnpm/@sentry+core@7.120.4/node_modules/@sentry/src/tracing/idletransaction.ts", "../../common/temp/node_modules/.pnpm/@sentry+core@7.120.4/node_modules/@sentry/src/tracing/sampling.ts", "../../common/temp/node_modules/.pnpm/@sentry+core@7.120.4/node_modules/@sentry/src/tracing/hubextensions.ts", "../../common/temp/node_modules/.pnpm/@sentry+core@7.120.4/node_modules/@sentry/src/tracing/measurement.ts", "../../common/temp/node_modules/.pnpm/@sentry+core@7.120.4/node_modules/@sentry/src/envelope.ts", "../../common/temp/node_modules/.pnpm/@sentry+core@7.120.4/node_modules/@sentry/src/sessionflusher.ts", "../../common/temp/node_modules/.pnpm/@sentry+core@7.120.4/node_modules/@sentry/src/api.ts", "../../common/temp/node_modules/.pnpm/@sentry+core@7.120.4/node_modules/@sentry/src/integration.ts", "../../common/temp/node_modules/.pnpm/@sentry+core@7.120.4/node_modules/@sentry/src/metrics/utils.ts", "../../common/temp/node_modules/.pnpm/@sentry+core@7.120.4/node_modules/@sentry/src/metrics/envelope.ts", "../../common/temp/node_modules/.pnpm/@sentry+core@7.120.4/node_modules/@sentry/src/baseclient.ts", "../../common/temp/node_modules/.pnpm/@sentry+core@7.120.4/node_modules/@sentry/src/checkin.ts", "../../common/temp/node_modules/.pnpm/@sentry+core@7.120.4/node_modules/@sentry/src/metrics/constants.ts", "../../common/temp/node_modules/.pnpm/@sentry+core@7.120.4/node_modules/@sentry/src/metrics/instance.ts", "../../common/temp/node_modules/.pnpm/@sentry+core@7.120.4/node_modules/@sentry/src/metrics/aggregator.ts", "../../common/temp/node_modules/.pnpm/@sentry+core@7.120.4/node_modules/@sentry/src/server-runtime-client.ts", "../../common/temp/node_modules/.pnpm/@sentry+core@7.120.4/node_modules/@sentry/src/sdk.ts", "../../common/temp/node_modules/.pnpm/@sentry+core@7.120.4/node_modules/@sentry/src/transports/base.ts", "../../common/temp/node_modules/.pnpm/@sentry+core@7.120.4/node_modules/@sentry/src/transports/offline.ts", "../../common/temp/node_modules/.pnpm/@sentry+core@7.120.4/node_modules/@sentry/src/transports/multiplexed.ts", "../../common/temp/node_modules/.pnpm/@sentry+core@7.120.4/node_modules/@sentry/src/span.ts", "../../common/temp/node_modules/.pnpm/@sentry+core@7.120.4/node_modules/@sentry/src/utils/isSentryRequestUrl.ts", "../../common/temp/node_modules/.pnpm/@sentry+core@7.120.4/node_modules/@sentry/src/utils/parameterize.ts", "../../common/temp/node_modules/.pnpm/@sentry+core@7.120.4/node_modules/@sentry/src/utils/sdkMetadata.ts", "../../common/temp/node_modules/.pnpm/@sentry+core@7.120.4/node_modules/@sentry/src/metadata.ts", "../../common/temp/node_modules/.pnpm/@sentry+core@7.120.4/node_modules/@sentry/src/integrations/metadata.ts", "../../common/temp/node_modules/.pnpm/@sentry+core@7.120.4/node_modules/@sentry/src/integrations/requestdata.ts", "../../common/temp/node_modules/.pnpm/@sentry+core@7.120.4/node_modules/@sentry/src/integrations/inboundfilters.ts", "../../common/temp/node_modules/.pnpm/@sentry+core@7.120.4/node_modules/@sentry/src/integrations/functiontostring.ts", "../../common/temp/node_modules/.pnpm/@sentry+core@7.120.4/node_modules/@sentry/src/integrations/linkederrors.ts", "../../common/temp/node_modules/.pnpm/@sentry+core@7.120.4/node_modules/@sentry/src/metrics/browser-aggregator.ts", "../../common/temp/node_modules/.pnpm/@sentry+core@7.120.4/node_modules/@sentry/src/metrics/integration.ts", "../../common/temp/node_modules/.pnpm/@sentry+core@7.120.4/node_modules/@sentry/src/metrics/exports.ts", "../../common/temp/node_modules/.pnpm/@sentry+core@7.120.4/node_modules/@sentry/src/index.ts", "../../common/temp/node_modules/.pnpm/@sentry-internal+tracing@7.120.4/node_modules/@sentry-internal/src/common/debug-build.ts", "../../common/temp/node_modules/.pnpm/@sentry-internal+tracing@7.120.4/node_modules/@sentry-internal/src/node/integrations/utils/node-utils.ts", "../../common/temp/node_modules/.pnpm/@sentry-internal+tracing@7.120.4/node_modules/@sentry-internal/src/node/integrations/express.ts", "../../common/temp/node_modules/.pnpm/@sentry-internal+tracing@7.120.4/node_modules/@sentry-internal/src/node/integrations/postgres.ts", "../../common/temp/node_modules/.pnpm/@sentry-internal+tracing@7.120.4/node_modules/@sentry-internal/src/node/integrations/mysql.ts", "../../common/temp/node_modules/.pnpm/@sentry-internal+tracing@7.120.4/node_modules/@sentry-internal/src/node/integrations/mongo.ts", "../../common/temp/node_modules/.pnpm/@sentry-internal+tracing@7.120.4/node_modules/@sentry-internal/src/node/integrations/prisma.ts", "../../common/temp/node_modules/.pnpm/@sentry-internal+tracing@7.120.4/node_modules/@sentry-internal/src/node/integrations/graphql.ts", "../../common/temp/node_modules/.pnpm/@sentry-internal+tracing@7.120.4/node_modules/@sentry-internal/src/node/integrations/apollo.ts", "../../common/temp/node_modules/.pnpm/@sentry-internal+tracing@7.120.4/node_modules/@sentry-internal/src/node/integrations/lazy.ts", "../../common/temp/node_modules/.pnpm/@sentry-internal+tracing@7.120.4/node_modules/@sentry-internal/src/browser/types.ts", "../../common/temp/node_modules/.pnpm/@sentry-internal+tracing@7.120.4/node_modules/@sentry-internal/src/browser/backgroundtab.ts", "../../common/temp/node_modules/.pnpm/@sentry-internal+tracing@7.120.4/node_modules/@sentry-internal/src/browser/web-vitals/lib/bindReporter.ts", "../../common/temp/node_modules/.pnpm/@sentry-internal+tracing@7.120.4/node_modules/@sentry-internal/src/browser/web-vitals/lib/generateUniqueID.ts", "../../common/temp/node_modules/.pnpm/@sentry-internal+tracing@7.120.4/node_modules/@sentry-internal/src/browser/web-vitals/lib/getNavigationEntry.ts", "../../common/temp/node_modules/.pnpm/@sentry-internal+tracing@7.120.4/node_modules/@sentry-internal/src/browser/web-vitals/lib/getActivationStart.ts", "../../common/temp/node_modules/.pnpm/@sentry-internal+tracing@7.120.4/node_modules/@sentry-internal/src/browser/web-vitals/lib/initMetric.ts", "../../common/temp/node_modules/.pnpm/@sentry-internal+tracing@7.120.4/node_modules/@sentry-internal/src/browser/web-vitals/lib/observe.ts", "../../common/temp/node_modules/.pnpm/@sentry-internal+tracing@7.120.4/node_modules/@sentry-internal/src/browser/web-vitals/lib/onHidden.ts", "../../common/temp/node_modules/.pnpm/@sentry-internal+tracing@7.120.4/node_modules/@sentry-internal/src/browser/web-vitals/getCLS.ts", "../../common/temp/node_modules/.pnpm/@sentry-internal+tracing@7.120.4/node_modules/@sentry-internal/src/browser/web-vitals/lib/getVisibilityWatcher.ts", "../../common/temp/node_modules/.pnpm/@sentry-internal+tracing@7.120.4/node_modules/@sentry-internal/src/browser/web-vitals/getFID.ts", "../../common/temp/node_modules/.pnpm/@sentry-internal+tracing@7.120.4/node_modules/@sentry-internal/src/browser/web-vitals/lib/polyfills/interactionCountPolyfill.ts", "../../common/temp/node_modules/.pnpm/@sentry-internal+tracing@7.120.4/node_modules/@sentry-internal/src/browser/web-vitals/getINP.ts", "../../common/temp/node_modules/.pnpm/@sentry-internal+tracing@7.120.4/node_modules/@sentry-internal/src/browser/web-vitals/getLCP.ts", "../../common/temp/node_modules/.pnpm/@sentry-internal+tracing@7.120.4/node_modules/@sentry-internal/src/browser/web-vitals/onTTFB.ts", "../../common/temp/node_modules/.pnpm/@sentry-internal+tracing@7.120.4/node_modules/@sentry-internal/src/browser/instrument.ts", "../../common/temp/node_modules/.pnpm/@sentry-internal+tracing@7.120.4/node_modules/@sentry-internal/src/browser/metrics/utils.ts", "../../common/temp/node_modules/.pnpm/@sentry-internal+tracing@7.120.4/node_modules/@sentry-internal/src/browser/metrics/index.ts", "../../common/temp/node_modules/.pnpm/@sentry-internal+tracing@7.120.4/node_modules/@sentry-internal/src/common/fetch.ts", "../../common/temp/node_modules/.pnpm/@sentry-internal+tracing@7.120.4/node_modules/@sentry-internal/src/browser/request.ts", "../../common/temp/node_modules/.pnpm/@sentry-internal+tracing@7.120.4/node_modules/@sentry-internal/src/browser/router.ts", "../../common/temp/node_modules/.pnpm/@sentry-internal+tracing@7.120.4/node_modules/@sentry-internal/src/browser/browsertracing.ts", "../../common/temp/node_modules/.pnpm/@sentry-internal+tracing@7.120.4/node_modules/@sentry-internal/src/browser/browserTracingIntegration.ts", "../../common/temp/node_modules/.pnpm/@sentry-internal+tracing@7.120.4/node_modules/@sentry-internal/src/extensions.ts", "../../common/temp/node_modules/.pnpm/@sentry-internal+tracing@7.120.4/node_modules/@sentry-internal/tracing/cjs/index.js", "../../common/temp/node_modules/.pnpm/@sentry+node@7.120.4/node_modules/@sentry/src/tracing/index.ts", "../../common/temp/node_modules/.pnpm/@sentry+node@7.120.4/node_modules/@sentry/src/client.ts", "../../common/temp/node_modules/.pnpm/@sentry+node@7.120.4/node_modules/@sentry/src/proxy/base.ts", "../../common/temp/node_modules/.pnpm/@sentry+node@7.120.4/node_modules/@sentry/src/proxy/parse-proxy-response.ts", "../../common/temp/node_modules/.pnpm/@sentry+node@7.120.4/node_modules/@sentry/src/proxy/index.ts", "../../common/temp/node_modules/.pnpm/@sentry+node@7.120.4/node_modules/@sentry/src/transports/http.ts", "../../common/temp/node_modules/.pnpm/@sentry+node@7.120.4/node_modules/@sentry/src/nodeVersion.ts", "../../common/temp/node_modules/.pnpm/@sentry+node@7.120.4/node_modules/@sentry/src/async/domain.ts", "../../common/temp/node_modules/.pnpm/@sentry+node@7.120.4/node_modules/@sentry/src/async/hooks.ts", "../../common/temp/node_modules/.pnpm/@sentry+node@7.120.4/node_modules/@sentry/src/async/index.ts", "../../common/temp/node_modules/.pnpm/@sentry+node@7.120.4/node_modules/@sentry/src/integrations/console.ts", "../../common/temp/node_modules/.pnpm/@sentry+node@7.120.4/node_modules/@sentry/src/integrations/context.ts", "../../common/temp/node_modules/.pnpm/@sentry+node@7.120.4/node_modules/@sentry/src/integrations/contextlines.ts", "../../common/temp/node_modules/.pnpm/@sentry+node@7.120.4/node_modules/@sentry/src/debug-build.ts", "../../common/temp/node_modules/.pnpm/@sentry+node@7.120.4/node_modules/@sentry/src/integrations/utils/http.ts", "../../common/temp/node_modules/.pnpm/@sentry+node@7.120.4/node_modules/@sentry/src/integrations/http.ts", "../../common/temp/node_modules/.pnpm/@sentry+node@7.120.4/node_modules/@sentry/src/integrations/local-variables/common.ts", "../../common/temp/node_modules/.pnpm/@sentry+node@7.120.4/node_modules/@sentry/src/integrations/local-variables/local-variables-sync.ts", "../../common/temp/node_modules/.pnpm/@sentry+node@7.120.4/node_modules/@sentry/src/integrations/local-variables/index.ts", "../../common/temp/node_modules/.pnpm/@sentry+node@7.120.4/node_modules/@sentry/src/integrations/modules.ts", "../../common/temp/node_modules/.pnpm/@sentry+node@7.120.4/node_modules/@sentry/src/integrations/utils/errorhandling.ts", "../../common/temp/node_modules/.pnpm/@sentry+node@7.120.4/node_modules/@sentry/src/integrations/onuncaughtexception.ts", "../../common/temp/node_modules/.pnpm/@sentry+node@7.120.4/node_modules/@sentry/src/integrations/onunhandledrejection.ts", "../../common/temp/node_modules/.pnpm/@sentry+node@7.120.4/node_modules/@sentry/src/integrations/spotlight.ts", "../../common/temp/node_modules/.pnpm/@sentry+node@7.120.4/node_modules/@sentry/src/integrations/undici/index.ts", "../../common/temp/node_modules/.pnpm/@sentry+node@7.120.4/node_modules/@sentry/src/module.ts", "../../common/temp/node_modules/.pnpm/@sentry+node@7.120.4/node_modules/@sentry/src/sdk.ts", "../../common/temp/node_modules/.pnpm/@sentry+node@7.120.4/node_modules/@sentry/src/utils.ts", "../../common/temp/node_modules/.pnpm/@sentry+node@7.120.4/node_modules/@sentry/node/cjs/integrations/anr/worker-script.js", "../../common/temp/node_modules/.pnpm/@sentry+node@7.120.4/node_modules/@sentry/src/integrations/anr/index.ts", "../../common/temp/node_modules/.pnpm/@sentry+node@7.120.4/node_modules/@sentry/src/integrations/anr/legacy.ts", "../../common/temp/node_modules/.pnpm/@sentry+node@7.120.4/node_modules/@sentry/src/trpc.ts", "../../common/temp/node_modules/.pnpm/@sentry+node@7.120.4/node_modules/@sentry/src/requestDataDeprecated.ts", "../../common/temp/node_modules/.pnpm/@sentry+node@7.120.4/node_modules/@sentry/src/handlers.ts", "../../common/temp/node_modules/.pnpm/@sentry+node@7.120.4/node_modules/@sentry/src/integrations/hapi/index.ts", "../../common/temp/node_modules/.pnpm/@sentry+node@7.120.4/node_modules/@sentry/node/cjs/tracing/integrations.js", "../../common/temp/node_modules/.pnpm/@sentry+integrations@7.120.4/node_modules/src/captureconsole.ts", "../../common/temp/node_modules/.pnpm/@sentry+integrations@7.120.4/node_modules/src/debug.ts", "../../common/temp/node_modules/.pnpm/@sentry+integrations@7.120.4/node_modules/src/debug-build.ts", "../../common/temp/node_modules/.pnpm/@sentry+integrations@7.120.4/node_modules/src/dedupe.ts", "../../common/temp/node_modules/.pnpm/@sentry+integrations@7.120.4/node_modules/src/extraerrordata.ts", "../../common/temp/node_modules/.pnpm/localforage@1.10.0/node_modules/localforage/dist/localforage.js", "../../common/temp/node_modules/.pnpm/@sentry+integrations@7.120.4/node_modules/src/offline.ts", "../../common/temp/node_modules/.pnpm/@sentry+integrations@7.120.4/node_modules/src/reportingobserver.ts", "../../common/temp/node_modules/.pnpm/@sentry+integrations@7.120.4/node_modules/src/rewriteframes.ts", "../../common/temp/node_modules/.pnpm/@sentry+integrations@7.120.4/node_modules/src/sessiontiming.ts", "../../common/temp/node_modules/.pnpm/@sentry+integrations@7.120.4/node_modules/src/transaction.ts", "../../common/temp/node_modules/.pnpm/@sentry+integrations@7.120.4/node_modules/src/httpclient.ts", "../../common/temp/node_modules/.pnpm/@sentry+integrations@7.120.4/node_modules/src/contextlines.ts", "../../common/temp/node_modules/.pnpm/@sentry+integrations@7.120.4/node_modules/@sentry/integrations/cjs/index.js", "../../common/temp/node_modules/.pnpm/@sentry+node@7.120.4/node_modules/@sentry/src/cron/common.ts", "../../common/temp/node_modules/.pnpm/@sentry+node@7.120.4/node_modules/@sentry/src/cron/cron.ts", "../../common/temp/node_modules/.pnpm/@sentry+node@7.120.4/node_modules/@sentry/src/cron/node-cron.ts", "../../common/temp/node_modules/.pnpm/@sentry+node@7.120.4/node_modules/@sentry/src/cron/node-schedule.ts", "../../common/temp/node_modules/.pnpm/@sentry+node@7.120.4/node_modules/@sentry/src/index.ts", "../../common/temp/node_modules/.pnpm/dotenv@16.6.1/node_modules/dotenv/package.json", "../../common/temp/node_modules/.pnpm/dotenv@16.6.1/node_modules/dotenv/lib/main.js", "../../common/temp/node_modules/.pnpm/fetch-retry@6.0.0/node_modules/fetch-retry/index.js", "../../common/temp/node_modules/.pnpm/cli-width@4.1.0/node_modules/cli-width/index.js", "../../common/temp/node_modules/.pnpm/emoji-regex@10.6.0/node_modules/emoji-regex/index.js", "../../common/temp/node_modules/.pnpm/mute-stream@3.0.0/node_modules/mute-stream/lib/index.js", "../../common/temp/node_modules/.pnpm/adm-zip@0.5.16/node_modules/adm-zip/util/constants.js", "../../common/temp/node_modules/.pnpm/adm-zip@0.5.16/node_modules/adm-zip/util/errors.js", "../../common/temp/node_modules/.pnpm/adm-zip@0.5.16/node_modules/adm-zip/util/utils.js", "../../common/temp/node_modules/.pnpm/adm-zip@0.5.16/node_modules/adm-zip/util/fattr.js", "../../common/temp/node_modules/.pnpm/adm-zip@0.5.16/node_modules/adm-zip/util/decoder.js", "../../common/temp/node_modules/.pnpm/adm-zip@0.5.16/node_modules/adm-zip/util/index.js", "../../common/temp/node_modules/.pnpm/adm-zip@0.5.16/node_modules/adm-zip/headers/entryHeader.js", "../../common/temp/node_modules/.pnpm/adm-zip@0.5.16/node_modules/adm-zip/headers/mainHeader.js", "../../common/temp/node_modules/.pnpm/adm-zip@0.5.16/node_modules/adm-zip/headers/index.js", "../../common/temp/node_modules/.pnpm/adm-zip@0.5.16/node_modules/adm-zip/methods/deflater.js", "../../common/temp/node_modules/.pnpm/adm-zip@0.5.16/node_modules/adm-zip/methods/inflater.js", "../../common/temp/node_modules/.pnpm/adm-zip@0.5.16/node_modules/adm-zip/methods/zipcrypto.js", "../../common/temp/node_modules/.pnpm/adm-zip@0.5.16/node_modules/adm-zip/methods/index.js", "../../common/temp/node_modules/.pnpm/adm-zip@0.5.16/node_modules/adm-zip/zipEntry.js", "../../common/temp/node_modules/.pnpm/adm-zip@0.5.16/node_modules/adm-zip/zipFile.js", "../../common/temp/node_modules/.pnpm/adm-zip@0.5.16/node_modules/adm-zip/adm-zip.js", "../../common/temp/node_modules/.pnpm/@sentry+tracing@7.120.4/node_modules/src/index.ts", "../../common/temp/node_modules/.pnpm/@babel+parser@7.28.5/node_modules/@babel/parser/src/util/location.ts", "../../common/temp/node_modules/.pnpm/@babel+parser@7.28.5/node_modules/@babel/parser/src/parse-error/module-errors.ts", "../../common/temp/node_modules/.pnpm/@babel+parser@7.28.5/node_modules/@babel/parser/src/parse-error/to-node-description.ts", "../../common/temp/node_modules/.pnpm/@babel+parser@7.28.5/node_modules/@babel/parser/src/parse-error/standard-errors.ts", "../../common/temp/node_modules/.pnpm/@babel+parser@7.28.5/node_modules/@babel/parser/src/parse-error/strict-mode-errors.ts", "../../common/temp/node_modules/.pnpm/@babel+parser@7.28.5/node_modules/@babel/parser/src/parse-error/parse-expression-errors.ts", "../../common/temp/node_modules/.pnpm/@babel+parser@7.28.5/node_modules/@babel/parser/src/parse-error/pipeline-operator-errors.ts", "../../common/temp/node_modules/.pnpm/@babel+parser@7.28.5/node_modules/@babel/parser/src/parse-error.ts", "../../common/temp/node_modules/.pnpm/@babel+parser@7.28.5/node_modules/@babel/parser/src/options.ts", "../../common/temp/node_modules/.pnpm/@babel+parser@7.28.5/node_modules/@babel/parser/src/plugins/estree.ts", "../../common/temp/node_modules/.pnpm/@babel+parser@7.28.5/node_modules/@babel/parser/src/tokenizer/context.ts", "../../common/temp/node_modules/.pnpm/@babel+parser@7.28.5/node_modules/@babel/parser/src/tokenizer/types.ts", "../../common/temp/node_modules/.pnpm/@babel+parser@7.28.5/node_modules/@babel/babel-helper-validator-identifier/src/identifier.ts", "../../common/temp/node_modules/.pnpm/@babel+parser@7.28.5/node_modules/@babel/babel-helper-validator-identifier/src/keyword.ts", "../../common/temp/node_modules/.pnpm/@babel+parser@7.28.5/node_modules/@babel/parser/src/util/identifier.ts", "../../common/temp/node_modules/.pnpm/@babel+parser@7.28.5/node_modules/@babel/parser/src/util/scope.ts", "../../common/temp/node_modules/.pnpm/@babel+parser@7.28.5/node_modules/@babel/parser/src/plugins/flow/scope.ts", "../../common/temp/node_modules/.pnpm/@babel+parser@7.28.5/node_modules/@babel/parser/src/plugins/flow/index.ts", "../../common/temp/node_modules/.pnpm/@babel+parser@7.28.5/node_modules/@babel/parser/src/plugins/jsx/xhtml.ts", "../../common/temp/node_modules/.pnpm/@babel+parser@7.28.5/node_modules/@babel/parser/src/util/whitespace.ts", "../../common/temp/node_modules/.pnpm/@babel+parser@7.28.5/node_modules/@babel/parser/src/plugins/jsx/index.ts", "../../common/temp/node_modules/.pnpm/@babel+parser@7.28.5/node_modules/@babel/parser/src/plugins/typescript/scope.ts", "../../common/temp/node_modules/.pnpm/@babel+parser@7.28.5/node_modules/@babel/parser/src/util/production-parameter.ts", "../../common/temp/node_modules/.pnpm/@babel+parser@7.28.5/node_modules/@babel/parser/src/parser/base.ts", "../../common/temp/node_modules/.pnpm/@babel+parser@7.28.5/node_modules/@babel/parser/src/parser/comments.ts", "../../common/temp/node_modules/.pnpm/@babel+parser@7.28.5/node_modules/@babel/parser/src/tokenizer/state.ts", "../../common/temp/node_modules/.pnpm/@babel+parser@7.28.5/node_modules/@babel/babel-helper-string-parser/src/index.ts", "../../common/temp/node_modules/.pnpm/@babel+parser@7.28.5/node_modules/@babel/parser/src/tokenizer/index.ts", "../../common/temp/node_modules/.pnpm/@babel+parser@7.28.5/node_modules/@babel/parser/src/util/class-scope.ts", "../../common/temp/node_modules/.pnpm/@babel+parser@7.28.5/node_modules/@babel/parser/src/util/expression-scope.ts", "../../common/temp/node_modules/.pnpm/@babel+parser@7.28.5/node_modules/@babel/parser/src/parser/util.ts", "../../common/temp/node_modules/.pnpm/@babel+parser@7.28.5/node_modules/@babel/parser/src/parser/node.ts", "../../common/temp/node_modules/.pnpm/@babel+parser@7.28.5/node_modules/@babel/parser/src/parser/lval.ts", "../../common/temp/node_modules/.pnpm/@babel+parser@7.28.5/node_modules/@babel/parser/src/plugins/typescript/index.ts", "../../common/temp/node_modules/.pnpm/@babel+parser@7.28.5/node_modules/@babel/parser/src/plugins/placeholders.ts", "../../common/temp/node_modules/.pnpm/@babel+parser@7.28.5/node_modules/@babel/parser/src/plugins/v8intrinsic.ts", "../../common/temp/node_modules/.pnpm/@babel+parser@7.28.5/node_modules/@babel/parser/src/plugin-utils.ts", "../../common/temp/node_modules/.pnpm/@babel+parser@7.28.5/node_modules/@babel/parser/src/parser/expression.ts", "../../common/temp/node_modules/.pnpm/@babel+parser@7.28.5/node_modules/@babel/parser/src/parser/statement.ts", "../../common/temp/node_modules/.pnpm/@babel+parser@7.28.5/node_modules/@babel/parser/src/parser/index.ts", "../../common/temp/node_modules/.pnpm/@babel+parser@7.28.5/node_modules/@babel/parser/src/index.ts", "../../common/temp/node_modules/.pnpm/json5@2.2.3/node_modules/json5/lib/unicode.js", "../../common/temp/node_modules/.pnpm/json5@2.2.3/node_modules/json5/lib/util.js", "../../common/temp/node_modules/.pnpm/json5@2.2.3/node_modules/json5/lib/parse.js", "../../common/temp/node_modules/.pnpm/json5@2.2.3/node_modules/json5/lib/stringify.js", "../../common/temp/node_modules/.pnpm/json5@2.2.3/node_modules/json5/lib/index.js", "../../common/temp/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/constants.js", "../../common/temp/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/debug.js", "../../common/temp/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/re.js", "../../common/temp/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/parse-options.js", "../../common/temp/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/identifiers.js", "../../common/temp/node_modules/.pnpm/semver@7.7.3/node_modules/semver/classes/semver.js", "../../common/temp/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/parse.js", "../../common/temp/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/valid.js", "../../common/temp/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/clean.js", "../../common/temp/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/inc.js", "../../common/temp/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/diff.js", "../../common/temp/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/major.js", "../../common/temp/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/minor.js", "../../common/temp/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/patch.js", "../../common/temp/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/prerelease.js", "../../common/temp/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/compare.js", "../../common/temp/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/rcompare.js", "../../common/temp/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/compare-loose.js", "../../common/temp/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/compare-build.js", "../../common/temp/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/sort.js", "../../common/temp/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/rsort.js", "../../common/temp/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/gt.js", "../../common/temp/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/lt.js", "../../common/temp/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/eq.js", "../../common/temp/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/neq.js", "../../common/temp/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/gte.js", "../../common/temp/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/lte.js", "../../common/temp/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/cmp.js", "../../common/temp/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/coerce.js", "../../common/temp/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/lrucache.js", "../../common/temp/node_modules/.pnpm/semver@7.7.3/node_modules/semver/classes/range.js", "../../common/temp/node_modules/.pnpm/semver@7.7.3/node_modules/semver/classes/comparator.js", "../../common/temp/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/satisfies.js", "../../common/temp/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/to-comparators.js", "../../common/temp/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/max-satisfying.js", "../../common/temp/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/min-satisfying.js", "../../common/temp/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/min-version.js", "../../common/temp/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/valid.js", "../../common/temp/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/outside.js", "../../common/temp/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/gtr.js", "../../common/temp/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/ltr.js", "../../common/temp/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/intersects.js", "../../common/temp/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/simplify.js", "../../common/temp/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/subset.js", "../../common/temp/node_modules/.pnpm/semver@7.7.3/node_modules/semver/index.js", "../../common/temp/node_modules/.pnpm/picomatch@2.3.1/node_modules/picomatch/lib/constants.js", "../../common/temp/node_modules/.pnpm/picomatch@2.3.1/node_modules/picomatch/lib/utils.js", "../../common/temp/node_modules/.pnpm/picomatch@2.3.1/node_modules/picomatch/lib/scan.js", "../../common/temp/node_modules/.pnpm/picomatch@2.3.1/node_modules/picomatch/lib/parse.js", "../../common/temp/node_modules/.pnpm/picomatch@2.3.1/node_modules/picomatch/lib/picomatch.js", "../../common/temp/node_modules/.pnpm/picomatch@2.3.1/node_modules/picomatch/index.js", "../../common/temp/node_modules/.pnpm/readdirp@3.6.0/node_modules/readdirp/index.js", "../../common/temp/node_modules/.pnpm/normalize-path@3.0.0/node_modules/normalize-path/index.js", "../../common/temp/node_modules/.pnpm/anymatch@3.1.3/node_modules/anymatch/index.js", "../../common/temp/node_modules/.pnpm/is-extglob@2.1.1/node_modules/is-extglob/index.js", "../../common/temp/node_modules/.pnpm/is-glob@4.0.3/node_modules/is-glob/index.js", "../../common/temp/node_modules/.pnpm/glob-parent@5.1.2/node_modules/glob-parent/index.js", "../../common/temp/node_modules/.pnpm/braces@3.0.3/node_modules/braces/lib/utils.js", "../../common/temp/node_modules/.pnpm/braces@3.0.3/node_modules/braces/lib/stringify.js", "../../common/temp/node_modules/.pnpm/is-number@7.0.0/node_modules/is-number/index.js", "../../common/temp/node_modules/.pnpm/to-regex-range@5.0.1/node_modules/to-regex-range/index.js", "../../common/temp/node_modules/.pnpm/fill-range@7.1.1/node_modules/fill-range/index.js", "../../common/temp/node_modules/.pnpm/braces@3.0.3/node_modules/braces/lib/compile.js", "../../common/temp/node_modules/.pnpm/braces@3.0.3/node_modules/braces/lib/expand.js", "../../common/temp/node_modules/.pnpm/braces@3.0.3/node_modules/braces/lib/constants.js", "../../common/temp/node_modules/.pnpm/braces@3.0.3/node_modules/braces/lib/parse.js", "../../common/temp/node_modules/.pnpm/braces@3.0.3/node_modules/braces/index.js", "../../common/temp/node_modules/.pnpm/binary-extensions@2.3.0/node_modules/binary-extensions/binary-extensions.json", "../../common/temp/node_modules/.pnpm/binary-extensions@2.3.0/node_modules/binary-extensions/index.js", "../../common/temp/node_modules/.pnpm/is-binary-path@2.1.0/node_modules/is-binary-path/index.js", "../../common/temp/node_modules/.pnpm/chokidar@3.6.0/node_modules/chokidar/lib/constants.js", "../../common/temp/node_modules/.pnpm/chokidar@3.6.0/node_modules/chokidar/lib/nodefs-handler.js", "../../common/temp/node_modules/.pnpm/chokidar@3.6.0/node_modules/chokidar/lib/fsevents-handler.js", "../../common/temp/node_modules/.pnpm/chokidar@3.6.0/node_modules/chokidar/index.js", "../../common/temp/node_modules/.pnpm/serve-handler@6.1.6/node_modules/serve-handler/src/glob-slash.js", "../../common/temp/node_modules/.pnpm/concat-map@0.0.1/node_modules/concat-map/index.js", "../../common/temp/node_modules/.pnpm/balanced-match@1.0.2/node_modules/balanced-match/index.js", "../../common/temp/node_modules/.pnpm/brace-expansion@1.1.12/node_modules/brace-expansion/index.js", "../../common/temp/node_modules/.pnpm/minimatch@3.1.5/node_modules/minimatch/minimatch.js", "../../common/temp/node_modules/.pnpm/path-to-regexp@3.3.0/node_modules/path-to-regexp/index.js", "../../common/temp/node_modules/.pnpm/mime-db@1.33.0/node_modules/mime-db/db.json", "../../common/temp/node_modules/.pnpm/mime-db@1.33.0/node_modules/mime-db/index.js", "../../common/temp/node_modules/.pnpm/mime-types@2.1.18/node_modules/mime-types/index.js", "../../common/temp/node_modules/.pnpm/bytes@3.0.0/node_modules/bytes/index.js", "../../common/temp/node_modules/.pnpm/content-disposition@0.5.2/node_modules/content-disposition/index.js", "../../common/temp/node_modules/.pnpm/path-is-inside@1.0.2/node_modules/path-is-inside/lib/path-is-inside.js", "../../common/temp/node_modules/.pnpm/range-parser@1.2.0/node_modules/range-parser/index.js", "../../common/temp/node_modules/.pnpm/serve-handler@6.1.6/node_modules/serve-handler/src/directory.js", "../../common/temp/node_modules/.pnpm/serve-handler@6.1.6/node_modules/serve-handler/src/error.js", "../../common/temp/node_modules/.pnpm/serve-handler@6.1.6/node_modules/serve-handler/src/index.js", "../../common/temp/node_modules/.pnpm/openid-client@5.7.1/node_modules/openid-client/lib/errors.js", "../../common/temp/node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/runtime/digest.js", "../../common/temp/node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/lib/buffer_utils.js", "../../common/temp/node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/runtime/base64url.js", "../../common/temp/node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/util/errors.js", "../../common/temp/node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/runtime/random.js", "../../common/temp/node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/lib/iv.js", "../../common/temp/node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/lib/check_iv_length.js", "../../common/temp/node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/runtime/is_key_object.js", "../../common/temp/node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/runtime/check_cek_length.js", "../../common/temp/node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/runtime/timing_safe_equal.js", "../../common/temp/node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/runtime/cbc_tag.js", "../../common/temp/node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/runtime/webcrypto.js", "../../common/temp/node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/lib/crypto_key.js", "../../common/temp/node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/lib/invalid_key_input.js", "../../common/temp/node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/runtime/ciphers.js", "../../common/temp/node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/runtime/is_key_like.js", "../../common/temp/node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/runtime/decrypt.js", "../../common/temp/node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/runtime/zlib.js", "../../common/temp/node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/lib/is_disjoint.js", "../../common/temp/node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/lib/is_object.js", "../../common/temp/node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/runtime/aeskw.js", "../../common/temp/node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/runtime/get_named_curve.js", "../../common/temp/node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/runtime/ecdhes.js", "../../common/temp/node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/lib/check_p2s.js", "../../common/temp/node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/runtime/pbes2kw.js", "../../common/temp/node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/runtime/check_modulus_length.js", "../../common/temp/node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/runtime/rsaes.js", "../../common/temp/node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/lib/cek.js", "../../common/temp/node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/runtime/asn1.js", "../../common/temp/node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/runtime/asn1_sequence_encoder.js", "../../common/temp/node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/runtime/flags.js", "../../common/temp/node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/runtime/jwk_to_key.js", "../../common/temp/node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/key/import.js", "../../common/temp/node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/lib/check_key_type.js", "../../common/temp/node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/runtime/encrypt.js", "../../common/temp/node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/lib/aesgcmkw.js", "../../common/temp/node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/lib/decrypt_key_management.js", "../../common/temp/node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/lib/validate_crit.js", "../../common/temp/node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/lib/validate_algorithms.js", "../../common/temp/node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/jwe/flattened/decrypt.js", "../../common/temp/node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/jwe/compact/decrypt.js", "../../common/temp/node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/jwe/general/decrypt.js", "../../common/temp/node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/runtime/asn1_sequence_decoder.js", "../../common/temp/node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/runtime/key_to_jwk.js", "../../common/temp/node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/key/export.js", "../../common/temp/node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/lib/encrypt_key_management.js", "../../common/temp/node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/jwe/flattened/encrypt.js", "../../common/temp/node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/jwe/general/encrypt.js", "../../common/temp/node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/runtime/dsa_digest.js", "../../common/temp/node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/runtime/node_key.js", "../../common/temp/node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/runtime/hmac_digest.js", "../../common/temp/node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/runtime/get_sign_verify_key.js", "../../common/temp/node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/runtime/sign.js", "../../common/temp/node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/runtime/verify.js", "../../common/temp/node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/jws/flattened/verify.js", "../../common/temp/node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/jws/compact/verify.js", "../../common/temp/node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/jws/general/verify.js", "../../common/temp/node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/lib/epoch.js", "../../common/temp/node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/lib/secs.js", "../../common/temp/node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/lib/jwt_claims_set.js", "../../common/temp/node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/jwt/verify.js", "../../common/temp/node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/jwt/decrypt.js", "../../common/temp/node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/jwe/compact/encrypt.js", "../../common/temp/node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/jws/flattened/sign.js", "../../common/temp/node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/jws/compact/sign.js", "../../common/temp/node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/jws/general/sign.js", "../../common/temp/node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/jwt/produce.js", "../../common/temp/node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/jwt/sign.js", "../../common/temp/node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/jwt/encrypt.js", "../../common/temp/node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/jwk/thumbprint.js", "../../common/temp/node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/jwk/embedded.js", "../../common/temp/node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/jwks/local.js", "../../common/temp/node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/runtime/fetch_jwks.js", "../../common/temp/node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/jwks/remote.js", "../../common/temp/node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/jwt/unsecured.js", "../../common/temp/node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/util/base64url.js", "../../common/temp/node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/util/decode_protected_header.js", "../../common/temp/node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/util/decode_jwt.js", "../../common/temp/node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/runtime/generate.js", "../../common/temp/node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/key/generate_key_pair.js", "../../common/temp/node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/key/generate_secret.js", "../../common/temp/node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/runtime/runtime.js", "../../common/temp/node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/util/runtime.js", "../../common/temp/node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/index.js", "../../common/temp/node_modules/.pnpm/oidc-token-hash@5.2.0/node_modules/oidc-token-hash/lib/index.js", "../../common/temp/node_modules/.pnpm/openid-client@5.7.1/node_modules/openid-client/lib/helpers/is_key_object.js", "../../common/temp/node_modules/.pnpm/openid-client@5.7.1/node_modules/openid-client/lib/helpers/base64url.js", "../../common/temp/node_modules/.pnpm/openid-client@5.7.1/node_modules/openid-client/lib/helpers/decode_jwt.js", "../../common/temp/node_modules/.pnpm/openid-client@5.7.1/node_modules/openid-client/lib/helpers/is_plain_object.js", "../../common/temp/node_modules/.pnpm/openid-client@5.7.1/node_modules/openid-client/lib/helpers/defaults.js", "../../common/temp/node_modules/.pnpm/openid-client@5.7.1/node_modules/openid-client/lib/helpers/www_authenticate_parser.js", "../../common/temp/node_modules/.pnpm/openid-client@5.7.1/node_modules/openid-client/lib/helpers/assert.js", "../../common/temp/node_modules/.pnpm/openid-client@5.7.1/node_modules/openid-client/lib/helpers/pick.js", "../../common/temp/node_modules/.pnpm/openid-client@5.7.1/node_modules/openid-client/lib/helpers/process_response.js", "../../common/temp/node_modules/.pnpm/openid-client@5.7.1/node_modules/openid-client/lib/helpers/unix_timestamp.js", "../../common/temp/node_modules/.pnpm/openid-client@5.7.1/node_modules/openid-client/lib/token_set.js", "../../common/temp/node_modules/.pnpm/openid-client@5.7.1/node_modules/openid-client/lib/helpers/generators.js", "../../common/temp/node_modules/.pnpm/yallist@4.0.0/node_modules/yallist/iterator.js", "../../common/temp/node_modules/.pnpm/yallist@4.0.0/node_modules/yallist/yallist.js", "../../common/temp/node_modules/.pnpm/lru-cache@6.0.0/node_modules/lru-cache/index.js", "../../common/temp/node_modules/.pnpm/openid-client@5.7.1/node_modules/openid-client/package.json", "../../common/temp/node_modules/.pnpm/openid-client@5.7.1/node_modules/openid-client/lib/helpers/consts.js", "../../common/temp/node_modules/.pnpm/openid-client@5.7.1/node_modules/openid-client/lib/helpers/request.js", "../../common/temp/node_modules/.pnpm/openid-client@5.7.1/node_modules/openid-client/lib/helpers/weak_cache.js", "../../common/temp/node_modules/.pnpm/openid-client@5.7.1/node_modules/openid-client/lib/helpers/deep_clone.js", "../../common/temp/node_modules/.pnpm/openid-client@5.7.1/node_modules/openid-client/lib/helpers/keystore.js", "../../common/temp/node_modules/.pnpm/openid-client@5.7.1/node_modules/openid-client/lib/helpers/merge.js", "../../common/temp/node_modules/.pnpm/openid-client@5.7.1/node_modules/openid-client/lib/helpers/client.js", "../../common/temp/node_modules/.pnpm/object-hash@2.2.0/node_modules/object-hash/index.js", "../../common/temp/node_modules/.pnpm/openid-client@5.7.1/node_modules/openid-client/lib/helpers/issuer.js", "../../common/temp/node_modules/.pnpm/openid-client@5.7.1/node_modules/openid-client/lib/device_flow_handle.js", "../../common/temp/node_modules/.pnpm/openid-client@5.7.1/node_modules/openid-client/lib/client.js", "../../common/temp/node_modules/.pnpm/openid-client@5.7.1/node_modules/openid-client/lib/issuer_registry.js", "../../common/temp/node_modules/.pnpm/openid-client@5.7.1/node_modules/openid-client/lib/helpers/webfinger_normalize.js", "../../common/temp/node_modules/.pnpm/openid-client@5.7.1/node_modules/openid-client/lib/issuer.js", "../../common/temp/node_modules/.pnpm/openid-client@5.7.1/node_modules/openid-client/lib/passport_strategy.js", "../../common/temp/node_modules/.pnpm/openid-client@5.7.1/node_modules/openid-client/lib/index.js", "../../common/temp/node_modules/.pnpm/is-docker@2.2.1/node_modules/is-docker/index.js", "../../common/temp/node_modules/.pnpm/is-wsl@2.2.0/node_modules/is-wsl/index.js", "../../common/temp/node_modules/.pnpm/define-lazy-prop@2.0.0/node_modules/define-lazy-prop/index.js", "../../common/temp/node_modules/.pnpm/open@8.4.2/node_modules/open/index.js", "../../common/temp/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/compile/codegen/code.ts", "../../common/temp/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/compile/codegen/scope.ts", "../../common/temp/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/compile/codegen/index.ts", "../../common/temp/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/compile/util.ts", "../../common/temp/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/compile/names.ts", "../../common/temp/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/compile/errors.ts", "../../common/temp/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/compile/validate/boolSchema.ts", "../../common/temp/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/compile/rules.ts", "../../common/temp/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/compile/validate/applicability.ts", "../../common/temp/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/compile/validate/dataType.ts", "../../common/temp/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/compile/validate/defaults.ts", "../../common/temp/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/vocabularies/code.ts", "../../common/temp/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/compile/validate/keyword.ts", "../../common/temp/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/compile/validate/subschema.ts", "../../common/temp/node_modules/.pnpm/fast-deep-equal@3.1.3/node_modules/fast-deep-equal/index.js", "../../common/temp/node_modules/.pnpm/json-schema-traverse@1.0.0/node_modules/json-schema-traverse/index.js", "../../common/temp/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/compile/resolve.ts", "../../common/temp/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/compile/validate/index.ts", "../../common/temp/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/runtime/validation_error.ts", "../../common/temp/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/compile/ref_error.ts", "../../common/temp/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/compile/index.ts", "../../common/temp/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/refs/data.json", "../../common/temp/node_modules/.pnpm/fast-uri@3.1.0/node_modules/fast-uri/lib/utils.js", "../../common/temp/node_modules/.pnpm/fast-uri@3.1.0/node_modules/fast-uri/lib/schemes.js", "../../common/temp/node_modules/.pnpm/fast-uri@3.1.0/node_modules/fast-uri/index.js", "../../common/temp/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/runtime/uri.ts", "../../common/temp/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/core.ts", "../../common/temp/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/vocabularies/core/id.ts", "../../common/temp/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/vocabularies/core/ref.ts", "../../common/temp/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/vocabularies/core/index.ts", "../../common/temp/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/vocabularies/validation/limitNumber.ts", "../../common/temp/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/vocabularies/validation/multipleOf.ts", "../../common/temp/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/runtime/ucs2length.ts", "../../common/temp/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/vocabularies/validation/limitLength.ts", "../../common/temp/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/vocabularies/validation/pattern.ts", "../../common/temp/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/vocabularies/validation/limitProperties.ts", "../../common/temp/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/vocabularies/validation/required.ts", "../../common/temp/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/vocabularies/validation/limitItems.ts", "../../common/temp/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/runtime/equal.ts", "../../common/temp/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/vocabularies/validation/uniqueItems.ts", "../../common/temp/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/vocabularies/validation/const.ts", "../../common/temp/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/vocabularies/validation/enum.ts", "../../common/temp/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/vocabularies/validation/index.ts", "../../common/temp/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/vocabularies/applicator/additionalItems.ts", "../../common/temp/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/vocabularies/applicator/items.ts", "../../common/temp/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/vocabularies/applicator/prefixItems.ts", "../../common/temp/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/vocabularies/applicator/items2020.ts", "../../common/temp/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/vocabularies/applicator/contains.ts", "../../common/temp/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/vocabularies/applicator/dependencies.ts", "../../common/temp/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/vocabularies/applicator/propertyNames.ts", "../../common/temp/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/vocabularies/applicator/additionalProperties.ts", "../../common/temp/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/vocabularies/applicator/properties.ts", "../../common/temp/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/vocabularies/applicator/patternProperties.ts", "../../common/temp/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/vocabularies/applicator/not.ts", "../../common/temp/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/vocabularies/applicator/anyOf.ts", "../../common/temp/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/vocabularies/applicator/oneOf.ts", "../../common/temp/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/vocabularies/applicator/allOf.ts", "../../common/temp/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/vocabularies/applicator/if.ts", "../../common/temp/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/vocabularies/applicator/thenElse.ts", "../../common/temp/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/vocabularies/applicator/index.ts", "../../common/temp/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/vocabularies/format/format.ts", "../../common/temp/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/vocabularies/format/index.ts", "../../common/temp/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/vocabularies/metadata.ts", "../../common/temp/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/vocabularies/draft7.ts", "../../common/temp/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/vocabularies/discriminator/types.ts", "../../common/temp/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/vocabularies/discriminator/index.ts", "../../common/temp/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/refs/json-schema-draft-07.json", "../../common/temp/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/ajv.ts", "../../common/temp/node_modules/.pnpm/ajv-formats@3.0.1_ajv@8.18.0/node_modules/ajv-formats/src/formats.ts", "../../common/temp/node_modules/.pnpm/ajv-formats@3.0.1_ajv@8.18.0/node_modules/ajv-formats/src/limit.ts", "../../common/temp/node_modules/.pnpm/ajv-formats@3.0.1_ajv@8.18.0/node_modules/ajv-formats/src/index.ts", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/core/symbols.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/util/timers.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/core/errors.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/core/constants.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/core/tree.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/core/util.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/util/stats.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/core/diagnostics.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/core/request.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/handler/wrap-handler.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/dispatcher/dispatcher.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/handler/unwrap-handler.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/dispatcher/dispatcher-base.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/core/connect.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/llhttp/utils.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/llhttp/constants.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/llhttp/llhttp-wasm.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/llhttp/llhttp_simd-wasm.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/web/fetch/constants.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/web/fetch/global.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/encoding/index.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/web/infra/index.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/web/fetch/data-url.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/util/runtime-features.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/web/webidl/index.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/web/fetch/util.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/web/fetch/formdata.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/web/fetch/formdata-parser.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/util/promise.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/web/fetch/body.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/dispatcher/client-h1.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/dispatcher/client-h2.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/dispatcher/client.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/dispatcher/fixed-queue.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/dispatcher/pool-base.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/dispatcher/pool.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/dispatcher/balanced-pool.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/dispatcher/round-robin-pool.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/dispatcher/agent.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/core/socks5-utils.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/core/socks5-client.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/dispatcher/socks5-proxy-agent.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/dispatcher/proxy-agent.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/dispatcher/env-http-proxy-agent.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/handler/retry-handler.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/dispatcher/retry-agent.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/dispatcher/h2c-client.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/api/readable.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/api/api-request.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/api/abort-signal.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/api/api-stream.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/api/api-pipeline.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/api/api-upgrade.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/api/api-connect.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/api/index.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/mock/mock-errors.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/mock/mock-symbols.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/mock/mock-utils.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/mock/mock-interceptor.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/mock/mock-client.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/mock/mock-call-history.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/mock/mock-pool.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/mock/pending-interceptors-formatter.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/mock/mock-agent.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/mock/snapshot-utils.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/mock/snapshot-recorder.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/mock/snapshot-agent.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/global.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/handler/decorator-handler.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/handler/redirect-handler.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/interceptor/redirect.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/interceptor/response-error.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/interceptor/retry.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/interceptor/dump.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/interceptor/dns.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/util/cache.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/util/date.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/handler/cache-handler.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/cache/memory-cache-store.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/handler/cache-revalidation-handler.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/interceptor/cache.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/interceptor/decompress.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/handler/deduplication-handler.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/interceptor/deduplicate.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/cache/sqlite-cache-store.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/web/fetch/headers.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/web/fetch/response.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/web/fetch/request.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/web/subresource-integrity/subresource-integrity.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/web/fetch/index.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/web/cache/util.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/web/cache/cache.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/web/cache/cachestorage.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/web/cookies/constants.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/web/cookies/util.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/web/cookies/parse.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/web/cookies/index.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/web/websocket/events.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/web/websocket/constants.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/web/websocket/util.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/web/websocket/frame.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/web/websocket/connection.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/web/websocket/permessage-deflate.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/web/websocket/receiver.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/web/websocket/sender.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/web/websocket/websocket.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/web/websocket/stream/websocketerror.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/web/websocket/stream/websocketstream.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/web/eventsource/util.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/web/eventsource/eventsource-stream.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/lib/web/eventsource/eventsource.js", "../../common/temp/node_modules/.pnpm/undici@7.24.0/node_modules/undici/index.js", "../../common/temp/node_modules/.pnpm/@commander-js+extra-typings@14.0.0_commander@14.0.2/node_modules/@commander-js/extra-typings/esm.mjs", "../src/bundler/context.ts", "../../common/temp/node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/vendor/ansi-styles/index.js", "../../common/temp/node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/vendor/supports-color/index.js", "../../common/temp/node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/utilities.js", "../../common/temp/node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/index.js", "../src/bundler/fs.ts", "../src/bundler/log.ts", "../src/vendor/progress/index.ts", "../../common/temp/node_modules/.pnpm/ora@9.0.0/node_modules/ora/index.js", "../../common/temp/node_modules/.pnpm/cli-cursor@5.0.0/node_modules/cli-cursor/index.js", "../../common/temp/node_modules/.pnpm/restore-cursor@5.1.0/node_modules/restore-cursor/index.js", "../../common/temp/node_modules/.pnpm/mimic-function@5.0.1/node_modules/mimic-function/index.js", "../../common/temp/node_modules/.pnpm/onetime@7.0.0/node_modules/onetime/index.js", "../../common/temp/node_modules/.pnpm/signal-exit@4.1.0/node_modules/signal-exit/src/signals.ts", "../../common/temp/node_modules/.pnpm/signal-exit@4.1.0/node_modules/signal-exit/src/index.ts", "../../common/temp/node_modules/.pnpm/cli-spinners@3.4.0/node_modules/cli-spinners/spinners.json", "../../common/temp/node_modules/.pnpm/cli-spinners@3.4.0/node_modules/cli-spinners/index.js", "../../common/temp/node_modules/.pnpm/log-symbols@7.0.1/node_modules/log-symbols/symbols.js", "../../common/temp/node_modules/.pnpm/yoctocolors@2.1.2/node_modules/yoctocolors/base.js", "../../common/temp/node_modules/.pnpm/is-unicode-supported@2.1.0/node_modules/is-unicode-supported/index.js", "../../common/temp/node_modules/.pnpm/ansi-regex@6.2.2/node_modules/ansi-regex/index.js", "../../common/temp/node_modules/.pnpm/strip-ansi@7.1.2/node_modules/strip-ansi/index.js", "../../common/temp/node_modules/.pnpm/get-east-asian-width@1.4.0/node_modules/get-east-asian-width/lookup.js", "../../common/temp/node_modules/.pnpm/get-east-asian-width@1.4.0/node_modules/get-east-asian-width/index.js", "../../common/temp/node_modules/.pnpm/string-width@8.1.0/node_modules/string-width/index.js", "../../common/temp/node_modules/.pnpm/is-interactive@2.0.0/node_modules/is-interactive/index.js", "../../common/temp/node_modules/.pnpm/stdin-discarder@0.2.2/node_modules/stdin-discarder/index.js", "../src/cli/lib/deployment.ts", "../src/cli/lib/envvars.ts", "../src/cli/lib/utils/utils.ts", "../../common/temp/node_modules/.pnpm/commander@14.0.2/node_modules/commander/esm.mjs", "../src/index.ts", "../src/cli/version.ts", "../../common/temp/node_modules/.pnpm/@inquirer+core@11.1.1_@types+node@18.19.130/node_modules/@inquirer/core/dist/lib/key.js", "../../common/temp/node_modules/.pnpm/@inquirer+core@11.1.1_@types+node@18.19.130/node_modules/@inquirer/core/dist/lib/errors.js", "../../common/temp/node_modules/.pnpm/@inquirer+core@11.1.1_@types+node@18.19.130/node_modules/@inquirer/core/dist/lib/use-state.js", "../../common/temp/node_modules/.pnpm/@inquirer+core@11.1.1_@types+node@18.19.130/node_modules/@inquirer/core/dist/lib/hook-engine.js", "../../common/temp/node_modules/.pnpm/@inquirer+core@11.1.1_@types+node@18.19.130/node_modules/@inquirer/core/dist/lib/use-effect.js", "../../common/temp/node_modules/.pnpm/@inquirer+core@11.1.1_@types+node@18.19.130/node_modules/@inquirer/core/dist/lib/theme.js", "../../common/temp/node_modules/.pnpm/@inquirer+figures@2.0.3/node_modules/@inquirer/figures/dist/index.js", "../../common/temp/node_modules/.pnpm/@inquirer+core@11.1.1_@types+node@18.19.130/node_modules/@inquirer/core/dist/lib/make-theme.js", "../../common/temp/node_modules/.pnpm/@inquirer+core@11.1.1_@types+node@18.19.130/node_modules/@inquirer/core/dist/lib/use-prefix.js", "../../common/temp/node_modules/.pnpm/@inquirer+core@11.1.1_@types+node@18.19.130/node_modules/@inquirer/core/dist/lib/use-memo.js", "../../common/temp/node_modules/.pnpm/@inquirer+core@11.1.1_@types+node@18.19.130/node_modules/@inquirer/core/dist/lib/use-ref.js", "../../common/temp/node_modules/.pnpm/@inquirer+core@11.1.1_@types+node@18.19.130/node_modules/@inquirer/core/dist/lib/use-keypress.js", "../../common/temp/node_modules/.pnpm/@inquirer+core@11.1.1_@types+node@18.19.130/node_modules/@inquirer/core/dist/lib/utils.js", "../../common/temp/node_modules/.pnpm/string-width@7.2.0/node_modules/string-width/index.js", "../../common/temp/node_modules/.pnpm/ansi-styles@6.2.3/node_modules/ansi-styles/index.js", "../../common/temp/node_modules/.pnpm/wrap-ansi@9.0.2/node_modules/wrap-ansi/index.js", "../../common/temp/node_modules/.pnpm/@inquirer+core@11.1.1_@types+node@18.19.130/node_modules/@inquirer/core/dist/lib/pagination/use-pagination.js", "../../common/temp/node_modules/.pnpm/@inquirer+core@11.1.1_@types+node@18.19.130/node_modules/@inquirer/core/dist/lib/create-prompt.js", "../../common/temp/node_modules/.pnpm/@inquirer+core@11.1.1_@types+node@18.19.130/node_modules/@inquirer/core/dist/lib/screen-manager.js", "../../common/temp/node_modules/.pnpm/@inquirer+ansi@2.0.3/node_modules/@inquirer/ansi/dist/index.js", "../../common/temp/node_modules/.pnpm/@inquirer+core@11.1.1_@types+node@18.19.130/node_modules/@inquirer/core/dist/lib/promise-polyfill.js", "../../common/temp/node_modules/.pnpm/@inquirer+core@11.1.1_@types+node@18.19.130/node_modules/@inquirer/core/dist/lib/Separator.js", "../../common/temp/node_modules/.pnpm/@inquirer+input@5.0.4_@types+node@18.19.130/node_modules/@inquirer/input/dist/index.js", "../../common/temp/node_modules/.pnpm/@inquirer+select@5.0.4_@types+node@18.19.130/node_modules/@inquirer/select/dist/index.js", "../../common/temp/node_modules/.pnpm/@inquirer+search@4.1.0_@types+node@18.19.130/node_modules/@inquirer/search/dist/index.js", "../../common/temp/node_modules/.pnpm/@inquirer+confirm@6.0.4_@types+node@18.19.130/node_modules/@inquirer/confirm/dist/index.js", "../src/cli/lib/utils/prompts.ts", "../src/cli/lib/localDeployment/bigBrain.ts", "../../common/temp/node_modules/.pnpm/openapi-fetch@0.15.0/node_modules/openapi-fetch/src/index.js", "../src/cli/lib/localDeployment/filePaths.ts", "../src/cli/lib/fsUtils.ts", "../src/cli/lib/localDeployment/download.ts", "../src/cli/lib/localDeployment/errors.ts", "../src/cli/lib/localDeployment/run.ts", "../../common/temp/node_modules/.pnpm/detect-port@2.1.0/node_modules/detect-port/src/detect-port.ts", "../../common/temp/node_modules/.pnpm/address@2.0.3/node_modules/address/src/address.ts", "../../common/temp/node_modules/.pnpm/detect-port@2.1.0/node_modules/detect-port/src/wait-port.ts", "../../common/temp/node_modules/.pnpm/detect-port@2.1.0/node_modules/detect-port/src/index.ts", "../src/cli/lib/utils/sentry.ts", "../src/cli/lib/config.ts", "../../common/temp/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/external.js", "../../common/temp/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/util.js", "../../common/temp/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/ZodError.js", "../../common/temp/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/locales/en.js", "../../common/temp/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/errors.js", "../../common/temp/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/parseUtil.js", "../../common/temp/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/errorUtil.js", "../../common/temp/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/types.js", "../src/bundler/index.ts", "../src/bundler/wasm.ts", "../src/bundler/external.ts", "../../common/temp/node_modules/.pnpm/find-up@8.0.0/node_modules/find-up/index.js", "../../common/temp/node_modules/.pnpm/locate-path@8.0.0/node_modules/locate-path/index.js", "../../common/temp/node_modules/.pnpm/yocto-queue@1.2.2/node_modules/yocto-queue/index.js", "../../common/temp/node_modules/.pnpm/p-limit@4.0.0/node_modules/p-limit/index.js", "../../common/temp/node_modules/.pnpm/p-locate@6.0.0/node_modules/p-locate/index.js", "../../common/temp/node_modules/.pnpm/unicorn-magic@0.3.0/node_modules/unicorn-magic/node.js", "../src/bundler/debugBundle.ts", "../src/bundler/depgraph.ts", "../src/cli/lib/localDeployment/utils.ts", "../src/cli/lib/localDeployment/serve.ts", "../src/cli/lib/localDeployment/anonymous.ts", "../src/cli/lib/localDeployment/upgrade.ts", "../src/cli/lib/run.ts", "../src/server/functionName.ts", "../src/server/components/paths.ts", "../src/server/api.ts", "../src/common/index.ts", "../src/values/base64.ts", "../src/values/value.ts", "../src/values/errors.ts", "../src/browser/logging.ts", "../src/browser/http_client.ts", "../src/browser/sync/udf_path_utils.ts", "../src/browser/sync/local_state.ts", "../src/browser/sync/request_manager.ts", "../src/browser/sync/optimistic_updates_impl.ts", "../src/vendor/long.ts", "../src/browser/sync/remote_query_set.ts", "../src/browser/sync/protocol.ts", "../src/browser/sync/web_socket_manager.ts", "../src/browser/sync/session.ts", "../src/vendor/jwt-decode/index.ts", "../src/browser/sync/authentication_manager.ts", "../src/browser/sync/metrics.ts", "../src/browser/sync/client.ts", "../src/cli/lib/components.ts", "../src/cli/lib/deploy2.ts", "../src/cli/lib/deployApi/utils.ts", "../src/cli/lib/deployApi/paths.ts", "../src/cli/lib/deployApi/modules.ts", "../src/cli/lib/deployApi/types.ts", "../src/cli/lib/deployApi/checkedComponent.ts", "../src/cli/lib/deployApi/componentDefinition.ts", "../src/cli/lib/deployApi/definitionConfig.ts", "../src/cli/lib/deployApi/finishPush.ts", "../src/cli/lib/deployApi/startPush.ts", "../src/cli/lib/indexes.ts", "../src/cli/lib/workos/workos.ts", "../src/cli/lib/env.ts", "../src/cli/lib/utils/stdin.ts", "../src/cli/lib/formatEnvValueForDotfile.ts", "../src/cli/lib/workos/environmentApi.ts", "../src/cli/lib/workos/platformApi.ts", "../src/cli/lib/components/definition/bundle.ts", "../src/cli/lib/components/definition/directoryStructure.ts", "../src/cli/lib/components/constants.ts", "../src/cli/lib/codegen.ts", "../src/cli/codegen_templates/common.ts", "../src/cli/codegen_templates/api.ts", "../src/cli/codegen_templates/api_cjs.ts", "../src/cli/codegen_templates/validator_helpers.ts", "../src/cli/codegen_templates/dataModel.ts", "../src/cli/codegen_templates/readme.ts", "../src/cli/codegen_templates/server.ts", "../src/cli/codegen_templates/tsconfig.ts", "../src/cli/lib/typecheck.ts", "../src/cli/lib/watch.ts", "../src/cli/codegen_templates/component_server.ts", "../src/cli/codegen_templates/component_api.ts", "../src/cli/lib/debugBundlePath.ts", "../src/cli/lib/tracing.ts", "../src/cli/lib/checkForLargeIndexDeletion.ts", "../src/cli/lib/dev.ts", "../src/cli/lib/logs.ts", "../src/cli/lib/convexExport.ts", "../src/cli/lib/convexImport.ts", "../src/cli/lib/aiFiles/index.ts", "../src/cli/lib/aiFiles/paths.ts", "../src/cli/lib/aiFiles/guidelinesmd.ts", "../src/cli/lib/versionApi.ts", "../src/cli/lib/utils/hash.ts", "../src/cli/lib/aiFiles/utils.ts", "../src/cli/lib/aiFiles/config.ts", "../src/cli/codegen_templates/agentsmd.ts", "../src/cli/lib/aiFiles/agentsmd.ts", "../src/cli/codegen_templates/claudemd.ts", "../src/cli/lib/aiFiles/claudemd.ts", "../src/cli/lib/aiFiles/skills.ts", "../src/cli/lib/aiFiles/cursorrules.ts", "../src/cli/lib/localDeployment/dashboard.ts", "../src/cli/lib/dashboard.ts", "../src/cli/lib/localDeployment/localDeployment.ts", "../src/cli/lib/deploymentSelector.ts", "../src/cli/lib/api.ts", "../src/cli/lib/utils/globalConfig.ts", "../src/cli/lib/deploymentSelection.ts", "../src/cli/lib/init.ts", "../src/cli/configure.ts", "../../common/temp/node_modules/.pnpm/openid-client@5.7.1/node_modules/openid-client/lib/index.mjs", "../src/cli/lib/login.ts", "../src/cli/lib/updates.ts", "../src/cli/lib/usage.ts", "../src/cli/init.ts", "../src/cli/dashboard.ts", "../src/cli/lib/command.ts", "../src/cli/deployments.ts", "../src/cli/docs.ts", "../src/cli/run.ts", "../src/cli/auth.ts", "../src/cli/codegen.ts", "../src/cli/reinit.ts", "../src/cli/update.ts", "../src/cli/typecheck.ts", "../src/cli/login.ts", "../src/cli/logout.ts", "../src/cli/index.ts", "../src/cli/dev.ts", "../src/cli/lib/extractDeploymentNameForWorkOS.ts", "../src/cli/deploy.ts", "../src/cli/logs.ts", "../src/cli/lib/networkTest.ts", "../src/cli/network_test.ts", "../src/cli/convexExport.ts", "../src/cli/convexImport.ts", "../src/cli/env.ts", "../src/cli/lib/data.ts", "../src/cli/data.ts", "../src/cli/lib/functionSpec.ts", "../src/cli/functionSpec.ts", "../src/cli/lib/insights.ts", "../src/cli/insights.ts", "../src/cli/disableLocalDev.ts", "../../common/temp/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/core/core.js", "../../common/temp/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/core/util.js", "../../common/temp/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/core/errors.js", "../../common/temp/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/core/parse.js", "../../common/temp/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/core/regexes.js", "../../common/temp/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/core/checks.js", "../../common/temp/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/core/doc.js", "../../common/temp/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/core/versions.js", "../../common/temp/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/core/schemas.js", "../../common/temp/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/locales/en.js", "../../common/temp/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/core/registries.js", "../../common/temp/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/core/api.js", "../../common/temp/node_modules/.pnpm/@modelcontextprotocol+sdk@1.26.0_@cfworker+json-schema@4.1.1_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/src/server/zod-compat.ts", "../../common/temp/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/classic/iso.js", "../../common/temp/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/classic/errors.js", "../../common/temp/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/classic/parse.js", "../../common/temp/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/classic/schemas.js", "../../common/temp/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/classic/external.js", "../../common/temp/node_modules/.pnpm/@modelcontextprotocol+sdk@1.26.0_@cfworker+json-schema@4.1.1_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/src/types.ts", "../../common/temp/node_modules/.pnpm/@modelcontextprotocol+sdk@1.26.0_@cfworker+json-schema@4.1.1_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/src/experimental/tasks/interfaces.ts", "../../common/temp/node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/Options.js", "../../common/temp/node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/string.js", "../../common/temp/node_modules/.pnpm/@modelcontextprotocol+sdk@1.26.0_@cfworker+json-schema@4.1.1_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/src/server/zod-json-schema-compat.ts", "../../common/temp/node_modules/.pnpm/@modelcontextprotocol+sdk@1.26.0_@cfworker+json-schema@4.1.1_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/src/shared/protocol.ts", "../../common/temp/node_modules/.pnpm/@modelcontextprotocol+sdk@1.26.0_@cfworker+json-schema@4.1.1_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/src/validation/ajv-provider.ts", "../../common/temp/node_modules/.pnpm/@modelcontextprotocol+sdk@1.26.0_@cfworker+json-schema@4.1.1_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/src/experimental/tasks/server.ts", "../../common/temp/node_modules/.pnpm/@modelcontextprotocol+sdk@1.26.0_@cfworker+json-schema@4.1.1_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/src/experimental/tasks/helpers.ts", "../../common/temp/node_modules/.pnpm/@modelcontextprotocol+sdk@1.26.0_@cfworker+json-schema@4.1.1_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/src/server/index.ts", "../../common/temp/node_modules/.pnpm/@modelcontextprotocol+sdk@1.26.0_@cfworker+json-schema@4.1.1_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/src/server/stdio.ts", "../../common/temp/node_modules/.pnpm/@modelcontextprotocol+sdk@1.26.0_@cfworker+json-schema@4.1.1_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/src/shared/stdio.ts", "../src/cli/lib/mcp/requestContext.ts", "../../common/temp/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/Options.js", "../../common/temp/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/Refs.js", "../../common/temp/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/errorMessages.js", "../../common/temp/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/getRelativePath.js", "../../common/temp/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/any.js", "../../common/temp/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/array.js", "../../common/temp/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/bigint.js", "../../common/temp/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/boolean.js", "../../common/temp/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/branded.js", "../../common/temp/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/catch.js", "../../common/temp/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/date.js", "../../common/temp/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/default.js", "../../common/temp/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/effects.js", "../../common/temp/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/enum.js", "../../common/temp/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/intersection.js", "../../common/temp/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/literal.js", "../../common/temp/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/string.js", "../../common/temp/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/record.js", "../../common/temp/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/map.js", "../../common/temp/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/nativeEnum.js", "../../common/temp/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/never.js", "../../common/temp/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/null.js", "../../common/temp/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/union.js", "../../common/temp/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/nullable.js", "../../common/temp/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/number.js", "../../common/temp/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/object.js", "../../common/temp/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/optional.js", "../../common/temp/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/pipeline.js", "../../common/temp/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/promise.js", "../../common/temp/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/set.js", "../../common/temp/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/tuple.js", "../../common/temp/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/undefined.js", "../../common/temp/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/unknown.js", "../../common/temp/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/readonly.js", "../../common/temp/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/selectParser.js", "../../common/temp/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parseDef.js", "../../common/temp/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/zodToJsonSchema.js", "../../common/temp/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/index.js", "../src/cli/lib/mcp/tools/tables.ts", "../src/cli/lib/mcp/tools/data.ts", "../src/cli/lib/mcp/tools/status.ts", "../src/cli/lib/mcp/tools/functionSpec.ts", "../src/cli/lib/mcp/tools/run.ts", "../src/cli/lib/mcp/tools/env.ts", "../src/cli/lib/mcp/tools/runOneoffQuery.ts", "../src/cli/lib/mcp/tools/logs.ts", "../src/cli/lib/mcp/tools/insights.ts", "../src/cli/lib/mcp/tools/index.ts", "../src/cli/lib/utils/mutex.ts", "../src/cli/mcp.ts", "../src/cli/deploymentSelect.ts", "../src/cli/deploymentCreate.ts", "../src/cli/deployment.ts", "../src/cli/aiFiles.ts", "../src/cli/lib/aiFiles/status.ts", "../src/cli/integration.ts"],
  "sourcesContent": ["/**\n * CommanderError class\n */\nclass CommanderError extends Error {\n  /**\n   * Constructs the CommanderError class\n   * @param {number} exitCode suggested exit code which could be used with process.exit\n   * @param {string} code an id string representing the error\n   * @param {string} message human-readable description of the error\n   */\n  constructor(exitCode, code, message) {\n    super(message);\n    // properly capture stack trace in Node.js\n    Error.captureStackTrace(this, this.constructor);\n    this.name = this.constructor.name;\n    this.code = code;\n    this.exitCode = exitCode;\n    this.nestedError = undefined;\n  }\n}\n\n/**\n * InvalidArgumentError class\n */\nclass InvalidArgumentError extends CommanderError {\n  /**\n   * Constructs the InvalidArgumentError class\n   * @param {string} [message] explanation of why argument is invalid\n   */\n  constructor(message) {\n    super(1, 'commander.invalidArgument', message);\n    // properly capture stack trace in Node.js\n    Error.captureStackTrace(this, this.constructor);\n    this.name = this.constructor.name;\n  }\n}\n\nexports.CommanderError = CommanderError;\nexports.InvalidArgumentError = InvalidArgumentError;\n", "const { InvalidArgumentError } = require('./error.js');\n\nclass Argument {\n  /**\n   * Initialize a new command argument with the given name and description.\n   * The default is that the argument is required, and you can explicitly\n   * indicate this with <> around the name. Put [] around the name for an optional argument.\n   *\n   * @param {string} name\n   * @param {string} [description]\n   */\n\n  constructor(name, description) {\n    this.description = description || '';\n    this.variadic = false;\n    this.parseArg = undefined;\n    this.defaultValue = undefined;\n    this.defaultValueDescription = undefined;\n    this.argChoices = undefined;\n\n    switch (name[0]) {\n      case '<': // e.g. <required>\n        this.required = true;\n        this._name = name.slice(1, -1);\n        break;\n      case '[': // e.g. [optional]\n        this.required = false;\n        this._name = name.slice(1, -1);\n        break;\n      default:\n        this.required = true;\n        this._name = name;\n        break;\n    }\n\n    if (this._name.endsWith('...')) {\n      this.variadic = true;\n      this._name = this._name.slice(0, -3);\n    }\n  }\n\n  /**\n   * Return argument name.\n   *\n   * @return {string}\n   */\n\n  name() {\n    return this._name;\n  }\n\n  /**\n   * @package\n   */\n\n  _collectValue(value, previous) {\n    if (previous === this.defaultValue || !Array.isArray(previous)) {\n      return [value];\n    }\n\n    previous.push(value);\n    return previous;\n  }\n\n  /**\n   * Set the default value, and optionally supply the description to be displayed in the help.\n   *\n   * @param {*} value\n   * @param {string} [description]\n   * @return {Argument}\n   */\n\n  default(value, description) {\n    this.defaultValue = value;\n    this.defaultValueDescription = description;\n    return this;\n  }\n\n  /**\n   * Set the custom handler for processing CLI command arguments into argument values.\n   *\n   * @param {Function} [fn]\n   * @return {Argument}\n   */\n\n  argParser(fn) {\n    this.parseArg = fn;\n    return this;\n  }\n\n  /**\n   * Only allow argument value to be one of choices.\n   *\n   * @param {string[]} values\n   * @return {Argument}\n   */\n\n  choices(values) {\n    this.argChoices = values.slice();\n    this.parseArg = (arg, previous) => {\n      if (!this.argChoices.includes(arg)) {\n        throw new InvalidArgumentError(\n          `Allowed choices are ${this.argChoices.join(', ')}.`,\n        );\n      }\n      if (this.variadic) {\n        return this._collectValue(arg, previous);\n      }\n      return arg;\n    };\n    return this;\n  }\n\n  /**\n   * Make argument required.\n   *\n   * @returns {Argument}\n   */\n  argRequired() {\n    this.required = true;\n    return this;\n  }\n\n  /**\n   * Make argument optional.\n   *\n   * @returns {Argument}\n   */\n  argOptional() {\n    this.required = false;\n    return this;\n  }\n}\n\n/**\n * Takes an argument and returns its human readable equivalent for help usage.\n *\n * @param {Argument} arg\n * @return {string}\n * @private\n */\n\nfunction humanReadableArgName(arg) {\n  const nameOutput = arg.name() + (arg.variadic === true ? '...' : '');\n\n  return arg.required ? '<' + nameOutput + '>' : '[' + nameOutput + ']';\n}\n\nexports.Argument = Argument;\nexports.humanReadableArgName = humanReadableArgName;\n", "const { humanReadableArgName } = require('./argument.js');\n\n/**\n * TypeScript import types for JSDoc, used by Visual Studio Code IntelliSense and `npm run typescript-checkJS`\n * https://www.typescriptlang.org/docs/handbook/jsdoc-supported-types.html#import-types\n * @typedef { import(\"./argument.js\").Argument } Argument\n * @typedef { import(\"./command.js\").Command } Command\n * @typedef { import(\"./option.js\").Option } Option\n */\n\n// Although this is a class, methods are static in style to allow override using subclass or just functions.\nclass Help {\n  constructor() {\n    this.helpWidth = undefined;\n    this.minWidthToWrap = 40;\n    this.sortSubcommands = false;\n    this.sortOptions = false;\n    this.showGlobalOptions = false;\n  }\n\n  /**\n   * prepareContext is called by Commander after applying overrides from `Command.configureHelp()`\n   * and just before calling `formatHelp()`.\n   *\n   * Commander just uses the helpWidth and the rest is provided for optional use by more complex subclasses.\n   *\n   * @param {{ error?: boolean, helpWidth?: number, outputHasColors?: boolean }} contextOptions\n   */\n  prepareContext(contextOptions) {\n    this.helpWidth = this.helpWidth ?? contextOptions.helpWidth ?? 80;\n  }\n\n  /**\n   * Get an array of the visible subcommands. Includes a placeholder for the implicit help command, if there is one.\n   *\n   * @param {Command} cmd\n   * @returns {Command[]}\n   */\n\n  visibleCommands(cmd) {\n    const visibleCommands = cmd.commands.filter((cmd) => !cmd._hidden);\n    const helpCommand = cmd._getHelpCommand();\n    if (helpCommand && !helpCommand._hidden) {\n      visibleCommands.push(helpCommand);\n    }\n    if (this.sortSubcommands) {\n      visibleCommands.sort((a, b) => {\n        // @ts-ignore: because overloaded return type\n        return a.name().localeCompare(b.name());\n      });\n    }\n    return visibleCommands;\n  }\n\n  /**\n   * Compare options for sort.\n   *\n   * @param {Option} a\n   * @param {Option} b\n   * @returns {number}\n   */\n  compareOptions(a, b) {\n    const getSortKey = (option) => {\n      // WYSIWYG for order displayed in help. Short used for comparison if present. No special handling for negated.\n      return option.short\n        ? option.short.replace(/^-/, '')\n        : option.long.replace(/^--/, '');\n    };\n    return getSortKey(a).localeCompare(getSortKey(b));\n  }\n\n  /**\n   * Get an array of the visible options. Includes a placeholder for the implicit help option, if there is one.\n   *\n   * @param {Command} cmd\n   * @returns {Option[]}\n   */\n\n  visibleOptions(cmd) {\n    const visibleOptions = cmd.options.filter((option) => !option.hidden);\n    // Built-in help option.\n    const helpOption = cmd._getHelpOption();\n    if (helpOption && !helpOption.hidden) {\n      // Automatically hide conflicting flags. Bit dubious but a historical behaviour that is convenient for single-command programs.\n      const removeShort = helpOption.short && cmd._findOption(helpOption.short);\n      const removeLong = helpOption.long && cmd._findOption(helpOption.long);\n      if (!removeShort && !removeLong) {\n        visibleOptions.push(helpOption); // no changes needed\n      } else if (helpOption.long && !removeLong) {\n        visibleOptions.push(\n          cmd.createOption(helpOption.long, helpOption.description),\n        );\n      } else if (helpOption.short && !removeShort) {\n        visibleOptions.push(\n          cmd.createOption(helpOption.short, helpOption.description),\n        );\n      }\n    }\n    if (this.sortOptions) {\n      visibleOptions.sort(this.compareOptions);\n    }\n    return visibleOptions;\n  }\n\n  /**\n   * Get an array of the visible global options. (Not including help.)\n   *\n   * @param {Command} cmd\n   * @returns {Option[]}\n   */\n\n  visibleGlobalOptions(cmd) {\n    if (!this.showGlobalOptions) return [];\n\n    const globalOptions = [];\n    for (\n      let ancestorCmd = cmd.parent;\n      ancestorCmd;\n      ancestorCmd = ancestorCmd.parent\n    ) {\n      const visibleOptions = ancestorCmd.options.filter(\n        (option) => !option.hidden,\n      );\n      globalOptions.push(...visibleOptions);\n    }\n    if (this.sortOptions) {\n      globalOptions.sort(this.compareOptions);\n    }\n    return globalOptions;\n  }\n\n  /**\n   * Get an array of the arguments if any have a description.\n   *\n   * @param {Command} cmd\n   * @returns {Argument[]}\n   */\n\n  visibleArguments(cmd) {\n    // Side effect! Apply the legacy descriptions before the arguments are displayed.\n    if (cmd._argsDescription) {\n      cmd.registeredArguments.forEach((argument) => {\n        argument.description =\n          argument.description || cmd._argsDescription[argument.name()] || '';\n      });\n    }\n\n    // If there are any arguments with a description then return all the arguments.\n    if (cmd.registeredArguments.find((argument) => argument.description)) {\n      return cmd.registeredArguments;\n    }\n    return [];\n  }\n\n  /**\n   * Get the command term to show in the list of subcommands.\n   *\n   * @param {Command} cmd\n   * @returns {string}\n   */\n\n  subcommandTerm(cmd) {\n    // Legacy. Ignores custom usage string, and nested commands.\n    const args = cmd.registeredArguments\n      .map((arg) => humanReadableArgName(arg))\n      .join(' ');\n    return (\n      cmd._name +\n      (cmd._aliases[0] ? '|' + cmd._aliases[0] : '') +\n      (cmd.options.length ? ' [options]' : '') + // simplistic check for non-help option\n      (args ? ' ' + args : '')\n    );\n  }\n\n  /**\n   * Get the option term to show in the list of options.\n   *\n   * @param {Option} option\n   * @returns {string}\n   */\n\n  optionTerm(option) {\n    return option.flags;\n  }\n\n  /**\n   * Get the argument term to show in the list of arguments.\n   *\n   * @param {Argument} argument\n   * @returns {string}\n   */\n\n  argumentTerm(argument) {\n    return argument.name();\n  }\n\n  /**\n   * Get the longest command term length.\n   *\n   * @param {Command} cmd\n   * @param {Help} helper\n   * @returns {number}\n   */\n\n  longestSubcommandTermLength(cmd, helper) {\n    return helper.visibleCommands(cmd).reduce((max, command) => {\n      return Math.max(\n        max,\n        this.displayWidth(\n          helper.styleSubcommandTerm(helper.subcommandTerm(command)),\n        ),\n      );\n    }, 0);\n  }\n\n  /**\n   * Get the longest option term length.\n   *\n   * @param {Command} cmd\n   * @param {Help} helper\n   * @returns {number}\n   */\n\n  longestOptionTermLength(cmd, helper) {\n    return helper.visibleOptions(cmd).reduce((max, option) => {\n      return Math.max(\n        max,\n        this.displayWidth(helper.styleOptionTerm(helper.optionTerm(option))),\n      );\n    }, 0);\n  }\n\n  /**\n   * Get the longest global option term length.\n   *\n   * @param {Command} cmd\n   * @param {Help} helper\n   * @returns {number}\n   */\n\n  longestGlobalOptionTermLength(cmd, helper) {\n    return helper.visibleGlobalOptions(cmd).reduce((max, option) => {\n      return Math.max(\n        max,\n        this.displayWidth(helper.styleOptionTerm(helper.optionTerm(option))),\n      );\n    }, 0);\n  }\n\n  /**\n   * Get the longest argument term length.\n   *\n   * @param {Command} cmd\n   * @param {Help} helper\n   * @returns {number}\n   */\n\n  longestArgumentTermLength(cmd, helper) {\n    return helper.visibleArguments(cmd).reduce((max, argument) => {\n      return Math.max(\n        max,\n        this.displayWidth(\n          helper.styleArgumentTerm(helper.argumentTerm(argument)),\n        ),\n      );\n    }, 0);\n  }\n\n  /**\n   * Get the command usage to be displayed at the top of the built-in help.\n   *\n   * @param {Command} cmd\n   * @returns {string}\n   */\n\n  commandUsage(cmd) {\n    // Usage\n    let cmdName = cmd._name;\n    if (cmd._aliases[0]) {\n      cmdName = cmdName + '|' + cmd._aliases[0];\n    }\n    let ancestorCmdNames = '';\n    for (\n      let ancestorCmd = cmd.parent;\n      ancestorCmd;\n      ancestorCmd = ancestorCmd.parent\n    ) {\n      ancestorCmdNames = ancestorCmd.name() + ' ' + ancestorCmdNames;\n    }\n    return ancestorCmdNames + cmdName + ' ' + cmd.usage();\n  }\n\n  /**\n   * Get the description for the command.\n   *\n   * @param {Command} cmd\n   * @returns {string}\n   */\n\n  commandDescription(cmd) {\n    // @ts-ignore: because overloaded return type\n    return cmd.description();\n  }\n\n  /**\n   * Get the subcommand summary to show in the list of subcommands.\n   * (Fallback to description for backwards compatibility.)\n   *\n   * @param {Command} cmd\n   * @returns {string}\n   */\n\n  subcommandDescription(cmd) {\n    // @ts-ignore: because overloaded return type\n    return cmd.summary() || cmd.description();\n  }\n\n  /**\n   * Get the option description to show in the list of options.\n   *\n   * @param {Option} option\n   * @return {string}\n   */\n\n  optionDescription(option) {\n    const extraInfo = [];\n\n    if (option.argChoices) {\n      extraInfo.push(\n        // use stringify to match the display of the default value\n        `choices: ${option.argChoices.map((choice) => JSON.stringify(choice)).join(', ')}`,\n      );\n    }\n    if (option.defaultValue !== undefined) {\n      // default for boolean and negated more for programmer than end user,\n      // but show true/false for boolean option as may be for hand-rolled env or config processing.\n      const showDefault =\n        option.required ||\n        option.optional ||\n        (option.isBoolean() && typeof option.defaultValue === 'boolean');\n      if (showDefault) {\n        extraInfo.push(\n          `default: ${option.defaultValueDescription || JSON.stringify(option.defaultValue)}`,\n        );\n      }\n    }\n    // preset for boolean and negated are more for programmer than end user\n    if (option.presetArg !== undefined && option.optional) {\n      extraInfo.push(`preset: ${JSON.stringify(option.presetArg)}`);\n    }\n    if (option.envVar !== undefined) {\n      extraInfo.push(`env: ${option.envVar}`);\n    }\n    if (extraInfo.length > 0) {\n      const extraDescription = `(${extraInfo.join(', ')})`;\n      if (option.description) {\n        return `${option.description} ${extraDescription}`;\n      }\n      return extraDescription;\n    }\n\n    return option.description;\n  }\n\n  /**\n   * Get the argument description to show in the list of arguments.\n   *\n   * @param {Argument} argument\n   * @return {string}\n   */\n\n  argumentDescription(argument) {\n    const extraInfo = [];\n    if (argument.argChoices) {\n      extraInfo.push(\n        // use stringify to match the display of the default value\n        `choices: ${argument.argChoices.map((choice) => JSON.stringify(choice)).join(', ')}`,\n      );\n    }\n    if (argument.defaultValue !== undefined) {\n      extraInfo.push(\n        `default: ${argument.defaultValueDescription || JSON.stringify(argument.defaultValue)}`,\n      );\n    }\n    if (extraInfo.length > 0) {\n      const extraDescription = `(${extraInfo.join(', ')})`;\n      if (argument.description) {\n        return `${argument.description} ${extraDescription}`;\n      }\n      return extraDescription;\n    }\n    return argument.description;\n  }\n\n  /**\n   * Format a list of items, given a heading and an array of formatted items.\n   *\n   * @param {string} heading\n   * @param {string[]} items\n   * @param {Help} helper\n   * @returns string[]\n   */\n  formatItemList(heading, items, helper) {\n    if (items.length === 0) return [];\n\n    return [helper.styleTitle(heading), ...items, ''];\n  }\n\n  /**\n   * Group items by their help group heading.\n   *\n   * @param {Command[] | Option[]} unsortedItems\n   * @param {Command[] | Option[]} visibleItems\n   * @param {Function} getGroup\n   * @returns {Map<string, Command[] | Option[]>}\n   */\n  groupItems(unsortedItems, visibleItems, getGroup) {\n    const result = new Map();\n    // Add groups in order of appearance in unsortedItems.\n    unsortedItems.forEach((item) => {\n      const group = getGroup(item);\n      if (!result.has(group)) result.set(group, []);\n    });\n    // Add items in order of appearance in visibleItems.\n    visibleItems.forEach((item) => {\n      const group = getGroup(item);\n      if (!result.has(group)) {\n        result.set(group, []);\n      }\n      result.get(group).push(item);\n    });\n    return result;\n  }\n\n  /**\n   * Generate the built-in help text.\n   *\n   * @param {Command} cmd\n   * @param {Help} helper\n   * @returns {string}\n   */\n\n  formatHelp(cmd, helper) {\n    const termWidth = helper.padWidth(cmd, helper);\n    const helpWidth = helper.helpWidth ?? 80; // in case prepareContext() was not called\n\n    function callFormatItem(term, description) {\n      return helper.formatItem(term, termWidth, description, helper);\n    }\n\n    // Usage\n    let output = [\n      `${helper.styleTitle('Usage:')} ${helper.styleUsage(helper.commandUsage(cmd))}`,\n      '',\n    ];\n\n    // Description\n    const commandDescription = helper.commandDescription(cmd);\n    if (commandDescription.length > 0) {\n      output = output.concat([\n        helper.boxWrap(\n          helper.styleCommandDescription(commandDescription),\n          helpWidth,\n        ),\n        '',\n      ]);\n    }\n\n    // Arguments\n    const argumentList = helper.visibleArguments(cmd).map((argument) => {\n      return callFormatItem(\n        helper.styleArgumentTerm(helper.argumentTerm(argument)),\n        helper.styleArgumentDescription(helper.argumentDescription(argument)),\n      );\n    });\n    output = output.concat(\n      this.formatItemList('Arguments:', argumentList, helper),\n    );\n\n    // Options\n    const optionGroups = this.groupItems(\n      cmd.options,\n      helper.visibleOptions(cmd),\n      (option) => option.helpGroupHeading ?? 'Options:',\n    );\n    optionGroups.forEach((options, group) => {\n      const optionList = options.map((option) => {\n        return callFormatItem(\n          helper.styleOptionTerm(helper.optionTerm(option)),\n          helper.styleOptionDescription(helper.optionDescription(option)),\n        );\n      });\n      output = output.concat(this.formatItemList(group, optionList, helper));\n    });\n\n    if (helper.showGlobalOptions) {\n      const globalOptionList = helper\n        .visibleGlobalOptions(cmd)\n        .map((option) => {\n          return callFormatItem(\n            helper.styleOptionTerm(helper.optionTerm(option)),\n            helper.styleOptionDescription(helper.optionDescription(option)),\n          );\n        });\n      output = output.concat(\n        this.formatItemList('Global Options:', globalOptionList, helper),\n      );\n    }\n\n    // Commands\n    const commandGroups = this.groupItems(\n      cmd.commands,\n      helper.visibleCommands(cmd),\n      (sub) => sub.helpGroup() || 'Commands:',\n    );\n    commandGroups.forEach((commands, group) => {\n      const commandList = commands.map((sub) => {\n        return callFormatItem(\n          helper.styleSubcommandTerm(helper.subcommandTerm(sub)),\n          helper.styleSubcommandDescription(helper.subcommandDescription(sub)),\n        );\n      });\n      output = output.concat(this.formatItemList(group, commandList, helper));\n    });\n\n    return output.join('\\n');\n  }\n\n  /**\n   * Return display width of string, ignoring ANSI escape sequences. Used in padding and wrapping calculations.\n   *\n   * @param {string} str\n   * @returns {number}\n   */\n  displayWidth(str) {\n    return stripColor(str).length;\n  }\n\n  /**\n   * Style the title for displaying in the help. Called with 'Usage:', 'Options:', etc.\n   *\n   * @param {string} str\n   * @returns {string}\n   */\n  styleTitle(str) {\n    return str;\n  }\n\n  styleUsage(str) {\n    // Usage has lots of parts the user might like to color separately! Assume default usage string which is formed like:\n    //    command subcommand [options] [command] <foo> [bar]\n    return str\n      .split(' ')\n      .map((word) => {\n        if (word === '[options]') return this.styleOptionText(word);\n        if (word === '[command]') return this.styleSubcommandText(word);\n        if (word[0] === '[' || word[0] === '<')\n          return this.styleArgumentText(word);\n        return this.styleCommandText(word); // Restrict to initial words?\n      })\n      .join(' ');\n  }\n  styleCommandDescription(str) {\n    return this.styleDescriptionText(str);\n  }\n  styleOptionDescription(str) {\n    return this.styleDescriptionText(str);\n  }\n  styleSubcommandDescription(str) {\n    return this.styleDescriptionText(str);\n  }\n  styleArgumentDescription(str) {\n    return this.styleDescriptionText(str);\n  }\n  styleDescriptionText(str) {\n    return str;\n  }\n  styleOptionTerm(str) {\n    return this.styleOptionText(str);\n  }\n  styleSubcommandTerm(str) {\n    // This is very like usage with lots of parts! Assume default string which is formed like:\n    //    subcommand [options] <foo> [bar]\n    return str\n      .split(' ')\n      .map((word) => {\n        if (word === '[options]') return this.styleOptionText(word);\n        if (word[0] === '[' || word[0] === '<')\n          return this.styleArgumentText(word);\n        return this.styleSubcommandText(word); // Restrict to initial words?\n      })\n      .join(' ');\n  }\n  styleArgumentTerm(str) {\n    return this.styleArgumentText(str);\n  }\n  styleOptionText(str) {\n    return str;\n  }\n  styleArgumentText(str) {\n    return str;\n  }\n  styleSubcommandText(str) {\n    return str;\n  }\n  styleCommandText(str) {\n    return str;\n  }\n\n  /**\n   * Calculate the pad width from the maximum term length.\n   *\n   * @param {Command} cmd\n   * @param {Help} helper\n   * @returns {number}\n   */\n\n  padWidth(cmd, helper) {\n    return Math.max(\n      helper.longestOptionTermLength(cmd, helper),\n      helper.longestGlobalOptionTermLength(cmd, helper),\n      helper.longestSubcommandTermLength(cmd, helper),\n      helper.longestArgumentTermLength(cmd, helper),\n    );\n  }\n\n  /**\n   * Detect manually wrapped and indented strings by checking for line break followed by whitespace.\n   *\n   * @param {string} str\n   * @returns {boolean}\n   */\n  preformatted(str) {\n    return /\\n[^\\S\\r\\n]/.test(str);\n  }\n\n  /**\n   * Format the \"item\", which consists of a term and description. Pad the term and wrap the description, indenting the following lines.\n   *\n   * So \"TTT\", 5, \"DDD DDDD DD DDD\" might be formatted for this.helpWidth=17 like so:\n   *   TTT  DDD DDDD\n   *        DD DDD\n   *\n   * @param {string} term\n   * @param {number} termWidth\n   * @param {string} description\n   * @param {Help} helper\n   * @returns {string}\n   */\n  formatItem(term, termWidth, description, helper) {\n    const itemIndent = 2;\n    const itemIndentStr = ' '.repeat(itemIndent);\n    if (!description) return itemIndentStr + term;\n\n    // Pad the term out to a consistent width, so descriptions are aligned.\n    const paddedTerm = term.padEnd(\n      termWidth + term.length - helper.displayWidth(term),\n    );\n\n    // Format the description.\n    const spacerWidth = 2; // between term and description\n    const helpWidth = this.helpWidth ?? 80; // in case prepareContext() was not called\n    const remainingWidth = helpWidth - termWidth - spacerWidth - itemIndent;\n    let formattedDescription;\n    if (\n      remainingWidth < this.minWidthToWrap ||\n      helper.preformatted(description)\n    ) {\n      formattedDescription = description;\n    } else {\n      const wrappedDescription = helper.boxWrap(description, remainingWidth);\n      formattedDescription = wrappedDescription.replace(\n        /\\n/g,\n        '\\n' + ' '.repeat(termWidth + spacerWidth),\n      );\n    }\n\n    // Construct and overall indent.\n    return (\n      itemIndentStr +\n      paddedTerm +\n      ' '.repeat(spacerWidth) +\n      formattedDescription.replace(/\\n/g, `\\n${itemIndentStr}`)\n    );\n  }\n\n  /**\n   * Wrap a string at whitespace, preserving existing line breaks.\n   * Wrapping is skipped if the width is less than `minWidthToWrap`.\n   *\n   * @param {string} str\n   * @param {number} width\n   * @returns {string}\n   */\n  boxWrap(str, width) {\n    if (width < this.minWidthToWrap) return str;\n\n    const rawLines = str.split(/\\r\\n|\\n/);\n    // split up text by whitespace\n    const chunkPattern = /[\\s]*[^\\s]+/g;\n    const wrappedLines = [];\n    rawLines.forEach((line) => {\n      const chunks = line.match(chunkPattern);\n      if (chunks === null) {\n        wrappedLines.push('');\n        return;\n      }\n\n      let sumChunks = [chunks.shift()];\n      let sumWidth = this.displayWidth(sumChunks[0]);\n      chunks.forEach((chunk) => {\n        const visibleWidth = this.displayWidth(chunk);\n        // Accumulate chunks while they fit into width.\n        if (sumWidth + visibleWidth <= width) {\n          sumChunks.push(chunk);\n          sumWidth += visibleWidth;\n          return;\n        }\n        wrappedLines.push(sumChunks.join(''));\n\n        const nextChunk = chunk.trimStart(); // trim space at line break\n        sumChunks = [nextChunk];\n        sumWidth = this.displayWidth(nextChunk);\n      });\n      wrappedLines.push(sumChunks.join(''));\n    });\n\n    return wrappedLines.join('\\n');\n  }\n}\n\n/**\n * Strip style ANSI escape sequences from the string. In particular, SGR (Select Graphic Rendition) codes.\n *\n * @param {string} str\n * @returns {string}\n * @package\n */\n\nfunction stripColor(str) {\n  // eslint-disable-next-line no-control-regex\n  const sgrPattern = /\\x1b\\[\\d*(;\\d*)*m/g;\n  return str.replace(sgrPattern, '');\n}\n\nexports.Help = Help;\nexports.stripColor = stripColor;\n", "const { InvalidArgumentError } = require('./error.js');\n\nclass Option {\n  /**\n   * Initialize a new `Option` with the given `flags` and `description`.\n   *\n   * @param {string} flags\n   * @param {string} [description]\n   */\n\n  constructor(flags, description) {\n    this.flags = flags;\n    this.description = description || '';\n\n    this.required = flags.includes('<'); // A value must be supplied when the option is specified.\n    this.optional = flags.includes('['); // A value is optional when the option is specified.\n    // variadic test ignores <value,...> et al which might be used to describe custom splitting of single argument\n    this.variadic = /\\w\\.\\.\\.[>\\]]$/.test(flags); // The option can take multiple values.\n    this.mandatory = false; // The option must have a value after parsing, which usually means it must be specified on command line.\n    const optionFlags = splitOptionFlags(flags);\n    this.short = optionFlags.shortFlag; // May be a short flag, undefined, or even a long flag (if option has two long flags).\n    this.long = optionFlags.longFlag;\n    this.negate = false;\n    if (this.long) {\n      this.negate = this.long.startsWith('--no-');\n    }\n    this.defaultValue = undefined;\n    this.defaultValueDescription = undefined;\n    this.presetArg = undefined;\n    this.envVar = undefined;\n    this.parseArg = undefined;\n    this.hidden = false;\n    this.argChoices = undefined;\n    this.conflictsWith = [];\n    this.implied = undefined;\n    this.helpGroupHeading = undefined; // soft initialised when option added to command\n  }\n\n  /**\n   * Set the default value, and optionally supply the description to be displayed in the help.\n   *\n   * @param {*} value\n   * @param {string} [description]\n   * @return {Option}\n   */\n\n  default(value, description) {\n    this.defaultValue = value;\n    this.defaultValueDescription = description;\n    return this;\n  }\n\n  /**\n   * Preset to use when option used without option-argument, especially optional but also boolean and negated.\n   * The custom processing (parseArg) is called.\n   *\n   * @example\n   * new Option('--color').default('GREYSCALE').preset('RGB');\n   * new Option('--donate [amount]').preset('20').argParser(parseFloat);\n   *\n   * @param {*} arg\n   * @return {Option}\n   */\n\n  preset(arg) {\n    this.presetArg = arg;\n    return this;\n  }\n\n  /**\n   * Add option name(s) that conflict with this option.\n   * An error will be displayed if conflicting options are found during parsing.\n   *\n   * @example\n   * new Option('--rgb').conflicts('cmyk');\n   * new Option('--js').conflicts(['ts', 'jsx']);\n   *\n   * @param {(string | string[])} names\n   * @return {Option}\n   */\n\n  conflicts(names) {\n    this.conflictsWith = this.conflictsWith.concat(names);\n    return this;\n  }\n\n  /**\n   * Specify implied option values for when this option is set and the implied options are not.\n   *\n   * The custom processing (parseArg) is not called on the implied values.\n   *\n   * @example\n   * program\n   *   .addOption(new Option('--log', 'write logging information to file'))\n   *   .addOption(new Option('--trace', 'log extra details').implies({ log: 'trace.txt' }));\n   *\n   * @param {object} impliedOptionValues\n   * @return {Option}\n   */\n  implies(impliedOptionValues) {\n    let newImplied = impliedOptionValues;\n    if (typeof impliedOptionValues === 'string') {\n      // string is not documented, but easy mistake and we can do what user probably intended.\n      newImplied = { [impliedOptionValues]: true };\n    }\n    this.implied = Object.assign(this.implied || {}, newImplied);\n    return this;\n  }\n\n  /**\n   * Set environment variable to check for option value.\n   *\n   * An environment variable is only used if when processed the current option value is\n   * undefined, or the source of the current value is 'default' or 'config' or 'env'.\n   *\n   * @param {string} name\n   * @return {Option}\n   */\n\n  env(name) {\n    this.envVar = name;\n    return this;\n  }\n\n  /**\n   * Set the custom handler for processing CLI option arguments into option values.\n   *\n   * @param {Function} [fn]\n   * @return {Option}\n   */\n\n  argParser(fn) {\n    this.parseArg = fn;\n    return this;\n  }\n\n  /**\n   * Whether the option is mandatory and must have a value after parsing.\n   *\n   * @param {boolean} [mandatory=true]\n   * @return {Option}\n   */\n\n  makeOptionMandatory(mandatory = true) {\n    this.mandatory = !!mandatory;\n    return this;\n  }\n\n  /**\n   * Hide option in help.\n   *\n   * @param {boolean} [hide=true]\n   * @return {Option}\n   */\n\n  hideHelp(hide = true) {\n    this.hidden = !!hide;\n    return this;\n  }\n\n  /**\n   * @package\n   */\n\n  _collectValue(value, previous) {\n    if (previous === this.defaultValue || !Array.isArray(previous)) {\n      return [value];\n    }\n\n    previous.push(value);\n    return previous;\n  }\n\n  /**\n   * Only allow option value to be one of choices.\n   *\n   * @param {string[]} values\n   * @return {Option}\n   */\n\n  choices(values) {\n    this.argChoices = values.slice();\n    this.parseArg = (arg, previous) => {\n      if (!this.argChoices.includes(arg)) {\n        throw new InvalidArgumentError(\n          `Allowed choices are ${this.argChoices.join(', ')}.`,\n        );\n      }\n      if (this.variadic) {\n        return this._collectValue(arg, previous);\n      }\n      return arg;\n    };\n    return this;\n  }\n\n  /**\n   * Return option name.\n   *\n   * @return {string}\n   */\n\n  name() {\n    if (this.long) {\n      return this.long.replace(/^--/, '');\n    }\n    return this.short.replace(/^-/, '');\n  }\n\n  /**\n   * Return option name, in a camelcase format that can be used\n   * as an object attribute key.\n   *\n   * @return {string}\n   */\n\n  attributeName() {\n    if (this.negate) {\n      return camelcase(this.name().replace(/^no-/, ''));\n    }\n    return camelcase(this.name());\n  }\n\n  /**\n   * Set the help group heading.\n   *\n   * @param {string} heading\n   * @return {Option}\n   */\n  helpGroup(heading) {\n    this.helpGroupHeading = heading;\n    return this;\n  }\n\n  /**\n   * Check if `arg` matches the short or long flag.\n   *\n   * @param {string} arg\n   * @return {boolean}\n   * @package\n   */\n\n  is(arg) {\n    return this.short === arg || this.long === arg;\n  }\n\n  /**\n   * Return whether a boolean option.\n   *\n   * Options are one of boolean, negated, required argument, or optional argument.\n   *\n   * @return {boolean}\n   * @package\n   */\n\n  isBoolean() {\n    return !this.required && !this.optional && !this.negate;\n  }\n}\n\n/**\n * This class is to make it easier to work with dual options, without changing the existing\n * implementation. We support separate dual options for separate positive and negative options,\n * like `--build` and `--no-build`, which share a single option value. This works nicely for some\n * use cases, but is tricky for others where we want separate behaviours despite\n * the single shared option value.\n */\nclass DualOptions {\n  /**\n   * @param {Option[]} options\n   */\n  constructor(options) {\n    this.positiveOptions = new Map();\n    this.negativeOptions = new Map();\n    this.dualOptions = new Set();\n    options.forEach((option) => {\n      if (option.negate) {\n        this.negativeOptions.set(option.attributeName(), option);\n      } else {\n        this.positiveOptions.set(option.attributeName(), option);\n      }\n    });\n    this.negativeOptions.forEach((value, key) => {\n      if (this.positiveOptions.has(key)) {\n        this.dualOptions.add(key);\n      }\n    });\n  }\n\n  /**\n   * Did the value come from the option, and not from possible matching dual option?\n   *\n   * @param {*} value\n   * @param {Option} option\n   * @returns {boolean}\n   */\n  valueFromOption(value, option) {\n    const optionKey = option.attributeName();\n    if (!this.dualOptions.has(optionKey)) return true;\n\n    // Use the value to deduce if (probably) came from the option.\n    const preset = this.negativeOptions.get(optionKey).presetArg;\n    const negativeValue = preset !== undefined ? preset : false;\n    return option.negate === (negativeValue === value);\n  }\n}\n\n/**\n * Convert string from kebab-case to camelCase.\n *\n * @param {string} str\n * @return {string}\n * @private\n */\n\nfunction camelcase(str) {\n  return str.split('-').reduce((str, word) => {\n    return str + word[0].toUpperCase() + word.slice(1);\n  });\n}\n\n/**\n * Split the short and long flag out of something like '-m,--mixed <value>'\n *\n * @private\n */\n\nfunction splitOptionFlags(flags) {\n  let shortFlag;\n  let longFlag;\n  // short flag, single dash and single character\n  const shortFlagExp = /^-[^-]$/;\n  // long flag, double dash and at least one character\n  const longFlagExp = /^--[^-]/;\n\n  const flagParts = flags.split(/[ |,]+/).concat('guard');\n  // Normal is short and/or long.\n  if (shortFlagExp.test(flagParts[0])) shortFlag = flagParts.shift();\n  if (longFlagExp.test(flagParts[0])) longFlag = flagParts.shift();\n  // Long then short. Rarely used but fine.\n  if (!shortFlag && shortFlagExp.test(flagParts[0]))\n    shortFlag = flagParts.shift();\n  // Allow two long flags, like '--ws, --workspace'\n  // This is the supported way to have a shortish option flag.\n  if (!shortFlag && longFlagExp.test(flagParts[0])) {\n    shortFlag = longFlag;\n    longFlag = flagParts.shift();\n  }\n\n  // Check for unprocessed flag. Fail noisily rather than silently ignore.\n  if (flagParts[0].startsWith('-')) {\n    const unsupportedFlag = flagParts[0];\n    const baseError = `option creation failed due to '${unsupportedFlag}' in option flags '${flags}'`;\n    if (/^-[^-][^-]/.test(unsupportedFlag))\n      throw new Error(\n        `${baseError}\n- a short flag is a single dash and a single character\n  - either use a single dash and a single character (for a short flag)\n  - or use a double dash for a long option (and can have two, like '--ws, --workspace')`,\n      );\n    if (shortFlagExp.test(unsupportedFlag))\n      throw new Error(`${baseError}\n- too many short flags`);\n    if (longFlagExp.test(unsupportedFlag))\n      throw new Error(`${baseError}\n- too many long flags`);\n\n    throw new Error(`${baseError}\n- unrecognised flag format`);\n  }\n  if (shortFlag === undefined && longFlag === undefined)\n    throw new Error(\n      `option creation failed due to no flags found in '${flags}'.`,\n    );\n\n  return { shortFlag, longFlag };\n}\n\nexports.Option = Option;\nexports.DualOptions = DualOptions;\n", "const maxDistance = 3;\n\nfunction editDistance(a, b) {\n  // https://en.wikipedia.org/wiki/Damerau\u2013Levenshtein_distance\n  // Calculating optimal string alignment distance, no substring is edited more than once.\n  // (Simple implementation.)\n\n  // Quick early exit, return worst case.\n  if (Math.abs(a.length - b.length) > maxDistance)\n    return Math.max(a.length, b.length);\n\n  // distance between prefix substrings of a and b\n  const d = [];\n\n  // pure deletions turn a into empty string\n  for (let i = 0; i <= a.length; i++) {\n    d[i] = [i];\n  }\n  // pure insertions turn empty string into b\n  for (let j = 0; j <= b.length; j++) {\n    d[0][j] = j;\n  }\n\n  // fill matrix\n  for (let j = 1; j <= b.length; j++) {\n    for (let i = 1; i <= a.length; i++) {\n      let cost = 1;\n      if (a[i - 1] === b[j - 1]) {\n        cost = 0;\n      } else {\n        cost = 1;\n      }\n      d[i][j] = Math.min(\n        d[i - 1][j] + 1, // deletion\n        d[i][j - 1] + 1, // insertion\n        d[i - 1][j - 1] + cost, // substitution\n      );\n      // transposition\n      if (i > 1 && j > 1 && a[i - 1] === b[j - 2] && a[i - 2] === b[j - 1]) {\n        d[i][j] = Math.min(d[i][j], d[i - 2][j - 2] + 1);\n      }\n    }\n  }\n\n  return d[a.length][b.length];\n}\n\n/**\n * Find close matches, restricted to same number of edits.\n *\n * @param {string} word\n * @param {string[]} candidates\n * @returns {string}\n */\n\nfunction suggestSimilar(word, candidates) {\n  if (!candidates || candidates.length === 0) return '';\n  // remove possible duplicates\n  candidates = Array.from(new Set(candidates));\n\n  const searchingOptions = word.startsWith('--');\n  if (searchingOptions) {\n    word = word.slice(2);\n    candidates = candidates.map((candidate) => candidate.slice(2));\n  }\n\n  let similar = [];\n  let bestDistance = maxDistance;\n  const minSimilarity = 0.4;\n  candidates.forEach((candidate) => {\n    if (candidate.length <= 1) return; // no one character guesses\n\n    const distance = editDistance(word, candidate);\n    const length = Math.max(word.length, candidate.length);\n    const similarity = (length - distance) / length;\n    if (similarity > minSimilarity) {\n      if (distance < bestDistance) {\n        // better edit distance, throw away previous worse matches\n        bestDistance = distance;\n        similar = [candidate];\n      } else if (distance === bestDistance) {\n        similar.push(candidate);\n      }\n    }\n  });\n\n  similar.sort((a, b) => a.localeCompare(b));\n  if (searchingOptions) {\n    similar = similar.map((candidate) => `--${candidate}`);\n  }\n\n  if (similar.length > 1) {\n    return `\\n(Did you mean one of ${similar.join(', ')}?)`;\n  }\n  if (similar.length === 1) {\n    return `\\n(Did you mean ${similar[0]}?)`;\n  }\n  return '';\n}\n\nexports.suggestSimilar = suggestSimilar;\n", "const EventEmitter = require('node:events').EventEmitter;\nconst childProcess = require('node:child_process');\nconst path = require('node:path');\nconst fs = require('node:fs');\nconst process = require('node:process');\n\nconst { Argument, humanReadableArgName } = require('./argument.js');\nconst { CommanderError } = require('./error.js');\nconst { Help, stripColor } = require('./help.js');\nconst { Option, DualOptions } = require('./option.js');\nconst { suggestSimilar } = require('./suggestSimilar');\n\nclass Command extends EventEmitter {\n  /**\n   * Initialize a new `Command`.\n   *\n   * @param {string} [name]\n   */\n\n  constructor(name) {\n    super();\n    /** @type {Command[]} */\n    this.commands = [];\n    /** @type {Option[]} */\n    this.options = [];\n    this.parent = null;\n    this._allowUnknownOption = false;\n    this._allowExcessArguments = false;\n    /** @type {Argument[]} */\n    this.registeredArguments = [];\n    this._args = this.registeredArguments; // deprecated old name\n    /** @type {string[]} */\n    this.args = []; // cli args with options removed\n    this.rawArgs = [];\n    this.processedArgs = []; // like .args but after custom processing and collecting variadic\n    this._scriptPath = null;\n    this._name = name || '';\n    this._optionValues = {};\n    this._optionValueSources = {}; // default, env, cli etc\n    this._storeOptionsAsProperties = false;\n    this._actionHandler = null;\n    this._executableHandler = false;\n    this._executableFile = null; // custom name for executable\n    this._executableDir = null; // custom search directory for subcommands\n    this._defaultCommandName = null;\n    this._exitCallback = null;\n    this._aliases = [];\n    this._combineFlagAndOptionalValue = true;\n    this._description = '';\n    this._summary = '';\n    this._argsDescription = undefined; // legacy\n    this._enablePositionalOptions = false;\n    this._passThroughOptions = false;\n    this._lifeCycleHooks = {}; // a hash of arrays\n    /** @type {(boolean | string)} */\n    this._showHelpAfterError = false;\n    this._showSuggestionAfterError = true;\n    this._savedState = null; // used in save/restoreStateBeforeParse\n\n    // see configureOutput() for docs\n    this._outputConfiguration = {\n      writeOut: (str) => process.stdout.write(str),\n      writeErr: (str) => process.stderr.write(str),\n      outputError: (str, write) => write(str),\n      getOutHelpWidth: () =>\n        process.stdout.isTTY ? process.stdout.columns : undefined,\n      getErrHelpWidth: () =>\n        process.stderr.isTTY ? process.stderr.columns : undefined,\n      getOutHasColors: () =>\n        useColor() ?? (process.stdout.isTTY && process.stdout.hasColors?.()),\n      getErrHasColors: () =>\n        useColor() ?? (process.stderr.isTTY && process.stderr.hasColors?.()),\n      stripColor: (str) => stripColor(str),\n    };\n\n    this._hidden = false;\n    /** @type {(Option | null | undefined)} */\n    this._helpOption = undefined; // Lazy created on demand. May be null if help option is disabled.\n    this._addImplicitHelpCommand = undefined; // undecided whether true or false yet, not inherited\n    /** @type {Command} */\n    this._helpCommand = undefined; // lazy initialised, inherited\n    this._helpConfiguration = {};\n    /** @type {string | undefined} */\n    this._helpGroupHeading = undefined; // soft initialised when added to parent\n    /** @type {string | undefined} */\n    this._defaultCommandGroup = undefined;\n    /** @type {string | undefined} */\n    this._defaultOptionGroup = undefined;\n  }\n\n  /**\n   * Copy settings that are useful to have in common across root command and subcommands.\n   *\n   * (Used internally when adding a command using `.command()` so subcommands inherit parent settings.)\n   *\n   * @param {Command} sourceCommand\n   * @return {Command} `this` command for chaining\n   */\n  copyInheritedSettings(sourceCommand) {\n    this._outputConfiguration = sourceCommand._outputConfiguration;\n    this._helpOption = sourceCommand._helpOption;\n    this._helpCommand = sourceCommand._helpCommand;\n    this._helpConfiguration = sourceCommand._helpConfiguration;\n    this._exitCallback = sourceCommand._exitCallback;\n    this._storeOptionsAsProperties = sourceCommand._storeOptionsAsProperties;\n    this._combineFlagAndOptionalValue =\n      sourceCommand._combineFlagAndOptionalValue;\n    this._allowExcessArguments = sourceCommand._allowExcessArguments;\n    this._enablePositionalOptions = sourceCommand._enablePositionalOptions;\n    this._showHelpAfterError = sourceCommand._showHelpAfterError;\n    this._showSuggestionAfterError = sourceCommand._showSuggestionAfterError;\n\n    return this;\n  }\n\n  /**\n   * @returns {Command[]}\n   * @private\n   */\n\n  _getCommandAndAncestors() {\n    const result = [];\n    // eslint-disable-next-line @typescript-eslint/no-this-alias\n    for (let command = this; command; command = command.parent) {\n      result.push(command);\n    }\n    return result;\n  }\n\n  /**\n   * Define a command.\n   *\n   * There are two styles of command: pay attention to where to put the description.\n   *\n   * @example\n   * // Command implemented using action handler (description is supplied separately to `.command`)\n   * program\n   *   .command('clone <source> [destination]')\n   *   .description('clone a repository into a newly created directory')\n   *   .action((source, destination) => {\n   *     console.log('clone command called');\n   *   });\n   *\n   * // Command implemented using separate executable file (description is second parameter to `.command`)\n   * program\n   *   .command('start <service>', 'start named service')\n   *   .command('stop [service]', 'stop named service, or all if no name supplied');\n   *\n   * @param {string} nameAndArgs - command name and arguments, args are `<required>` or `[optional]` and last may also be `variadic...`\n   * @param {(object | string)} [actionOptsOrExecDesc] - configuration options (for action), or description (for executable)\n   * @param {object} [execOpts] - configuration options (for executable)\n   * @return {Command} returns new command for action handler, or `this` for executable command\n   */\n\n  command(nameAndArgs, actionOptsOrExecDesc, execOpts) {\n    let desc = actionOptsOrExecDesc;\n    let opts = execOpts;\n    if (typeof desc === 'object' && desc !== null) {\n      opts = desc;\n      desc = null;\n    }\n    opts = opts || {};\n    const [, name, args] = nameAndArgs.match(/([^ ]+) *(.*)/);\n\n    const cmd = this.createCommand(name);\n    if (desc) {\n      cmd.description(desc);\n      cmd._executableHandler = true;\n    }\n    if (opts.isDefault) this._defaultCommandName = cmd._name;\n    cmd._hidden = !!(opts.noHelp || opts.hidden); // noHelp is deprecated old name for hidden\n    cmd._executableFile = opts.executableFile || null; // Custom name for executable file, set missing to null to match constructor\n    if (args) cmd.arguments(args);\n    this._registerCommand(cmd);\n    cmd.parent = this;\n    cmd.copyInheritedSettings(this);\n\n    if (desc) return this;\n    return cmd;\n  }\n\n  /**\n   * Factory routine to create a new unattached command.\n   *\n   * See .command() for creating an attached subcommand, which uses this routine to\n   * create the command. You can override createCommand to customise subcommands.\n   *\n   * @param {string} [name]\n   * @return {Command} new command\n   */\n\n  createCommand(name) {\n    return new Command(name);\n  }\n\n  /**\n   * You can customise the help with a subclass of Help by overriding createHelp,\n   * or by overriding Help properties using configureHelp().\n   *\n   * @return {Help}\n   */\n\n  createHelp() {\n    return Object.assign(new Help(), this.configureHelp());\n  }\n\n  /**\n   * You can customise the help by overriding Help properties using configureHelp(),\n   * or with a subclass of Help by overriding createHelp().\n   *\n   * @param {object} [configuration] - configuration options\n   * @return {(Command | object)} `this` command for chaining, or stored configuration\n   */\n\n  configureHelp(configuration) {\n    if (configuration === undefined) return this._helpConfiguration;\n\n    this._helpConfiguration = configuration;\n    return this;\n  }\n\n  /**\n   * The default output goes to stdout and stderr. You can customise this for special\n   * applications. You can also customise the display of errors by overriding outputError.\n   *\n   * The configuration properties are all functions:\n   *\n   *     // change how output being written, defaults to stdout and stderr\n   *     writeOut(str)\n   *     writeErr(str)\n   *     // change how output being written for errors, defaults to writeErr\n   *     outputError(str, write) // used for displaying errors and not used for displaying help\n   *     // specify width for wrapping help\n   *     getOutHelpWidth()\n   *     getErrHelpWidth()\n   *     // color support, currently only used with Help\n   *     getOutHasColors()\n   *     getErrHasColors()\n   *     stripColor() // used to remove ANSI escape codes if output does not have colors\n   *\n   * @param {object} [configuration] - configuration options\n   * @return {(Command | object)} `this` command for chaining, or stored configuration\n   */\n\n  configureOutput(configuration) {\n    if (configuration === undefined) return this._outputConfiguration;\n\n    this._outputConfiguration = {\n      ...this._outputConfiguration,\n      ...configuration,\n    };\n    return this;\n  }\n\n  /**\n   * Display the help or a custom message after an error occurs.\n   *\n   * @param {(boolean|string)} [displayHelp]\n   * @return {Command} `this` command for chaining\n   */\n  showHelpAfterError(displayHelp = true) {\n    if (typeof displayHelp !== 'string') displayHelp = !!displayHelp;\n    this._showHelpAfterError = displayHelp;\n    return this;\n  }\n\n  /**\n   * Display suggestion of similar commands for unknown commands, or options for unknown options.\n   *\n   * @param {boolean} [displaySuggestion]\n   * @return {Command} `this` command for chaining\n   */\n  showSuggestionAfterError(displaySuggestion = true) {\n    this._showSuggestionAfterError = !!displaySuggestion;\n    return this;\n  }\n\n  /**\n   * Add a prepared subcommand.\n   *\n   * See .command() for creating an attached subcommand which inherits settings from its parent.\n   *\n   * @param {Command} cmd - new subcommand\n   * @param {object} [opts] - configuration options\n   * @return {Command} `this` command for chaining\n   */\n\n  addCommand(cmd, opts) {\n    if (!cmd._name) {\n      throw new Error(`Command passed to .addCommand() must have a name\n- specify the name in Command constructor or using .name()`);\n    }\n\n    opts = opts || {};\n    if (opts.isDefault) this._defaultCommandName = cmd._name;\n    if (opts.noHelp || opts.hidden) cmd._hidden = true; // modifying passed command due to existing implementation\n\n    this._registerCommand(cmd);\n    cmd.parent = this;\n    cmd._checkForBrokenPassThrough();\n\n    return this;\n  }\n\n  /**\n   * Factory routine to create a new unattached argument.\n   *\n   * See .argument() for creating an attached argument, which uses this routine to\n   * create the argument. You can override createArgument to return a custom argument.\n   *\n   * @param {string} name\n   * @param {string} [description]\n   * @return {Argument} new argument\n   */\n\n  createArgument(name, description) {\n    return new Argument(name, description);\n  }\n\n  /**\n   * Define argument syntax for command.\n   *\n   * The default is that the argument is required, and you can explicitly\n   * indicate this with <> around the name. Put [] around the name for an optional argument.\n   *\n   * @example\n   * program.argument('<input-file>');\n   * program.argument('[output-file]');\n   *\n   * @param {string} name\n   * @param {string} [description]\n   * @param {(Function|*)} [parseArg] - custom argument processing function or default value\n   * @param {*} [defaultValue]\n   * @return {Command} `this` command for chaining\n   */\n  argument(name, description, parseArg, defaultValue) {\n    const argument = this.createArgument(name, description);\n    if (typeof parseArg === 'function') {\n      argument.default(defaultValue).argParser(parseArg);\n    } else {\n      argument.default(parseArg);\n    }\n    this.addArgument(argument);\n    return this;\n  }\n\n  /**\n   * Define argument syntax for command, adding multiple at once (without descriptions).\n   *\n   * See also .argument().\n   *\n   * @example\n   * program.arguments('<cmd> [env]');\n   *\n   * @param {string} names\n   * @return {Command} `this` command for chaining\n   */\n\n  arguments(names) {\n    names\n      .trim()\n      .split(/ +/)\n      .forEach((detail) => {\n        this.argument(detail);\n      });\n    return this;\n  }\n\n  /**\n   * Define argument syntax for command, adding a prepared argument.\n   *\n   * @param {Argument} argument\n   * @return {Command} `this` command for chaining\n   */\n  addArgument(argument) {\n    const previousArgument = this.registeredArguments.slice(-1)[0];\n    if (previousArgument?.variadic) {\n      throw new Error(\n        `only the last argument can be variadic '${previousArgument.name()}'`,\n      );\n    }\n    if (\n      argument.required &&\n      argument.defaultValue !== undefined &&\n      argument.parseArg === undefined\n    ) {\n      throw new Error(\n        `a default value for a required argument is never used: '${argument.name()}'`,\n      );\n    }\n    this.registeredArguments.push(argument);\n    return this;\n  }\n\n  /**\n   * Customise or override default help command. By default a help command is automatically added if your command has subcommands.\n   *\n   * @example\n   *    program.helpCommand('help [cmd]');\n   *    program.helpCommand('help [cmd]', 'show help');\n   *    program.helpCommand(false); // suppress default help command\n   *    program.helpCommand(true); // add help command even if no subcommands\n   *\n   * @param {string|boolean} enableOrNameAndArgs - enable with custom name and/or arguments, or boolean to override whether added\n   * @param {string} [description] - custom description\n   * @return {Command} `this` command for chaining\n   */\n\n  helpCommand(enableOrNameAndArgs, description) {\n    if (typeof enableOrNameAndArgs === 'boolean') {\n      this._addImplicitHelpCommand = enableOrNameAndArgs;\n      if (enableOrNameAndArgs && this._defaultCommandGroup) {\n        // make the command to store the group\n        this._initCommandGroup(this._getHelpCommand());\n      }\n      return this;\n    }\n\n    const nameAndArgs = enableOrNameAndArgs ?? 'help [command]';\n    const [, helpName, helpArgs] = nameAndArgs.match(/([^ ]+) *(.*)/);\n    const helpDescription = description ?? 'display help for command';\n\n    const helpCommand = this.createCommand(helpName);\n    helpCommand.helpOption(false);\n    if (helpArgs) helpCommand.arguments(helpArgs);\n    if (helpDescription) helpCommand.description(helpDescription);\n\n    this._addImplicitHelpCommand = true;\n    this._helpCommand = helpCommand;\n    // init group unless lazy create\n    if (enableOrNameAndArgs || description) this._initCommandGroup(helpCommand);\n\n    return this;\n  }\n\n  /**\n   * Add prepared custom help command.\n   *\n   * @param {(Command|string|boolean)} helpCommand - custom help command, or deprecated enableOrNameAndArgs as for `.helpCommand()`\n   * @param {string} [deprecatedDescription] - deprecated custom description used with custom name only\n   * @return {Command} `this` command for chaining\n   */\n  addHelpCommand(helpCommand, deprecatedDescription) {\n    // If not passed an object, call through to helpCommand for backwards compatibility,\n    // as addHelpCommand was originally used like helpCommand is now.\n    if (typeof helpCommand !== 'object') {\n      this.helpCommand(helpCommand, deprecatedDescription);\n      return this;\n    }\n\n    this._addImplicitHelpCommand = true;\n    this._helpCommand = helpCommand;\n    this._initCommandGroup(helpCommand);\n    return this;\n  }\n\n  /**\n   * Lazy create help command.\n   *\n   * @return {(Command|null)}\n   * @package\n   */\n  _getHelpCommand() {\n    const hasImplicitHelpCommand =\n      this._addImplicitHelpCommand ??\n      (this.commands.length &&\n        !this._actionHandler &&\n        !this._findCommand('help'));\n\n    if (hasImplicitHelpCommand) {\n      if (this._helpCommand === undefined) {\n        this.helpCommand(undefined, undefined); // use default name and description\n      }\n      return this._helpCommand;\n    }\n    return null;\n  }\n\n  /**\n   * Add hook for life cycle event.\n   *\n   * @param {string} event\n   * @param {Function} listener\n   * @return {Command} `this` command for chaining\n   */\n\n  hook(event, listener) {\n    const allowedValues = ['preSubcommand', 'preAction', 'postAction'];\n    if (!allowedValues.includes(event)) {\n      throw new Error(`Unexpected value for event passed to hook : '${event}'.\nExpecting one of '${allowedValues.join(\"', '\")}'`);\n    }\n    if (this._lifeCycleHooks[event]) {\n      this._lifeCycleHooks[event].push(listener);\n    } else {\n      this._lifeCycleHooks[event] = [listener];\n    }\n    return this;\n  }\n\n  /**\n   * Register callback to use as replacement for calling process.exit.\n   *\n   * @param {Function} [fn] optional callback which will be passed a CommanderError, defaults to throwing\n   * @return {Command} `this` command for chaining\n   */\n\n  exitOverride(fn) {\n    if (fn) {\n      this._exitCallback = fn;\n    } else {\n      this._exitCallback = (err) => {\n        if (err.code !== 'commander.executeSubCommandAsync') {\n          throw err;\n        } else {\n          // Async callback from spawn events, not useful to throw.\n        }\n      };\n    }\n    return this;\n  }\n\n  /**\n   * Call process.exit, and _exitCallback if defined.\n   *\n   * @param {number} exitCode exit code for using with process.exit\n   * @param {string} code an id string representing the error\n   * @param {string} message human-readable description of the error\n   * @return never\n   * @private\n   */\n\n  _exit(exitCode, code, message) {\n    if (this._exitCallback) {\n      this._exitCallback(new CommanderError(exitCode, code, message));\n      // Expecting this line is not reached.\n    }\n    process.exit(exitCode);\n  }\n\n  /**\n   * Register callback `fn` for the command.\n   *\n   * @example\n   * program\n   *   .command('serve')\n   *   .description('start service')\n   *   .action(function() {\n   *      // do work here\n   *   });\n   *\n   * @param {Function} fn\n   * @return {Command} `this` command for chaining\n   */\n\n  action(fn) {\n    const listener = (args) => {\n      // The .action callback takes an extra parameter which is the command or options.\n      const expectedArgsCount = this.registeredArguments.length;\n      const actionArgs = args.slice(0, expectedArgsCount);\n      if (this._storeOptionsAsProperties) {\n        actionArgs[expectedArgsCount] = this; // backwards compatible \"options\"\n      } else {\n        actionArgs[expectedArgsCount] = this.opts();\n      }\n      actionArgs.push(this);\n\n      return fn.apply(this, actionArgs);\n    };\n    this._actionHandler = listener;\n    return this;\n  }\n\n  /**\n   * Factory routine to create a new unattached option.\n   *\n   * See .option() for creating an attached option, which uses this routine to\n   * create the option. You can override createOption to return a custom option.\n   *\n   * @param {string} flags\n   * @param {string} [description]\n   * @return {Option} new option\n   */\n\n  createOption(flags, description) {\n    return new Option(flags, description);\n  }\n\n  /**\n   * Wrap parseArgs to catch 'commander.invalidArgument'.\n   *\n   * @param {(Option | Argument)} target\n   * @param {string} value\n   * @param {*} previous\n   * @param {string} invalidArgumentMessage\n   * @private\n   */\n\n  _callParseArg(target, value, previous, invalidArgumentMessage) {\n    try {\n      return target.parseArg(value, previous);\n    } catch (err) {\n      if (err.code === 'commander.invalidArgument') {\n        const message = `${invalidArgumentMessage} ${err.message}`;\n        this.error(message, { exitCode: err.exitCode, code: err.code });\n      }\n      throw err;\n    }\n  }\n\n  /**\n   * Check for option flag conflicts.\n   * Register option if no conflicts found, or throw on conflict.\n   *\n   * @param {Option} option\n   * @private\n   */\n\n  _registerOption(option) {\n    const matchingOption =\n      (option.short && this._findOption(option.short)) ||\n      (option.long && this._findOption(option.long));\n    if (matchingOption) {\n      const matchingFlag =\n        option.long && this._findOption(option.long)\n          ? option.long\n          : option.short;\n      throw new Error(`Cannot add option '${option.flags}'${this._name && ` to command '${this._name}'`} due to conflicting flag '${matchingFlag}'\n-  already used by option '${matchingOption.flags}'`);\n    }\n\n    this._initOptionGroup(option);\n    this.options.push(option);\n  }\n\n  /**\n   * Check for command name and alias conflicts with existing commands.\n   * Register command if no conflicts found, or throw on conflict.\n   *\n   * @param {Command} command\n   * @private\n   */\n\n  _registerCommand(command) {\n    const knownBy = (cmd) => {\n      return [cmd.name()].concat(cmd.aliases());\n    };\n\n    const alreadyUsed = knownBy(command).find((name) =>\n      this._findCommand(name),\n    );\n    if (alreadyUsed) {\n      const existingCmd = knownBy(this._findCommand(alreadyUsed)).join('|');\n      const newCmd = knownBy(command).join('|');\n      throw new Error(\n        `cannot add command '${newCmd}' as already have command '${existingCmd}'`,\n      );\n    }\n\n    this._initCommandGroup(command);\n    this.commands.push(command);\n  }\n\n  /**\n   * Add an option.\n   *\n   * @param {Option} option\n   * @return {Command} `this` command for chaining\n   */\n  addOption(option) {\n    this._registerOption(option);\n\n    const oname = option.name();\n    const name = option.attributeName();\n\n    // store default value\n    if (option.negate) {\n      // --no-foo is special and defaults foo to true, unless a --foo option is already defined\n      const positiveLongFlag = option.long.replace(/^--no-/, '--');\n      if (!this._findOption(positiveLongFlag)) {\n        this.setOptionValueWithSource(\n          name,\n          option.defaultValue === undefined ? true : option.defaultValue,\n          'default',\n        );\n      }\n    } else if (option.defaultValue !== undefined) {\n      this.setOptionValueWithSource(name, option.defaultValue, 'default');\n    }\n\n    // handler for cli and env supplied values\n    const handleOptionValue = (val, invalidValueMessage, valueSource) => {\n      // val is null for optional option used without an optional-argument.\n      // val is undefined for boolean and negated option.\n      if (val == null && option.presetArg !== undefined) {\n        val = option.presetArg;\n      }\n\n      // custom processing\n      const oldValue = this.getOptionValue(name);\n      if (val !== null && option.parseArg) {\n        val = this._callParseArg(option, val, oldValue, invalidValueMessage);\n      } else if (val !== null && option.variadic) {\n        val = option._collectValue(val, oldValue);\n      }\n\n      // Fill-in appropriate missing values. Long winded but easy to follow.\n      if (val == null) {\n        if (option.negate) {\n          val = false;\n        } else if (option.isBoolean() || option.optional) {\n          val = true;\n        } else {\n          val = ''; // not normal, parseArg might have failed or be a mock function for testing\n        }\n      }\n      this.setOptionValueWithSource(name, val, valueSource);\n    };\n\n    this.on('option:' + oname, (val) => {\n      const invalidValueMessage = `error: option '${option.flags}' argument '${val}' is invalid.`;\n      handleOptionValue(val, invalidValueMessage, 'cli');\n    });\n\n    if (option.envVar) {\n      this.on('optionEnv:' + oname, (val) => {\n        const invalidValueMessage = `error: option '${option.flags}' value '${val}' from env '${option.envVar}' is invalid.`;\n        handleOptionValue(val, invalidValueMessage, 'env');\n      });\n    }\n\n    return this;\n  }\n\n  /**\n   * Internal implementation shared by .option() and .requiredOption()\n   *\n   * @return {Command} `this` command for chaining\n   * @private\n   */\n  _optionEx(config, flags, description, fn, defaultValue) {\n    if (typeof flags === 'object' && flags instanceof Option) {\n      throw new Error(\n        'To add an Option object use addOption() instead of option() or requiredOption()',\n      );\n    }\n    const option = this.createOption(flags, description);\n    option.makeOptionMandatory(!!config.mandatory);\n    if (typeof fn === 'function') {\n      option.default(defaultValue).argParser(fn);\n    } else if (fn instanceof RegExp) {\n      // deprecated\n      const regex = fn;\n      fn = (val, def) => {\n        const m = regex.exec(val);\n        return m ? m[0] : def;\n      };\n      option.default(defaultValue).argParser(fn);\n    } else {\n      option.default(fn);\n    }\n\n    return this.addOption(option);\n  }\n\n  /**\n   * Define option with `flags`, `description`, and optional argument parsing function or `defaultValue` or both.\n   *\n   * The `flags` string contains the short and/or long flags, separated by comma, a pipe or space. A required\n   * option-argument is indicated by `<>` and an optional option-argument by `[]`.\n   *\n   * See the README for more details, and see also addOption() and requiredOption().\n   *\n   * @example\n   * program\n   *     .option('-p, --pepper', 'add pepper')\n   *     .option('--pt, --pizza-type <TYPE>', 'type of pizza') // required option-argument\n   *     .option('-c, --cheese [CHEESE]', 'add extra cheese', 'mozzarella') // optional option-argument with default\n   *     .option('-t, --tip <VALUE>', 'add tip to purchase cost', parseFloat) // custom parse function\n   *\n   * @param {string} flags\n   * @param {string} [description]\n   * @param {(Function|*)} [parseArg] - custom option processing function or default value\n   * @param {*} [defaultValue]\n   * @return {Command} `this` command for chaining\n   */\n\n  option(flags, description, parseArg, defaultValue) {\n    return this._optionEx({}, flags, description, parseArg, defaultValue);\n  }\n\n  /**\n   * Add a required option which must have a value after parsing. This usually means\n   * the option must be specified on the command line. (Otherwise the same as .option().)\n   *\n   * The `flags` string contains the short and/or long flags, separated by comma, a pipe or space.\n   *\n   * @param {string} flags\n   * @param {string} [description]\n   * @param {(Function|*)} [parseArg] - custom option processing function or default value\n   * @param {*} [defaultValue]\n   * @return {Command} `this` command for chaining\n   */\n\n  requiredOption(flags, description, parseArg, defaultValue) {\n    return this._optionEx(\n      { mandatory: true },\n      flags,\n      description,\n      parseArg,\n      defaultValue,\n    );\n  }\n\n  /**\n   * Alter parsing of short flags with optional values.\n   *\n   * @example\n   * // for `.option('-f,--flag [value]'):\n   * program.combineFlagAndOptionalValue(true);  // `-f80` is treated like `--flag=80`, this is the default behaviour\n   * program.combineFlagAndOptionalValue(false) // `-fb` is treated like `-f -b`\n   *\n   * @param {boolean} [combine] - if `true` or omitted, an optional value can be specified directly after the flag.\n   * @return {Command} `this` command for chaining\n   */\n  combineFlagAndOptionalValue(combine = true) {\n    this._combineFlagAndOptionalValue = !!combine;\n    return this;\n  }\n\n  /**\n   * Allow unknown options on the command line.\n   *\n   * @param {boolean} [allowUnknown] - if `true` or omitted, no error will be thrown for unknown options.\n   * @return {Command} `this` command for chaining\n   */\n  allowUnknownOption(allowUnknown = true) {\n    this._allowUnknownOption = !!allowUnknown;\n    return this;\n  }\n\n  /**\n   * Allow excess command-arguments on the command line. Pass false to make excess arguments an error.\n   *\n   * @param {boolean} [allowExcess] - if `true` or omitted, no error will be thrown for excess arguments.\n   * @return {Command} `this` command for chaining\n   */\n  allowExcessArguments(allowExcess = true) {\n    this._allowExcessArguments = !!allowExcess;\n    return this;\n  }\n\n  /**\n   * Enable positional options. Positional means global options are specified before subcommands which lets\n   * subcommands reuse the same option names, and also enables subcommands to turn on passThroughOptions.\n   * The default behaviour is non-positional and global options may appear anywhere on the command line.\n   *\n   * @param {boolean} [positional]\n   * @return {Command} `this` command for chaining\n   */\n  enablePositionalOptions(positional = true) {\n    this._enablePositionalOptions = !!positional;\n    return this;\n  }\n\n  /**\n   * Pass through options that come after command-arguments rather than treat them as command-options,\n   * so actual command-options come before command-arguments. Turning this on for a subcommand requires\n   * positional options to have been enabled on the program (parent commands).\n   * The default behaviour is non-positional and options may appear before or after command-arguments.\n   *\n   * @param {boolean} [passThrough] for unknown options.\n   * @return {Command} `this` command for chaining\n   */\n  passThroughOptions(passThrough = true) {\n    this._passThroughOptions = !!passThrough;\n    this._checkForBrokenPassThrough();\n    return this;\n  }\n\n  /**\n   * @private\n   */\n\n  _checkForBrokenPassThrough() {\n    if (\n      this.parent &&\n      this._passThroughOptions &&\n      !this.parent._enablePositionalOptions\n    ) {\n      throw new Error(\n        `passThroughOptions cannot be used for '${this._name}' without turning on enablePositionalOptions for parent command(s)`,\n      );\n    }\n  }\n\n  /**\n   * Whether to store option values as properties on command object,\n   * or store separately (specify false). In both cases the option values can be accessed using .opts().\n   *\n   * @param {boolean} [storeAsProperties=true]\n   * @return {Command} `this` command for chaining\n   */\n\n  storeOptionsAsProperties(storeAsProperties = true) {\n    if (this.options.length) {\n      throw new Error('call .storeOptionsAsProperties() before adding options');\n    }\n    if (Object.keys(this._optionValues).length) {\n      throw new Error(\n        'call .storeOptionsAsProperties() before setting option values',\n      );\n    }\n    this._storeOptionsAsProperties = !!storeAsProperties;\n    return this;\n  }\n\n  /**\n   * Retrieve option value.\n   *\n   * @param {string} key\n   * @return {object} value\n   */\n\n  getOptionValue(key) {\n    if (this._storeOptionsAsProperties) {\n      return this[key];\n    }\n    return this._optionValues[key];\n  }\n\n  /**\n   * Store option value.\n   *\n   * @param {string} key\n   * @param {object} value\n   * @return {Command} `this` command for chaining\n   */\n\n  setOptionValue(key, value) {\n    return this.setOptionValueWithSource(key, value, undefined);\n  }\n\n  /**\n   * Store option value and where the value came from.\n   *\n   * @param {string} key\n   * @param {object} value\n   * @param {string} source - expected values are default/config/env/cli/implied\n   * @return {Command} `this` command for chaining\n   */\n\n  setOptionValueWithSource(key, value, source) {\n    if (this._storeOptionsAsProperties) {\n      this[key] = value;\n    } else {\n      this._optionValues[key] = value;\n    }\n    this._optionValueSources[key] = source;\n    return this;\n  }\n\n  /**\n   * Get source of option value.\n   * Expected values are default | config | env | cli | implied\n   *\n   * @param {string} key\n   * @return {string}\n   */\n\n  getOptionValueSource(key) {\n    return this._optionValueSources[key];\n  }\n\n  /**\n   * Get source of option value. See also .optsWithGlobals().\n   * Expected values are default | config | env | cli | implied\n   *\n   * @param {string} key\n   * @return {string}\n   */\n\n  getOptionValueSourceWithGlobals(key) {\n    // global overwrites local, like optsWithGlobals\n    let source;\n    this._getCommandAndAncestors().forEach((cmd) => {\n      if (cmd.getOptionValueSource(key) !== undefined) {\n        source = cmd.getOptionValueSource(key);\n      }\n    });\n    return source;\n  }\n\n  /**\n   * Get user arguments from implied or explicit arguments.\n   * Side-effects: set _scriptPath if args included script. Used for default program name, and subcommand searches.\n   *\n   * @private\n   */\n\n  _prepareUserArgs(argv, parseOptions) {\n    if (argv !== undefined && !Array.isArray(argv)) {\n      throw new Error('first parameter to parse must be array or undefined');\n    }\n    parseOptions = parseOptions || {};\n\n    // auto-detect argument conventions if nothing supplied\n    if (argv === undefined && parseOptions.from === undefined) {\n      if (process.versions?.electron) {\n        parseOptions.from = 'electron';\n      }\n      // check node specific options for scenarios where user CLI args follow executable without scriptname\n      const execArgv = process.execArgv ?? [];\n      if (\n        execArgv.includes('-e') ||\n        execArgv.includes('--eval') ||\n        execArgv.includes('-p') ||\n        execArgv.includes('--print')\n      ) {\n        parseOptions.from = 'eval'; // internal usage, not documented\n      }\n    }\n\n    // default to using process.argv\n    if (argv === undefined) {\n      argv = process.argv;\n    }\n    this.rawArgs = argv.slice();\n\n    // extract the user args and scriptPath\n    let userArgs;\n    switch (parseOptions.from) {\n      case undefined:\n      case 'node':\n        this._scriptPath = argv[1];\n        userArgs = argv.slice(2);\n        break;\n      case 'electron':\n        // @ts-ignore: because defaultApp is an unknown property\n        if (process.defaultApp) {\n          this._scriptPath = argv[1];\n          userArgs = argv.slice(2);\n        } else {\n          userArgs = argv.slice(1);\n        }\n        break;\n      case 'user':\n        userArgs = argv.slice(0);\n        break;\n      case 'eval':\n        userArgs = argv.slice(1);\n        break;\n      default:\n        throw new Error(\n          `unexpected parse option { from: '${parseOptions.from}' }`,\n        );\n    }\n\n    // Find default name for program from arguments.\n    if (!this._name && this._scriptPath)\n      this.nameFromFilename(this._scriptPath);\n    this._name = this._name || 'program';\n\n    return userArgs;\n  }\n\n  /**\n   * Parse `argv`, setting options and invoking commands when defined.\n   *\n   * Use parseAsync instead of parse if any of your action handlers are async.\n   *\n   * Call with no parameters to parse `process.argv`. Detects Electron and special node options like `node --eval`. Easy mode!\n   *\n   * Or call with an array of strings to parse, and optionally where the user arguments start by specifying where the arguments are `from`:\n   * - `'node'`: default, `argv[0]` is the application and `argv[1]` is the script being run, with user arguments after that\n   * - `'electron'`: `argv[0]` is the application and `argv[1]` varies depending on whether the electron application is packaged\n   * - `'user'`: just user arguments\n   *\n   * @example\n   * program.parse(); // parse process.argv and auto-detect electron and special node flags\n   * program.parse(process.argv); // assume argv[0] is app and argv[1] is script\n   * program.parse(my-args, { from: 'user' }); // just user supplied arguments, nothing special about argv[0]\n   *\n   * @param {string[]} [argv] - optional, defaults to process.argv\n   * @param {object} [parseOptions] - optionally specify style of options with from: node/user/electron\n   * @param {string} [parseOptions.from] - where the args are from: 'node', 'user', 'electron'\n   * @return {Command} `this` command for chaining\n   */\n\n  parse(argv, parseOptions) {\n    this._prepareForParse();\n    const userArgs = this._prepareUserArgs(argv, parseOptions);\n    this._parseCommand([], userArgs);\n\n    return this;\n  }\n\n  /**\n   * Parse `argv`, setting options and invoking commands when defined.\n   *\n   * Call with no parameters to parse `process.argv`. Detects Electron and special node options like `node --eval`. Easy mode!\n   *\n   * Or call with an array of strings to parse, and optionally where the user arguments start by specifying where the arguments are `from`:\n   * - `'node'`: default, `argv[0]` is the application and `argv[1]` is the script being run, with user arguments after that\n   * - `'electron'`: `argv[0]` is the application and `argv[1]` varies depending on whether the electron application is packaged\n   * - `'user'`: just user arguments\n   *\n   * @example\n   * await program.parseAsync(); // parse process.argv and auto-detect electron and special node flags\n   * await program.parseAsync(process.argv); // assume argv[0] is app and argv[1] is script\n   * await program.parseAsync(my-args, { from: 'user' }); // just user supplied arguments, nothing special about argv[0]\n   *\n   * @param {string[]} [argv]\n   * @param {object} [parseOptions]\n   * @param {string} parseOptions.from - where the args are from: 'node', 'user', 'electron'\n   * @return {Promise}\n   */\n\n  async parseAsync(argv, parseOptions) {\n    this._prepareForParse();\n    const userArgs = this._prepareUserArgs(argv, parseOptions);\n    await this._parseCommand([], userArgs);\n\n    return this;\n  }\n\n  _prepareForParse() {\n    if (this._savedState === null) {\n      this.saveStateBeforeParse();\n    } else {\n      this.restoreStateBeforeParse();\n    }\n  }\n\n  /**\n   * Called the first time parse is called to save state and allow a restore before subsequent calls to parse.\n   * Not usually called directly, but available for subclasses to save their custom state.\n   *\n   * This is called in a lazy way. Only commands used in parsing chain will have state saved.\n   */\n  saveStateBeforeParse() {\n    this._savedState = {\n      // name is stable if supplied by author, but may be unspecified for root command and deduced during parsing\n      _name: this._name,\n      // option values before parse have default values (including false for negated options)\n      // shallow clones\n      _optionValues: { ...this._optionValues },\n      _optionValueSources: { ...this._optionValueSources },\n    };\n  }\n\n  /**\n   * Restore state before parse for calls after the first.\n   * Not usually called directly, but available for subclasses to save their custom state.\n   *\n   * This is called in a lazy way. Only commands used in parsing chain will have state restored.\n   */\n  restoreStateBeforeParse() {\n    if (this._storeOptionsAsProperties)\n      throw new Error(`Can not call parse again when storeOptionsAsProperties is true.\n- either make a new Command for each call to parse, or stop storing options as properties`);\n\n    // clear state from _prepareUserArgs\n    this._name = this._savedState._name;\n    this._scriptPath = null;\n    this.rawArgs = [];\n    // clear state from setOptionValueWithSource\n    this._optionValues = { ...this._savedState._optionValues };\n    this._optionValueSources = { ...this._savedState._optionValueSources };\n    // clear state from _parseCommand\n    this.args = [];\n    // clear state from _processArguments\n    this.processedArgs = [];\n  }\n\n  /**\n   * Throw if expected executable is missing. Add lots of help for author.\n   *\n   * @param {string} executableFile\n   * @param {string} executableDir\n   * @param {string} subcommandName\n   */\n  _checkForMissingExecutable(executableFile, executableDir, subcommandName) {\n    if (fs.existsSync(executableFile)) return;\n\n    const executableDirMessage = executableDir\n      ? `searched for local subcommand relative to directory '${executableDir}'`\n      : 'no directory for search for local subcommand, use .executableDir() to supply a custom directory';\n    const executableMissing = `'${executableFile}' does not exist\n - if '${subcommandName}' is not meant to be an executable command, remove description parameter from '.command()' and use '.description()' instead\n - if the default executable name is not suitable, use the executableFile option to supply a custom name or path\n - ${executableDirMessage}`;\n    throw new Error(executableMissing);\n  }\n\n  /**\n   * Execute a sub-command executable.\n   *\n   * @private\n   */\n\n  _executeSubCommand(subcommand, args) {\n    args = args.slice();\n    let launchWithNode = false; // Use node for source targets so do not need to get permissions correct, and on Windows.\n    const sourceExt = ['.js', '.ts', '.tsx', '.mjs', '.cjs'];\n\n    function findFile(baseDir, baseName) {\n      // Look for specified file\n      const localBin = path.resolve(baseDir, baseName);\n      if (fs.existsSync(localBin)) return localBin;\n\n      // Stop looking if candidate already has an expected extension.\n      if (sourceExt.includes(path.extname(baseName))) return undefined;\n\n      // Try all the extensions.\n      const foundExt = sourceExt.find((ext) =>\n        fs.existsSync(`${localBin}${ext}`),\n      );\n      if (foundExt) return `${localBin}${foundExt}`;\n\n      return undefined;\n    }\n\n    // Not checking for help first. Unlikely to have mandatory and executable, and can't robustly test for help flags in external command.\n    this._checkForMissingMandatoryOptions();\n    this._checkForConflictingOptions();\n\n    // executableFile and executableDir might be full path, or just a name\n    let executableFile =\n      subcommand._executableFile || `${this._name}-${subcommand._name}`;\n    let executableDir = this._executableDir || '';\n    if (this._scriptPath) {\n      let resolvedScriptPath; // resolve possible symlink for installed npm binary\n      try {\n        resolvedScriptPath = fs.realpathSync(this._scriptPath);\n      } catch {\n        resolvedScriptPath = this._scriptPath;\n      }\n      executableDir = path.resolve(\n        path.dirname(resolvedScriptPath),\n        executableDir,\n      );\n    }\n\n    // Look for a local file in preference to a command in PATH.\n    if (executableDir) {\n      let localFile = findFile(executableDir, executableFile);\n\n      // Legacy search using prefix of script name instead of command name\n      if (!localFile && !subcommand._executableFile && this._scriptPath) {\n        const legacyName = path.basename(\n          this._scriptPath,\n          path.extname(this._scriptPath),\n        );\n        if (legacyName !== this._name) {\n          localFile = findFile(\n            executableDir,\n            `${legacyName}-${subcommand._name}`,\n          );\n        }\n      }\n      executableFile = localFile || executableFile;\n    }\n\n    launchWithNode = sourceExt.includes(path.extname(executableFile));\n\n    let proc;\n    if (process.platform !== 'win32') {\n      if (launchWithNode) {\n        args.unshift(executableFile);\n        // add executable arguments to spawn\n        args = incrementNodeInspectorPort(process.execArgv).concat(args);\n\n        proc = childProcess.spawn(process.argv[0], args, { stdio: 'inherit' });\n      } else {\n        proc = childProcess.spawn(executableFile, args, { stdio: 'inherit' });\n      }\n    } else {\n      this._checkForMissingExecutable(\n        executableFile,\n        executableDir,\n        subcommand._name,\n      );\n      args.unshift(executableFile);\n      // add executable arguments to spawn\n      args = incrementNodeInspectorPort(process.execArgv).concat(args);\n      proc = childProcess.spawn(process.execPath, args, { stdio: 'inherit' });\n    }\n\n    if (!proc.killed) {\n      // testing mainly to avoid leak warnings during unit tests with mocked spawn\n      const signals = ['SIGUSR1', 'SIGUSR2', 'SIGTERM', 'SIGINT', 'SIGHUP'];\n      signals.forEach((signal) => {\n        process.on(signal, () => {\n          if (proc.killed === false && proc.exitCode === null) {\n            // @ts-ignore because signals not typed to known strings\n            proc.kill(signal);\n          }\n        });\n      });\n    }\n\n    // By default terminate process when spawned process terminates.\n    const exitCallback = this._exitCallback;\n    proc.on('close', (code) => {\n      code = code ?? 1; // code is null if spawned process terminated due to a signal\n      if (!exitCallback) {\n        process.exit(code);\n      } else {\n        exitCallback(\n          new CommanderError(\n            code,\n            'commander.executeSubCommandAsync',\n            '(close)',\n          ),\n        );\n      }\n    });\n    proc.on('error', (err) => {\n      // @ts-ignore: because err.code is an unknown property\n      if (err.code === 'ENOENT') {\n        this._checkForMissingExecutable(\n          executableFile,\n          executableDir,\n          subcommand._name,\n        );\n        // @ts-ignore: because err.code is an unknown property\n      } else if (err.code === 'EACCES') {\n        throw new Error(`'${executableFile}' not executable`);\n      }\n      if (!exitCallback) {\n        process.exit(1);\n      } else {\n        const wrappedError = new CommanderError(\n          1,\n          'commander.executeSubCommandAsync',\n          '(error)',\n        );\n        wrappedError.nestedError = err;\n        exitCallback(wrappedError);\n      }\n    });\n\n    // Store the reference to the child process\n    this.runningCommand = proc;\n  }\n\n  /**\n   * @private\n   */\n\n  _dispatchSubcommand(commandName, operands, unknown) {\n    const subCommand = this._findCommand(commandName);\n    if (!subCommand) this.help({ error: true });\n\n    subCommand._prepareForParse();\n    let promiseChain;\n    promiseChain = this._chainOrCallSubCommandHook(\n      promiseChain,\n      subCommand,\n      'preSubcommand',\n    );\n    promiseChain = this._chainOrCall(promiseChain, () => {\n      if (subCommand._executableHandler) {\n        this._executeSubCommand(subCommand, operands.concat(unknown));\n      } else {\n        return subCommand._parseCommand(operands, unknown);\n      }\n    });\n    return promiseChain;\n  }\n\n  /**\n   * Invoke help directly if possible, or dispatch if necessary.\n   * e.g. help foo\n   *\n   * @private\n   */\n\n  _dispatchHelpCommand(subcommandName) {\n    if (!subcommandName) {\n      this.help();\n    }\n    const subCommand = this._findCommand(subcommandName);\n    if (subCommand && !subCommand._executableHandler) {\n      subCommand.help();\n    }\n\n    // Fallback to parsing the help flag to invoke the help.\n    return this._dispatchSubcommand(\n      subcommandName,\n      [],\n      [this._getHelpOption()?.long ?? this._getHelpOption()?.short ?? '--help'],\n    );\n  }\n\n  /**\n   * Check this.args against expected this.registeredArguments.\n   *\n   * @private\n   */\n\n  _checkNumberOfArguments() {\n    // too few\n    this.registeredArguments.forEach((arg, i) => {\n      if (arg.required && this.args[i] == null) {\n        this.missingArgument(arg.name());\n      }\n    });\n    // too many\n    if (\n      this.registeredArguments.length > 0 &&\n      this.registeredArguments[this.registeredArguments.length - 1].variadic\n    ) {\n      return;\n    }\n    if (this.args.length > this.registeredArguments.length) {\n      this._excessArguments(this.args);\n    }\n  }\n\n  /**\n   * Process this.args using this.registeredArguments and save as this.processedArgs!\n   *\n   * @private\n   */\n\n  _processArguments() {\n    const myParseArg = (argument, value, previous) => {\n      // Extra processing for nice error message on parsing failure.\n      let parsedValue = value;\n      if (value !== null && argument.parseArg) {\n        const invalidValueMessage = `error: command-argument value '${value}' is invalid for argument '${argument.name()}'.`;\n        parsedValue = this._callParseArg(\n          argument,\n          value,\n          previous,\n          invalidValueMessage,\n        );\n      }\n      return parsedValue;\n    };\n\n    this._checkNumberOfArguments();\n\n    const processedArgs = [];\n    this.registeredArguments.forEach((declaredArg, index) => {\n      let value = declaredArg.defaultValue;\n      if (declaredArg.variadic) {\n        // Collect together remaining arguments for passing together as an array.\n        if (index < this.args.length) {\n          value = this.args.slice(index);\n          if (declaredArg.parseArg) {\n            value = value.reduce((processed, v) => {\n              return myParseArg(declaredArg, v, processed);\n            }, declaredArg.defaultValue);\n          }\n        } else if (value === undefined) {\n          value = [];\n        }\n      } else if (index < this.args.length) {\n        value = this.args[index];\n        if (declaredArg.parseArg) {\n          value = myParseArg(declaredArg, value, declaredArg.defaultValue);\n        }\n      }\n      processedArgs[index] = value;\n    });\n    this.processedArgs = processedArgs;\n  }\n\n  /**\n   * Once we have a promise we chain, but call synchronously until then.\n   *\n   * @param {(Promise|undefined)} promise\n   * @param {Function} fn\n   * @return {(Promise|undefined)}\n   * @private\n   */\n\n  _chainOrCall(promise, fn) {\n    // thenable\n    if (promise?.then && typeof promise.then === 'function') {\n      // already have a promise, chain callback\n      return promise.then(() => fn());\n    }\n    // callback might return a promise\n    return fn();\n  }\n\n  /**\n   *\n   * @param {(Promise|undefined)} promise\n   * @param {string} event\n   * @return {(Promise|undefined)}\n   * @private\n   */\n\n  _chainOrCallHooks(promise, event) {\n    let result = promise;\n    const hooks = [];\n    this._getCommandAndAncestors()\n      .reverse()\n      .filter((cmd) => cmd._lifeCycleHooks[event] !== undefined)\n      .forEach((hookedCommand) => {\n        hookedCommand._lifeCycleHooks[event].forEach((callback) => {\n          hooks.push({ hookedCommand, callback });\n        });\n      });\n    if (event === 'postAction') {\n      hooks.reverse();\n    }\n\n    hooks.forEach((hookDetail) => {\n      result = this._chainOrCall(result, () => {\n        return hookDetail.callback(hookDetail.hookedCommand, this);\n      });\n    });\n    return result;\n  }\n\n  /**\n   *\n   * @param {(Promise|undefined)} promise\n   * @param {Command} subCommand\n   * @param {string} event\n   * @return {(Promise|undefined)}\n   * @private\n   */\n\n  _chainOrCallSubCommandHook(promise, subCommand, event) {\n    let result = promise;\n    if (this._lifeCycleHooks[event] !== undefined) {\n      this._lifeCycleHooks[event].forEach((hook) => {\n        result = this._chainOrCall(result, () => {\n          return hook(this, subCommand);\n        });\n      });\n    }\n    return result;\n  }\n\n  /**\n   * Process arguments in context of this command.\n   * Returns action result, in case it is a promise.\n   *\n   * @private\n   */\n\n  _parseCommand(operands, unknown) {\n    const parsed = this.parseOptions(unknown);\n    this._parseOptionsEnv(); // after cli, so parseArg not called on both cli and env\n    this._parseOptionsImplied();\n    operands = operands.concat(parsed.operands);\n    unknown = parsed.unknown;\n    this.args = operands.concat(unknown);\n\n    if (operands && this._findCommand(operands[0])) {\n      return this._dispatchSubcommand(operands[0], operands.slice(1), unknown);\n    }\n    if (\n      this._getHelpCommand() &&\n      operands[0] === this._getHelpCommand().name()\n    ) {\n      return this._dispatchHelpCommand(operands[1]);\n    }\n    if (this._defaultCommandName) {\n      this._outputHelpIfRequested(unknown); // Run the help for default command from parent rather than passing to default command\n      return this._dispatchSubcommand(\n        this._defaultCommandName,\n        operands,\n        unknown,\n      );\n    }\n    if (\n      this.commands.length &&\n      this.args.length === 0 &&\n      !this._actionHandler &&\n      !this._defaultCommandName\n    ) {\n      // probably missing subcommand and no handler, user needs help (and exit)\n      this.help({ error: true });\n    }\n\n    this._outputHelpIfRequested(parsed.unknown);\n    this._checkForMissingMandatoryOptions();\n    this._checkForConflictingOptions();\n\n    // We do not always call this check to avoid masking a \"better\" error, like unknown command.\n    const checkForUnknownOptions = () => {\n      if (parsed.unknown.length > 0) {\n        this.unknownOption(parsed.unknown[0]);\n      }\n    };\n\n    const commandEvent = `command:${this.name()}`;\n    if (this._actionHandler) {\n      checkForUnknownOptions();\n      this._processArguments();\n\n      let promiseChain;\n      promiseChain = this._chainOrCallHooks(promiseChain, 'preAction');\n      promiseChain = this._chainOrCall(promiseChain, () =>\n        this._actionHandler(this.processedArgs),\n      );\n      if (this.parent) {\n        promiseChain = this._chainOrCall(promiseChain, () => {\n          this.parent.emit(commandEvent, operands, unknown); // legacy\n        });\n      }\n      promiseChain = this._chainOrCallHooks(promiseChain, 'postAction');\n      return promiseChain;\n    }\n    if (this.parent?.listenerCount(commandEvent)) {\n      checkForUnknownOptions();\n      this._processArguments();\n      this.parent.emit(commandEvent, operands, unknown); // legacy\n    } else if (operands.length) {\n      if (this._findCommand('*')) {\n        // legacy default command\n        return this._dispatchSubcommand('*', operands, unknown);\n      }\n      if (this.listenerCount('command:*')) {\n        // skip option check, emit event for possible misspelling suggestion\n        this.emit('command:*', operands, unknown);\n      } else if (this.commands.length) {\n        this.unknownCommand();\n      } else {\n        checkForUnknownOptions();\n        this._processArguments();\n      }\n    } else if (this.commands.length) {\n      checkForUnknownOptions();\n      // This command has subcommands and nothing hooked up at this level, so display help (and exit).\n      this.help({ error: true });\n    } else {\n      checkForUnknownOptions();\n      this._processArguments();\n      // fall through for caller to handle after calling .parse()\n    }\n  }\n\n  /**\n   * Find matching command.\n   *\n   * @private\n   * @return {Command | undefined}\n   */\n  _findCommand(name) {\n    if (!name) return undefined;\n    return this.commands.find(\n      (cmd) => cmd._name === name || cmd._aliases.includes(name),\n    );\n  }\n\n  /**\n   * Return an option matching `arg` if any.\n   *\n   * @param {string} arg\n   * @return {Option}\n   * @package\n   */\n\n  _findOption(arg) {\n    return this.options.find((option) => option.is(arg));\n  }\n\n  /**\n   * Display an error message if a mandatory option does not have a value.\n   * Called after checking for help flags in leaf subcommand.\n   *\n   * @private\n   */\n\n  _checkForMissingMandatoryOptions() {\n    // Walk up hierarchy so can call in subcommand after checking for displaying help.\n    this._getCommandAndAncestors().forEach((cmd) => {\n      cmd.options.forEach((anOption) => {\n        if (\n          anOption.mandatory &&\n          cmd.getOptionValue(anOption.attributeName()) === undefined\n        ) {\n          cmd.missingMandatoryOptionValue(anOption);\n        }\n      });\n    });\n  }\n\n  /**\n   * Display an error message if conflicting options are used together in this.\n   *\n   * @private\n   */\n  _checkForConflictingLocalOptions() {\n    const definedNonDefaultOptions = this.options.filter((option) => {\n      const optionKey = option.attributeName();\n      if (this.getOptionValue(optionKey) === undefined) {\n        return false;\n      }\n      return this.getOptionValueSource(optionKey) !== 'default';\n    });\n\n    const optionsWithConflicting = definedNonDefaultOptions.filter(\n      (option) => option.conflictsWith.length > 0,\n    );\n\n    optionsWithConflicting.forEach((option) => {\n      const conflictingAndDefined = definedNonDefaultOptions.find((defined) =>\n        option.conflictsWith.includes(defined.attributeName()),\n      );\n      if (conflictingAndDefined) {\n        this._conflictingOption(option, conflictingAndDefined);\n      }\n    });\n  }\n\n  /**\n   * Display an error message if conflicting options are used together.\n   * Called after checking for help flags in leaf subcommand.\n   *\n   * @private\n   */\n  _checkForConflictingOptions() {\n    // Walk up hierarchy so can call in subcommand after checking for displaying help.\n    this._getCommandAndAncestors().forEach((cmd) => {\n      cmd._checkForConflictingLocalOptions();\n    });\n  }\n\n  /**\n   * Parse options from `argv` removing known options,\n   * and return argv split into operands and unknown arguments.\n   *\n   * Side effects: modifies command by storing options. Does not reset state if called again.\n   *\n   * Examples:\n   *\n   *     argv => operands, unknown\n   *     --known kkk op => [op], []\n   *     op --known kkk => [op], []\n   *     sub --unknown uuu op => [sub], [--unknown uuu op]\n   *     sub -- --unknown uuu op => [sub --unknown uuu op], []\n   *\n   * @param {string[]} args\n   * @return {{operands: string[], unknown: string[]}}\n   */\n\n  parseOptions(args) {\n    const operands = []; // operands, not options or values\n    const unknown = []; // first unknown option and remaining unknown args\n    let dest = operands;\n\n    function maybeOption(arg) {\n      return arg.length > 1 && arg[0] === '-';\n    }\n\n    const negativeNumberArg = (arg) => {\n      // return false if not a negative number\n      if (!/^-(\\d+|\\d*\\.\\d+)(e[+-]?\\d+)?$/.test(arg)) return false;\n      // negative number is ok unless digit used as an option in command hierarchy\n      return !this._getCommandAndAncestors().some((cmd) =>\n        cmd.options\n          .map((opt) => opt.short)\n          .some((short) => /^-\\d$/.test(short)),\n      );\n    };\n\n    // parse options\n    let activeVariadicOption = null;\n    let activeGroup = null; // working through group of short options, like -abc\n    let i = 0;\n    while (i < args.length || activeGroup) {\n      const arg = activeGroup ?? args[i++];\n      activeGroup = null;\n\n      // literal\n      if (arg === '--') {\n        if (dest === unknown) dest.push(arg);\n        dest.push(...args.slice(i));\n        break;\n      }\n\n      if (\n        activeVariadicOption &&\n        (!maybeOption(arg) || negativeNumberArg(arg))\n      ) {\n        this.emit(`option:${activeVariadicOption.name()}`, arg);\n        continue;\n      }\n      activeVariadicOption = null;\n\n      if (maybeOption(arg)) {\n        const option = this._findOption(arg);\n        // recognised option, call listener to assign value with possible custom processing\n        if (option) {\n          if (option.required) {\n            const value = args[i++];\n            if (value === undefined) this.optionMissingArgument(option);\n            this.emit(`option:${option.name()}`, value);\n          } else if (option.optional) {\n            let value = null;\n            // historical behaviour is optional value is following arg unless an option\n            if (\n              i < args.length &&\n              (!maybeOption(args[i]) || negativeNumberArg(args[i]))\n            ) {\n              value = args[i++];\n            }\n            this.emit(`option:${option.name()}`, value);\n          } else {\n            // boolean flag\n            this.emit(`option:${option.name()}`);\n          }\n          activeVariadicOption = option.variadic ? option : null;\n          continue;\n        }\n      }\n\n      // Look for combo options following single dash, eat first one if known.\n      if (arg.length > 2 && arg[0] === '-' && arg[1] !== '-') {\n        const option = this._findOption(`-${arg[1]}`);\n        if (option) {\n          if (\n            option.required ||\n            (option.optional && this._combineFlagAndOptionalValue)\n          ) {\n            // option with value following in same argument\n            this.emit(`option:${option.name()}`, arg.slice(2));\n          } else {\n            // boolean option\n            this.emit(`option:${option.name()}`);\n            // remove the processed option and keep processing group\n            activeGroup = `-${arg.slice(2)}`;\n          }\n          continue;\n        }\n      }\n\n      // Look for known long flag with value, like --foo=bar\n      if (/^--[^=]+=/.test(arg)) {\n        const index = arg.indexOf('=');\n        const option = this._findOption(arg.slice(0, index));\n        if (option && (option.required || option.optional)) {\n          this.emit(`option:${option.name()}`, arg.slice(index + 1));\n          continue;\n        }\n      }\n\n      // Not a recognised option by this command.\n      // Might be a command-argument, or subcommand option, or unknown option, or help command or option.\n\n      // An unknown option means further arguments also classified as unknown so can be reprocessed by subcommands.\n      // A negative number in a leaf command is not an unknown option.\n      if (\n        dest === operands &&\n        maybeOption(arg) &&\n        !(this.commands.length === 0 && negativeNumberArg(arg))\n      ) {\n        dest = unknown;\n      }\n\n      // If using positionalOptions, stop processing our options at subcommand.\n      if (\n        (this._enablePositionalOptions || this._passThroughOptions) &&\n        operands.length === 0 &&\n        unknown.length === 0\n      ) {\n        if (this._findCommand(arg)) {\n          operands.push(arg);\n          unknown.push(...args.slice(i));\n          break;\n        } else if (\n          this._getHelpCommand() &&\n          arg === this._getHelpCommand().name()\n        ) {\n          operands.push(arg, ...args.slice(i));\n          break;\n        } else if (this._defaultCommandName) {\n          unknown.push(arg, ...args.slice(i));\n          break;\n        }\n      }\n\n      // If using passThroughOptions, stop processing options at first command-argument.\n      if (this._passThroughOptions) {\n        dest.push(arg, ...args.slice(i));\n        break;\n      }\n\n      // add arg\n      dest.push(arg);\n    }\n\n    return { operands, unknown };\n  }\n\n  /**\n   * Return an object containing local option values as key-value pairs.\n   *\n   * @return {object}\n   */\n  opts() {\n    if (this._storeOptionsAsProperties) {\n      // Preserve original behaviour so backwards compatible when still using properties\n      const result = {};\n      const len = this.options.length;\n\n      for (let i = 0; i < len; i++) {\n        const key = this.options[i].attributeName();\n        result[key] =\n          key === this._versionOptionName ? this._version : this[key];\n      }\n      return result;\n    }\n\n    return this._optionValues;\n  }\n\n  /**\n   * Return an object containing merged local and global option values as key-value pairs.\n   *\n   * @return {object}\n   */\n  optsWithGlobals() {\n    // globals overwrite locals\n    return this._getCommandAndAncestors().reduce(\n      (combinedOptions, cmd) => Object.assign(combinedOptions, cmd.opts()),\n      {},\n    );\n  }\n\n  /**\n   * Display error message and exit (or call exitOverride).\n   *\n   * @param {string} message\n   * @param {object} [errorOptions]\n   * @param {string} [errorOptions.code] - an id string representing the error\n   * @param {number} [errorOptions.exitCode] - used with process.exit\n   */\n  error(message, errorOptions) {\n    // output handling\n    this._outputConfiguration.outputError(\n      `${message}\\n`,\n      this._outputConfiguration.writeErr,\n    );\n    if (typeof this._showHelpAfterError === 'string') {\n      this._outputConfiguration.writeErr(`${this._showHelpAfterError}\\n`);\n    } else if (this._showHelpAfterError) {\n      this._outputConfiguration.writeErr('\\n');\n      this.outputHelp({ error: true });\n    }\n\n    // exit handling\n    const config = errorOptions || {};\n    const exitCode = config.exitCode || 1;\n    const code = config.code || 'commander.error';\n    this._exit(exitCode, code, message);\n  }\n\n  /**\n   * Apply any option related environment variables, if option does\n   * not have a value from cli or client code.\n   *\n   * @private\n   */\n  _parseOptionsEnv() {\n    this.options.forEach((option) => {\n      if (option.envVar && option.envVar in process.env) {\n        const optionKey = option.attributeName();\n        // Priority check. Do not overwrite cli or options from unknown source (client-code).\n        if (\n          this.getOptionValue(optionKey) === undefined ||\n          ['default', 'config', 'env'].includes(\n            this.getOptionValueSource(optionKey),\n          )\n        ) {\n          if (option.required || option.optional) {\n            // option can take a value\n            // keep very simple, optional always takes value\n            this.emit(`optionEnv:${option.name()}`, process.env[option.envVar]);\n          } else {\n            // boolean\n            // keep very simple, only care that envVar defined and not the value\n            this.emit(`optionEnv:${option.name()}`);\n          }\n        }\n      }\n    });\n  }\n\n  /**\n   * Apply any implied option values, if option is undefined or default value.\n   *\n   * @private\n   */\n  _parseOptionsImplied() {\n    const dualHelper = new DualOptions(this.options);\n    const hasCustomOptionValue = (optionKey) => {\n      return (\n        this.getOptionValue(optionKey) !== undefined &&\n        !['default', 'implied'].includes(this.getOptionValueSource(optionKey))\n      );\n    };\n    this.options\n      .filter(\n        (option) =>\n          option.implied !== undefined &&\n          hasCustomOptionValue(option.attributeName()) &&\n          dualHelper.valueFromOption(\n            this.getOptionValue(option.attributeName()),\n            option,\n          ),\n      )\n      .forEach((option) => {\n        Object.keys(option.implied)\n          .filter((impliedKey) => !hasCustomOptionValue(impliedKey))\n          .forEach((impliedKey) => {\n            this.setOptionValueWithSource(\n              impliedKey,\n              option.implied[impliedKey],\n              'implied',\n            );\n          });\n      });\n  }\n\n  /**\n   * Argument `name` is missing.\n   *\n   * @param {string} name\n   * @private\n   */\n\n  missingArgument(name) {\n    const message = `error: missing required argument '${name}'`;\n    this.error(message, { code: 'commander.missingArgument' });\n  }\n\n  /**\n   * `Option` is missing an argument.\n   *\n   * @param {Option} option\n   * @private\n   */\n\n  optionMissingArgument(option) {\n    const message = `error: option '${option.flags}' argument missing`;\n    this.error(message, { code: 'commander.optionMissingArgument' });\n  }\n\n  /**\n   * `Option` does not have a value, and is a mandatory option.\n   *\n   * @param {Option} option\n   * @private\n   */\n\n  missingMandatoryOptionValue(option) {\n    const message = `error: required option '${option.flags}' not specified`;\n    this.error(message, { code: 'commander.missingMandatoryOptionValue' });\n  }\n\n  /**\n   * `Option` conflicts with another option.\n   *\n   * @param {Option} option\n   * @param {Option} conflictingOption\n   * @private\n   */\n  _conflictingOption(option, conflictingOption) {\n    // The calling code does not know whether a negated option is the source of the\n    // value, so do some work to take an educated guess.\n    const findBestOptionFromValue = (option) => {\n      const optionKey = option.attributeName();\n      const optionValue = this.getOptionValue(optionKey);\n      const negativeOption = this.options.find(\n        (target) => target.negate && optionKey === target.attributeName(),\n      );\n      const positiveOption = this.options.find(\n        (target) => !target.negate && optionKey === target.attributeName(),\n      );\n      if (\n        negativeOption &&\n        ((negativeOption.presetArg === undefined && optionValue === false) ||\n          (negativeOption.presetArg !== undefined &&\n            optionValue === negativeOption.presetArg))\n      ) {\n        return negativeOption;\n      }\n      return positiveOption || option;\n    };\n\n    const getErrorMessage = (option) => {\n      const bestOption = findBestOptionFromValue(option);\n      const optionKey = bestOption.attributeName();\n      const source = this.getOptionValueSource(optionKey);\n      if (source === 'env') {\n        return `environment variable '${bestOption.envVar}'`;\n      }\n      return `option '${bestOption.flags}'`;\n    };\n\n    const message = `error: ${getErrorMessage(option)} cannot be used with ${getErrorMessage(conflictingOption)}`;\n    this.error(message, { code: 'commander.conflictingOption' });\n  }\n\n  /**\n   * Unknown option `flag`.\n   *\n   * @param {string} flag\n   * @private\n   */\n\n  unknownOption(flag) {\n    if (this._allowUnknownOption) return;\n    let suggestion = '';\n\n    if (flag.startsWith('--') && this._showSuggestionAfterError) {\n      // Looping to pick up the global options too\n      let candidateFlags = [];\n      // eslint-disable-next-line @typescript-eslint/no-this-alias\n      let command = this;\n      do {\n        const moreFlags = command\n          .createHelp()\n          .visibleOptions(command)\n          .filter((option) => option.long)\n          .map((option) => option.long);\n        candidateFlags = candidateFlags.concat(moreFlags);\n        command = command.parent;\n      } while (command && !command._enablePositionalOptions);\n      suggestion = suggestSimilar(flag, candidateFlags);\n    }\n\n    const message = `error: unknown option '${flag}'${suggestion}`;\n    this.error(message, { code: 'commander.unknownOption' });\n  }\n\n  /**\n   * Excess arguments, more than expected.\n   *\n   * @param {string[]} receivedArgs\n   * @private\n   */\n\n  _excessArguments(receivedArgs) {\n    if (this._allowExcessArguments) return;\n\n    const expected = this.registeredArguments.length;\n    const s = expected === 1 ? '' : 's';\n    const forSubcommand = this.parent ? ` for '${this.name()}'` : '';\n    const message = `error: too many arguments${forSubcommand}. Expected ${expected} argument${s} but got ${receivedArgs.length}.`;\n    this.error(message, { code: 'commander.excessArguments' });\n  }\n\n  /**\n   * Unknown command.\n   *\n   * @private\n   */\n\n  unknownCommand() {\n    const unknownName = this.args[0];\n    let suggestion = '';\n\n    if (this._showSuggestionAfterError) {\n      const candidateNames = [];\n      this.createHelp()\n        .visibleCommands(this)\n        .forEach((command) => {\n          candidateNames.push(command.name());\n          // just visible alias\n          if (command.alias()) candidateNames.push(command.alias());\n        });\n      suggestion = suggestSimilar(unknownName, candidateNames);\n    }\n\n    const message = `error: unknown command '${unknownName}'${suggestion}`;\n    this.error(message, { code: 'commander.unknownCommand' });\n  }\n\n  /**\n   * Get or set the program version.\n   *\n   * This method auto-registers the \"-V, --version\" option which will print the version number.\n   *\n   * You can optionally supply the flags and description to override the defaults.\n   *\n   * @param {string} [str]\n   * @param {string} [flags]\n   * @param {string} [description]\n   * @return {(this | string | undefined)} `this` command for chaining, or version string if no arguments\n   */\n\n  version(str, flags, description) {\n    if (str === undefined) return this._version;\n    this._version = str;\n    flags = flags || '-V, --version';\n    description = description || 'output the version number';\n    const versionOption = this.createOption(flags, description);\n    this._versionOptionName = versionOption.attributeName();\n    this._registerOption(versionOption);\n\n    this.on('option:' + versionOption.name(), () => {\n      this._outputConfiguration.writeOut(`${str}\\n`);\n      this._exit(0, 'commander.version', str);\n    });\n    return this;\n  }\n\n  /**\n   * Set the description.\n   *\n   * @param {string} [str]\n   * @param {object} [argsDescription]\n   * @return {(string|Command)}\n   */\n  description(str, argsDescription) {\n    if (str === undefined && argsDescription === undefined)\n      return this._description;\n    this._description = str;\n    if (argsDescription) {\n      this._argsDescription = argsDescription;\n    }\n    return this;\n  }\n\n  /**\n   * Set the summary. Used when listed as subcommand of parent.\n   *\n   * @param {string} [str]\n   * @return {(string|Command)}\n   */\n  summary(str) {\n    if (str === undefined) return this._summary;\n    this._summary = str;\n    return this;\n  }\n\n  /**\n   * Set an alias for the command.\n   *\n   * You may call more than once to add multiple aliases. Only the first alias is shown in the auto-generated help.\n   *\n   * @param {string} [alias]\n   * @return {(string|Command)}\n   */\n\n  alias(alias) {\n    if (alias === undefined) return this._aliases[0]; // just return first, for backwards compatibility\n\n    /** @type {Command} */\n    // eslint-disable-next-line @typescript-eslint/no-this-alias\n    let command = this;\n    if (\n      this.commands.length !== 0 &&\n      this.commands[this.commands.length - 1]._executableHandler\n    ) {\n      // assume adding alias for last added executable subcommand, rather than this\n      command = this.commands[this.commands.length - 1];\n    }\n\n    if (alias === command._name)\n      throw new Error(\"Command alias can't be the same as its name\");\n    const matchingCommand = this.parent?._findCommand(alias);\n    if (matchingCommand) {\n      // c.f. _registerCommand\n      const existingCmd = [matchingCommand.name()]\n        .concat(matchingCommand.aliases())\n        .join('|');\n      throw new Error(\n        `cannot add alias '${alias}' to command '${this.name()}' as already have command '${existingCmd}'`,\n      );\n    }\n\n    command._aliases.push(alias);\n    return this;\n  }\n\n  /**\n   * Set aliases for the command.\n   *\n   * Only the first alias is shown in the auto-generated help.\n   *\n   * @param {string[]} [aliases]\n   * @return {(string[]|Command)}\n   */\n\n  aliases(aliases) {\n    // Getter for the array of aliases is the main reason for having aliases() in addition to alias().\n    if (aliases === undefined) return this._aliases;\n\n    aliases.forEach((alias) => this.alias(alias));\n    return this;\n  }\n\n  /**\n   * Set / get the command usage `str`.\n   *\n   * @param {string} [str]\n   * @return {(string|Command)}\n   */\n\n  usage(str) {\n    if (str === undefined) {\n      if (this._usage) return this._usage;\n\n      const args = this.registeredArguments.map((arg) => {\n        return humanReadableArgName(arg);\n      });\n      return []\n        .concat(\n          this.options.length || this._helpOption !== null ? '[options]' : [],\n          this.commands.length ? '[command]' : [],\n          this.registeredArguments.length ? args : [],\n        )\n        .join(' ');\n    }\n\n    this._usage = str;\n    return this;\n  }\n\n  /**\n   * Get or set the name of the command.\n   *\n   * @param {string} [str]\n   * @return {(string|Command)}\n   */\n\n  name(str) {\n    if (str === undefined) return this._name;\n    this._name = str;\n    return this;\n  }\n\n  /**\n   * Set/get the help group heading for this subcommand in parent command's help.\n   *\n   * @param {string} [heading]\n   * @return {Command | string}\n   */\n\n  helpGroup(heading) {\n    if (heading === undefined) return this._helpGroupHeading ?? '';\n    this._helpGroupHeading = heading;\n    return this;\n  }\n\n  /**\n   * Set/get the default help group heading for subcommands added to this command.\n   * (This does not override a group set directly on the subcommand using .helpGroup().)\n   *\n   * @example\n   * program.commandsGroup('Development Commands:);\n   * program.command('watch')...\n   * program.command('lint')...\n   * ...\n   *\n   * @param {string} [heading]\n   * @returns {Command | string}\n   */\n  commandsGroup(heading) {\n    if (heading === undefined) return this._defaultCommandGroup ?? '';\n    this._defaultCommandGroup = heading;\n    return this;\n  }\n\n  /**\n   * Set/get the default help group heading for options added to this command.\n   * (This does not override a group set directly on the option using .helpGroup().)\n   *\n   * @example\n   * program\n   *   .optionsGroup('Development Options:')\n   *   .option('-d, --debug', 'output extra debugging')\n   *   .option('-p, --profile', 'output profiling information')\n   *\n   * @param {string} [heading]\n   * @returns {Command | string}\n   */\n  optionsGroup(heading) {\n    if (heading === undefined) return this._defaultOptionGroup ?? '';\n    this._defaultOptionGroup = heading;\n    return this;\n  }\n\n  /**\n   * @param {Option} option\n   * @private\n   */\n  _initOptionGroup(option) {\n    if (this._defaultOptionGroup && !option.helpGroupHeading)\n      option.helpGroup(this._defaultOptionGroup);\n  }\n\n  /**\n   * @param {Command} cmd\n   * @private\n   */\n  _initCommandGroup(cmd) {\n    if (this._defaultCommandGroup && !cmd.helpGroup())\n      cmd.helpGroup(this._defaultCommandGroup);\n  }\n\n  /**\n   * Set the name of the command from script filename, such as process.argv[1],\n   * or require.main.filename, or __filename.\n   *\n   * (Used internally and public although not documented in README.)\n   *\n   * @example\n   * program.nameFromFilename(require.main.filename);\n   *\n   * @param {string} filename\n   * @return {Command}\n   */\n\n  nameFromFilename(filename) {\n    this._name = path.basename(filename, path.extname(filename));\n\n    return this;\n  }\n\n  /**\n   * Get or set the directory for searching for executable subcommands of this command.\n   *\n   * @example\n   * program.executableDir(__dirname);\n   * // or\n   * program.executableDir('subcommands');\n   *\n   * @param {string} [path]\n   * @return {(string|null|Command)}\n   */\n\n  executableDir(path) {\n    if (path === undefined) return this._executableDir;\n    this._executableDir = path;\n    return this;\n  }\n\n  /**\n   * Return program help documentation.\n   *\n   * @param {{ error: boolean }} [contextOptions] - pass {error:true} to wrap for stderr instead of stdout\n   * @return {string}\n   */\n\n  helpInformation(contextOptions) {\n    const helper = this.createHelp();\n    const context = this._getOutputContext(contextOptions);\n    helper.prepareContext({\n      error: context.error,\n      helpWidth: context.helpWidth,\n      outputHasColors: context.hasColors,\n    });\n    const text = helper.formatHelp(this, helper);\n    if (context.hasColors) return text;\n    return this._outputConfiguration.stripColor(text);\n  }\n\n  /**\n   * @typedef HelpContext\n   * @type {object}\n   * @property {boolean} error\n   * @property {number} helpWidth\n   * @property {boolean} hasColors\n   * @property {function} write - includes stripColor if needed\n   *\n   * @returns {HelpContext}\n   * @private\n   */\n\n  _getOutputContext(contextOptions) {\n    contextOptions = contextOptions || {};\n    const error = !!contextOptions.error;\n    let baseWrite;\n    let hasColors;\n    let helpWidth;\n    if (error) {\n      baseWrite = (str) => this._outputConfiguration.writeErr(str);\n      hasColors = this._outputConfiguration.getErrHasColors();\n      helpWidth = this._outputConfiguration.getErrHelpWidth();\n    } else {\n      baseWrite = (str) => this._outputConfiguration.writeOut(str);\n      hasColors = this._outputConfiguration.getOutHasColors();\n      helpWidth = this._outputConfiguration.getOutHelpWidth();\n    }\n    const write = (str) => {\n      if (!hasColors) str = this._outputConfiguration.stripColor(str);\n      return baseWrite(str);\n    };\n    return { error, write, hasColors, helpWidth };\n  }\n\n  /**\n   * Output help information for this command.\n   *\n   * Outputs built-in help, and custom text added using `.addHelpText()`.\n   *\n   * @param {{ error: boolean } | Function} [contextOptions] - pass {error:true} to write to stderr instead of stdout\n   */\n\n  outputHelp(contextOptions) {\n    let deprecatedCallback;\n    if (typeof contextOptions === 'function') {\n      deprecatedCallback = contextOptions;\n      contextOptions = undefined;\n    }\n\n    const outputContext = this._getOutputContext(contextOptions);\n    /** @type {HelpTextEventContext} */\n    const eventContext = {\n      error: outputContext.error,\n      write: outputContext.write,\n      command: this,\n    };\n\n    this._getCommandAndAncestors()\n      .reverse()\n      .forEach((command) => command.emit('beforeAllHelp', eventContext));\n    this.emit('beforeHelp', eventContext);\n\n    let helpInformation = this.helpInformation({ error: outputContext.error });\n    if (deprecatedCallback) {\n      helpInformation = deprecatedCallback(helpInformation);\n      if (\n        typeof helpInformation !== 'string' &&\n        !Buffer.isBuffer(helpInformation)\n      ) {\n        throw new Error('outputHelp callback must return a string or a Buffer');\n      }\n    }\n    outputContext.write(helpInformation);\n\n    if (this._getHelpOption()?.long) {\n      this.emit(this._getHelpOption().long); // deprecated\n    }\n    this.emit('afterHelp', eventContext);\n    this._getCommandAndAncestors().forEach((command) =>\n      command.emit('afterAllHelp', eventContext),\n    );\n  }\n\n  /**\n   * You can pass in flags and a description to customise the built-in help option.\n   * Pass in false to disable the built-in help option.\n   *\n   * @example\n   * program.helpOption('-?, --help' 'show help'); // customise\n   * program.helpOption(false); // disable\n   *\n   * @param {(string | boolean)} flags\n   * @param {string} [description]\n   * @return {Command} `this` command for chaining\n   */\n\n  helpOption(flags, description) {\n    // Support enabling/disabling built-in help option.\n    if (typeof flags === 'boolean') {\n      if (flags) {\n        if (this._helpOption === null) this._helpOption = undefined; // reenable\n        if (this._defaultOptionGroup) {\n          // make the option to store the group\n          this._initOptionGroup(this._getHelpOption());\n        }\n      } else {\n        this._helpOption = null; // disable\n      }\n      return this;\n    }\n\n    // Customise flags and description.\n    this._helpOption = this.createOption(\n      flags ?? '-h, --help',\n      description ?? 'display help for command',\n    );\n    // init group unless lazy create\n    if (flags || description) this._initOptionGroup(this._helpOption);\n\n    return this;\n  }\n\n  /**\n   * Lazy create help option.\n   * Returns null if has been disabled with .helpOption(false).\n   *\n   * @returns {(Option | null)} the help option\n   * @package\n   */\n  _getHelpOption() {\n    // Lazy create help option on demand.\n    if (this._helpOption === undefined) {\n      this.helpOption(undefined, undefined);\n    }\n    return this._helpOption;\n  }\n\n  /**\n   * Supply your own option to use for the built-in help option.\n   * This is an alternative to using helpOption() to customise the flags and description etc.\n   *\n   * @param {Option} option\n   * @return {Command} `this` command for chaining\n   */\n  addHelpOption(option) {\n    this._helpOption = option;\n    this._initOptionGroup(option);\n    return this;\n  }\n\n  /**\n   * Output help information and exit.\n   *\n   * Outputs built-in help, and custom text added using `.addHelpText()`.\n   *\n   * @param {{ error: boolean }} [contextOptions] - pass {error:true} to write to stderr instead of stdout\n   */\n\n  help(contextOptions) {\n    this.outputHelp(contextOptions);\n    let exitCode = Number(process.exitCode ?? 0); // process.exitCode does allow a string or an integer, but we prefer just a number\n    if (\n      exitCode === 0 &&\n      contextOptions &&\n      typeof contextOptions !== 'function' &&\n      contextOptions.error\n    ) {\n      exitCode = 1;\n    }\n    // message: do not have all displayed text available so only passing placeholder.\n    this._exit(exitCode, 'commander.help', '(outputHelp)');\n  }\n\n  /**\n   * // Do a little typing to coordinate emit and listener for the help text events.\n   * @typedef HelpTextEventContext\n   * @type {object}\n   * @property {boolean} error\n   * @property {Command} command\n   * @property {function} write\n   */\n\n  /**\n   * Add additional text to be displayed with the built-in help.\n   *\n   * Position is 'before' or 'after' to affect just this command,\n   * and 'beforeAll' or 'afterAll' to affect this command and all its subcommands.\n   *\n   * @param {string} position - before or after built-in help\n   * @param {(string | Function)} text - string to add, or a function returning a string\n   * @return {Command} `this` command for chaining\n   */\n\n  addHelpText(position, text) {\n    const allowedValues = ['beforeAll', 'before', 'after', 'afterAll'];\n    if (!allowedValues.includes(position)) {\n      throw new Error(`Unexpected value for position to addHelpText.\nExpecting one of '${allowedValues.join(\"', '\")}'`);\n    }\n\n    const helpEvent = `${position}Help`;\n    this.on(helpEvent, (/** @type {HelpTextEventContext} */ context) => {\n      let helpStr;\n      if (typeof text === 'function') {\n        helpStr = text({ error: context.error, command: context.command });\n      } else {\n        helpStr = text;\n      }\n      // Ignore falsy value when nothing to output.\n      if (helpStr) {\n        context.write(`${helpStr}\\n`);\n      }\n    });\n    return this;\n  }\n\n  /**\n   * Output help information if help flags specified\n   *\n   * @param {Array} args - array of options to search for help flags\n   * @private\n   */\n\n  _outputHelpIfRequested(args) {\n    const helpOption = this._getHelpOption();\n    const helpRequested = helpOption && args.find((arg) => helpOption.is(arg));\n    if (helpRequested) {\n      this.outputHelp();\n      // (Do not have all displayed text available so only passing placeholder.)\n      this._exit(0, 'commander.helpDisplayed', '(outputHelp)');\n    }\n  }\n}\n\n/**\n * Scan arguments and increment port number for inspect calls (to avoid conflicts when spawning new command).\n *\n * @param {string[]} args - array of arguments from node.execArgv\n * @returns {string[]}\n * @private\n */\n\nfunction incrementNodeInspectorPort(args) {\n  // Testing for these options:\n  //  --inspect[=[host:]port]\n  //  --inspect-brk[=[host:]port]\n  //  --inspect-port=[host:]port\n  return args.map((arg) => {\n    if (!arg.startsWith('--inspect')) {\n      return arg;\n    }\n    let debugOption;\n    let debugHost = '127.0.0.1';\n    let debugPort = '9229';\n    let match;\n    if ((match = arg.match(/^(--inspect(-brk)?)$/)) !== null) {\n      // e.g. --inspect\n      debugOption = match[1];\n    } else if (\n      (match = arg.match(/^(--inspect(-brk|-port)?)=([^:]+)$/)) !== null\n    ) {\n      debugOption = match[1];\n      if (/^\\d+$/.test(match[3])) {\n        // e.g. --inspect=1234\n        debugPort = match[3];\n      } else {\n        // e.g. --inspect=localhost\n        debugHost = match[3];\n      }\n    } else if (\n      (match = arg.match(/^(--inspect(-brk|-port)?)=([^:]+):(\\d+)$/)) !== null\n    ) {\n      // e.g. --inspect=localhost:1234\n      debugOption = match[1];\n      debugHost = match[3];\n      debugPort = match[4];\n    }\n\n    if (debugOption && debugPort !== '0') {\n      return `${debugOption}=${debugHost}:${parseInt(debugPort) + 1}`;\n    }\n    return arg;\n  });\n}\n\n/**\n * @returns {boolean | undefined}\n * @package\n */\nfunction useColor() {\n  // Test for common conventions.\n  // NB: the observed behaviour is in combination with how author adds color! For example:\n  //   - we do not test NODE_DISABLE_COLORS, but util:styletext does\n  //   - we do test NO_COLOR, but Chalk does not\n  //\n  // References:\n  // https://no-color.org\n  // https://bixense.com/clicolors/\n  // https://github.com/nodejs/node/blob/0a00217a5f67ef4a22384cfc80eb6dd9a917fdc1/lib/internal/tty.js#L109\n  // https://github.com/chalk/supports-color/blob/c214314a14bcb174b12b3014b2b0a8de375029ae/index.js#L33\n  // (https://force-color.org recent web page from 2023, does not match major javascript implementations)\n\n  if (\n    process.env.NO_COLOR ||\n    process.env.FORCE_COLOR === '0' ||\n    process.env.FORCE_COLOR === 'false'\n  )\n    return false;\n  if (process.env.FORCE_COLOR || process.env.CLICOLOR_FORCE !== undefined)\n    return true;\n  return undefined;\n}\n\nexports.Command = Command;\nexports.useColor = useColor; // exporting for tests\n", "const { Argument } = require('./lib/argument.js');\nconst { Command } = require('./lib/command.js');\nconst { CommanderError, InvalidArgumentError } = require('./lib/error.js');\nconst { Help } = require('./lib/help.js');\nconst { Option } = require('./lib/option.js');\n\nexports.program = new Command();\n\nexports.createCommand = (name) => new Command(name);\nexports.createOption = (flags, description) => new Option(flags, description);\nexports.createArgument = (name, description) => new Argument(name, description);\n\n/**\n * Expose classes\n */\n\nexports.Command = Command;\nexports.Option = Option;\nexports.Argument = Argument;\nexports.Help = Help;\n\nexports.CommanderError = CommanderError;\nexports.InvalidArgumentError = InvalidArgumentError;\nexports.InvalidOptionArgumentError = InvalidArgumentError; // Deprecated\n", "const commander = require('commander');\n\nexports = module.exports = {};\n\n// Return a different global program than commander,\n// and don't also return it as default export.\nexports.program = new commander.Command();\n\n/**\n * Expose classes. The FooT versions are just types, so return Commander original implementations!\n */\n\nexports.Argument = commander.Argument;\nexports.Command = commander.Command;\nexports.CommanderError = commander.CommanderError;\nexports.Help = commander.Help;\nexports.InvalidArgumentError = commander.InvalidArgumentError;\nexports.InvalidOptionArgumentError = commander.InvalidArgumentError; // Deprecated\nexports.Option = commander.Option;\n\nexports.createCommand = (name) => new commander.Command(name);\nexports.createOption = (flags, description) =>\n  new commander.Option(flags, description);\nexports.createArgument = (name, description) =>\n  new commander.Argument(name, description);\n", "/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n\nimport type { ParameterizedString, 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 string is parameterized\n * {@link isParameterizedString}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isParameterizedString(wat: unknown): wat is ParameterizedString {\n  return (\n    typeof wat === 'object' &&\n    wat !== null &&\n    '__sentry_template_string__' in wat &&\n    '__sentry_template_values__' in wat\n  );\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 || isParameterizedString(wat) || (typeof wat !== 'object' && typeof wat !== 'function');\n}\n\n/**\n * Checks whether given value's type is an object literal, or a class instance.\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  // Recursively call this function in order to walk down a chain of errors\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    ...(exception.type === 'AggregateError' && { 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    (event: object | string, source?: string, lineno?: number, colno?: number, error?: Error): any;\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\ntype SimpleNode = {\n  parentNode: SimpleNode;\n} | null;\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  if (!elem) {\n    return '<unknown>';\n  }\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  // @ts-expect-error WINDOW has HTMLElement\n  if (WINDOW.HTMLElement) {\n    // If using the component name annotation plugin, this value may be available on the DOM node\n    if (elem instanceof HTMLElement && elem.dataset && elem.dataset['sentryComponent']) {\n      return elem.dataset['sentryComponent'];\n    }\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\n/**\n * Given a DOM element, traverses up the tree until it finds the first ancestor node\n * that has the `data-sentry-component` attribute. This attribute is added at build-time\n * by projects that have the component name annotation plugin installed.\n *\n * @returns a string representation of the component for the provided DOM element, or `null` if not found\n */\nexport function getComponentName(elem: unknown): string | null {\n  // @ts-expect-error WINDOW has HTMLElement\n  if (!WINDOW.HTMLElement) {\n    return null;\n  }\n\n  let currentElem = elem as SimpleNode;\n  const MAX_TRAVERSE_HEIGHT = 5;\n  for (let i = 0; i < MAX_TRAVERSE_HEIGHT; i++) {\n    if (!currentElem) {\n      return null;\n    }\n\n    if (currentElem instanceof HTMLElement && currentElem.dataset['sentryComponent']) {\n      return currentElem.dataset['sentryComponent'];\n    }\n\n    currentElem = currentElem.parentNode;\n  }\n\n  return null;\n}\n", "declare const __DEBUG_BUILD__: boolean;\n\n/**\n * This serves as a build time flag that will be true by default, but false in non-debug builds or if users replace `__SENTRY_DEBUG__` in their generated code.\n *\n * ATTENTION: This constant must never cross package boundaries (i.e. be exported) to guarantee that it can be used for tree shaking.\n */\nexport const DEBUG_BUILD = __DEBUG_BUILD__;\n", "import type { ConsoleLevel } from '@sentry/types';\n\nimport { DEBUG_BUILD } from './debug-build';\nimport { GLOBAL_OBJ } from './worldwide';\n\n/** Prefix for logging strings */\nconst PREFIX = 'Sentry Logger ';\n\nexport const CONSOLE_LEVELS: readonly ConsoleLevel[] = [\n  'debug',\n  'info',\n  'warn',\n  'error',\n  'log',\n  'assert',\n  'trace',\n] as const;\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  isEnabled(): boolean;\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    isEnabled: () => enabled,\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 { DEBUG_BUILD } from './debug-build';\nimport { consoleSandbox, 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    consoleSandbox(() => {\n      // eslint-disable-next-line no-console\n      console.error(`Invalid Sentry Dsn: ${str}`);\n    });\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 '@sentry/types';\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 { DEBUG_BUILD } from './debug-build';\nimport { isElement, isError, isEvent, isInstanceOf, isPlainObject, isPrimitive } from './is';\nimport { logger } from './logger';\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    markFunctionWrapped(wrapped, original);\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: object, name: string, value: unknown): void {\n  try {\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  } catch (o_O) {\n    DEBUG_BUILD && logger.log(`Failed to add non-enumerable property \"${name}\" to object`, obj);\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  try {\n    const proto = original.prototype || {};\n    wrapped.prototype = original.prototype = proto;\n    addNonEnumerableProperty(wrapped, '__sentry_original__', original);\n  } catch (o_O) {} // eslint-disable-line no-empty\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>(\n  value: V,\n):\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 memoBuilder 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 `memoBuilder` 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 (isPojo(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\nfunction isPojo(input: unknown): input is Record<string, unknown> {\n  if (!isPlainObject(input)) {\n    return false;\n  }\n\n  try {\n    const name = (Object.getPrototypeOf(input) as { constructor: { name: string } }).constructor.name;\n    return !name || name === 'Object';\n  } catch {\n    return true;\n  }\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/**\n * Does this filename look like it's part of the app code?\n */\nexport function filenameIsInApp(filename: string, isNative: boolean = false): boolean {\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.match(/^[A-Z]:/) &&\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  return !isInternal && filename !== undefined && !filename.includes('node_modules/');\n}\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 it's a Windows path, trim the leading slash so that `/C:/foo` becomes `C:/foo`\n      if (filename && filename.match(/\\/[A-Z]:/)) {\n        filename = filename.slice(1);\n      }\n\n      if (!filename && lineMatch[5] && !isNative) {\n        filename = lineMatch[5];\n      }\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: filenameIsInApp(filename, isNative),\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 { filenameIsInApp, node } from './node-stack-trace';\n\nexport { filenameIsInApp };\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 { DEBUG_BUILD } from '../debug-build';\nimport { logger } from '../logger';\nimport { getFunctionName } from '../stacktrace';\n\nexport type InstrumentHandlerType = 'console' | 'dom' | 'fetch' | 'history' | 'xhr' | 'error' | 'unhandledrejection';\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type InstrumentHandlerCallback = (data: any) => void;\n\n// We keep the handlers globally\nconst handlers: { [key in InstrumentHandlerType]?: InstrumentHandlerCallback[] } = {};\nconst instrumented: { [key in InstrumentHandlerType]?: boolean } = {};\n\n/** Add a handler function. */\nexport function addHandler(type: InstrumentHandlerType, handler: InstrumentHandlerCallback): void {\n  handlers[type] = handlers[type] || [];\n  (handlers[type] as InstrumentHandlerCallback[]).push(handler);\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/** Maybe run an instrumentation function, unless it was already called. */\nexport function maybeInstrument(type: InstrumentHandlerType, instrumentFn: () => void): void {\n  if (!instrumented[type]) {\n    instrumentFn();\n    instrumented[type] = true;\n  }\n}\n\n/** Trigger handlers for a given instrumentation type. */\nexport function triggerHandlers(type: InstrumentHandlerType, data: unknown): void {\n  const typeHandlers = type && handlers[type];\n  if (!typeHandlers) {\n    return;\n  }\n\n  for (const handler of typeHandlers) {\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", "/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/ban-types */\nimport type { ConsoleLevel, HandlerDataConsole } from '@sentry/types';\n\nimport { CONSOLE_LEVELS, originalConsoleMethods } from '../logger';\nimport { fill } from '../object';\nimport { GLOBAL_OBJ } from '../worldwide';\nimport { addHandler, maybeInstrument, triggerHandlers } from './_handlers';\n\n/**\n * Add an instrumentation handler for when a console.xxx method is called.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nexport function addConsoleInstrumentationHandler(handler: (data: HandlerDataConsole) => void): void {\n  const type = 'console';\n  addHandler(type, handler);\n  maybeInstrument(type, instrumentConsole);\n}\n\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        const handlerData: HandlerDataConsole = { args, level };\n        triggerHandlers('console', handlerData);\n\n        const log = originalConsoleMethods[level];\n        log && log.apply(GLOBAL_OBJ.console, args);\n      };\n    });\n  });\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 = () => {\n        // crypto.getRandomValues might return undefined instead of the typed array\n        // in old Chromium versions (e.g. 23.0.1235.0 (151422))\n        // However, `typedArray` is still filled in-place.\n        // @see https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues#typedarray\n        const typedArray = new Uint8Array(1);\n        crypto.getRandomValues(typedArray);\n        return typedArray[0];\n      };\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", "// TODO(v8): Move everything in this file into the browser package. Nothing here is generic and we run risk of leaking browser types into non-browser packages.\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/ban-types */\nimport type { HandlerDataDom } from '@sentry/types';\n\nimport { uuid4 } from '../misc';\nimport { addNonEnumerableProperty, fill } from '../object';\nimport { GLOBAL_OBJ } from '../worldwide';\nimport { addHandler, maybeInstrument, triggerHandlers } from './_handlers';\n\ntype SentryWrappedTarget = HTMLElement & { _sentryId?: string };\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\nconst WINDOW = GLOBAL_OBJ as unknown as Window;\nconst DEBOUNCE_DURATION = 1000;\n\nlet debounceTimerID: number | undefined;\nlet lastCapturedEventType: string | undefined;\nlet lastCapturedEventTargetId: string | undefined;\n\n/**\n * Add an instrumentation handler for when a click or a keypress happens.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nexport function addClickKeypressInstrumentationHandler(handler: (data: HandlerDataDom) => void): void {\n  const type = 'dom';\n  addHandler(type, handler);\n  maybeInstrument(type, instrumentDOM);\n}\n\n/** Exported for tests only. */\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\n/**\n * Check whether the event is similar to the last captured one. For example, two click events on the same button.\n */\nfunction isSimilarToLastCapturedEvent(event: Event): boolean {\n  // If both events have different type, then user definitely performed two separate actions. e.g. click + keypress.\n  if (event.type !== lastCapturedEventType) {\n    return false;\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 (!event.target || (event.target as SentryWrappedTarget)._sentryId !== lastCapturedEventTargetId) {\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  // 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 true;\n}\n\n/**\n * Decide whether an event should be captured.\n * @param event event to be captured\n */\nfunction shouldSkipDOMEvent(eventType: string, target: SentryWrappedTarget | null): boolean {\n  // We are only interested in filtering `keypress` events for now.\n  if (eventType !== 'keypress') {\n    return false;\n  }\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\n  return true;\n}\n\n/**\n * Wraps addEventListener to capture UI breadcrumbs\n */\nfunction makeDOMEventHandler(\n  handler: (data: HandlerDataDom) => void,\n  globalListener: boolean = false,\n): (event: Event) => void {\n  return (event: Event & { _sentryCaptured?: true }): 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 || event['_sentryCaptured']) {\n      return;\n    }\n\n    const target = getEventTarget(event);\n\n    // We always want to skip _some_ events.\n    if (shouldSkipDOMEvent(event.type, target)) {\n      return;\n    }\n\n    // Mark event as \"seen\"\n    addNonEnumerableProperty(event, '_sentryCaptured', true);\n\n    if (target && !target._sentryId) {\n      // Add UUID to event target so we can identify if\n      addNonEnumerableProperty(target, '_sentryId', uuid4());\n    }\n\n    const name = event.type === 'keypress' ? 'input' : event.type;\n\n    // If there is no last captured event, it means that we can safely capture the new event and store it for future comparisons.\n    // If there is a last captured event, 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    if (!isSimilarToLastCapturedEvent(event)) {\n      const handlerData: HandlerDataDom = { event, name, global: globalListener };\n      handler(handlerData);\n      lastCapturedEventType = event.type;\n      lastCapturedEventTargetId = target ? target._sentryId : undefined;\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      lastCapturedEventTargetId = undefined;\n      lastCapturedEventType = undefined;\n    }, DEBOUNCE_DURATION);\n  };\n}\n\nfunction getEventTarget(event: Event): SentryWrappedTarget | null {\n  try {\n    return event.target as SentryWrappedTarget | null;\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    return null;\n  }\n}\n", "import { DEBUG_BUILD } from './debug-build';\nimport { logger } from './logger';\nimport { getGlobalObject } from './worldwide';\n\n// eslint-disable-next-line deprecation/deprecation\nconst WINDOW = getGlobalObject<Window>();\n\ndeclare const EdgeRuntime: string | undefined;\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 (typeof EdgeRuntime === 'string') {\n    return true;\n  }\n\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", "/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/ban-types */\nimport type { HandlerDataFetch } from '@sentry/types';\n\nimport { fill } from '../object';\nimport { supportsNativeFetch } from '../supports';\nimport { GLOBAL_OBJ } from '../worldwide';\nimport { addHandler, maybeInstrument, triggerHandlers } from './_handlers';\n\ntype FetchResource = string | { toString(): string } | { url: string };\n\n/**\n * Add an instrumentation handler for when a fetch request happens.\n * The handler function is called once when the request starts and once when it ends,\n * which can be identified by checking if it has an `endTimestamp`.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nexport function addFetchInstrumentationHandler(handler: (data: HandlerDataFetch) => void): void {\n  const type = 'fetch';\n  addHandler(type, handler);\n  maybeInstrument(type, instrumentFetch);\n}\n\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          const finishedHandlerData: HandlerDataFetch = {\n            ...handlerData,\n            endTimestamp: Date.now(),\n            response,\n          };\n\n          triggerHandlers('fetch', finishedHandlerData);\n          return response;\n        },\n        (error: Error) => {\n          const erroredHandlerData: HandlerDataFetch = {\n            ...handlerData,\n            endTimestamp: Date.now(),\n            error,\n          };\n\n          triggerHandlers('fetch', erroredHandlerData);\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\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 * Exported for tests only.\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", "import type { HandlerDataError } from '@sentry/types';\n\nimport { GLOBAL_OBJ } from '../worldwide';\nimport { addHandler, maybeInstrument, triggerHandlers } from './_handlers';\n\nlet _oldOnErrorHandler: (typeof GLOBAL_OBJ)['onerror'] | null = null;\n\n/**\n * Add an instrumentation handler for when an error is captured by the global error handler.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nexport function addGlobalErrorInstrumentationHandler(handler: (data: HandlerDataError) => void): void {\n  const type = 'error';\n  addHandler(type, handler);\n  maybeInstrument(type, instrumentError);\n}\n\nfunction instrumentError(): void {\n  _oldOnErrorHandler = GLOBAL_OBJ.onerror;\n\n  GLOBAL_OBJ.onerror = function (\n    msg: string | object,\n    url?: string,\n    line?: number,\n    column?: number,\n    error?: Error,\n  ): boolean {\n    const handlerData: HandlerDataError = {\n      column,\n      error,\n      line,\n      msg,\n      url,\n    };\n    triggerHandlers('error', handlerData);\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  GLOBAL_OBJ.onerror.__SENTRY_INSTRUMENTED__ = true;\n}\n", "/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport type { HandlerDataUnhandledRejection } from '@sentry/types';\n\nimport { GLOBAL_OBJ } from '../worldwide';\nimport { addHandler, maybeInstrument, triggerHandlers } from './_handlers';\n\nlet _oldOnUnhandledRejectionHandler: (typeof GLOBAL_OBJ)['onunhandledrejection'] | null = null;\n\n/**\n * Add an instrumentation handler for when an unhandled promise rejection is captured.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nexport function addGlobalUnhandledRejectionInstrumentationHandler(\n  handler: (data: HandlerDataUnhandledRejection) => void,\n): void {\n  const type = 'unhandledrejection';\n  addHandler(type, handler);\n  maybeInstrument(type, instrumentUnhandledRejection);\n}\n\nfunction instrumentUnhandledRejection(): void {\n  _oldOnUnhandledRejectionHandler = GLOBAL_OBJ.onunhandledrejection;\n\n  GLOBAL_OBJ.onunhandledrejection = function (e: any): boolean {\n    const handlerData: HandlerDataUnhandledRejection = e;\n    triggerHandlers('unhandledrejection', handlerData);\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  GLOBAL_OBJ.onunhandledrejection.__SENTRY_INSTRUMENTED__ = true;\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 chromeVar = (WINDOW as any).chrome;\n  const isChromePackagedApp = chromeVar && chromeVar.app && chromeVar.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", "// TODO(v8): Move everything in this file into the browser package. Nothing here is generic and we run risk of leaking browser types into non-browser packages.\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/ban-types */\nimport type { HandlerDataHistory } from '@sentry/types';\n\nimport { fill } from '../object';\nimport { supportsHistory } from '../supports';\nimport { GLOBAL_OBJ } from '../worldwide';\nimport { addHandler, maybeInstrument, triggerHandlers } from './_handlers';\n\nconst WINDOW = GLOBAL_OBJ as unknown as Window;\n\nlet lastHref: string | undefined;\n\n/**\n * Add an instrumentation handler for when a fetch request happens.\n * The handler function is called once when the request starts and once when it ends,\n * which can be identified by checking if it has an `endTimestamp`.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nexport function addHistoryInstrumentationHandler(handler: (data: HandlerDataHistory) => void): void {\n  const type = 'history';\n  addHandler(type, handler);\n  maybeInstrument(type, instrumentHistory);\n}\n\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    const handlerData: HandlerDataHistory = { from, to };\n    triggerHandlers('history', handlerData);\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  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        const handlerData: HandlerDataHistory = { from, to };\n        triggerHandlers('history', handlerData);\n      }\n      return originalHistoryFunction.apply(this, args);\n    };\n  }\n\n  fill(WINDOW.history, 'pushState', historyReplacementFunction);\n  fill(WINDOW.history, 'replaceState', historyReplacementFunction);\n}\n", "// TODO(v8): Move everything in this file into the browser package. Nothing here is generic and we run risk of leaking browser types into non-browser packages.\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/ban-types */\nimport type { HandlerDataXhr, SentryWrappedXMLHttpRequest, WrappedFunction } from '@sentry/types';\n\nimport { isString } from '../is';\nimport { fill } from '../object';\nimport { GLOBAL_OBJ } from '../worldwide';\nimport { addHandler, maybeInstrument, triggerHandlers } from './_handlers';\n\nconst WINDOW = GLOBAL_OBJ as unknown as Window;\n\nexport const SENTRY_XHR_DATA_KEY = '__sentry_xhr_v3__';\n\n/**\n * Add an instrumentation handler for when an XHR request happens.\n * The handler function is called once when the request starts and once when it ends,\n * which can be identified by checking if it has an `endTimestamp`.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nexport function addXhrInstrumentationHandler(handler: (data: HandlerDataXhr) => void): void {\n  const type = 'xhr';\n  addHandler(type, handler);\n  maybeInstrument(type, instrumentXHR);\n}\n\n/** Exported only for tests. */\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 startTimestamp = Date.now();\n\n      // open() should always be called with two or more arguments\n      // But to be on the safe side, we actually validate this and bail out if we don't have a method & url\n      const method = isString(args[0]) ? args[0].toUpperCase() : undefined;\n      const url = parseUrl(args[1]);\n\n      if (!method || !url) {\n        return originalOpen.apply(this, args);\n      }\n\n      this[SENTRY_XHR_DATA_KEY] = {\n        method,\n        url,\n        request_headers: {},\n      };\n\n      // if Sentry key appears in URL, don't capture it as a request\n      if (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          const handlerData: HandlerDataXhr = {\n            args: [method, url],\n            endTimestamp: Date.now(),\n            startTimestamp,\n            xhr: this,\n          };\n          triggerHandlers('xhr', handlerData);\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;\n\n          const xhrInfo = this[SENTRY_XHR_DATA_KEY];\n\n          if (xhrInfo && isString(header) && isString(value)) {\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\n      if (!sentryXhrData) {\n        return originalSend.apply(this, args);\n      }\n\n      if (args[0] !== undefined) {\n        sentryXhrData.body = args[0];\n      }\n\n      const handlerData: HandlerDataXhr = {\n        args: [sentryXhrData.method, sentryXhrData.url],\n        startTimestamp: Date.now(),\n        xhr: this,\n      };\n      triggerHandlers('xhr', handlerData);\n\n      return originalSend.apply(this, args);\n    };\n  });\n}\n\nfunction parseUrl(url: string | unknown): string | undefined {\n  if (isString(url)) {\n    return url;\n  }\n\n  try {\n    // url can be a string or URL\n    // but since URL is not available in IE11, we do not check for it,\n    // but simply assume it is an URL and return `toString()` from it (which returns the full URL)\n    // If that fails, we just return undefined\n    return (url as URL).toString();\n  } catch {} // eslint-disable-line no-empty\n\n  return undefined;\n}\n", "// TODO(v8): Consider moving this file (or at least parts of it) into the browser package. The registered handlers are mostly non-generic and we risk leaking runtime specific code into generic packages.\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport { logger } from './../logger';\nimport type {\n  InstrumentHandlerCallback as _InstrumentHandlerCallback,\n  InstrumentHandlerType as _InstrumentHandlerType,\n} from './_handlers';\nimport { resetInstrumentationHandlers } from './_handlers';\nimport { addConsoleInstrumentationHandler } from './console';\nimport { addClickKeypressInstrumentationHandler } from './dom';\nimport { addFetchInstrumentationHandler } from './fetch';\nimport { addGlobalErrorInstrumentationHandler } from './globalError';\nimport { addGlobalUnhandledRejectionInstrumentationHandler } from './globalUnhandledRejection';\nimport { addHistoryInstrumentationHandler } from './history';\nimport { SENTRY_XHR_DATA_KEY, addXhrInstrumentationHandler } from './xhr';\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 * @deprecated Use the proper function per instrumentation type instead!\n */\nexport function addInstrumentationHandler(type: _InstrumentHandlerType, callback: _InstrumentHandlerCallback): void {\n  switch (type) {\n    case 'console':\n      return addConsoleInstrumentationHandler(callback);\n    case 'dom':\n      return addClickKeypressInstrumentationHandler(callback);\n    case 'xhr':\n      return addXhrInstrumentationHandler(callback);\n    case 'fetch':\n      return addFetchInstrumentationHandler(callback);\n    case 'history':\n      return addHistoryInstrumentationHandler(callback);\n    case 'error':\n      return addGlobalErrorInstrumentationHandler(callback);\n    case 'unhandledrejection':\n      return addGlobalUnhandledRejectionInstrumentationHandler(callback);\n    default:\n      DEBUG_BUILD && logger.warn('unknown instrumentation type:', type);\n  }\n}\n\n/**\n * @deprecated Use the specific handler data types from @sentry/types instead, e.g. HandlerDataFetch, HandlerDataConsole, ...\n */\ntype InstrumentHandlerCallback = _InstrumentHandlerCallback;\n\n/**\n * @deprecated Use the specific handler functions instead, e.g. addConsoleInstrumentationHandler, ...\n */\ntype InstrumentHandlerType = _InstrumentHandlerType;\n\n// eslint-disable-next-line deprecation/deprecation\nexport type { InstrumentHandlerCallback, InstrumentHandlerType };\n\nexport {\n  addConsoleInstrumentationHandler,\n  addClickKeypressInstrumentationHandler,\n  addXhrInstrumentationHandler,\n  addFetchInstrumentationHandler,\n  addHistoryInstrumentationHandler,\n  addGlobalErrorInstrumentationHandler,\n  addGlobalUnhandledRejectionInstrumentationHandler,\n  SENTRY_XHR_DATA_KEY,\n  // Only exported for tests\n  resetInstrumentationHandlers,\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 { isNodeEnv } from './node';\nimport { GLOBAL_OBJ } from './worldwide';\n\n/**\n * Returns true if we are in the browser.\n */\nexport function isBrowser(): boolean {\n  // eslint-disable-next-line no-restricted-globals\n  return typeof window !== 'undefined' && (!isNodeEnv() || isElectronNodeRenderer());\n}\n\ntype ElectronProcess = { type?: string };\n\n// Electron renderers with nodeIntegration enabled are detected as Node.js so we specifically test for them\nfunction isElectronNodeRenderer(): boolean {\n  return (\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-explicit-any\n    (GLOBAL_OBJ as any).process !== undefined && ((GLOBAL_OBJ as any).process as ElectronProcess).type === 'renderer'\n  );\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 memoBuilder(): 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", "import type { Primitive } from '@sentry/types';\n\nimport { isNaN, isSyntheticEvent, isVueViewModel } from './is';\nimport type { MemoFunc } from './memo';\nimport { memoBuilder } 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 = memoBuilder(),\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/**\n * @deprecated This export will be removed in v8.\n */\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\n/**\n * Normalizes URLs in exceptions and stacktraces to a base path so Sentry can fingerprint\n * across platforms and working directory.\n *\n * @param url The URL to be normalized.\n * @param basePath The application base path.\n * @returns The normalized URL.\n */\nexport function normalizeUrlToBase(url: string, basePath: string): string {\n  const escapedBase = basePath\n    // Backslash to forward\n    .replace(/\\\\/g, '/')\n    // Escape RegExp special characters\n    .replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&');\n\n  let newUrl = url;\n  try {\n    newUrl = decodeURI(url);\n  } catch (_Oo) {\n    // Sometime this breaks\n  }\n  return (\n    newUrl\n      .replace(/\\\\/g, '/')\n      .replace(/webpack:\\/?/g, '') // Remove intermediate base path\n      // eslint-disable-next-line @sentry-internal/sdk/no-regexp-constructor\n      .replace(new RegExp(`(file://)?/*${escapedBase}/*`, 'ig'), 'app:///')\n  );\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 { SyncPromise, rejectedSyncPromise, resolvedSyncPromise } 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", "/**\n * This code was originally copied from the 'cookie` module at v0.5.0 and was simplified for our use case.\n * https://github.com/jshttp/cookie/blob/a0c84147aab6266bdb3996cf4062e93907c0b0fc/index.js\n * It had the following license:\n *\n * (The MIT License)\n *\n * Copyright (c) 2012-2014 Roman Shtylman <shtylman@gmail.com>\n * Copyright (c) 2015 Douglas Christopher Wilson <doug@somethingdoug.com>\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a 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\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\n * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\n * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\n * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\n * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n\n/**\n * Parses a cookie string\n */\nexport function parseCookie(str: string): Record<string, string> {\n  const obj: Record<string, string> = {};\n  let index = 0;\n\n  while (index < str.length) {\n    const eqIdx = str.indexOf('=', index);\n\n    // no more cookie pairs\n    if (eqIdx === -1) {\n      break;\n    }\n\n    let endIdx = str.indexOf(';', index);\n\n    if (endIdx === -1) {\n      endIdx = str.length;\n    } else if (endIdx < eqIdx) {\n      // backtrack on prior semicolon\n      index = str.lastIndexOf(';', eqIdx - 1) + 1;\n      continue;\n    }\n\n    const key = str.slice(index, eqIdx).trim();\n\n    // only assign once\n    if (undefined === obj[key]) {\n      let val = str.slice(eqIdx + 1, endIdx).trim();\n\n      // quoted values\n      if (val.charCodeAt(0) === 0x22) {\n        val = val.slice(1, -1);\n      }\n\n      try {\n        obj[key] = val.indexOf('%') !== -1 ? decodeURIComponent(val) : val;\n      } catch (e) {\n        obj[key] = val;\n      }\n    }\n\n    index = endIdx + 1;\n  }\n\n  return obj;\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        // TODO: Use new URL global if it exists\n        .replace(/(:80)$/, '')\n        .replace(/(:443)$/, '')) ||\n    '';\n\n  return `${protocol ? `${protocol}://` : ''}${filteredHost}${path}`;\n}\n", "import type {\n  Event,\n  ExtractedNodeRequestData,\n  PolymorphicRequest,\n  Transaction,\n  TransactionSource,\n  WebFetchHeaders,\n  WebFetchRequest,\n} from '@sentry/types';\n\nimport { parseCookie } from './cookie';\nimport { DEBUG_BUILD } from './debug-build';\nimport { isPlainObject, isString } from './is';\nimport { logger } from './logger';\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'];\nexport const 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 * 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  /** 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\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 *\n * @deprecated This utility will be removed in v8.\n */\nexport function addRequestDataToTransaction(\n  transaction: Transaction | undefined,\n  req: PolymorphicRequest,\n  deps?: InjectedNodeDeps,\n): void {\n  if (!transaction) return;\n  // eslint-disable-next-line deprecation/deprecation\n  if (!transaction.metadata.source || transaction.metadata.source === 'url') {\n    // Attempt to grab a parameterized route off of the request\n    const [name, source] = extractPathForTransaction(req, { path: true, method: true });\n    transaction.updateName(name);\n    // TODO: SEMANTIC_ATTRIBUTE_SENTRY_SOURCE is in core, align this once we merge utils & core\n    // eslint-disable-next-line deprecation/deprecation\n    transaction.setMetadata({ source });\n  }\n  transaction.setAttribute('url', req.originalUrl || req.url);\n  if (req.baseUrl) {\n    transaction.setAttribute('baseUrl', req.baseUrl);\n  }\n  // TODO: We need to rewrite this to a flat format?\n  // eslint-disable-next-line deprecation/deprecation\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\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      // if exist _reconstructedRoute return that path instead of route.path\n      const customRoute = req._reconstructedRoute ? req._reconstructedRoute : undefined;\n      return extractPathForTransaction(req, { path: true, method: true, customRoute })[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, 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  // eslint-disable-next-line @typescript-eslint/no-explicit-any\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  // Express 4 mistakenly strips off port number from req.host / req.hostname so we can't rely on them\n  // See: https://github.com/expressjs/express/issues/3047#issuecomment-236653223\n  // Also: https://github.com/getsentry/sentry-javascript/issues/1917\n  const host = headers.host || req.hostname || req.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        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 && parseCookie(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]: 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 * @param options.deps Injected platform-specific dependencies\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 && 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  try {\n    return (\n      req.query ||\n      (typeof URL !== 'undefined' && new URL(originalUrl).search.slice(1)) ||\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  } catch {\n    return undefined;\n  }\n}\n\n/**\n * Transforms a `Headers` object that implements the `Web Fetch API` (https://developer.mozilla.org/en-US/docs/Web/API/Headers) into a simple key-value dict.\n * The header keys will be lower case: e.g. A \"Content-Type\" header will be stored as \"content-type\".\n */\n// TODO(v8): Make this function return undefined when the extraction fails.\nexport function winterCGHeadersToDict(winterCGHeaders: WebFetchHeaders): Record<string, string> {\n  const headers: Record<string, string> = {};\n  try {\n    winterCGHeaders.forEach((value, key) => {\n      if (typeof value === 'string') {\n        // We check that value is a string even though it might be redundant to make sure prototype pollution is not possible.\n        headers[key] = value;\n      }\n    });\n  } catch (e) {\n    DEBUG_BUILD &&\n      logger.warn('Sentry failed extracting headers from a request object. If you see this, please file an issue.');\n  }\n\n  return headers;\n}\n\n/**\n * Converts a `Request` object that implements the `Web Fetch API` (https://developer.mozilla.org/en-US/docs/Web/API/Headers) into the format that the `RequestData` integration understands.\n */\nexport function winterCGRequestToRequestData(req: WebFetchRequest): PolymorphicRequest {\n  const headers = winterCGHeadersToDict(req.headers);\n  return {\n    method: req.method,\n    url: req.url,\n    headers,\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 { GLOBAL_OBJ } from './worldwide';\n\nconst ONE_SECOND_IN_MS = 1000;\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 timestamp in seconds since the UNIX epoch using the Date API.\n *\n * TODO(v8): Return type should be rounded.\n */\nexport function dateTimestampInSeconds(): number {\n  return Date.now() / ONE_SECOND_IN_MS;\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 createUnixTimestampInSecondsFunc(): () => number {\n  const { performance } = GLOBAL_OBJ as typeof GLOBAL_OBJ & { performance?: Performance };\n  if (!performance || !performance.now) {\n    return dateTimestampInSeconds;\n  }\n\n  // Some browser and environments don't have a timeOrigin, so we fallback to\n  // using Date.now() to compute the starting time.\n  const approxStartingTimeOrigin = Date.now() - performance.now();\n  const timeOrigin = performance.timeOrigin == undefined ? approxStartingTimeOrigin : performance.timeOrigin;\n\n  // performance.now() is a monotonic clock, which means it starts at 0 when the process begins. To get the current\n  // wall clock time (actual UNIX timestamp), we need to add the starting time origin and the current time elapsed.\n  //\n  // TODO: This does not account for the case where the monotonic clock that powers performance.now() drifts from the\n  // wall clock time, which causes the returned timestamp to be inaccurate. We should investigate how to detect and\n  // correct for this.\n  // See: https://github.com/getsentry/sentry-javascript/issues/2590\n  // See: https://github.com/mdn/content/issues/4713\n  // See: https://dev.to/noamr/when-a-millisecond-is-not-a-millisecond-3h6\n  return () => {\n    return (timeOrigin + performance.now()) / ONE_SECOND_IN_MS;\n  };\n}\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 * 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 = createUnixTimestampInSecondsFunc();\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 * 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 } = GLOBAL_OBJ as typeof GLOBAL_OBJ & 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 { DEBUG_BUILD } from './debug-build';\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      for (const key of Object.keys(currBaggageObject)) {\n        acc[key] = currBaggageObject[key];\n      }\n      return acc;\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 { PropagationContext, TraceparentData } from '@sentry/types';\n\nimport { baggageHeaderToDynamicSamplingContext } from './baggage';\nimport { uuid4 } from './misc';\n\n// eslint-disable-next-line @sentry-internal/sdk/no-regexp-constructor -- RegExp is used for readability here\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 *\n * @deprecated Use `propagationContextFromHeaders` instead.\n */\n// TODO(v8): Remove this function\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  if (!traceparentData) {\n    return {\n      traceparentData,\n      dynamicSamplingContext: undefined,\n      propagationContext: {\n        traceId: traceId || uuid4(),\n        spanId: uuid4().substring(16),\n      },\n    };\n  } else {\n    return {\n      traceparentData,\n      dynamicSamplingContext: dynamicSamplingContext || {}, // If we have traceparent data but no DSC it means we are not head of trace and we must freeze it\n      propagationContext: {\n        traceId: traceId || uuid4(),\n        parentSpanId: parentSpanId || uuid4().substring(16),\n        spanId: uuid4().substring(16),\n        sampled: parentSampled,\n        dsc: dynamicSamplingContext || {}, // If we have traceparent data but no DSC it means we are not head of trace and we must freeze it\n      },\n    };\n  }\n}\n\n/**\n * Create a propagation context from incoming headers.\n */\nexport function propagationContextFromHeaders(\n  sentryTrace: string | undefined,\n  baggage: string | number | boolean | string[] | null | undefined,\n): PropagationContext {\n  const traceparentData = extractTraceparentData(sentryTrace);\n  const dynamicSamplingContext = baggageHeaderToDynamicSamplingContext(baggage);\n\n  const { traceId, parentSpanId, parentSampled } = traceparentData || {};\n\n  if (!traceparentData) {\n    return {\n      traceId: traceId || uuid4(),\n      spanId: uuid4().substring(16),\n    };\n  } else {\n    return {\n      traceId: traceId || uuid4(),\n      parentSpanId: parentSpanId || uuid4().substring(16),\n      spanId: uuid4().substring(16),\n      sampled: parentSampled,\n      dsc: dynamicSamplingContext || {}, // If we have traceparent data but no DSC it means we are not head of trace and we must freeze it\n    };\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  feedback: 'feedback',\n  span: 'span',\n  statsd: 'metric_bucket',\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 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 && { 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 { DataCategory, 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, dataCategory: DataCategory): number {\n  return limits[dataCategory] || limits.all || 0;\n}\n\n/**\n * Checks if a category is rate limited\n */\nexport function isRateLimited(limits: RateLimits, dataCategory: DataCategory, now: number = Date.now()): boolean {\n  return disabledUntil(limits, dataCategory) > 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>: <namespaces>\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     *     <namespaces> Semicolon-separated list of metric namespace identifiers. Defines which namespace(s) will be affected.\n     *         Only present if rate limit applies to the metric_bucket data category.\n     */\n    for (const limit of rateLimitHeader.trim().split(',')) {\n      const [retryAfter, categories, , , namespaces] = limit.split(':', 5);\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          if (category === 'metric_bucket') {\n            // namespaces will be present when category === 'metric_bucket'\n            if (!namespaces || namespaces.split(';').includes('custom')) {\n              updatedRateLimits[category] = now + delay;\n            }\n          } else {\n            updatedRateLimits[category] = now + delay;\n          }\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 *\n * @deprecated This will be removed in v8.\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  Client,\n  Event,\n  EventHint,\n  Exception,\n  Extras,\n  Hub,\n  Mechanism,\n  ParameterizedString,\n  Severity,\n  SeverityLevel,\n  StackFrame,\n  StackParser,\n} from '@sentry/types';\n\nimport { isError, isParameterizedString, 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\nfunction getMessageForObject(exception: object): string {\n  if ('name' in exception && typeof exception.name === 'string') {\n    let message = `'${exception.name}' captured as exception`;\n\n    if ('message' in exception && typeof exception.message === 'string') {\n      message += ` with message '${exception.message}'`;\n    }\n\n    return message;\n  } else if ('message' in exception && typeof exception.message === 'string') {\n    return exception.message;\n  } else {\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    return `Object captured as exception with keys: ${extractExceptionKeysForMessage(\n      exception as Record<string, unknown>,\n    )}`;\n  }\n}\n\n/**\n * Builds and Event from a Exception\n *\n * TODO(v8): Remove getHub fallback\n * @hidden\n */\nexport function eventFromUnknownInput(\n  // eslint-disable-next-line deprecation/deprecation\n  getHubOrClient: (() => Hub) | Client | undefined,\n  stackParser: StackParser,\n  exception: unknown,\n  hint?: EventHint,\n): Event {\n  const client =\n    typeof getHubOrClient === 'function'\n      ? // eslint-disable-next-line deprecation/deprecation\n        getHubOrClient().getClient()\n      : getHubOrClient;\n\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  let extras: Extras | undefined;\n\n  if (!isError(exception)) {\n    if (isPlainObject(exception)) {\n      const normalizeDepth = client && client.getOptions().normalizeDepth;\n      extras = { ['__serialized__']: normalizeToSize(exception as Record<string, unknown>, normalizeDepth) };\n\n      const message = getMessageForObject(exception);\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: Event = {\n    exception: {\n      values: [exceptionFromError(stackParser, ex as Error)],\n    },\n  };\n\n  if (extras) {\n    event.extra = extras;\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: ParameterizedString,\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  };\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  if (isParameterizedString(message)) {\n    const { __sentry_template_string__, __sentry_template_values__ } = message;\n\n    event.logentry = {\n      message: __sentry_template_string__,\n      params: __sentry_template_values__,\n    };\n    return event;\n  }\n\n  event.message = message;\n  return event;\n}\n", "import type { StackFrame } from '@sentry/types';\n\nimport { dropUndefinedKeys } from './object';\nimport { filenameIsInApp } from './stacktrace';\n\ntype WatchdogReturn = {\n  /** Resets the watchdog timer */\n  poll: () => void;\n  /** Enables or disables the watchdog timer */\n  enabled: (state: boolean) => void;\n};\n\ntype CreateTimerImpl = () => { getTimeMs: () => number; reset: () => void };\n\n/**\n * A node.js watchdog timer\n * @param pollInterval The interval that we expect to get polled at\n * @param anrThreshold The threshold for when we consider ANR\n * @param callback The callback to call for ANR\n * @returns An object with `poll` and `enabled` functions {@link WatchdogReturn}\n */\nexport function watchdogTimer(\n  createTimer: CreateTimerImpl,\n  pollInterval: number,\n  anrThreshold: number,\n  callback: () => void,\n): WatchdogReturn {\n  const timer = createTimer();\n  let triggered = false;\n  let enabled = true;\n\n  setInterval(() => {\n    const diffMs = timer.getTimeMs();\n\n    if (triggered === false && diffMs > pollInterval + anrThreshold) {\n      triggered = true;\n      if (enabled) {\n        callback();\n      }\n    }\n\n    if (diffMs < pollInterval + anrThreshold) {\n      triggered = false;\n    }\n  }, 20);\n\n  return {\n    poll: () => {\n      timer.reset();\n    },\n    enabled: (state: boolean) => {\n      enabled = state;\n    },\n  };\n}\n\n// types copied from inspector.d.ts\ninterface Location {\n  scriptId: string;\n  lineNumber: number;\n  columnNumber?: number;\n}\n\ninterface CallFrame {\n  functionName: string;\n  location: Location;\n  url: string;\n}\n\n/**\n * Converts Debugger.CallFrame to Sentry StackFrame\n */\nexport function callFrameToStackFrame(\n  frame: CallFrame,\n  url: string | undefined,\n  getModuleFromFilename: (filename: string | undefined) => string | undefined,\n): StackFrame {\n  const filename = url ? url.replace(/^file:\\/\\//, '') : undefined;\n\n  // CallFrame row/col are 0 based, whereas StackFrame are 1 based\n  const colno = frame.location.columnNumber ? frame.location.columnNumber + 1 : undefined;\n  const lineno = frame.location.lineNumber ? frame.location.lineNumber + 1 : undefined;\n\n  return dropUndefinedKeys({\n    filename,\n    module: getModuleFromFilename(filename),\n    function: frame.functionName || '?',\n    colno,\n    lineno,\n    in_app: filename ? filenameIsInApp(filename) : undefined,\n  });\n}\n", "/** A simple Least Recently Used map */\nexport class LRUMap<K, V> {\n  private readonly _cache: Map<K, V>;\n\n  public constructor(private readonly _maxSize: number) {\n    this._cache = new Map<K, V>();\n  }\n\n  /** Get the current size of the cache */\n  public get size(): number {\n    return this._cache.size;\n  }\n\n  /** Get an entry or undefined if it was not in the cache. Re-inserts to update the recently used order */\n  public get(key: K): V | undefined {\n    const value = this._cache.get(key);\n    if (value === undefined) {\n      return undefined;\n    }\n    // Remove and re-insert to update the order\n    this._cache.delete(key);\n    this._cache.set(key, value);\n    return value;\n  }\n\n  /** Insert an entry and evict an older entry if we've reached maxSize */\n  public set(key: K, value: V): void {\n    if (this._cache.size >= this._maxSize) {\n      // keys() returns an iterator in insertion order so keys().next() gives us the oldest key\n      this._cache.delete(this._cache.keys().next().value);\n    }\n    this._cache.set(key, value);\n  }\n\n  /** Remove an entry and return the entry if it was in the cache */\n  public remove(key: K): V | undefined {\n    const value = this._cache.get(key);\n    if (value) {\n      this._cache.delete(key);\n    }\n    return value;\n  }\n\n  /** Clear all entries */\n  public clear(): void {\n    this._cache.clear();\n  }\n\n  /** Get all the keys */\n  public keys(): Array<K> {\n    return Array.from(this._cache.keys());\n  }\n\n  /** Get all the values */\n  public values(): Array<V> {\n    const values: V[] = [];\n    this._cache.forEach(value => values.push(value));\n    return values;\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\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", "// 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 index = require('./instrument/index.js');\nconst is = require('./is.js');\nconst isBrowser = require('./isBrowser.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 eventbuilder = require('./eventbuilder.js');\nconst anr = require('./anr.js');\nconst lru = require('./lru.js');\nconst _asyncNullishCoalesce = require('./buildPolyfills/_asyncNullishCoalesce.js');\nconst _asyncOptionalChain = require('./buildPolyfills/_asyncOptionalChain.js');\nconst _asyncOptionalChainDelete = require('./buildPolyfills/_asyncOptionalChainDelete.js');\nconst _nullishCoalesce = require('./buildPolyfills/_nullishCoalesce.js');\nconst _optionalChain = require('./buildPolyfills/_optionalChain.js');\nconst _optionalChainDelete = require('./buildPolyfills/_optionalChainDelete.js');\nconst console = require('./instrument/console.js');\nconst dom = require('./instrument/dom.js');\nconst xhr = require('./instrument/xhr.js');\nconst fetch = require('./instrument/fetch.js');\nconst history = require('./instrument/history.js');\nconst globalError = require('./instrument/globalError.js');\nconst globalUnhandledRejection = require('./instrument/globalUnhandledRejection.js');\nconst _handlers = require('./instrument/_handlers.js');\nconst nodeStackTrace = require('./node-stack-trace.js');\nconst escapeStringForRegex = require('./vendor/escapeStringForRegex.js');\nconst supportsHistory = require('./vendor/supportsHistory.js');\n\n\n\nexports.applyAggregateErrorsToEvent = aggregateErrors.applyAggregateErrorsToEvent;\nexports.getComponentName = browser.getComponentName;\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.addInstrumentationHandler = index.addInstrumentationHandler;\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.isParameterizedString = is.isParameterizedString;\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.isBrowser = isBrowser.isBrowser;\nexports.CONSOLE_LEVELS = logger.CONSOLE_LEVELS;\nexports.consoleSandbox = logger.consoleSandbox;\nexports.logger = logger.logger;\nexports.originalConsoleMethods = logger.originalConsoleMethods;\nexports.memoBuilder = memo.memoBuilder;\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.normalizeUrlToBase = normalize.normalizeUrlToBase;\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.DEFAULT_USER_INCLUDES = requestdata.DEFAULT_USER_INCLUDES;\nexports.addRequestDataToEvent = requestdata.addRequestDataToEvent;\nexports.addRequestDataToTransaction = requestdata.addRequestDataToTransaction;\nexports.extractPathForTransaction = requestdata.extractPathForTransaction;\nexports.extractRequestData = requestdata.extractRequestData;\nexports.winterCGHeadersToDict = requestdata.winterCGHeadersToDict;\nexports.winterCGRequestToRequestData = requestdata.winterCGRequestToRequestData;\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.TRACEPARENT_REGEXP = tracing.TRACEPARENT_REGEXP;\nexports.extractTraceparentData = tracing.extractTraceparentData;\nexports.generateSentryTraceHeader = tracing.generateSentryTraceHeader;\nexports.propagationContextFromHeaders = tracing.propagationContextFromHeaders;\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 = eventbuilder.eventFromMessage;\nexports.eventFromUnknownInput = eventbuilder.eventFromUnknownInput;\nexports.exceptionFromError = eventbuilder.exceptionFromError;\nexports.parseStackFrames = eventbuilder.parseStackFrames;\nexports.callFrameToStackFrame = anr.callFrameToStackFrame;\nexports.watchdogTimer = anr.watchdogTimer;\nexports.LRUMap = lru.LRUMap;\nexports._asyncNullishCoalesce = _asyncNullishCoalesce._asyncNullishCoalesce;\nexports._asyncOptionalChain = _asyncOptionalChain._asyncOptionalChain;\nexports._asyncOptionalChainDelete = _asyncOptionalChainDelete._asyncOptionalChainDelete;\nexports._nullishCoalesce = _nullishCoalesce._nullishCoalesce;\nexports._optionalChain = _optionalChain._optionalChain;\nexports._optionalChainDelete = _optionalChainDelete._optionalChainDelete;\nexports.addConsoleInstrumentationHandler = console.addConsoleInstrumentationHandler;\nexports.addClickKeypressInstrumentationHandler = dom.addClickKeypressInstrumentationHandler;\nexports.SENTRY_XHR_DATA_KEY = xhr.SENTRY_XHR_DATA_KEY;\nexports.addXhrInstrumentationHandler = xhr.addXhrInstrumentationHandler;\nexports.addFetchInstrumentationHandler = fetch.addFetchInstrumentationHandler;\nexports.addHistoryInstrumentationHandler = history.addHistoryInstrumentationHandler;\nexports.addGlobalErrorInstrumentationHandler = globalError.addGlobalErrorInstrumentationHandler;\nexports.addGlobalUnhandledRejectionInstrumentationHandler = globalUnhandledRejection.addGlobalUnhandledRejectionInstrumentationHandler;\nexports.resetInstrumentationHandlers = _handlers.resetInstrumentationHandlers;\nexports.filenameIsInApp = nodeStackTrace.filenameIsInApp;\nexports.escapeStringForRegex = escapeStringForRegex.escapeStringForRegex;\nexports.supportsHistory = supportsHistory.supportsHistory;\n//# sourceMappingURL=index.js.map\n", "declare const __DEBUG_BUILD__: boolean;\n\n/**\n * This serves as a build time flag that will be true by default, but false in non-debug builds or if users replace `__SENTRY_DEBUG__` in their generated code.\n *\n * ATTENTION: This constant must never cross package boundaries (i.e. be exported) to guarantee that it can be used for tree shaking.\n */\nexport const DEBUG_BUILD = __DEBUG_BUILD__;\n", "export const DEFAULT_ENVIRONMENT = 'production';\n", "import type { Event, EventHint, EventProcessor } from '@sentry/types';\nimport { SyncPromise, getGlobalSingleton, isThenable, logger } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from './debug-build';\n\n/**\n * Returns the global event processors.\n * @deprecated Global event processors will be removed in v8.\n */\nexport function getGlobalEventProcessors(): EventProcessor[] {\n  return getGlobalSingleton<EventProcessor[]>('globalEventProcessors', () => []);\n}\n\n/**\n * Add a EventProcessor to be kept globally.\n * @deprecated Use `addEventProcessor` instead. Global event processors will be removed in v8.\n */\nexport function addGlobalEventProcessor(callback: EventProcessor): void {\n  // eslint-disable-next-line deprecation/deprecation\n  getGlobalEventProcessors().push(callback);\n}\n\n/**\n * Process an array of event processors, returning the processed event (or `null` if the event was dropped).\n */\nexport function 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 && processor.id && result === null && logger.log(`Event processor \"${processor.id}\" dropped event`);\n\n      if (isThenable(result)) {\n        void result\n          .then(final => notifyEventProcessors(processors, final, hint, index + 1).then(resolve))\n          .then(null, reject);\n      } else {\n        void notifyEventProcessors(processors, result, hint, index + 1)\n          .then(resolve)\n          .then(null, reject);\n      }\n    }\n  });\n}\n", "import type { SerializedSession, Session, SessionContext, SessionStatus } from '@sentry/types';\nimport { dropUndefinedKeys, timestampInSeconds, uuid4 } from '@sentry/utils';\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.abnormal_mechanism) {\n    session.abnormal_mechanism = context.abnormal_mechanism;\n  }\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    abnormal_mechanism: session.abnormal_mechanism,\n    attrs: {\n      release: session.release,\n      environment: session.environment,\n      ip_address: session.ipAddress,\n      user_agent: session.userAgent,\n    },\n  });\n}\n", "import type { Span, SpanJSON, SpanTimeInput, TraceContext } from '@sentry/types';\nimport { dropUndefinedKeys, generateSentryTraceHeader, timestampInSeconds } from '@sentry/utils';\nimport type { Span as SpanClass } from '../tracing/span';\n\n// These are aligned with OpenTelemetry trace flags\nexport const TRACE_FLAG_NONE = 0x0;\nexport const TRACE_FLAG_SAMPLED = 0x1;\n\n/**\n * Convert a span to a trace context, which can be sent as the `trace` context in an event.\n */\nexport function spanToTraceContext(span: Span): TraceContext {\n  const { spanId: span_id, traceId: trace_id } = span.spanContext();\n  const { data, op, parent_span_id, status, tags, origin } = spanToJSON(span);\n\n  return dropUndefinedKeys({\n    data,\n    op,\n    parent_span_id,\n    span_id,\n    status,\n    tags,\n    trace_id,\n    origin,\n  });\n}\n\n/**\n * Convert a Span to a Sentry trace header.\n */\nexport function spanToTraceHeader(span: Span): string {\n  const { traceId, spanId } = span.spanContext();\n  const sampled = spanIsSampled(span);\n  return generateSentryTraceHeader(traceId, spanId, sampled);\n}\n\n/**\n * Convert a span time input intp a timestamp in seconds.\n */\nexport function spanTimeInputToSeconds(input: SpanTimeInput | undefined): number {\n  if (typeof input === 'number') {\n    return ensureTimestampInSeconds(input);\n  }\n\n  if (Array.isArray(input)) {\n    // See {@link HrTime} for the array-based time format\n    return input[0] + input[1] / 1e9;\n  }\n\n  if (input instanceof Date) {\n    return ensureTimestampInSeconds(input.getTime());\n  }\n\n  return timestampInSeconds();\n}\n\n/**\n * Converts a timestamp to second, if it was in milliseconds, or keeps it as second.\n */\nfunction ensureTimestampInSeconds(timestamp: number): number {\n  const isMs = timestamp > 9999999999;\n  return isMs ? timestamp / 1000 : timestamp;\n}\n\n/**\n * Convert a span to a JSON representation.\n * Note that all fields returned here are optional and need to be guarded against.\n *\n * Note: Because of this, we currently have a circular type dependency (which we opted out of in package.json).\n * This is not avoidable as we need `spanToJSON` in `spanUtils.ts`, which in turn is needed by `span.ts` for backwards compatibility.\n * And `spanToJSON` needs the Span class from `span.ts` to check here.\n * TODO v8: When we remove the deprecated stuff from `span.ts`, we can remove the circular dependency again.\n */\nexport function spanToJSON(span: Span): Partial<SpanJSON> {\n  if (spanIsSpanClass(span)) {\n    return span.getSpanJSON();\n  }\n\n  // Fallback: We also check for `.toJSON()` here...\n  // eslint-disable-next-line deprecation/deprecation\n  if (typeof span.toJSON === 'function') {\n    // eslint-disable-next-line deprecation/deprecation\n    return span.toJSON();\n  }\n\n  return {};\n}\n\n/**\n * Sadly, due to circular dependency checks we cannot actually import the Span class here and check for instanceof.\n * :( So instead we approximate this by checking if it has the `getSpanJSON` method.\n */\nfunction spanIsSpanClass(span: Span): span is SpanClass {\n  return typeof (span as SpanClass).getSpanJSON === 'function';\n}\n\n/**\n * Returns true if a span is sampled.\n * In most cases, you should just use `span.isRecording()` instead.\n * However, this has a slightly different semantic, as it also returns false if the span is finished.\n * So in the case where this distinction is important, use this method.\n */\nexport function spanIsSampled(span: Span): boolean {\n  // We align our trace flags with the ones OpenTelemetry use\n  // So we also check for sampled the same way they do.\n  const { traceFlags } = span.spanContext();\n  // eslint-disable-next-line no-bitwise\n  return Boolean(traceFlags & TRACE_FLAG_SAMPLED);\n}\n", "import type {\n  CaptureContext,\n  Client,\n  ClientOptions,\n  Event,\n  EventHint,\n  Scope as ScopeInterface,\n  ScopeContext,\n  StackFrame,\n  StackParser,\n} from '@sentry/types';\nimport { GLOBAL_OBJ, addExceptionMechanism, dateTimestampInSeconds, normalize, truncate, uuid4 } from '@sentry/utils';\n\nimport { DEFAULT_ENVIRONMENT } from '../constants';\nimport { getGlobalEventProcessors, notifyEventProcessors } from '../eventProcessors';\nimport { Scope, getGlobalScope } from '../scope';\nimport { applyScopeDataToEvent, mergeScopeData } from './applyScopeDataToEvent';\nimport { spanToJSON } from './spanUtils';\n\n/**\n * This type makes sure that we get either a CaptureContext, OR an EventHint.\n * It does not allow mixing them, which could lead to unexpected outcomes, e.g. this is disallowed:\n * { user: { id: '123' }, mechanism: { handled: false } }\n */\nexport type ExclusiveEventHintOrCaptureContext =\n  | (CaptureContext & Partial<{ [key in keyof EventHint]: never }>)\n  | (EventHint & Partial<{ [key in keyof ScopeContext]: never }>);\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  client?: Client,\n  isolationScope?: 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  const finalScope = getFinalScope(scope, hint.captureContext);\n\n  if (hint.mechanism) {\n    addExceptionMechanism(prepared, hint.mechanism);\n  }\n\n  const clientEventProcessors = client && client.getEventProcessors ? client.getEventProcessors() : [];\n\n  // This should be the last thing called, since we want that\n  // {@link Hub.addEventProcessor} gets the finished prepared event.\n  // Merge scope data together\n  const data = getGlobalScope().getScopeData();\n\n  if (isolationScope) {\n    const isolationData = isolationScope.getScopeData();\n    mergeScopeData(data, isolationData);\n  }\n\n  if (finalScope) {\n    const finalScopeData = finalScope.getScopeData();\n    mergeScopeData(data, finalScopeData);\n  }\n\n  const attachments = [...(hint.attachments || []), ...data.attachments];\n  if (attachments.length) {\n    hint.attachments = attachments;\n  }\n\n  applyScopeDataToEvent(prepared, data);\n\n  // TODO (v8): Update this order to be: Global > Client > Scope\n  const eventProcessors = [\n    ...clientEventProcessors,\n    // eslint-disable-next-line deprecation/deprecation\n    ...getGlobalEventProcessors(),\n    // Run scope event processors _after_ all other processors\n    ...data.eventProcessors,\n  ];\n\n  const result = notifyEventProcessors(eventProcessors, prepared, hint);\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      const data = spanToJSON(span).data;\n\n      if (data) {\n        // This is a bit weird, as we generally have `Span` instances here, but to be safe we do not assume so\n        // eslint-disable-next-line deprecation/deprecation\n        span.data = normalize(data, depth, maxBreadth);\n      }\n\n      return span;\n    });\n  }\n\n  return normalized;\n}\n\nfunction getFinalScope(scope: Scope | undefined, captureContext: CaptureContext | undefined): Scope | undefined {\n  if (!captureContext) {\n    return scope;\n  }\n\n  const finalScope = scope ? scope.clone() : new Scope();\n  finalScope.update(captureContext);\n  return finalScope;\n}\n\n/**\n * Parse either an `EventHint` directly, or convert a `CaptureContext` to an `EventHint`.\n * This is used to allow to update method signatures that used to accept a `CaptureContext` but should now accept an `EventHint`.\n */\nexport function parseEventHintOrCaptureContext(\n  hint: ExclusiveEventHintOrCaptureContext | undefined,\n): EventHint | undefined {\n  if (!hint) {\n    return undefined;\n  }\n\n  // If you pass a Scope or `() => Scope` as CaptureContext, we just return this as captureContext\n  if (hintIsScopeOrFunction(hint)) {\n    return { captureContext: hint };\n  }\n\n  if (hintIsScopeContext(hint)) {\n    return {\n      captureContext: hint,\n    };\n  }\n\n  return hint;\n}\n\nfunction hintIsScopeOrFunction(\n  hint: CaptureContext | EventHint,\n): hint is ScopeInterface | ((scope: ScopeInterface) => ScopeInterface) {\n  return hint instanceof Scope || typeof hint === 'function';\n}\n\ntype ScopeContextProperty = keyof ScopeContext;\nconst captureContextKeys: readonly ScopeContextProperty[] = [\n  'user',\n  'level',\n  'extra',\n  'contexts',\n  'tags',\n  'fingerprint',\n  'requestSession',\n  'propagationContext',\n] as const;\n\nfunction hintIsScopeContext(hint: Partial<ScopeContext> | EventHint): hint is Partial<ScopeContext> {\n  return Object.keys(hint).some(key => captureContextKeys.includes(key as ScopeContextProperty));\n}\n", "import type {\n  Breadcrumb,\n  BreadcrumbHint,\n  CaptureContext,\n  CheckIn,\n  Client,\n  CustomSamplingContext,\n  Event,\n  EventHint,\n  Extra,\n  Extras,\n  FinishedCheckIn,\n  MonitorConfig,\n  Primitive,\n  Scope as ScopeInterface,\n  Session,\n  SessionContext,\n  Severity,\n  SeverityLevel,\n  Span,\n  TransactionContext,\n  User,\n} from '@sentry/types';\nimport { GLOBAL_OBJ, isThenable, logger, timestampInSeconds, uuid4 } from '@sentry/utils';\n\nimport { DEFAULT_ENVIRONMENT } from './constants';\nimport { DEBUG_BUILD } from './debug-build';\nimport type { Hub } from './hub';\nimport { runWithAsyncContext } from './hub';\nimport { getCurrentHub, getIsolationScope } from './hub';\nimport type { Scope } from './scope';\nimport { closeSession, makeSession, updateSession } from './session';\nimport type { ExclusiveEventHintOrCaptureContext } from './utils/prepareEvent';\nimport { parseEventHintOrCaptureContext } from './utils/prepareEvent';\n\n/**\n * Captures an exception event and sends it to Sentry.\n *\n * @param exception The exception to capture.\n * @param hint Optional additional data to attach to the Sentry event.\n * @returns the id of the captured Sentry event.\n */\nexport function captureException(\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  exception: any,\n  hint?: ExclusiveEventHintOrCaptureContext,\n): string {\n  // eslint-disable-next-line deprecation/deprecation\n  return getCurrentHub().captureException(exception, parseEventHintOrCaptureContext(hint));\n}\n\n/**\n * Captures a message event and sends it to Sentry.\n *\n * @param exception The exception to capture.\n * @param captureContext Define the level of the message or pass in additional data to attach to the message.\n * @returns the id of the captured message.\n */\nexport function captureMessage(\n  message: string,\n  // eslint-disable-next-line deprecation/deprecation\n  captureContext?: CaptureContext | Severity | SeverityLevel,\n): string {\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  // eslint-disable-next-line deprecation/deprecation\n  return getCurrentHub().captureMessage(message, level, context);\n}\n\n/**\n * Captures a manually created event and sends it to Sentry.\n *\n * @param exception The event to send to Sentry.\n * @param hint Optional additional data to attach to the Sentry event.\n * @returns the id of the captured event.\n */\nexport function captureEvent(event: Event, hint?: EventHint): string {\n  // eslint-disable-next-line deprecation/deprecation\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 *\n * @deprecated Use getCurrentScope() directly.\n */\n// eslint-disable-next-line deprecation/deprecation\nexport function configureScope(callback: (scope: Scope) => void): ReturnType<Hub['configureScope']> {\n  // eslint-disable-next-line deprecation/deprecation\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 */\n// eslint-disable-next-line deprecation/deprecation\nexport function addBreadcrumb(breadcrumb: Breadcrumb, hint?: BreadcrumbHint): ReturnType<Hub['addBreadcrumb']> {\n  // eslint-disable-next-line deprecation/deprecation\n  getCurrentHub().addBreadcrumb(breadcrumb, hint);\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, deprecation/deprecation\nexport function setContext(name: string, context: { [key: string]: any } | null): ReturnType<Hub['setContext']> {\n  // eslint-disable-next-line deprecation/deprecation\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 */\n// eslint-disable-next-line deprecation/deprecation\nexport function setExtras(extras: Extras): ReturnType<Hub['setExtras']> {\n  // eslint-disable-next-line deprecation/deprecation\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 */\n// eslint-disable-next-line deprecation/deprecation\nexport function setExtra(key: string, extra: Extra): ReturnType<Hub['setExtra']> {\n  // eslint-disable-next-line deprecation/deprecation\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 */\n// eslint-disable-next-line deprecation/deprecation\nexport function setTags(tags: { [key: string]: Primitive }): ReturnType<Hub['setTags']> {\n  // eslint-disable-next-line deprecation/deprecation\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 */\n// eslint-disable-next-line deprecation/deprecation\nexport function setTag(key: string, value: Primitive): ReturnType<Hub['setTag']> {\n  // eslint-disable-next-line deprecation/deprecation\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 */\n// eslint-disable-next-line deprecation/deprecation\nexport function setUser(user: User | null): ReturnType<Hub['setUser']> {\n  // eslint-disable-next-line deprecation/deprecation\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 */\nexport function withScope<T>(callback: (scope: Scope) => T): T;\n/**\n * Set the given scope as the active scope in the callback.\n */\nexport function withScope<T>(scope: ScopeInterface | undefined, callback: (scope: Scope) => T): T;\n/**\n * Either creates a new active scope, or sets the given scope as active scope in the given callback.\n */\nexport function withScope<T>(\n  ...rest: [callback: (scope: Scope) => T] | [scope: ScopeInterface | undefined, callback: (scope: Scope) => T]\n): T {\n  // eslint-disable-next-line deprecation/deprecation\n  const hub = getCurrentHub();\n\n  // If a scope is defined, we want to make this the active scope instead of the default one\n  if (rest.length === 2) {\n    const [scope, callback] = rest;\n    if (!scope) {\n      // eslint-disable-next-line deprecation/deprecation\n      return hub.withScope(callback);\n    }\n\n    // eslint-disable-next-line deprecation/deprecation\n    return hub.withScope(() => {\n      // eslint-disable-next-line deprecation/deprecation\n      hub.getStackTop().scope = scope as Scope;\n      return callback(scope as Scope);\n    });\n  }\n\n  // eslint-disable-next-line deprecation/deprecation\n  return hub.withScope(rest[0]);\n}\n\n/**\n * Attempts to fork the current isolation scope and the current scope based on the current async context strategy. If no\n * async context strategy is set, the isolation scope and the current scope will not be forked (this is currently the\n * case, for example, in the browser).\n *\n * Usage of this function in environments without async context strategy is discouraged and may lead to unexpected behaviour.\n *\n * This function is intended for Sentry SDK and SDK integration development. It is not recommended to be used in \"normal\"\n * applications directly because it comes with pitfalls. Use at your own risk!\n *\n * @param callback The callback in which the passed isolation scope is active. (Note: In environments without async\n * context strategy, the currently active isolation scope may change within execution of the callback.)\n * @returns The same value that `callback` returns.\n */\nexport function withIsolationScope<T>(callback: (isolationScope: Scope) => T): T {\n  return runWithAsyncContext(() => {\n    return callback(getIsolationScope());\n  });\n}\n\n/**\n * Forks the current scope and sets the provided span as active span in the context of the provided callback.\n *\n * @param span Spans started in the context of the provided callback will be children of this span.\n * @param callback Execution context in which the provided span will be active. Is passed the newly forked scope.\n * @returns the value returned from the provided callback function.\n */\nexport function withActiveSpan<T>(span: Span, callback: (scope: Scope) => T): T {\n  return withScope(scope => {\n    // eslint-disable-next-line deprecation/deprecation\n    scope.setSpan(span);\n    return callback(scope);\n  });\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 `.end()` 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 *\n * @deprecated Use `startSpan()`, `startSpanManual()` or `startInactiveSpan()` instead.\n */\nexport function startTransaction(\n  context: TransactionContext,\n  customSamplingContext?: CustomSamplingContext,\n  // eslint-disable-next-line deprecation/deprecation\n): ReturnType<Hub['startTransaction']> {\n  // eslint-disable-next-line deprecation/deprecation\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 scope = getCurrentScope();\n  const client = 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 * Wraps a callback with a cron monitor check in. The check in will be sent to Sentry when the callback finishes.\n *\n * @param monitorSlug The distinct slug of the monitor.\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 withMonitor<T>(\n  monitorSlug: CheckIn['monitorSlug'],\n  callback: () => T,\n  upsertMonitorConfig?: MonitorConfig,\n): T {\n  const checkInId = captureCheckIn({ monitorSlug, status: 'in_progress' }, upsertMonitorConfig);\n  const now = timestampInSeconds();\n\n  function finishCheckIn(status: FinishedCheckIn['status']): void {\n    captureCheckIn({ monitorSlug, status, checkInId, duration: timestampInSeconds() - now });\n  }\n\n  let maybePromiseResult: T;\n  try {\n    maybePromiseResult = callback();\n  } catch (e) {\n    finishCheckIn('error');\n    throw e;\n  }\n\n  if (isThenable(maybePromiseResult)) {\n    Promise.resolve(maybePromiseResult).then(\n      () => {\n        finishCheckIn('ok');\n      },\n      () => {\n        finishCheckIn('error');\n      },\n    );\n  } else {\n    finishCheckIn('ok');\n  }\n\n  return maybePromiseResult;\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 = 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 = 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  // eslint-disable-next-line deprecation/deprecation\n  return getCurrentHub().lastEventId();\n}\n\n/**\n * Get the currently active client.\n */\nexport function getClient<C extends Client>(): C | undefined {\n  // eslint-disable-next-line deprecation/deprecation\n  return getCurrentHub().getClient<C>();\n}\n\n/**\n * Returns true if Sentry has been properly initialized.\n */\nexport function isInitialized(): boolean {\n  return !!getClient();\n}\n\n/**\n * Get the currently active scope.\n */\nexport function getCurrentScope(): Scope {\n  // eslint-disable-next-line deprecation/deprecation\n  return getCurrentHub().getScope();\n}\n\n/**\n * Start a session on the current isolation scope.\n *\n * @param context (optional) additional properties to be applied to the returned session object\n *\n * @returns the new active session\n */\nexport function startSession(context?: SessionContext): Session {\n  const client = getClient();\n  const isolationScope = getIsolationScope();\n  const currentScope = getCurrentScope();\n\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: currentScope.getUser() || isolationScope.getUser(),\n    ...(userAgent && { userAgent }),\n    ...context,\n  });\n\n  // End existing session if there's one\n  const currentSession = isolationScope.getSession();\n  if (currentSession && currentSession.status === 'ok') {\n    updateSession(currentSession, { status: 'exited' });\n  }\n\n  endSession();\n\n  // Afterwards we set the new session on the scope\n  isolationScope.setSession(session);\n\n  // TODO (v8): Remove this and only use the isolation scope(?).\n  // For v7 though, we can't \"soft-break\" people using getCurrentHub().getScope().setSession()\n  currentScope.setSession(session);\n\n  return session;\n}\n\n/**\n * End the session on the current isolation scope.\n */\nexport function endSession(): void {\n  const isolationScope = getIsolationScope();\n  const currentScope = getCurrentScope();\n\n  const session = currentScope.getSession() || isolationScope.getSession();\n  if (session) {\n    closeSession(session);\n  }\n  _sendSessionUpdate();\n\n  // the session is over; take it off of the scope\n  isolationScope.setSession();\n\n  // TODO (v8): Remove this and only use the isolation scope(?).\n  // For v7 though, we can't \"soft-break\" people using getCurrentHub().getScope().setSession()\n  currentScope.setSession();\n}\n\n/**\n * Sends the current Session on the scope\n */\nfunction _sendSessionUpdate(): void {\n  const isolationScope = getIsolationScope();\n  const currentScope = getCurrentScope();\n  const client = getClient();\n  // TODO (v8): Remove currentScope and only use the isolation scope(?).\n  // For v7 though, we can't \"soft-break\" people using getCurrentHub().getScope().setSession()\n  const session = currentScope.getSession() || isolationScope.getSession();\n  if (session && client && client.captureSession) {\n    client.captureSession(session);\n  }\n}\n\n/**\n * Sends the current session on the scope to Sentry\n *\n * @param end If set the session will be marked as exited and removed from the scope.\n *            Defaults to `false`.\n */\nexport function captureSession(end: boolean = false): void {\n  // both send the update and pull the session from the scope\n  if (end) {\n    endSession();\n    return;\n  }\n\n  // only send the update\n  _sendSessionUpdate();\n}\n", "import type { Span } from '@sentry/types';\n\n/**\n * Returns the root span of a given span.\n *\n * As long as we use `Transaction`s internally, the returned root span\n * will be a `Transaction` but be aware that this might change in the future.\n *\n * If the given span has no root span or transaction, `undefined` is returned.\n */\nexport function getRootSpan(span: Span): Span | undefined {\n  // TODO (v8): Remove this check and just return span\n  // eslint-disable-next-line deprecation/deprecation\n  return span.transaction;\n}\n", "import type { Client, DynamicSamplingContext, Scope, Span, Transaction } from '@sentry/types';\nimport { dropUndefinedKeys } from '@sentry/utils';\n\nimport { DEFAULT_ENVIRONMENT } from '../constants';\nimport { getClient, getCurrentScope } from '../exports';\nimport { getRootSpan } from '../utils/getRootSpan';\nimport { spanIsSampled, spanToJSON } from '../utils/spanUtils';\n\n/**\n * Creates a dynamic sampling context from a client.\n *\n * Dispatches 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  // TODO(v8): Remove segment from User\n  // eslint-disable-next-line deprecation/deprecation\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\n/**\n * A Span with a frozen dynamic sampling context.\n */\ntype TransactionWithV7FrozenDsc = Transaction & { _frozenDynamicSamplingContext?: DynamicSamplingContext };\n\n/**\n * Creates a dynamic sampling context from a span (and client and scope)\n *\n * @param span the span from which a few values like the root span name and sample rate are extracted.\n *\n * @returns a dynamic sampling context\n */\nexport function getDynamicSamplingContextFromSpan(span: Span): Readonly<Partial<DynamicSamplingContext>> {\n  const client = getClient();\n  if (!client) {\n    return {};\n  }\n\n  // passing emit=false here to only emit later once the DSC is actually populated\n  const dsc = getDynamicSamplingContextFromClient(spanToJSON(span).trace_id || '', client, getCurrentScope());\n\n  // TODO (v8): Remove v7FrozenDsc as a Transaction will no longer have _frozenDynamicSamplingContext\n  const txn = getRootSpan(span) as TransactionWithV7FrozenDsc | undefined;\n  if (!txn) {\n    return dsc;\n  }\n\n  // TODO (v8): Remove v7FrozenDsc as a Transaction will no longer have _frozenDynamicSamplingContext\n  // For now we need to avoid breaking users who directly created a txn with a DSC, where this field is still set.\n  // @see Transaction class constructor\n  const v7FrozenDsc = txn && txn._frozenDynamicSamplingContext;\n  if (v7FrozenDsc) {\n    return v7FrozenDsc;\n  }\n\n  // TODO (v8): Replace txn.metadata with txn.attributes[]\n  // We can't do this yet because attributes aren't always set yet.\n  // eslint-disable-next-line deprecation/deprecation\n  const { sampleRate: maybeSampleRate, source } = txn.metadata;\n  if (maybeSampleRate != null) {\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 jsonSpan = spanToJSON(txn);\n\n  // after JSON conversion, txn.name becomes jsonSpan.description\n  if (source && source !== 'url') {\n    dsc.transaction = jsonSpan.description;\n  }\n\n  dsc.sampled = String(spanIsSampled(txn));\n\n  client.emit && client.emit('createDsc', dsc);\n\n  return dsc;\n}\n", "import type { Breadcrumb, Event, ScopeData, Span } from '@sentry/types';\nimport { arrayify, dropUndefinedKeys } from '@sentry/utils';\nimport { getDynamicSamplingContextFromSpan } from '../tracing/dynamicSamplingContext';\nimport { getRootSpan } from './getRootSpan';\nimport { spanToJSON, spanToTraceContext } from './spanUtils';\n\n/**\n * Applies data from the scope to the event and runs all event processors on it.\n */\nexport function applyScopeDataToEvent(event: Event, data: ScopeData): void {\n  const { fingerprint, span, breadcrumbs, sdkProcessingMetadata } = data;\n\n  // Apply general data\n  applyDataToEvent(event, data);\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 (span) {\n    applySpanToEvent(event, span);\n  }\n\n  applyFingerprintToEvent(event, fingerprint);\n  applyBreadcrumbsToEvent(event, breadcrumbs);\n  applySdkMetadataToEvent(event, sdkProcessingMetadata);\n}\n\n/** Merge data of two scopes together. */\nexport function mergeScopeData(data: ScopeData, mergeData: ScopeData): void {\n  const {\n    extra,\n    tags,\n    user,\n    contexts,\n    level,\n    sdkProcessingMetadata,\n    breadcrumbs,\n    fingerprint,\n    eventProcessors,\n    attachments,\n    propagationContext,\n    // eslint-disable-next-line deprecation/deprecation\n    transactionName,\n    span,\n  } = mergeData;\n\n  mergeAndOverwriteScopeData(data, 'extra', extra);\n  mergeAndOverwriteScopeData(data, 'tags', tags);\n  mergeAndOverwriteScopeData(data, 'user', user);\n  mergeAndOverwriteScopeData(data, 'contexts', contexts);\n  mergeAndOverwriteScopeData(data, 'sdkProcessingMetadata', sdkProcessingMetadata);\n\n  if (level) {\n    data.level = level;\n  }\n\n  if (transactionName) {\n    // eslint-disable-next-line deprecation/deprecation\n    data.transactionName = transactionName;\n  }\n\n  if (span) {\n    data.span = span;\n  }\n\n  if (breadcrumbs.length) {\n    data.breadcrumbs = [...data.breadcrumbs, ...breadcrumbs];\n  }\n\n  if (fingerprint.length) {\n    data.fingerprint = [...data.fingerprint, ...fingerprint];\n  }\n\n  if (eventProcessors.length) {\n    data.eventProcessors = [...data.eventProcessors, ...eventProcessors];\n  }\n\n  if (attachments.length) {\n    data.attachments = [...data.attachments, ...attachments];\n  }\n\n  data.propagationContext = { ...data.propagationContext, ...propagationContext };\n}\n\n/**\n * Merges certain scope data. Undefined values will overwrite any existing values.\n * Exported only for tests.\n */\nexport function mergeAndOverwriteScopeData<\n  Prop extends 'extra' | 'tags' | 'user' | 'contexts' | 'sdkProcessingMetadata',\n  Data extends ScopeData,\n>(data: Data, prop: Prop, mergeVal: Data[Prop]): void {\n  if (mergeVal && Object.keys(mergeVal).length) {\n    // Clone object\n    data[prop] = { ...data[prop] };\n    for (const key in mergeVal) {\n      if (Object.prototype.hasOwnProperty.call(mergeVal, key)) {\n        data[prop][key] = mergeVal[key];\n      }\n    }\n  }\n}\n\n/** Exported only for tests */\nexport function mergeArray<Prop extends 'breadcrumbs' | 'fingerprint'>(\n  event: Event,\n  prop: Prop,\n  mergeVal: ScopeData[Prop],\n): void {\n  const prevVal = event[prop];\n  // If we are not merging any new values,\n  // we only need to proceed if there was an empty array before (as we want to replace it with undefined)\n  if (!mergeVal.length && (!prevVal || prevVal.length)) {\n    return;\n  }\n\n  const merged = [...(prevVal || []), ...mergeVal] as ScopeData[Prop];\n  event[prop] = merged.length ? merged : undefined;\n}\n\nfunction applyDataToEvent(event: Event, data: ScopeData): void {\n  const {\n    extra,\n    tags,\n    user,\n    contexts,\n    level,\n    // eslint-disable-next-line deprecation/deprecation\n    transactionName,\n  } = data;\n\n  const cleanedExtra = dropUndefinedKeys(extra);\n  if (cleanedExtra && Object.keys(cleanedExtra).length) {\n    event.extra = { ...cleanedExtra, ...event.extra };\n  }\n\n  const cleanedTags = dropUndefinedKeys(tags);\n  if (cleanedTags && Object.keys(cleanedTags).length) {\n    event.tags = { ...cleanedTags, ...event.tags };\n  }\n\n  const cleanedUser = dropUndefinedKeys(user);\n  if (cleanedUser && Object.keys(cleanedUser).length) {\n    event.user = { ...cleanedUser, ...event.user };\n  }\n\n  const cleanedContexts = dropUndefinedKeys(contexts);\n  if (cleanedContexts && Object.keys(cleanedContexts).length) {\n    event.contexts = { ...cleanedContexts, ...event.contexts };\n  }\n\n  if (level) {\n    event.level = level;\n  }\n\n  if (transactionName) {\n    event.transaction = transactionName;\n  }\n}\n\nfunction applyBreadcrumbsToEvent(event: Event, breadcrumbs: Breadcrumb[]): void {\n  const mergedBreadcrumbs = [...(event.breadcrumbs || []), ...breadcrumbs];\n  event.breadcrumbs = mergedBreadcrumbs.length ? mergedBreadcrumbs : undefined;\n}\n\nfunction applySdkMetadataToEvent(event: Event, sdkProcessingMetadata: ScopeData['sdkProcessingMetadata']): void {\n  event.sdkProcessingMetadata = {\n    ...event.sdkProcessingMetadata,\n    ...sdkProcessingMetadata,\n  };\n}\n\nfunction applySpanToEvent(event: Event, span: Span): void {\n  event.contexts = { trace: spanToTraceContext(span), ...event.contexts };\n  const rootSpan = getRootSpan(span);\n  if (rootSpan) {\n    event.sdkProcessingMetadata = {\n      dynamicSamplingContext: getDynamicSamplingContextFromSpan(span),\n      ...event.sdkProcessingMetadata,\n    };\n    const transactionName = spanToJSON(rootSpan).description;\n    if (transactionName) {\n      event.tags = { transaction: transactionName, ...event.tags };\n    }\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 */\nfunction applyFingerprintToEvent(event: Event, fingerprint: ScopeData['fingerprint'] | undefined): 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 (fingerprint) {\n    event.fingerprint = event.fingerprint.concat(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", "/* eslint-disable max-lines */\nimport type {\n  Attachment,\n  Breadcrumb,\n  CaptureContext,\n  Client,\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  ScopeData,\n  Session,\n  Severity,\n  SeverityLevel,\n  Span,\n  Transaction,\n  User,\n} from '@sentry/types';\nimport { dateTimestampInSeconds, isPlainObject, logger, uuid4 } from '@sentry/utils';\n\nimport { getGlobalEventProcessors, notifyEventProcessors } from './eventProcessors';\nimport { updateSession } from './session';\nimport { applyScopeDataToEvent } from './utils/applyScopeDataToEvent';\n\n/**\n * Default value for maximum number of breadcrumbs added to an event.\n */\nconst DEFAULT_MAX_BREADCRUMBS = 100;\n\n/**\n * The global scope is kept in this module.\n * When accessing this via `getGlobalScope()` we'll make sure to set one if none is currently present.\n */\nlet globalScope: ScopeInterface | undefined;\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  /**\n   * Transaction Name\n   */\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  /** The client on this scope */\n  protected _client?: Client;\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   * @deprecated Use `scope.clone()` and `new Scope()` instead.\n   */\n  public static clone(scope?: Scope): Scope {\n    return scope ? scope.clone() : new Scope();\n  }\n\n  /**\n   * Clone this scope instance.\n   */\n  public clone(): Scope {\n    const newScope = new Scope();\n    newScope._breadcrumbs = [...this._breadcrumbs];\n    newScope._tags = { ...this._tags };\n    newScope._extra = { ...this._extra };\n    newScope._contexts = { ...this._contexts };\n    newScope._user = this._user;\n    newScope._level = this._level;\n    newScope._span = this._span;\n    newScope._session = this._session;\n    newScope._transactionName = this._transactionName;\n    newScope._fingerprint = this._fingerprint;\n    newScope._eventProcessors = [...this._eventProcessors];\n    newScope._requestSession = this._requestSession;\n    newScope._attachments = [...this._attachments];\n    newScope._sdkProcessingMetadata = { ...this._sdkProcessingMetadata };\n    newScope._propagationContext = { ...this._propagationContext };\n    newScope._client = this._client;\n\n    return newScope;\n  }\n\n  /** Update the client on the scope. */\n  public setClient(client: Client | undefined): void {\n    this._client = client;\n  }\n\n  /**\n   * Get the client assigned to this scope.\n   *\n   * It is generally recommended to use the global function `Sentry.getClient()` instead, unless you know what you are doing.\n   */\n  public getClient(): Client | undefined {\n    return this._client;\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    // If null is passed we want to unset everything, but still define keys,\n    // so that later down in the pipeline any existing values are cleared.\n    this._user = user || {\n      email: undefined,\n      id: undefined,\n      ip_address: undefined,\n      segment: undefined,\n      username: undefined,\n    };\n\n    if (this._session) {\n      updateSession(this._session, { user });\n    }\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   * Sets the transaction name on the scope for future events.\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   * Sets the Span on the scope.\n   * @param span Span\n   * @deprecated Instead of setting a span on a scope, use `startSpan()`/`startSpanManual()` instead.\n   */\n  public setSpan(span?: Span): this {\n    this._span = span;\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * Returns the `Span` if there is one.\n   * @deprecated Use `getActiveSpan()` instead.\n   */\n  public getSpan(): Span | undefined {\n    return this._span;\n  }\n\n  /**\n   * Returns the `Transaction` attached to the scope (if there is one).\n   * @deprecated You should not rely on the transaction, but just use `startSpan()` APIs instead.\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._span;\n    // Cannot replace with getRootSpan because getRootSpan returns a span, not a transaction\n    // Also, this method will be removed anyway.\n    // eslint-disable-next-line deprecation/deprecation\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    const scopeToMerge = typeof captureContext === 'function' ? captureContext(this) : captureContext;\n\n    if (scopeToMerge instanceof Scope) {\n      const scopeData = scopeToMerge.getScopeData();\n\n      this._tags = { ...this._tags, ...scopeData.tags };\n      this._extra = { ...this._extra, ...scopeData.extra };\n      this._contexts = { ...this._contexts, ...scopeData.contexts };\n      if (scopeData.user && Object.keys(scopeData.user).length) {\n        this._user = scopeData.user;\n      }\n      if (scopeData.level) {\n        this._level = scopeData.level;\n      }\n      if (scopeData.fingerprint.length) {\n        this._fingerprint = scopeData.fingerprint;\n      }\n      if (scopeToMerge.getRequestSession()) {\n        this._requestSession = scopeToMerge.getRequestSession();\n      }\n      if (scopeData.propagationContext) {\n        this._propagationContext = scopeData.propagationContext;\n      }\n    } else if (isPlainObject(scopeToMerge)) {\n      const scopeContext = captureContext as ScopeContext;\n      this._tags = { ...this._tags, ...scopeContext.tags };\n      this._extra = { ...this._extra, ...scopeContext.extra };\n      this._contexts = { ...this._contexts, ...scopeContext.contexts };\n      if (scopeContext.user) {\n        this._user = scopeContext.user;\n      }\n      if (scopeContext.level) {\n        this._level = scopeContext.level;\n      }\n      if (scopeContext.fingerprint) {\n        this._fingerprint = scopeContext.fingerprint;\n      }\n      if (scopeContext.requestSession) {\n        this._requestSession = scopeContext.requestSession;\n      }\n      if (scopeContext.propagationContext) {\n        this._propagationContext = scopeContext.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   * @deprecated Use `getScopeData()` instead.\n   */\n  public getAttachments(): Attachment[] {\n    const data = this.getScopeData();\n\n    return data.attachments;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public clearAttachments(): this {\n    this._attachments = [];\n    return this;\n  }\n\n  /** @inheritDoc */\n  public getScopeData(): ScopeData {\n    const {\n      _breadcrumbs,\n      _attachments,\n      _contexts,\n      _tags,\n      _extra,\n      _user,\n      _level,\n      _fingerprint,\n      _eventProcessors,\n      _propagationContext,\n      _sdkProcessingMetadata,\n      _transactionName,\n      _span,\n    } = this;\n\n    return {\n      breadcrumbs: _breadcrumbs,\n      attachments: _attachments,\n      contexts: _contexts,\n      tags: _tags,\n      extra: _extra,\n      user: _user,\n      level: _level,\n      fingerprint: _fingerprint || [],\n      eventProcessors: _eventProcessors,\n      propagationContext: _propagationContext,\n      sdkProcessingMetadata: _sdkProcessingMetadata,\n      transactionName: _transactionName,\n      span: _span,\n    };\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   * @deprecated Use `applyScopeDataToEvent()` directly\n   */\n  public applyToEvent(\n    event: Event,\n    hint: EventHint = {},\n    additionalEventProcessors: EventProcessor[] = [],\n  ): PromiseLike<Event | null> {\n    applyScopeDataToEvent(event, this.getScopeData());\n\n    // TODO (v8): Update this order to be: Global > Client > Scope\n    const eventProcessors: EventProcessor[] = [\n      ...additionalEventProcessors,\n      // eslint-disable-next-line deprecation/deprecation\n      ...getGlobalEventProcessors(),\n      ...this._eventProcessors,\n    ];\n\n    return notifyEventProcessors(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   * Capture an exception for this scope.\n   *\n   * @param exception The exception to capture.\n   * @param hint Optinal additional data to attach to the Sentry event.\n   * @returns the id of the captured Sentry event.\n   */\n  public captureException(exception: unknown, hint?: EventHint): string {\n    const eventId = hint && hint.event_id ? hint.event_id : uuid4();\n\n    if (!this._client) {\n      logger.warn('No client configured on scope - will not capture exception!');\n      return eventId;\n    }\n\n    const syntheticException = new Error('Sentry syntheticException');\n\n    this._client.captureException(\n      exception,\n      {\n        originalException: exception,\n        syntheticException,\n        ...hint,\n        event_id: eventId,\n      },\n      this,\n    );\n\n    return eventId;\n  }\n\n  /**\n   * Capture a message for this scope.\n   *\n   * @param message The message to capture.\n   * @param level An optional severity level to report the message with.\n   * @param hint Optional additional data to attach to the Sentry event.\n   * @returns the id of the captured message.\n   */\n  public captureMessage(message: string, level?: SeverityLevel, hint?: EventHint): string {\n    const eventId = hint && hint.event_id ? hint.event_id : uuid4();\n\n    if (!this._client) {\n      logger.warn('No client configured on scope - will not capture message!');\n      return eventId;\n    }\n\n    const syntheticException = new Error(message);\n\n    this._client.captureMessage(\n      message,\n      level,\n      {\n        originalException: message,\n        syntheticException,\n        ...hint,\n        event_id: eventId,\n      },\n      this,\n    );\n\n    return eventId;\n  }\n\n  /**\n   * Captures a manually created event for this scope and sends it to Sentry.\n   *\n   * @param exception The event to capture.\n   * @param hint Optional additional data to attach to the Sentry event.\n   * @returns the id of the captured event.\n   */\n  public captureEvent(event: Event, hint?: EventHint): string {\n    const eventId = hint && hint.event_id ? hint.event_id : uuid4();\n\n    if (!this._client) {\n      logger.warn('No client configured on scope - will not capture event!');\n      return eventId;\n    }\n\n    this._client.captureEvent(event, { ...hint, event_id: eventId }, this);\n\n    return eventId;\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/**\n * Get the global scope.\n * This scope is applied to _all_ events.\n */\nexport function getGlobalScope(): ScopeInterface {\n  if (!globalScope) {\n    globalScope = new Scope();\n  }\n\n  return globalScope;\n}\n\n/**\n * This is mainly needed for tests.\n * DO NOT USE this, as this is an internal API and subject to change.\n * @hidden\n */\nexport function setGlobalScope(scope: ScopeInterface | undefined): void {\n  globalScope = scope;\n}\n\nfunction generatePropagationContext(): PropagationContext {\n  return {\n    traceId: uuid4(),\n    spanId: uuid4().substring(16),\n  };\n}\n", "export const SDK_VERSION = '7.120.4';\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 {\n  GLOBAL_OBJ,\n  consoleSandbox,\n  dateTimestampInSeconds,\n  getGlobalSingleton,\n  isThenable,\n  logger,\n  uuid4,\n} from '@sentry/utils';\n\nimport { DEFAULT_ENVIRONMENT } from './constants';\nimport { DEBUG_BUILD } from './debug-build';\nimport { Scope } from './scope';\nimport { closeSession, makeSession, updateSession } from './session';\nimport { SDK_VERSION } from './version';\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 = parseFloat(SDK_VERSION);\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  // eslint-disable-next-line deprecation/deprecation\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    // eslint-disable-next-line deprecation/deprecation\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 * @deprecated The `Hub` class will be removed in version 8 of the SDK in favour of `Scope` and `Client` objects.\n *\n * If you previously used the `Hub` class directly, replace it with `Scope` and `Client` objects. More information:\n * - [Multiple Sentry Instances](https://docs.sentry.io/platforms/javascript/best-practices/multiple-sentry-instances/)\n * - [Browser Extensions](https://docs.sentry.io/platforms/javascript/best-practices/browser-extensions/)\n *\n * Some of our APIs are typed with the Hub class instead of the interface (e.g. `getCurrentHub`). Most of them are deprecated\n * themselves and will also be removed in version 8. More information:\n * - [Migration Guide](https://github.com/getsentry/sentry-javascript/blob/develop/MIGRATION.md#deprecate-hub)\n */\n// eslint-disable-next-line deprecation/deprecation\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  private _isolationScope: Scope;\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   * @deprecated Instantiation of Hub objects is deprecated and the constructor will be removed in version 8 of the SDK.\n   *\n   * If you are currently using the Hub for multi-client use like so:\n   *\n   * ```\n   * // OLD\n   * const hub = new Hub();\n   * hub.bindClient(client);\n   * makeMain(hub)\n   * ```\n   *\n   * instead initialize the client as follows:\n   *\n   * ```\n   * // NEW\n   * Sentry.withIsolationScope(() => {\n   *    Sentry.setCurrentClient(client);\n   *    client.init();\n   * });\n   * ```\n   *\n   * If you are using the Hub to capture events like so:\n   *\n   * ```\n   * // OLD\n   * const client = new Client();\n   * const hub = new Hub(client);\n   * hub.captureException()\n   * ```\n   *\n   * instead capture isolated events as follows:\n   *\n   * ```\n   * // NEW\n   * const client = new Client();\n   * const scope = new Scope();\n   * scope.setClient(client);\n   * scope.captureException();\n   * ```\n   */\n  public constructor(\n    client?: Client,\n    scope?: Scope,\n    isolationScope?: Scope,\n    private readonly _version: number = API_VERSION,\n  ) {\n    let assignedScope;\n    if (!scope) {\n      assignedScope = new Scope();\n      assignedScope.setClient(client);\n    } else {\n      assignedScope = scope;\n    }\n\n    let assignedIsolationScope;\n    if (!isolationScope) {\n      assignedIsolationScope = new Scope();\n      assignedIsolationScope.setClient(client);\n    } else {\n      assignedIsolationScope = isolationScope;\n    }\n\n    this._stack = [{ scope: assignedScope }];\n\n    if (client) {\n      // eslint-disable-next-line deprecation/deprecation\n      this.bindClient(client);\n    }\n\n    this._isolationScope = assignedIsolationScope;\n  }\n\n  /**\n   * Checks if this hub's version is older than the given version.\n   *\n   * @param version A version number to compare to.\n   * @return True if the given version is newer; otherwise false.\n   *\n   * @deprecated This will be removed in v8.\n   */\n  public isOlderThan(version: number): boolean {\n    return this._version < version;\n  }\n\n  /**\n   * This binds the given client to the current scope.\n   * @param client An SDK client (client) instance.\n   *\n   * @deprecated Use `initAndBind()` directly, or `setCurrentClient()` and/or `client.init()` instead.\n   */\n  public bindClient(client?: Client): void {\n    // eslint-disable-next-line deprecation/deprecation\n    const top = this.getStackTop();\n    top.client = client;\n    top.scope.setClient(client);\n    // eslint-disable-next-line deprecation/deprecation\n    if (client && client.setupIntegrations) {\n      // eslint-disable-next-line deprecation/deprecation\n      client.setupIntegrations();\n    }\n  }\n\n  /**\n   * @inheritDoc\n   *\n   * @deprecated Use `withScope` instead.\n   */\n  public pushScope(): Scope {\n    // We want to clone the content of prev scope\n    // eslint-disable-next-line deprecation/deprecation\n    const scope = this.getScope().clone();\n    // eslint-disable-next-line deprecation/deprecation\n    this.getStack().push({\n      // eslint-disable-next-line deprecation/deprecation\n      client: this.getClient(),\n      scope,\n    });\n    return scope;\n  }\n\n  /**\n   * @inheritDoc\n   *\n   * @deprecated Use `withScope` instead.\n   */\n  public popScope(): boolean {\n    // eslint-disable-next-line deprecation/deprecation\n    if (this.getStack().length <= 1) return false;\n    // eslint-disable-next-line deprecation/deprecation\n    return !!this.getStack().pop();\n  }\n\n  /**\n   * @inheritDoc\n   *\n   * @deprecated Use `Sentry.withScope()` instead.\n   */\n  public withScope<T>(callback: (scope: Scope) => T): T {\n    // eslint-disable-next-line deprecation/deprecation\n    const scope = this.pushScope();\n\n    let maybePromiseResult: T;\n    try {\n      maybePromiseResult = callback(scope);\n    } catch (e) {\n      // eslint-disable-next-line deprecation/deprecation\n      this.popScope();\n      throw e;\n    }\n\n    if (isThenable(maybePromiseResult)) {\n      // @ts-expect-error - isThenable returns the wrong type\n      return maybePromiseResult.then(\n        res => {\n          // eslint-disable-next-line deprecation/deprecation\n          this.popScope();\n          return res;\n        },\n        e => {\n          // eslint-disable-next-line deprecation/deprecation\n          this.popScope();\n          throw e;\n        },\n      );\n    }\n\n    // eslint-disable-next-line deprecation/deprecation\n    this.popScope();\n    return maybePromiseResult;\n  }\n\n  /**\n   * @inheritDoc\n   *\n   * @deprecated Use `Sentry.getClient()` instead.\n   */\n  public getClient<C extends Client>(): C | undefined {\n    // eslint-disable-next-line deprecation/deprecation\n    return this.getStackTop().client as C;\n  }\n\n  /**\n   * Returns the scope of the top stack.\n   *\n   * @deprecated Use `Sentry.getCurrentScope()` instead.\n   */\n  public getScope(): Scope {\n    // eslint-disable-next-line deprecation/deprecation\n    return this.getStackTop().scope;\n  }\n\n  /**\n   * @deprecated Use `Sentry.getIsolationScope()` instead.\n   */\n  public getIsolationScope(): Scope {\n    return this._isolationScope;\n  }\n\n  /**\n   * Returns the scope stack for domains or the process.\n   * @deprecated This will be removed in v8.\n   */\n  public getStack(): Layer[] {\n    return this._stack;\n  }\n\n  /**\n   * Returns the topmost scope layer in the order domain > local > process.\n   * @deprecated This will be removed in v8.\n   */\n  public getStackTop(): Layer {\n    return this._stack[this._stack.length - 1];\n  }\n\n  /**\n   * @inheritDoc\n   *\n   * @deprecated Use `Sentry.captureException()` instead.\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    // eslint-disable-next-line deprecation/deprecation\n    this.getScope().captureException(exception, {\n      originalException: exception,\n      syntheticException,\n      ...hint,\n      event_id: eventId,\n    });\n\n    return eventId;\n  }\n\n  /**\n   * @inheritDoc\n   *\n   * @deprecated Use  `Sentry.captureMessage()` instead.\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    // eslint-disable-next-line deprecation/deprecation\n    this.getScope().captureMessage(message, level, {\n      originalException: message,\n      syntheticException,\n      ...hint,\n      event_id: eventId,\n    });\n\n    return eventId;\n  }\n\n  /**\n   * @inheritDoc\n   *\n   * @deprecated Use `Sentry.captureEvent()` instead.\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    // eslint-disable-next-line deprecation/deprecation\n    this.getScope().captureEvent(event, { ...hint, event_id: eventId });\n    return eventId;\n  }\n\n  /**\n   * @inheritDoc\n   *\n   * @deprecated This will be removed in v8.\n   */\n  public lastEventId(): string | undefined {\n    return this._lastEventId;\n  }\n\n  /**\n   * @inheritDoc\n   *\n   * @deprecated Use `Sentry.addBreadcrumb()` instead.\n   */\n  public addBreadcrumb(breadcrumb: Breadcrumb, hint?: BreadcrumbHint): void {\n    // eslint-disable-next-line deprecation/deprecation\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    // TODO(v8): I know this comment doesn't make much sense because the hub will be deprecated but I still wanted to\n    // write it down. In theory, we would have to add the breadcrumbs to the isolation scope here, however, that would\n    // duplicate all of the breadcrumbs. There was the possibility of adding breadcrumbs to both, the isolation scope\n    // and the normal scope, and deduplicating it down the line in the event processing pipeline. However, that would\n    // have been very fragile, because the breadcrumb objects would have needed to keep their identity all throughout\n    // the event processing pipeline.\n    // In the new implementation, the top level `Sentry.addBreadcrumb()` should ONLY write to the isolation scope.\n\n    scope.addBreadcrumb(finalBreadcrumb, maxBreadcrumbs);\n  }\n\n  /**\n   * @inheritDoc\n   * @deprecated Use `Sentry.setUser()` instead.\n   */\n  public setUser(user: User | null): void {\n    // TODO(v8): The top level `Sentry.setUser()` function should write ONLY to the isolation scope.\n    // eslint-disable-next-line deprecation/deprecation\n    this.getScope().setUser(user);\n    // eslint-disable-next-line deprecation/deprecation\n    this.getIsolationScope().setUser(user);\n  }\n\n  /**\n   * @inheritDoc\n   * @deprecated Use `Sentry.setTags()` instead.\n   */\n  public setTags(tags: { [key: string]: Primitive }): void {\n    // TODO(v8): The top level `Sentry.setTags()` function should write ONLY to the isolation scope.\n    // eslint-disable-next-line deprecation/deprecation\n    this.getScope().setTags(tags);\n    // eslint-disable-next-line deprecation/deprecation\n    this.getIsolationScope().setTags(tags);\n  }\n\n  /**\n   * @inheritDoc\n   * @deprecated Use `Sentry.setExtras()` instead.\n   */\n  public setExtras(extras: Extras): void {\n    // TODO(v8): The top level `Sentry.setExtras()` function should write ONLY to the isolation scope.\n    // eslint-disable-next-line deprecation/deprecation\n    this.getScope().setExtras(extras);\n    // eslint-disable-next-line deprecation/deprecation\n    this.getIsolationScope().setExtras(extras);\n  }\n\n  /**\n   * @inheritDoc\n   * @deprecated Use `Sentry.setTag()` instead.\n   */\n  public setTag(key: string, value: Primitive): void {\n    // TODO(v8): The top level `Sentry.setTag()` function should write ONLY to the isolation scope.\n    // eslint-disable-next-line deprecation/deprecation\n    this.getScope().setTag(key, value);\n    // eslint-disable-next-line deprecation/deprecation\n    this.getIsolationScope().setTag(key, value);\n  }\n\n  /**\n   * @inheritDoc\n   * @deprecated Use `Sentry.setExtra()` instead.\n   */\n  public setExtra(key: string, extra: Extra): void {\n    // TODO(v8): The top level `Sentry.setExtra()` function should write ONLY to the isolation scope.\n    // eslint-disable-next-line deprecation/deprecation\n    this.getScope().setExtra(key, extra);\n    // eslint-disable-next-line deprecation/deprecation\n    this.getIsolationScope().setExtra(key, extra);\n  }\n\n  /**\n   * @inheritDoc\n   * @deprecated Use `Sentry.setContext()` instead.\n   */\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  public setContext(name: string, context: { [key: string]: any } | null): void {\n    // TODO(v8): The top level `Sentry.setContext()` function should write ONLY to the isolation scope.\n    // eslint-disable-next-line deprecation/deprecation\n    this.getScope().setContext(name, context);\n    // eslint-disable-next-line deprecation/deprecation\n    this.getIsolationScope().setContext(name, context);\n  }\n\n  /**\n   * @inheritDoc\n   *\n   * @deprecated Use `getScope()` directly.\n   */\n  public configureScope(callback: (scope: Scope) => void): void {\n    // eslint-disable-next-line deprecation/deprecation\n    const { scope, client } = this.getStackTop();\n    if (client) {\n      callback(scope);\n    }\n  }\n\n  /**\n   * @inheritDoc\n   */\n  // eslint-disable-next-line deprecation/deprecation\n  public run(callback: (hub: Hub) => void): void {\n    // eslint-disable-next-line deprecation/deprecation\n    const oldHub = makeMain(this);\n    try {\n      callback(this);\n    } finally {\n      // eslint-disable-next-line deprecation/deprecation\n      makeMain(oldHub);\n    }\n  }\n\n  /**\n   * @inheritDoc\n   * @deprecated Use `Sentry.getClient().getIntegrationByName()` instead.\n   */\n  public getIntegration<T extends Integration>(integration: IntegrationClass<T>): T | null {\n    // eslint-disable-next-line deprecation/deprecation\n    const client = this.getClient();\n    if (!client) return null;\n    try {\n      // eslint-disable-next-line deprecation/deprecation\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   * 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 `.end()` method, at which point the transaction with all its\n   * finished child spans will be sent to Sentry.\n   *\n   * @param context Properties of the new `Transaction`.\n   * @param customSamplingContext Information given to the transaction sampling function (along with context-dependent\n   * default values). See {@link Options.tracesSampler}.\n   *\n   * @returns The transaction which was just started\n   *\n   * @deprecated Use `startSpan()`, `startSpanManual()` or `startInactiveSpan()` instead.\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      // eslint-disable-next-line deprecation/deprecation\n      const client = this.getClient();\n      if (!client) {\n        logger.warn(\n          \"Tracing extension 'startTransaction' is missing. You should 'init' the SDK before calling 'startTransaction'\",\n        );\n      } else {\n        logger.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   * @deprecated Use `spanToTraceHeader()` instead.\n   */\n  public traceHeaders(): { [key: string]: string } {\n    return this._callExtensionMethod<{ [key: string]: string }>('traceHeaders');\n  }\n\n  /**\n   * @inheritDoc\n   *\n   * @deprecated Use top level `captureSession` instead.\n   */\n  public captureSession(endSession: boolean = false): void {\n    // both send the update and pull the session from the scope\n    if (endSession) {\n      // eslint-disable-next-line deprecation/deprecation\n      return this.endSession();\n    }\n\n    // only send the update\n    this._sendSessionUpdate();\n  }\n\n  /**\n   * @inheritDoc\n   * @deprecated Use top level `endSession` instead.\n   */\n  public endSession(): void {\n    // eslint-disable-next-line deprecation/deprecation\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   * @deprecated Use top level `startSession` instead.\n   */\n  public startSession(context?: SessionContext): Session {\n    // eslint-disable-next-line deprecation/deprecation\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    // eslint-disable-next-line deprecation/deprecation\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   * @deprecated Use top-level `getClient().getOptions().sendDefaultPii` instead. This function\n   * only unnecessarily increased API surface but only wrapped accessing the option.\n   */\n  public shouldSendDefaultPii(): boolean {\n    // eslint-disable-next-line deprecation/deprecation\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    // eslint-disable-next-line deprecation/deprecation\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   * 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 *\n * @deprecated Use `setCurrentClient()` instead.\n */\n// eslint-disable-next-line deprecation/deprecation\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 *\n * @deprecated Use the respective replacement method directly instead.\n */\n// eslint-disable-next-line deprecation/deprecation\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\n/**\n * Get the currently active isolation scope.\n * The isolation scope is active for the current exection context,\n * meaning that it will remain stable for the same Hub.\n */\nexport function getIsolationScope(): Scope {\n  // eslint-disable-next-line deprecation/deprecation\n  return getCurrentHub().getIsolationScope();\n}\n\n// eslint-disable-next-line deprecation/deprecation\nfunction getGlobalHub(registry: Carrier = getMainCarrier()): Hub {\n  // If there's no hub, or its an old API, assign a new one\n\n  if (\n    !hasHubOnCarrier(registry) ||\n    // eslint-disable-next-line deprecation/deprecation\n    getHubFromCarrier(registry).isOlderThan(API_VERSION)\n  ) {\n    // eslint-disable-next-line deprecation/deprecation\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 */\n// eslint-disable-next-line deprecation/deprecation\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 (\n    !hasHubOnCarrier(carrier) ||\n    // eslint-disable-next-line deprecation/deprecation\n    getHubFromCarrier(carrier).isOlderThan(API_VERSION)\n  ) {\n    // eslint-disable-next-line deprecation/deprecation\n    const client = parent.getClient();\n    // eslint-disable-next-line deprecation/deprecation\n    const scope = parent.getScope();\n    // eslint-disable-next-line deprecation/deprecation\n    const isolationScope = parent.getIsolationScope();\n    // eslint-disable-next-line deprecation/deprecation\n    setHubOnCarrier(carrier, new Hub(client, scope.clone(), isolationScope.clone()));\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 */\n// eslint-disable-next-line deprecation/deprecation\nexport function getHubFromCarrier(carrier: Carrier): Hub {\n  // eslint-disable-next-line deprecation/deprecation\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 */\n// eslint-disable-next-line deprecation/deprecation\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 { Transaction } from '@sentry/types';\nimport { extractTraceparentData as _extractTraceparentData } from '@sentry/utils';\n\nimport type { Hub } from '../hub';\nimport { getCurrentHub } from '../hub';\n\n/**\n * Grabs active transaction off scope.\n *\n * @deprecated You should not rely on the transaction, but just use `startSpan()` APIs instead.\n */\n// eslint-disable-next-line deprecation/deprecation\nexport function getActiveTransaction<T extends Transaction>(maybeHub?: Hub): T | undefined {\n  // eslint-disable-next-line deprecation/deprecation\n  const hub = maybeHub || getCurrentHub();\n  // eslint-disable-next-line deprecation/deprecation\n  const scope = hub.getScope();\n  // eslint-disable-next-line deprecation/deprecation\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\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 * See https://github.com/getsentry/sentry-javascript/issues/4642 for more details.\n *\n * @deprecated Import this function from `@sentry/utils` instead\n */\nexport const extractTraceparentData = _extractTraceparentData;\n", "import {\n  addGlobalErrorInstrumentationHandler,\n  addGlobalUnhandledRejectionInstrumentationHandler,\n  logger,\n} from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport type { SpanStatusType } from './spanstatus';\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  addGlobalErrorInstrumentationHandler(errorCallback);\n  addGlobalUnhandledRejectionInstrumentationHandler(errorCallback);\n}\n\n/**\n * If an error or unhandled promise occurs, we mark the active transaction as failed\n */\nfunction errorCallback(): void {\n  // eslint-disable-next-line deprecation/deprecation\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", "import type { Span } from '@sentry/types';\n\n/** The status of an Span.\n *\n * @deprecated Use string literals - if you require type casting, cast to SpanStatusType type\n */\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\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 getSpanStatusFromHttpCode(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\n/**\n * Converts a HTTP status code into a {@link SpanStatusType}.\n *\n * @deprecated Use {@link spanStatusFromHttpCode} instead.\n * This export will be removed in v8 as the signature contains a typo.\n *\n * @param httpStatus The HTTP response status code.\n * @returns The span status or unknown_error.\n */\nexport const spanStatusfromHttpCode = getSpanStatusFromHttpCode;\n\n/**\n * Sets the Http status attributes on the current span based on the http code.\n * Additionally, the span's status is updated, depending on the http code.\n */\nexport function setHttpStatus(span: Span, httpStatus: number): void {\n  // TODO (v8): Remove these calls\n  // Relay does not require us to send the status code as a tag\n  // For now, just because users might expect it to land as a tag we keep sending it.\n  // Same with data.\n  // In v8, we replace both, simply with\n  // span.setAttribute('http.response.status_code', httpStatus);\n\n  // eslint-disable-next-line deprecation/deprecation\n  span.setTag('http.status_code', String(httpStatus));\n  // eslint-disable-next-line deprecation/deprecation\n  span.setData('http.response.status_code', httpStatus);\n\n  const spanStatus = getSpanStatusFromHttpCode(httpStatus);\n  if (spanStatus !== 'unknown_error') {\n    span.setStatus(spanStatus);\n  }\n}\n", "import { isThenable } from '@sentry/utils';\n\n/**\n * Wrap a callback function with error handling.\n * If an error is thrown, it will be passed to the `onError` callback and re-thrown.\n *\n * If the return value of the function is a promise, it will be handled with `maybeHandlePromiseRejection`.\n *\n * If an `onFinally` callback is provided, this will be called when the callback has finished\n * - so if it returns a promise, once the promise resolved/rejected,\n * else once the callback has finished executing.\n * The `onFinally` callback will _always_ be called, no matter if an error was thrown or not.\n */\nexport function handleCallbackErrors<\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  Fn extends () => any,\n>(\n  fn: Fn,\n  onError: (error: unknown) => void,\n  // eslint-disable-next-line @typescript-eslint/no-empty-function\n  onFinally: () => void = () => {},\n): ReturnType<Fn> {\n  let maybePromiseResult: ReturnType<Fn>;\n  try {\n    maybePromiseResult = fn();\n  } catch (e) {\n    onError(e);\n    onFinally();\n    throw e;\n  }\n\n  return maybeHandlePromiseRejection(maybePromiseResult, onError, onFinally);\n}\n\n/**\n * Maybe handle a promise rejection.\n * This expects to be given a value that _may_ be a promise, or any other value.\n * If it is a promise, and it rejects, it will call the `onError` callback.\n * Other than this, it will generally return the given value as-is.\n */\nfunction maybeHandlePromiseRejection<MaybePromise>(\n  value: MaybePromise,\n  onError: (error: unknown) => void,\n  onFinally: () => void,\n): MaybePromise {\n  if (isThenable(value)) {\n    // @ts-expect-error - the isThenable check returns the \"wrong\" type here\n    return value.then(\n      res => {\n        onFinally();\n        return res;\n      },\n      e => {\n        onError(e);\n        onFinally();\n        throw e;\n      },\n    );\n  }\n\n  onFinally();\n  return value;\n}\n", "import type { Options } from '@sentry/types';\n\nimport { getClient } from '../exports';\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 = getClient();\n  const options = maybeOptions || (client && client.getOptions());\n  return !!options && (options.enableTracing || 'tracesSampleRate' in options || 'tracesSampler' in options);\n}\n", "import type { Scope, Span, SpanTimeInput, StartSpanOptions, TransactionContext } from '@sentry/types';\n\nimport { addNonEnumerableProperty, dropUndefinedKeys, logger, tracingContextFromHeaders } from '@sentry/utils';\nimport { getDynamicSamplingContextFromSpan } from '.';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport { getCurrentScope, withScope } from '../exports';\nimport type { Hub } from '../hub';\nimport { runWithAsyncContext } from '../hub';\nimport { getIsolationScope } from '../hub';\nimport { getCurrentHub } from '../hub';\nimport type { Scope as ScopeClass } from '../scope';\nimport { handleCallbackErrors } from '../utils/handleCallbackErrors';\nimport { hasTracingEnabled } from '../utils/hasTracingEnabled';\nimport { spanIsSampled, spanTimeInputToSeconds, spanToJSON } from '../utils/spanUtils';\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 *\n * @deprecated Use `startSpan` instead.\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, span?: Span) => void = () => {},\n  // eslint-disable-next-line @typescript-eslint/no-empty-function\n  afterFinish: () => void = () => {},\n): T {\n  // eslint-disable-next-line deprecation/deprecation\n  const hub = getCurrentHub();\n  const scope = getCurrentScope();\n  // eslint-disable-next-line deprecation/deprecation\n  const parentSpan = scope.getSpan();\n\n  const spanContext = normalizeContext(context);\n  const activeSpan = createChildSpanOrTransaction(hub, {\n    parentSpan,\n    spanContext,\n    forceTransaction: false,\n    scope,\n  });\n\n  // eslint-disable-next-line deprecation/deprecation\n  scope.setSpan(activeSpan);\n\n  return handleCallbackErrors(\n    () => callback(activeSpan),\n    error => {\n      activeSpan && activeSpan.setStatus('internal_error');\n      onError(error, activeSpan);\n    },\n    () => {\n      activeSpan && activeSpan.end();\n      // eslint-disable-next-line deprecation/deprecation\n      scope.setSpan(parentSpan);\n      afterFinish();\n    },\n  );\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: StartSpanOptions, callback: (span: Span | undefined) => T): T {\n  const spanContext = normalizeContext(context);\n\n  return runWithAsyncContext(() => {\n    return withScope(context.scope, scope => {\n      // eslint-disable-next-line deprecation/deprecation\n      const hub = getCurrentHub();\n      // eslint-disable-next-line deprecation/deprecation\n      const parentSpan = scope.getSpan();\n\n      const shouldSkipSpan = context.onlyIfParent && !parentSpan;\n      const activeSpan = shouldSkipSpan\n        ? undefined\n        : createChildSpanOrTransaction(hub, {\n            parentSpan,\n            spanContext,\n            forceTransaction: context.forceTransaction,\n            scope,\n          });\n\n      return handleCallbackErrors(\n        () => callback(activeSpan),\n        () => {\n          // Only update the span status if it hasn't been changed yet\n          if (activeSpan) {\n            const { status } = spanToJSON(activeSpan);\n            if (!status || status === 'ok') {\n              activeSpan.setStatus('internal_error');\n            }\n          }\n        },\n        () => activeSpan && activeSpan.end(),\n      );\n    });\n  });\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. You'll have to call `span.end()` manually.\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: StartSpanOptions,\n  callback: (span: Span | undefined, finish: () => void) => T,\n): T {\n  const spanContext = normalizeContext(context);\n\n  return runWithAsyncContext(() => {\n    return withScope(context.scope, scope => {\n      // eslint-disable-next-line deprecation/deprecation\n      const hub = getCurrentHub();\n      // eslint-disable-next-line deprecation/deprecation\n      const parentSpan = scope.getSpan();\n\n      const shouldSkipSpan = context.onlyIfParent && !parentSpan;\n      const activeSpan = shouldSkipSpan\n        ? undefined\n        : createChildSpanOrTransaction(hub, {\n            parentSpan,\n            spanContext,\n            forceTransaction: context.forceTransaction,\n            scope,\n          });\n\n      function finishAndSetSpan(): void {\n        activeSpan && activeSpan.end();\n      }\n\n      return handleCallbackErrors(\n        () => callback(activeSpan, finishAndSetSpan),\n        () => {\n          // Only update the span status if it hasn't been changed yet, and the span is not yet finished\n          if (activeSpan && activeSpan.isRecording()) {\n            const { status } = spanToJSON(activeSpan);\n            if (!status || status === 'ok') {\n              activeSpan.setStatus('internal_error');\n            }\n          }\n        },\n      );\n    });\n  });\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: StartSpanOptions): Span | undefined {\n  if (!hasTracingEnabled()) {\n    return undefined;\n  }\n\n  const spanContext = normalizeContext(context);\n  // eslint-disable-next-line deprecation/deprecation\n  const hub = getCurrentHub();\n  const parentSpan = context.scope\n    ? // eslint-disable-next-line deprecation/deprecation\n      context.scope.getSpan()\n    : getActiveSpan();\n\n  const shouldSkipSpan = context.onlyIfParent && !parentSpan;\n\n  if (shouldSkipSpan) {\n    return undefined;\n  }\n\n  const scope = context.scope || getCurrentScope();\n\n  // Even though we don't actually want to make this span active on the current scope,\n  // we need to make it active on a temporary scope that we use for event processing\n  // as otherwise, it won't pick the correct span for the event when processing it\n  const temporaryScope = (scope as ScopeClass).clone();\n\n  return createChildSpanOrTransaction(hub, {\n    parentSpan,\n    spanContext,\n    forceTransaction: context.forceTransaction,\n    scope: temporaryScope,\n  });\n}\n\n/**\n * Returns the currently active span.\n */\nexport function getActiveSpan(): Span | undefined {\n  // eslint-disable-next-line deprecation/deprecation\n  return getCurrentScope().getSpan();\n}\n\ninterface ContinueTrace {\n  /**\n   * Continue a trace from `sentry-trace` and `baggage` values.\n   * These values can be obtained from incoming request headers,\n   * or in the browser from `<meta name=\"sentry-trace\">` and `<meta name=\"baggage\">` HTML tags.\n   *\n   * @deprecated Use the version of this function taking a callback as second parameter instead:\n   *\n   * ```\n   * Sentry.continueTrace(sentryTrace: '...', baggage: '...' }, () => {\n   *    // ...\n   * })\n   * ```\n   *\n   */\n  ({\n    sentryTrace,\n    baggage,\n  }: {\n    // eslint-disable-next-line deprecation/deprecation\n    sentryTrace: Parameters<typeof tracingContextFromHeaders>[0];\n    // eslint-disable-next-line deprecation/deprecation\n    baggage: Parameters<typeof tracingContextFromHeaders>[1];\n  }): Partial<TransactionContext>;\n\n  /**\n   * Continue a trace from `sentry-trace` and `baggage` values.\n   * These values can be obtained from incoming request headers, or in the browser from `<meta name=\"sentry-trace\">`\n   * and `<meta name=\"baggage\">` HTML tags.\n   *\n   * Spans started with `startSpan`, `startSpanManual` and `startInactiveSpan`, within the callback will automatically\n   * be attached to the incoming trace.\n   *\n   * Deprecation notice: In the next major version of the SDK the provided callback will not receive a transaction\n   * context argument.\n   */\n  <V>(\n    {\n      sentryTrace,\n      baggage,\n    }: {\n      // eslint-disable-next-line deprecation/deprecation\n      sentryTrace: Parameters<typeof tracingContextFromHeaders>[0];\n      // eslint-disable-next-line deprecation/deprecation\n      baggage: Parameters<typeof tracingContextFromHeaders>[1];\n    },\n    // TODO(v8): Remove parameter from this callback.\n    callback: (transactionContext: Partial<TransactionContext>) => V,\n  ): V;\n}\n\nexport const continueTrace: ContinueTrace = <V>(\n  {\n    sentryTrace,\n    baggage,\n  }: {\n    // eslint-disable-next-line deprecation/deprecation\n    sentryTrace: Parameters<typeof tracingContextFromHeaders>[0];\n    // eslint-disable-next-line deprecation/deprecation\n    baggage: Parameters<typeof tracingContextFromHeaders>[1];\n  },\n  callback?: (transactionContext: Partial<TransactionContext>) => V,\n): V | Partial<TransactionContext> => {\n  // TODO(v8): Change this function so it doesn't do anything besides setting the propagation context on the current scope:\n  /*\n    return withScope((scope) => {\n      const propagationContext = propagationContextFromHeaders(sentryTrace, baggage);\n      scope.setPropagationContext(propagationContext);\n      return callback();\n    })\n  */\n\n  const currentScope = getCurrentScope();\n\n  // eslint-disable-next-line deprecation/deprecation\n  const { traceparentData, dynamicSamplingContext, propagationContext } = tracingContextFromHeaders(\n    sentryTrace,\n    baggage,\n  );\n\n  currentScope.setPropagationContext(propagationContext);\n\n  if (DEBUG_BUILD && traceparentData) {\n    logger.log(`[Tracing] Continuing trace ${traceparentData.traceId}.`);\n  }\n\n  const transactionContext: Partial<TransactionContext> = {\n    ...traceparentData,\n    metadata: dropUndefinedKeys({\n      dynamicSamplingContext,\n    }),\n  };\n\n  if (!callback) {\n    return transactionContext;\n  }\n\n  return runWithAsyncContext(() => {\n    return callback(transactionContext);\n  });\n};\n\nfunction createChildSpanOrTransaction(\n  // eslint-disable-next-line deprecation/deprecation\n  hub: Hub,\n  {\n    parentSpan,\n    spanContext,\n    forceTransaction,\n    scope,\n  }: {\n    parentSpan: Span | undefined;\n    spanContext: TransactionContext;\n    forceTransaction?: boolean;\n    scope: Scope;\n  },\n): Span | undefined {\n  if (!hasTracingEnabled()) {\n    return undefined;\n  }\n\n  const isolationScope = getIsolationScope();\n\n  let span: Span | undefined;\n  if (parentSpan && !forceTransaction) {\n    // eslint-disable-next-line deprecation/deprecation\n    span = parentSpan.startChild(spanContext);\n  } else if (parentSpan) {\n    // If we forced a transaction but have a parent span, make sure to continue from the parent span, not the scope\n    const dsc = getDynamicSamplingContextFromSpan(parentSpan);\n    const { traceId, spanId: parentSpanId } = parentSpan.spanContext();\n    const sampled = spanIsSampled(parentSpan);\n\n    // eslint-disable-next-line deprecation/deprecation\n    span = hub.startTransaction({\n      traceId,\n      parentSpanId,\n      parentSampled: sampled,\n      ...spanContext,\n      metadata: {\n        dynamicSamplingContext: dsc,\n        // eslint-disable-next-line deprecation/deprecation\n        ...spanContext.metadata,\n      },\n    });\n  } else {\n    const { traceId, dsc, parentSpanId, sampled } = {\n      ...isolationScope.getPropagationContext(),\n      ...scope.getPropagationContext(),\n    };\n\n    // eslint-disable-next-line deprecation/deprecation\n    span = hub.startTransaction({\n      traceId,\n      parentSpanId,\n      parentSampled: sampled,\n      ...spanContext,\n      metadata: {\n        dynamicSamplingContext: dsc,\n        // eslint-disable-next-line deprecation/deprecation\n        ...spanContext.metadata,\n      },\n    });\n  }\n\n  // We always set this as active span on the scope\n  // In the case of this being an inactive span, we ensure to pass a detached scope in here in the first place\n  // But by having this here, we can ensure that the lookup through `getCapturedScopesOnSpan` results in the correct scope & span combo\n  // eslint-disable-next-line deprecation/deprecation\n  scope.setSpan(span);\n\n  setCapturedScopesOnSpan(span, scope, isolationScope);\n\n  return span;\n}\n\n/**\n * This converts StartSpanOptions to TransactionContext.\n * For the most part (for now) we accept the same options,\n * but some of them need to be transformed.\n *\n * Eventually the StartSpanOptions will be more aligned with OpenTelemetry.\n */\nfunction normalizeContext(context: StartSpanOptions): TransactionContext {\n  if (context.startTime) {\n    const ctx: TransactionContext & { startTime?: SpanTimeInput } = { ...context };\n    ctx.startTimestamp = spanTimeInputToSeconds(context.startTime);\n    delete ctx.startTime;\n    return ctx;\n  }\n\n  return context;\n}\n\nconst SCOPE_ON_START_SPAN_FIELD = '_sentryScope';\nconst ISOLATION_SCOPE_ON_START_SPAN_FIELD = '_sentryIsolationScope';\n\ntype SpanWithScopes = Span & {\n  [SCOPE_ON_START_SPAN_FIELD]?: Scope;\n  [ISOLATION_SCOPE_ON_START_SPAN_FIELD]?: Scope;\n};\n\nfunction setCapturedScopesOnSpan(span: Span | undefined, scope: Scope, isolationScope: Scope): void {\n  if (span) {\n    addNonEnumerableProperty(span, ISOLATION_SCOPE_ON_START_SPAN_FIELD, isolationScope);\n    addNonEnumerableProperty(span, SCOPE_ON_START_SPAN_FIELD, scope);\n  }\n}\n\n/**\n * Grabs the scope and isolation scope off a span that were active when the span was started.\n */\nexport function getCapturedScopesOnSpan(span: Span): { scope?: Scope; isolationScope?: Scope } {\n  return {\n    scope: (span as SpanWithScopes)[SCOPE_ON_START_SPAN_FIELD],\n    isolationScope: (span as SpanWithScopes)[ISOLATION_SCOPE_ON_START_SPAN_FIELD],\n  };\n}\n", "import type { MeasurementUnit, Span } from '@sentry/types';\nimport type { MetricSummary } from '@sentry/types';\nimport type { Primitive } from '@sentry/types';\nimport { dropUndefinedKeys } from '@sentry/utils';\nimport { getActiveSpan } from '../tracing';\nimport type { MetricType } from './types';\n\n/**\n * key: bucketKey\n * value: [exportKey, MetricSummary]\n */\ntype MetricSummaryStorage = Map<string, [string, MetricSummary]>;\n\nlet SPAN_METRIC_SUMMARY: WeakMap<Span, MetricSummaryStorage> | undefined;\n\nfunction getMetricStorageForSpan(span: Span): MetricSummaryStorage | undefined {\n  return SPAN_METRIC_SUMMARY ? SPAN_METRIC_SUMMARY.get(span) : undefined;\n}\n\n/**\n * Fetches the metric summary if it exists for the passed span\n */\nexport function getMetricSummaryJsonForSpan(span: Span): Record<string, Array<MetricSummary>> | undefined {\n  const storage = getMetricStorageForSpan(span);\n\n  if (!storage) {\n    return undefined;\n  }\n  const output: Record<string, Array<MetricSummary>> = {};\n\n  for (const [, [exportKey, summary]] of storage) {\n    if (!output[exportKey]) {\n      output[exportKey] = [];\n    }\n\n    output[exportKey].push(dropUndefinedKeys(summary));\n  }\n\n  return output;\n}\n\n/**\n * Updates the metric summary on the currently active span\n */\nexport function updateMetricSummaryOnActiveSpan(\n  metricType: MetricType,\n  sanitizedName: string,\n  value: number,\n  unit: MeasurementUnit,\n  tags: Record<string, Primitive>,\n  bucketKey: string,\n): void {\n  const span = getActiveSpan();\n  if (span) {\n    const storage = getMetricStorageForSpan(span) || new Map<string, [string, MetricSummary]>();\n\n    const exportKey = `${metricType}:${sanitizedName}@${unit}`;\n    const bucketItem = storage.get(bucketKey);\n\n    if (bucketItem) {\n      const [, summary] = bucketItem;\n      storage.set(bucketKey, [\n        exportKey,\n        {\n          min: Math.min(summary.min, value),\n          max: Math.max(summary.max, value),\n          count: (summary.count += 1),\n          sum: (summary.sum += value),\n          tags: summary.tags,\n        },\n      ]);\n    } else {\n      storage.set(bucketKey, [\n        exportKey,\n        {\n          min: value,\n          max: value,\n          count: 1,\n          sum: value,\n          tags,\n        },\n      ]);\n    }\n\n    if (!SPAN_METRIC_SUMMARY) {\n      SPAN_METRIC_SUMMARY = new WeakMap();\n    }\n\n    SPAN_METRIC_SUMMARY.set(span, storage);\n  }\n}\n", "/**\n * Use this attribute to represent the source of a span.\n * Should be one of: custom, url, route, view, component, task, unknown\n *\n */\nexport const SEMANTIC_ATTRIBUTE_SENTRY_SOURCE = 'sentry.source';\n\n/**\n * Use this attribute to represent the sample rate used for a span.\n */\nexport const SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE = 'sentry.sample_rate';\n\n/**\n * Use this attribute to represent the operation of a span.\n */\nexport const SEMANTIC_ATTRIBUTE_SENTRY_OP = 'sentry.op';\n\n/**\n * Use this attribute to represent the origin of a span.\n */\nexport const SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN = 'sentry.origin';\n\n/**\n * The id of the profile that this span occured in.\n */\nexport const SEMANTIC_ATTRIBUTE_PROFILE_ID = 'profile_id';\n", "/* eslint-disable max-lines */\nimport type {\n  Instrumenter,\n  Measurements,\n  Primitive,\n  Span as SpanInterface,\n  SpanAttributeValue,\n  SpanAttributes,\n  SpanContext,\n  SpanContextData,\n  SpanJSON,\n  SpanOrigin,\n  SpanTimeInput,\n  TraceContext,\n  Transaction,\n} from '@sentry/types';\nimport { dropUndefinedKeys, logger, timestampInSeconds, uuid4 } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport { getMetricSummaryJsonForSpan } from '../metrics/metric-summary';\nimport {\n  SEMANTIC_ATTRIBUTE_PROFILE_ID,\n  SEMANTIC_ATTRIBUTE_SENTRY_OP,\n  SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n} from '../semanticAttributes';\nimport { getRootSpan } from '../utils/getRootSpan';\nimport {\n  TRACE_FLAG_NONE,\n  TRACE_FLAG_SAMPLED,\n  spanTimeInputToSeconds,\n  spanToJSON,\n  spanToTraceContext,\n  spanToTraceHeader,\n} from '../utils/spanUtils';\nimport type { SpanStatusType } from './spanstatus';\nimport { setHttpStatus } from './spanstatus';\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      // eslint-disable-next-line deprecation/deprecation\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   * Tags for the span.\n   * @deprecated Use `spanToJSON(span).atttributes` instead.\n   */\n  public tags: { [key: string]: Primitive };\n\n  /**\n   * Data for the span.\n   * @deprecated Use `spanToJSON(span).atttributes` instead.\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   * @deprecated This property will no longer be public. Span recording will be handled internally.\n   */\n  public spanRecorder?: SpanRecorder;\n\n  /**\n   * @inheritDoc\n   * @deprecated Use top level `Sentry.getRootSpan()` instead\n   */\n  public transaction?: Transaction;\n\n  /**\n   * The instrumenter that created this span.\n   *\n   * TODO (v8): This can probably be replaced by an `instanceOf` check of the span class.\n   *            the instrumenter can only be sentry or otel so we can check the span instance\n   *            to verify which one it is and remove this field entirely.\n   *\n   * @deprecated This field will be removed.\n   */\n  public instrumenter: Instrumenter;\n\n  protected _traceId: string;\n  protected _spanId: string;\n  protected _parentSpanId?: string | undefined;\n  protected _sampled: boolean | undefined;\n  protected _name?: string | undefined;\n  protected _attributes: SpanAttributes;\n  /** Epoch timestamp in seconds when the span started. */\n  protected _startTime: number;\n  /** Epoch timestamp in seconds when the span ended. */\n  protected _endTime?: number | undefined;\n  /** Internal keeper of the status */\n  protected _status?: SpanStatusType | string | undefined;\n  protected _exclusiveTime?: number;\n\n  protected _measurements: Measurements;\n\n  private _logMessage?: string;\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._startTime = spanContext.startTimestamp || timestampInSeconds();\n    // eslint-disable-next-line deprecation/deprecation\n    this.tags = spanContext.tags ? { ...spanContext.tags } : {};\n    // eslint-disable-next-line deprecation/deprecation\n    this.data = spanContext.data ? { ...spanContext.data } : {};\n    // eslint-disable-next-line deprecation/deprecation\n    this.instrumenter = spanContext.instrumenter || 'sentry';\n\n    this._attributes = {};\n    this.setAttributes({\n      [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: spanContext.origin || 'manual',\n      [SEMANTIC_ATTRIBUTE_SENTRY_OP]: spanContext.op,\n      ...spanContext.attributes,\n    });\n\n    // eslint-disable-next-line deprecation/deprecation\n    this._name = spanContext.name || spanContext.description;\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.status) {\n      this._status = spanContext.status;\n    }\n    if (spanContext.endTimestamp) {\n      this._endTime = spanContext.endTimestamp;\n    }\n    if (spanContext.exclusiveTime !== undefined) {\n      this._exclusiveTime = spanContext.exclusiveTime;\n    }\n    this._measurements = spanContext.measurements ? { ...spanContext.measurements } : {};\n  }\n\n  // This rule conflicts with another eslint rule :(\n  /* eslint-disable @typescript-eslint/member-ordering */\n\n  /**\n   * An alias for `description` of the Span.\n   * @deprecated Use `spanToJSON(span).description` instead.\n   */\n  public get name(): string {\n    return this._name || '';\n  }\n\n  /**\n   * Update the name of the span.\n   * @deprecated Use `spanToJSON(span).description` instead.\n   */\n  public set name(name: string) {\n    this.updateName(name);\n  }\n\n  /**\n   * Get the description of the Span.\n   * @deprecated Use `spanToJSON(span).description` instead.\n   */\n  public get description(): string | undefined {\n    return this._name;\n  }\n\n  /**\n   * Get the description of the Span.\n   * @deprecated Use `spanToJSON(span).description` instead.\n   */\n  public set description(description: string | undefined) {\n    this._name = description;\n  }\n\n  /**\n   * The ID of the trace.\n   * @deprecated Use `spanContext().traceId` instead.\n   */\n  public get traceId(): string {\n    return this._traceId;\n  }\n\n  /**\n   * The ID of the trace.\n   * @deprecated You cannot update the traceId of a span after span creation.\n   */\n  public set traceId(traceId: string) {\n    this._traceId = traceId;\n  }\n\n  /**\n   * The ID of the span.\n   * @deprecated Use `spanContext().spanId` instead.\n   */\n  public get spanId(): string {\n    return this._spanId;\n  }\n\n  /**\n   * The ID of the span.\n   * @deprecated You cannot update the spanId of a span after span creation.\n   */\n  public set spanId(spanId: string) {\n    this._spanId = spanId;\n  }\n\n  /**\n   * @inheritDoc\n   *\n   * @deprecated Use `startSpan` functions instead.\n   */\n  public set parentSpanId(string) {\n    this._parentSpanId = string;\n  }\n\n  /**\n   * @inheritDoc\n   *\n   * @deprecated Use `spanToJSON(span).parent_span_id` instead.\n   */\n  public get parentSpanId(): string | undefined {\n    return this._parentSpanId;\n  }\n\n  /**\n   * Was this span chosen to be sent as part of the sample?\n   * @deprecated Use `isRecording()` instead.\n   */\n  public get sampled(): boolean | undefined {\n    return this._sampled;\n  }\n\n  /**\n   * Was this span chosen to be sent as part of the sample?\n   * @deprecated You cannot update the sampling decision of a span after span creation.\n   */\n  public set sampled(sampled: boolean | undefined) {\n    this._sampled = sampled;\n  }\n\n  /**\n   * Attributes for the span.\n   * @deprecated Use `spanToJSON(span).atttributes` instead.\n   */\n  public get attributes(): SpanAttributes {\n    return this._attributes;\n  }\n\n  /**\n   * Attributes for the span.\n   * @deprecated Use `setAttributes()` instead.\n   */\n  public set attributes(attributes: SpanAttributes) {\n    this._attributes = attributes;\n  }\n\n  /**\n   * Timestamp in seconds (epoch time) indicating when the span started.\n   * @deprecated Use `spanToJSON()` instead.\n   */\n  public get startTimestamp(): number {\n    return this._startTime;\n  }\n\n  /**\n   * Timestamp in seconds (epoch time) indicating when the span started.\n   * @deprecated In v8, you will not be able to update the span start time after creation.\n   */\n  public set startTimestamp(startTime: number) {\n    this._startTime = startTime;\n  }\n\n  /**\n   * Timestamp in seconds when the span ended.\n   * @deprecated Use `spanToJSON()` instead.\n   */\n  public get endTimestamp(): number | undefined {\n    return this._endTime;\n  }\n\n  /**\n   * Timestamp in seconds when the span ended.\n   * @deprecated Set the end time via `span.end()` instead.\n   */\n  public set endTimestamp(endTime: number | undefined) {\n    this._endTime = endTime;\n  }\n\n  /**\n   * The status of the span.\n   *\n   * @deprecated Use `spanToJSON().status` instead to get the status.\n   */\n  public get status(): SpanStatusType | string | undefined {\n    return this._status;\n  }\n\n  /**\n   * The status of the span.\n   *\n   * @deprecated Use `.setStatus()` instead to set or update the status.\n   */\n  public set status(status: SpanStatusType | string | undefined) {\n    this._status = status;\n  }\n\n  /**\n   * Operation of the span\n   *\n   * @deprecated Use `spanToJSON().op` to read the op instead.\n   */\n  public get op(): string | undefined {\n    return this._attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP] as string | undefined;\n  }\n\n  /**\n   * Operation of the span\n   *\n   * @deprecated Use `startSpan()` functions to set or `span.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_OP, 'op')\n   *             to update the span instead.\n   */\n  public set op(op: string | undefined) {\n    this.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_OP, op);\n  }\n\n  /**\n   * The origin of the span, giving context about what created the span.\n   *\n   * @deprecated Use `spanToJSON().origin` to read the origin instead.\n   */\n  public get origin(): SpanOrigin | undefined {\n    return this._attributes[SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN] as SpanOrigin | undefined;\n  }\n\n  /**\n   * The origin of the span, giving context about what created the span.\n   *\n   * @deprecated Use `startSpan()` functions to set the origin instead.\n   */\n  public set origin(origin: SpanOrigin | undefined) {\n    this.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, origin);\n  }\n\n  /* eslint-enable @typescript-eslint/member-ordering */\n\n  /** @inheritdoc */\n  public spanContext(): SpanContextData {\n    const { _spanId: spanId, _traceId: traceId, _sampled: sampled } = this;\n    return {\n      spanId,\n      traceId,\n      traceFlags: sampled ? TRACE_FLAG_SAMPLED : TRACE_FLAG_NONE,\n    };\n  }\n\n  /**\n   * Creates a new `Span` while setting the current `Span.id` as `parentSpanId`.\n   * Also the `sampled` decision will be inherited.\n   *\n   * @deprecated Use `startSpan()`, `startSpanManual()` or `startInactiveSpan()` instead.\n   */\n  public startChild(\n    spanContext?: Pick<SpanContext, Exclude<keyof SpanContext, 'sampled' | 'traceId' | 'parentSpanId'>>,\n  ): SpanInterface {\n    const childSpan = new Span({\n      ...spanContext,\n      parentSpanId: this._spanId,\n      sampled: this._sampled,\n      traceId: this._traceId,\n    });\n\n    // eslint-disable-next-line deprecation/deprecation\n    childSpan.spanRecorder = this.spanRecorder;\n    // eslint-disable-next-line deprecation/deprecation\n    if (childSpan.spanRecorder) {\n      // eslint-disable-next-line deprecation/deprecation\n      childSpan.spanRecorder.add(childSpan);\n    }\n\n    const rootSpan = getRootSpan(this);\n    // TODO: still set span.transaction here until we have a more permanent solution\n    // Probably similarly to the weakmap we hold in node-experimental\n    // eslint-disable-next-line deprecation/deprecation\n    childSpan.transaction = rootSpan as Transaction;\n\n    if (DEBUG_BUILD && rootSpan) {\n      const opStr = (spanContext && spanContext.op) || '< unknown op >';\n      const nameStr = spanToJSON(childSpan).description || '< unknown name >';\n      const idStr = rootSpan.spanContext().spanId;\n\n      const logMessage = `[Tracing] Starting '${opStr}' span on transaction '${nameStr}' (${idStr}).`;\n      logger.log(logMessage);\n      this._logMessage = logMessage;\n    }\n\n    return childSpan;\n  }\n\n  /**\n   * Sets the tag attribute on the current span.\n   *\n   * Can also be used to unset a tag, by passing `undefined`.\n   *\n   * @param key Tag key\n   * @param value Tag value\n   * @deprecated Use `setAttribute()` instead.\n   */\n  public setTag(key: string, value: Primitive): this {\n    // eslint-disable-next-line deprecation/deprecation\n    this.tags = { ...this.tags, [key]: value };\n    return this;\n  }\n\n  /**\n   * Sets the data attribute on the current span\n   * @param key Data key\n   * @param value Data value\n   * @deprecated Use `setAttribute()` instead.\n   */\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  public setData(key: string, value: any): this {\n    // eslint-disable-next-line deprecation/deprecation\n    this.data = { ...this.data, [key]: value };\n    return this;\n  }\n\n  /** @inheritdoc */\n  public setAttribute(key: string, value: SpanAttributeValue | undefined): void {\n    if (value === undefined) {\n      // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n      delete this._attributes[key];\n    } else {\n      this._attributes[key] = value;\n    }\n  }\n\n  /** @inheritdoc */\n  public setAttributes(attributes: SpanAttributes): void {\n    Object.keys(attributes).forEach(key => this.setAttribute(key, attributes[key]));\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   * @deprecated Use top-level `setHttpStatus()` instead.\n   */\n  public setHttpStatus(httpStatus: number): this {\n    setHttpStatus(this, httpStatus);\n    return this;\n  }\n\n  /**\n   * @inheritdoc\n   *\n   * @deprecated Use `.updateName()` instead.\n   */\n  public setName(name: string): void {\n    this.updateName(name);\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public updateName(name: string): this {\n    this._name = name;\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   *\n   * @deprecated Use `spanToJSON(span).status === 'ok'` instead.\n   */\n  public isSuccess(): boolean {\n    return this._status === 'ok';\n  }\n\n  /**\n   * @inheritDoc\n   *\n   * @deprecated Use `.end()` instead.\n   */\n  public finish(endTimestamp?: number): void {\n    return this.end(endTimestamp);\n  }\n\n  /** @inheritdoc */\n  public end(endTimestamp?: SpanTimeInput): void {\n    // If already ended, skip\n    if (this._endTime) {\n      return;\n    }\n    const rootSpan = getRootSpan(this);\n    if (\n      DEBUG_BUILD &&\n      // Don't call this for transactions\n      rootSpan &&\n      rootSpan.spanContext().spanId !== this._spanId\n    ) {\n      const logMessage = this._logMessage;\n      if (logMessage) {\n        logger.log((logMessage as string).replace('Starting', 'Finishing'));\n      }\n    }\n\n    this._endTime = spanTimeInputToSeconds(endTimestamp);\n  }\n\n  /**\n   * @inheritDoc\n   *\n   * @deprecated Use `spanToTraceHeader()` instead.\n   */\n  public toTraceparent(): string {\n    return spanToTraceHeader(this);\n  }\n\n  /**\n   * @inheritDoc\n   *\n   * @deprecated Use `spanToJSON()` or access the fields directly instead.\n   */\n  public toContext(): SpanContext {\n    return dropUndefinedKeys({\n      data: this._getData(),\n      description: this._name,\n      endTimestamp: this._endTime,\n      // eslint-disable-next-line deprecation/deprecation\n      op: this.op,\n      parentSpanId: this._parentSpanId,\n      sampled: this._sampled,\n      spanId: this._spanId,\n      startTimestamp: this._startTime,\n      status: this._status,\n      // eslint-disable-next-line deprecation/deprecation\n      tags: this.tags,\n      traceId: this._traceId,\n    });\n  }\n\n  /**\n   * @inheritDoc\n   *\n   * @deprecated Update the fields directly instead.\n   */\n  public updateWithContext(spanContext: SpanContext): this {\n    // eslint-disable-next-line deprecation/deprecation\n    this.data = spanContext.data || {};\n    // eslint-disable-next-line deprecation/deprecation\n    this._name = spanContext.name || spanContext.description;\n    this._endTime = spanContext.endTimestamp;\n    // eslint-disable-next-line deprecation/deprecation\n    this.op = spanContext.op;\n    this._parentSpanId = spanContext.parentSpanId;\n    this._sampled = spanContext.sampled;\n    this._spanId = spanContext.spanId || this._spanId;\n    this._startTime = spanContext.startTimestamp || this._startTime;\n    this._status = spanContext.status;\n    // eslint-disable-next-line deprecation/deprecation\n    this.tags = spanContext.tags || {};\n    this._traceId = spanContext.traceId || this._traceId;\n\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   *\n   * @deprecated Use `spanToTraceContext()` util function instead.\n   */\n  public getTraceContext(): TraceContext {\n    return spanToTraceContext(this);\n  }\n\n  /**\n   * Get JSON representation of this span.\n   *\n   * @hidden\n   * @internal This method is purely for internal purposes and should not be used outside\n   * of SDK code. If you need to get a JSON representation of a span,\n   * use `spanToJSON(span)` instead.\n   */\n  public getSpanJSON(): SpanJSON {\n    return dropUndefinedKeys({\n      data: this._getData(),\n      description: this._name,\n      op: this._attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP] as string | undefined,\n      parent_span_id: this._parentSpanId,\n      span_id: this._spanId,\n      start_timestamp: this._startTime,\n      status: this._status,\n      // eslint-disable-next-line deprecation/deprecation\n      tags: Object.keys(this.tags).length > 0 ? this.tags : undefined,\n      timestamp: this._endTime,\n      trace_id: this._traceId,\n      origin: this._attributes[SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN] as SpanOrigin | undefined,\n      _metrics_summary: getMetricSummaryJsonForSpan(this),\n      profile_id: this._attributes[SEMANTIC_ATTRIBUTE_PROFILE_ID] as string | undefined,\n      exclusive_time: this._exclusiveTime,\n      measurements: Object.keys(this._measurements).length > 0 ? this._measurements : undefined,\n    });\n  }\n\n  /** @inheritdoc */\n  public isRecording(): boolean {\n    return !this._endTime && !!this._sampled;\n  }\n\n  /**\n   * Convert the object to JSON.\n   * @deprecated Use `spanToJSON(span)` instead.\n   */\n  public toJSON(): SpanJSON {\n    return this.getSpanJSON();\n  }\n\n  /**\n   * Get the merged data for this span.\n   * For now, this combines `data` and `attributes` together,\n   * until eventually we can ingest `attributes` directly.\n   */\n  private _getData():\n    | {\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        [key: string]: any;\n      }\n    | undefined {\n    // eslint-disable-next-line deprecation/deprecation\n    const { data, _attributes: attributes } = this;\n\n    const hasData = Object.keys(data).length > 0;\n    const hasAttributes = Object.keys(attributes).length > 0;\n\n    if (!hasData && !hasAttributes) {\n      return undefined;\n    }\n\n    if (hasData && hasAttributes) {\n      return {\n        ...data,\n        ...attributes,\n      };\n    }\n\n    return hasData ? data : attributes;\n  }\n}\n", "import type {\n  Context,\n  Contexts,\n  DynamicSamplingContext,\n  MeasurementUnit,\n  SpanTimeInput,\n  Transaction as TransactionInterface,\n  TransactionContext,\n  TransactionEvent,\n  TransactionMetadata,\n} from '@sentry/types';\nimport { dropUndefinedKeys, logger } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport type { Hub } from '../hub';\nimport { getCurrentHub } from '../hub';\nimport { getMetricSummaryJsonForSpan } from '../metrics/metric-summary';\nimport { SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, SEMANTIC_ATTRIBUTE_SENTRY_SOURCE } from '../semanticAttributes';\nimport { spanTimeInputToSeconds, spanToJSON, spanToTraceContext } from '../utils/spanUtils';\nimport { getDynamicSamplingContextFromSpan } from './dynamicSamplingContext';\nimport { Span as SpanClass, SpanRecorder } from './span';\nimport { getCapturedScopesOnSpan } from './trace';\n\n/** JSDoc */\nexport class Transaction extends SpanClass implements TransactionInterface {\n  /**\n   * The reference to the current hub.\n   */\n  // eslint-disable-next-line deprecation/deprecation\n  public _hub: Hub;\n\n  protected _name: string;\n\n  private _contexts: Contexts;\n\n  private _trimEnd?: boolean | undefined;\n\n  // DO NOT yet remove this property, it is used in a hack for v7 backwards compatibility.\n  private _frozenDynamicSamplingContext: Readonly<Partial<DynamicSamplingContext>> | undefined;\n\n  private _metadata: Partial<TransactionMetadata>;\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   * @deprecated Transactions will be removed in v8. Use spans instead.\n   */\n  // eslint-disable-next-line deprecation/deprecation\n  public constructor(transactionContext: TransactionContext, hub?: Hub) {\n    super(transactionContext);\n    this._contexts = {};\n\n    // eslint-disable-next-line deprecation/deprecation\n    this._hub = hub || getCurrentHub();\n\n    this._name = transactionContext.name || '';\n\n    this._metadata = {\n      // eslint-disable-next-line deprecation/deprecation\n      ...transactionContext.metadata,\n    };\n\n    this._trimEnd = transactionContext.trimEnd;\n\n    // this is because transactions are also spans, and spans have a transaction pointer\n    // TODO (v8): Replace this with another way to set the root span\n    // eslint-disable-next-line deprecation/deprecation\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  // This sadly conflicts with the getter/setter ordering :(\n  /* eslint-disable @typescript-eslint/member-ordering */\n\n  /**\n   * Getter for `name` property.\n   * @deprecated Use `spanToJSON(span).description` instead.\n   */\n  public get name(): string {\n    return this._name;\n  }\n\n  /**\n   * Setter for `name` property, which also sets `source` as custom.\n   * @deprecated Use `updateName()` and `setMetadata()` instead.\n   */\n  public set name(newName: string) {\n    // eslint-disable-next-line deprecation/deprecation\n    this.setName(newName);\n  }\n\n  /**\n   * Get the metadata for this transaction.\n   * @deprecated Use `spanGetMetadata(transaction)` instead.\n   */\n  public get metadata(): TransactionMetadata {\n    // We merge attributes in for backwards compatibility\n    return {\n      // Defaults\n      // eslint-disable-next-line deprecation/deprecation\n      source: 'custom',\n      spanMetadata: {},\n\n      // Legacy metadata\n      ...this._metadata,\n\n      // From attributes\n      ...(this._attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE] && {\n        source: this._attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE] as TransactionMetadata['source'],\n      }),\n      ...(this._attributes[SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE] && {\n        sampleRate: this._attributes[SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE] as TransactionMetadata['sampleRate'],\n      }),\n    };\n  }\n\n  /**\n   * Update the metadata for this transaction.\n   * @deprecated Use `spanGetMetadata(transaction)` instead.\n   */\n  public set metadata(metadata: TransactionMetadata) {\n    this._metadata = metadata;\n  }\n\n  /* eslint-enable @typescript-eslint/member-ordering */\n\n  /**\n   * Setter for `name` property, which also sets `source` on the metadata.\n   *\n   * @deprecated Use `.updateName()` and `.setAttribute()` instead.\n   */\n  public setName(name: string, source: TransactionMetadata['source'] = 'custom'): void {\n    this._name = name;\n    this.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, source);\n  }\n\n  /** @inheritdoc */\n  public updateName(name: string): this {\n    this._name = name;\n    return this;\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    // eslint-disable-next-line deprecation/deprecation\n    if (!this.spanRecorder) {\n      // eslint-disable-next-line deprecation/deprecation\n      this.spanRecorder = new SpanRecorder(maxlen);\n    }\n    // eslint-disable-next-line deprecation/deprecation\n    this.spanRecorder.add(this);\n  }\n\n  /**\n   * Set the context of a transaction event.\n   * @deprecated Use either `.setAttribute()`, or set the context on the scope before creating the transaction.\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   * @deprecated Use top-level `setMeasurement()` instead.\n   */\n  public setMeasurement(name: string, value: number, unit: MeasurementUnit = ''): void {\n    this._measurements[name] = { value, unit };\n  }\n\n  /**\n   * Store metadata on this transaction.\n   * @deprecated Use attributes or store data on the scope instead.\n   */\n  public setMetadata(newMetadata: Partial<TransactionMetadata>): void {\n    this._metadata = { ...this._metadata, ...newMetadata };\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public end(endTimestamp?: SpanTimeInput): string | undefined {\n    const timestampInS = spanTimeInputToSeconds(endTimestamp);\n    const transaction = this._finishTransaction(timestampInS);\n    if (!transaction) {\n      return undefined;\n    }\n    // eslint-disable-next-line deprecation/deprecation\n    return this._hub.captureEvent(transaction);\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public toContext(): TransactionContext {\n    // eslint-disable-next-line deprecation/deprecation\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    // eslint-disable-next-line deprecation/deprecation\n    super.updateWithContext(transactionContext);\n\n    this._name = transactionContext.name || '';\n    this._trimEnd = transactionContext.trimEnd;\n\n    return this;\n  }\n\n  /**\n   * @inheritdoc\n   *\n   * @experimental\n   *\n   * @deprecated Use top-level `getDynamicSamplingContextFromSpan` instead.\n   */\n  public getDynamicSamplingContext(): Readonly<Partial<DynamicSamplingContext>> {\n    return getDynamicSamplingContextFromSpan(this);\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  // eslint-disable-next-line deprecation/deprecation\n  public setHub(hub: Hub): void {\n    this._hub = hub;\n  }\n\n  /**\n   * Get the profile id of the transaction.\n   */\n  public getProfileId(): string | undefined {\n    if (this._contexts !== undefined && this._contexts['profile'] !== undefined) {\n      return this._contexts['profile'].profile_id as string;\n    }\n    return undefined;\n  }\n\n  /**\n   * Finish the transaction & prepare the event to send to Sentry.\n   */\n  protected _finishTransaction(endTimestamp?: number): TransactionEvent | undefined {\n    // This transaction is already finished, so we should not flush it again.\n    if (this._endTime !== 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.end(endTimestamp);\n\n    // eslint-disable-next-line deprecation/deprecation\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    // eslint-disable-next-line deprecation/deprecation\n    const finishedSpans = this.spanRecorder\n      ? // eslint-disable-next-line deprecation/deprecation\n        this.spanRecorder.spans.filter(span => span !== this && spanToJSON(span).timestamp)\n      : [];\n\n    if (this._trimEnd && finishedSpans.length > 0) {\n      const endTimes = finishedSpans.map(span => spanToJSON(span).timestamp).filter(Boolean) as number[];\n      this._endTime = endTimes.reduce((prev, current) => {\n        return prev > current ? prev : current;\n      });\n    }\n\n    const { scope: capturedSpanScope, isolationScope: capturedSpanIsolationScope } = getCapturedScopesOnSpan(this);\n\n    // eslint-disable-next-line deprecation/deprecation\n    const { metadata } = this;\n    // eslint-disable-next-line deprecation/deprecation\n    const { source } = metadata;\n\n    const transaction: TransactionEvent = {\n      contexts: {\n        ...this._contexts,\n        // We don't want to override trace context\n        trace: spanToTraceContext(this),\n      },\n      // TODO: Pass spans serialized via `spanToJSON()` here instead in v8.\n      spans: finishedSpans,\n      start_timestamp: this._startTime,\n      // eslint-disable-next-line deprecation/deprecation\n      tags: this.tags,\n      timestamp: this._endTime,\n      transaction: this._name,\n      type: 'transaction',\n      sdkProcessingMetadata: {\n        ...metadata,\n        capturedSpanScope,\n        capturedSpanIsolationScope,\n        ...dropUndefinedKeys({\n          dynamicSamplingContext: getDynamicSamplingContextFromSpan(this),\n        }),\n      },\n      _metrics_summary: getMetricSummaryJsonForSpan(this),\n      ...(source && {\n        transaction_info: {\n          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    // eslint-disable-next-line deprecation/deprecation\n    DEBUG_BUILD && logger.log(`[Tracing] Finishing ${this.op} transaction: ${this._name}.`);\n\n    return transaction;\n  }\n}\n", "/* eslint-disable max-lines */\nimport type { SpanTimeInput, TransactionContext } from '@sentry/types';\nimport { logger, timestampInSeconds } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport type { Hub } from '../hub';\nimport { spanTimeInputToSeconds, spanToJSON } from '../utils/spanUtils';\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.spanContext().spanId !== this.transactionSpanId) {\n      // We patch span.end() to pop an activity after setting an endTimestamp.\n      // eslint-disable-next-line @typescript-eslint/unbound-method\n      const originalEnd = span.end;\n      span.end = (...rest: unknown[]) => {\n        this._popActivity(span.spanContext().spanId);\n        return originalEnd.apply(span, rest);\n      };\n\n      // We should only push new activities if the span does not have an end timestamp.\n      if (spanToJSON(span).timestamp === undefined) {\n        this._pushActivity(span.spanContext().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  private _autoFinishAllowed: boolean;\n\n  /**\n   * @deprecated Transactions will be removed in v8. Use spans instead.\n   */\n  public constructor(\n    transactionContext: TransactionContext,\n    // eslint-disable-next-line deprecation/deprecation\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     * When set to `true`, will disable the idle timeout (`_idleTimeout` option) and heartbeat mechanisms (`_heartbeatInterval`\n     * option) until the `sendAutoFinishSignal()` method is called. The final timeout mechanism (`_finalTimeout` option)\n     * will not be affected by this option, meaning the transaction will definitely be finished when the final timeout is\n     * reached, no matter what this option is configured to.\n     *\n     * Defaults to `false`.\n     */\n    delayAutoFinishUntilSignal: 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    this._autoFinishAllowed = !delayAutoFinishUntilSignal;\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.spanContext().spanId}`);\n      // eslint-disable-next-line deprecation/deprecation\n      _idleHub.getScope().setSpan(this);\n    }\n\n    if (!delayAutoFinishUntilSignal) {\n      this._restartIdleTimeout();\n    }\n\n    setTimeout(() => {\n      if (!this._finished) {\n        this.setStatus('deadline_exceeded');\n        this._finishReason = IDLE_TRANSACTION_FINISH_REASONS[3];\n        this.end();\n      }\n    }, this._finalTimeout);\n  }\n\n  /** {@inheritDoc} */\n  public end(endTimestamp?: SpanTimeInput): string | undefined {\n    const endTimestampInS = spanTimeInputToSeconds(endTimestamp);\n\n    this._finished = true;\n    this.activities = {};\n\n    // eslint-disable-next-line deprecation/deprecation\n    if (this.op === 'ui.action.click') {\n      this.setAttribute(FINISH_REASON_TAG, this._finishReason);\n    }\n\n    // eslint-disable-next-line deprecation/deprecation\n    if (this.spanRecorder) {\n      DEBUG_BUILD &&\n        // eslint-disable-next-line deprecation/deprecation\n        logger.log('[Tracing] finishing IdleTransaction', new Date(endTimestampInS * 1000).toISOString(), this.op);\n\n      for (const callback of this._beforeFinishCallbacks) {\n        callback(this, endTimestampInS);\n      }\n\n      // eslint-disable-next-line deprecation/deprecation\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.spanContext().spanId === this.spanContext().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 (!spanToJSON(span).timestamp) {\n          span.setStatus('cancelled');\n          span.end(endTimestampInS);\n          DEBUG_BUILD &&\n            logger.log('[Tracing] cancelling span since transaction ended early', JSON.stringify(span, undefined, 2));\n        }\n\n        const { start_timestamp: startTime, timestamp: endTime } = spanToJSON(span);\n        const spanStartedBeforeTransactionFinish = startTime && startTime < endTimestampInS;\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 = endTime && startTime && endTime - startTime < 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      // eslint-disable-next-line deprecation/deprecation\n      const scope = this._idleHub.getScope();\n      // eslint-disable-next-line deprecation/deprecation\n      if (scope.getTransaction() === this) {\n        // eslint-disable-next-line deprecation/deprecation\n        scope.setSpan(undefined);\n      }\n    }\n\n    return super.end(endTimestamp);\n  }\n\n  /**\n   * Register a callback function that gets executed 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    // eslint-disable-next-line deprecation/deprecation\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      // eslint-disable-next-line deprecation/deprecation\n      this.spanRecorder = new IdleTransactionSpanRecorder(pushActivity, popActivity, this.spanContext().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    // eslint-disable-next-line deprecation/deprecation\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['end']>[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.end(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   * Permits the IdleTransaction to automatically end itself via the idle timeout and heartbeat mechanisms when the `delayAutoFinishUntilSignal` option was set to `true`.\n   */\n  public sendAutoFinishSignal(): void {\n    if (!this._autoFinishAllowed) {\n      DEBUG_BUILD && logger.log('[Tracing] Received finish signal for idle transaction.');\n      this._restartIdleTimeout();\n      this._autoFinishAllowed = true;\n    }\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['end']>[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.end(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        if (this._autoFinishAllowed) {\n          this._finishReason = IDLE_TRANSACTION_FINISH_REASONS[5];\n          this.end(endTimestamp);\n        }\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      if (this._autoFinishAllowed) {\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.end();\n      }\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 { Options, SamplingContext } from '@sentry/types';\nimport { isNaN, logger } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport { SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE } from '../semanticAttributes';\nimport { hasTracingEnabled } from '../utils/hasTracingEnabled';\nimport { spanToJSON } from '../utils/spanUtils';\nimport type { Transaction } from './transaction';\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 * This method muttes the given `transaction` and will set the `sampled` value on it.\n * It returns the same transaction, for convenience.\n */\nexport function sampleTransaction<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    // eslint-disable-next-line deprecation/deprecation\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  // eslint-disable-next-line deprecation/deprecation\n  if (transaction.sampled !== undefined) {\n    // eslint-disable-next-line deprecation/deprecation\n    transaction.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, Number(transaction.sampled));\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.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, Number(sampleRate));\n  } else if (samplingContext.parentSampled !== undefined) {\n    sampleRate = samplingContext.parentSampled;\n  } else if (typeof options.tracesSampleRate !== 'undefined') {\n    sampleRate = options.tracesSampleRate;\n    transaction.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, Number(sampleRate));\n  } else {\n    // When `enableTracing === true`, we use a sample rate of 100%\n    sampleRate = 1;\n    transaction.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, sampleRate);\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    // eslint-disable-next-line deprecation/deprecation\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    // eslint-disable-next-line deprecation/deprecation\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  // eslint-disable-next-line deprecation/deprecation\n  transaction.sampled = Math.random() < (sampleRate as number | boolean);\n\n  // if we're not going to keep it, we're done\n  // eslint-disable-next-line deprecation/deprecation\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 &&\n    // eslint-disable-next-line deprecation/deprecation\n    logger.log(`[Tracing] starting ${transaction.op} transaction - ${spanToJSON(transaction).description}`);\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 */\nexport function 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", "import type { ClientOptions, CustomSamplingContext, TransactionContext } from '@sentry/types';\nimport { logger } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport type { Hub } from '../hub';\nimport { getMainCarrier } from '../hub';\nimport { spanToTraceHeader } from '../utils/spanUtils';\nimport { registerErrorInstrumentation } from './errors';\nimport { IdleTransaction } from './idletransaction';\nimport { sampleTransaction } from './sampling';\nimport { Transaction } from './transaction';\n\n/** Returns all trace headers that are currently on the top scope. */\n// eslint-disable-next-line deprecation/deprecation\nfunction traceHeaders(this: Hub): { [key: string]: string } {\n  // eslint-disable-next-line deprecation/deprecation\n  const scope = this.getScope();\n  // eslint-disable-next-line deprecation/deprecation\n  const span = scope.getSpan();\n\n  return span\n    ? {\n        'sentry-trace': spanToTraceHeader(span),\n      }\n    : {};\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  // eslint-disable-next-line deprecation/deprecation\n  this: Hub,\n  transactionContext: TransactionContext,\n  customSamplingContext?: CustomSamplingContext,\n): Transaction {\n  // eslint-disable-next-line deprecation/deprecation\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    // eslint-disable-next-line deprecation/deprecation\n    transactionContext.sampled = false;\n  }\n\n  // eslint-disable-next-line deprecation/deprecation\n  let transaction = new Transaction(transactionContext, this);\n  transaction = sampleTransaction(transaction, options, {\n    name: transactionContext.name,\n    parentSampled: transactionContext.parentSampled,\n    transactionContext,\n    attributes: {\n      // eslint-disable-next-line deprecation/deprecation\n      ...transactionContext.data,\n      ...transactionContext.attributes,\n    },\n    ...customSamplingContext,\n  });\n  if (transaction.isRecording()) {\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  // eslint-disable-next-line deprecation/deprecation\n  hub: Hub,\n  transactionContext: TransactionContext,\n  idleTimeout: number,\n  finalTimeout: number,\n  onScope?: boolean,\n  customSamplingContext?: CustomSamplingContext,\n  heartbeatInterval?: number,\n  delayAutoFinishUntilSignal: boolean = false,\n): IdleTransaction {\n  // eslint-disable-next-line deprecation/deprecation\n  const client = hub.getClient();\n  const options: Partial<ClientOptions> = (client && client.getOptions()) || {};\n\n  // eslint-disable-next-line deprecation/deprecation\n  let transaction = new IdleTransaction(\n    transactionContext,\n    hub,\n    idleTimeout,\n    finalTimeout,\n    heartbeatInterval,\n    onScope,\n    delayAutoFinishUntilSignal,\n  );\n  transaction = sampleTransaction(transaction, options, {\n    name: transactionContext.name,\n    parentSampled: transactionContext.parentSampled,\n    transactionContext,\n    attributes: {\n      // eslint-disable-next-line deprecation/deprecation\n      ...transactionContext.data,\n      ...transactionContext.attributes,\n    },\n    ...customSamplingContext,\n  });\n  if (transaction.isRecording()) {\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", "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  // eslint-disable-next-line deprecation/deprecation\n  const transaction = getActiveTransaction();\n  if (transaction) {\n    // eslint-disable-next-line deprecation/deprecation\n    transaction.setMeasurement(name, value, unit);\n  }\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 && { 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 {\n  AggregationCounts,\n  Client,\n  RequestSessionStatus,\n  SessionAggregates,\n  SessionFlusherLike,\n} from '@sentry/types';\nimport { dropUndefinedKeys } from '@sentry/utils';\nimport { getCurrentScope } from './exports';\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  // Cast to any so that it can use Node.js timeout\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  private _intervalId: any;\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    // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n    if (this._intervalId.unref) {\n      // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n      this._intervalId.unref();\n    }\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 = getCurrentScope();\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 === 'onClose') {\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  Client,\n  Event,\n  EventHint,\n  EventProcessor,\n  Integration,\n  IntegrationClass,\n  IntegrationFn,\n  IntegrationFnResult,\n  Options,\n} from '@sentry/types';\nimport { arrayify, logger } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from './debug-build';\nimport { addGlobalEventProcessor } from './eventProcessors';\nimport { getClient } from './exports';\nimport { getCurrentHub } from './hub';\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: Pick<Options, 'defaultIntegrations' | 'integrations'>): 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/**\n * Execute the `afterAllSetup` hooks of the given integrations.\n */\nexport function afterSetupIntegrations(client: Client, integrations: Integration[]): void {\n  for (const integration of integrations) {\n    // guard against empty provided integrations\n    if (integration && integration.afterAllSetup) {\n      integration.afterAllSetup(client);\n    }\n  }\n}\n\n/** Setup a single integration.  */\nexport function setupIntegration(client: Client, integration: Integration, integrationIndex: IntegrationIndex): void {\n  if (integrationIndex[integration.name]) {\n    DEBUG_BUILD && logger.log(`Integration skipped because it was already installed: ${integration.name}`);\n    return;\n  }\n  integrationIndex[integration.name] = integration;\n\n  // `setupOnce` is only called the first time\n  if (installedIntegrations.indexOf(integration.name) === -1) {\n    // eslint-disable-next-line deprecation/deprecation\n    integration.setupOnce(addGlobalEventProcessor, getCurrentHub);\n    installedIntegrations.push(integration.name);\n  }\n\n  // `setup` is run for each client\n  if (integration.setup && typeof integration.setup === 'function') {\n    integration.setup(client);\n  }\n\n  if (client.on && typeof integration.preprocessEvent === 'function') {\n    const callback = integration.preprocessEvent.bind(integration) as typeof integration.preprocessEvent;\n    client.on('preprocessEvent', (event, hint) => callback(event, hint, client));\n  }\n\n  if (client.addEventProcessor && typeof integration.processEvent === 'function') {\n    const callback = integration.processEvent.bind(integration) as typeof integration.processEvent;\n\n    const processor: EventProcessor = (event: Event, hint: EventHint): ReturnType<typeof callback> =>\n      callback(event, hint, client);\n    processor.id = integration.name;\n\n    client.addEventProcessor(processor);\n  }\n\n  DEBUG_BUILD && logger.log(`Integration installed: ${integration.name}`);\n}\n\n/** Add an integration to the current hub's client. */\nexport function addIntegration(integration: Integration): void {\n  const client = getClient();\n\n  if (!client || !client.addIntegration) {\n    DEBUG_BUILD && logger.warn(`Cannot add integration \"${integration.name}\" because no SDK Client is available.`);\n    return;\n  }\n\n  client.addIntegration(integration);\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\n/**\n * Convert a new integration function to the legacy class syntax.\n * In v8, we can remove this and instead export the integration functions directly.\n *\n * @deprecated This will be removed in v8!\n */\nexport function convertIntegrationFnToClass<Fn extends IntegrationFn>(\n  name: string,\n  fn: Fn,\n): IntegrationClass<Integration> {\n  const ConvertedIntegration = function ConvertedIntegration(...args: Parameters<Fn>): Integration {\n    return fn(...args);\n  };\n  ConvertedIntegration.id = name;\n  return ConvertedIntegration as unknown as IntegrationClass<Integration>;\n}\n\n/**\n * Define an integration function that can be used to create an integration instance.\n * Note that this by design hides the implementation details of the integration, as they are considered internal.\n */\nexport function defineIntegration<Fn extends IntegrationFn>(fn: Fn): (...args: Parameters<Fn>) => IntegrationFnResult {\n  return fn;\n}\n", "import type { MeasurementUnit, MetricBucketItem, Primitive } from '@sentry/types';\nimport { dropUndefinedKeys } from '@sentry/utils';\nimport type { MetricType } from './types';\n\n/**\n * Generate bucket key from metric properties.\n */\nexport function getBucketKey(\n  metricType: MetricType,\n  name: string,\n  unit: MeasurementUnit,\n  tags: Record<string, string>,\n): string {\n  const stringifiedTags = Object.entries(dropUndefinedKeys(tags)).sort((a, b) => a[0].localeCompare(b[0]));\n  return `${metricType}${name}${unit}${stringifiedTags}`;\n}\n\n/* eslint-disable no-bitwise */\n/**\n * Simple hash function for strings.\n */\nexport function simpleHash(s: string): number {\n  let rv = 0;\n  for (let i = 0; i < s.length; i++) {\n    const c = s.charCodeAt(i);\n    rv = (rv << 5) - rv + c;\n    rv &= rv;\n  }\n  return rv >>> 0;\n}\n/* eslint-enable no-bitwise */\n\n/**\n * Serialize metrics buckets into a string based on statsd format.\n *\n * Example of format:\n * metric.name@second:1:1.2|d|#a:value,b:anothervalue|T12345677\n * Segments:\n * name: metric.name\n * unit: second\n * value: [1, 1.2]\n * type of metric: d (distribution)\n * tags: { a: value, b: anothervalue }\n * timestamp: 12345677\n */\nexport function serializeMetricBuckets(metricBucketItems: MetricBucketItem[]): string {\n  let out = '';\n  for (const item of metricBucketItems) {\n    const tagEntries = Object.entries(item.tags);\n    const maybeTags = tagEntries.length > 0 ? `|#${tagEntries.map(([key, value]) => `${key}:${value}`).join(',')}` : '';\n    out += `${item.name}@${item.unit}:${item.metric}|${item.metricType}${maybeTags}|T${item.timestamp}\\n`;\n  }\n  return out;\n}\n\n/** Sanitizes units */\nexport function sanitizeUnit(unit: string): string {\n  return unit.replace(/[^\\w]+/gi, '_');\n}\n\n/** Sanitizes metric keys */\nexport function sanitizeMetricKey(key: string): string {\n  return key.replace(/[^\\w\\-.]+/gi, '_');\n}\n\nfunction sanitizeTagKey(key: string): string {\n  return key.replace(/[^\\w\\-./]+/gi, '');\n}\n\nconst tagValueReplacements: [string, string][] = [\n  ['\\n', '\\\\n'],\n  ['\\r', '\\\\r'],\n  ['\\t', '\\\\t'],\n  ['\\\\', '\\\\\\\\'],\n  ['|', '\\\\u{7c}'],\n  [',', '\\\\u{2c}'],\n];\n\nfunction getCharOrReplacement(input: string): string {\n  for (const [search, replacement] of tagValueReplacements) {\n    if (input === search) {\n      return replacement;\n    }\n  }\n\n  return input;\n}\n\nfunction sanitizeTagValue(value: string): string {\n  return [...value].reduce((acc, char) => acc + getCharOrReplacement(char), '');\n}\n\n/**\n * Sanitizes tags.\n */\nexport function sanitizeTags(unsanitizedTags: Record<string, Primitive>): Record<string, string> {\n  const tags: Record<string, string> = {};\n  for (const key in unsanitizedTags) {\n    if (Object.prototype.hasOwnProperty.call(unsanitizedTags, key)) {\n      const sanitizedKey = sanitizeTagKey(key);\n      tags[sanitizedKey] = sanitizeTagValue(String(unsanitizedTags[key]));\n    }\n  }\n  return tags;\n}\n", "import type { DsnComponents, MetricBucketItem, SdkMetadata, StatsdEnvelope, StatsdItem } from '@sentry/types';\nimport { createEnvelope, dsnToString } from '@sentry/utils';\nimport { serializeMetricBuckets } from './utils';\n\n/**\n * Create envelope from a metric aggregate.\n */\nexport function createMetricEnvelope(\n  metricBucketItems: Array<MetricBucketItem>,\n  dsn?: DsnComponents,\n  metadata?: SdkMetadata,\n  tunnel?: string,\n): StatsdEnvelope {\n  const headers: StatsdEnvelope[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  const item = createMetricEnvelopeItem(metricBucketItems);\n  return createEnvelope<StatsdEnvelope>(headers, [item]);\n}\n\nfunction createMetricEnvelopeItem(metricBucketItems: MetricBucketItem[]): StatsdItem {\n  const payload = serializeMetricBuckets(metricBucketItems);\n  const metricHeaders: StatsdItem[0] = {\n    type: 'statsd',\n    length: payload.length,\n  };\n  return [metricHeaders, payload];\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  EventProcessor,\n  FeedbackEvent,\n  Integration,\n  IntegrationClass,\n  MetricBucketItem,\n  MetricsAggregator,\n  Outcome,\n  ParameterizedString,\n  SdkMetadata,\n  Session,\n  SessionAggregates,\n  Severity,\n  SeverityLevel,\n  StartSpanOptions,\n  Transaction,\n  TransactionEvent,\n  Transport,\n  TransportMakeRequestResponse,\n} from '@sentry/types';\nimport {\n  SentryError,\n  SyncPromise,\n  addItemToEnvelope,\n  checkOrSetAlreadyCaught,\n  createAttachmentEnvelopeItem,\n  isParameterizedString,\n  isPlainObject,\n  isPrimitive,\n  isThenable,\n  logger,\n  makeDsn,\n  rejectedSyncPromise,\n  resolvedSyncPromise,\n} from '@sentry/utils';\n\nimport { getEnvelopeEndpointWithUrlEncodedAuth } from './api';\nimport { DEBUG_BUILD } from './debug-build';\nimport { createEventEnvelope, createSessionEnvelope } from './envelope';\nimport { getClient } from './exports';\nimport { getIsolationScope } from './hub';\nimport type { IntegrationIndex } from './integration';\nimport { afterSetupIntegrations } from './integration';\nimport { setupIntegration, setupIntegrations } from './integration';\nimport { createMetricEnvelope } from './metrics/envelope';\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  /**\n   * A reference to a metrics aggregator\n   *\n   * @experimental Note this is alpha API. It may experience breaking changes in the future.\n   */\n  public metricsAggregator?: MetricsAggregator;\n\n  /** Options passed to the SDK. */\n  protected readonly _options: O;\n\n  /** The client Dsn, if specified in options. Without this Dsn, the SDK will be disabled. */\n  protected readonly _dsn?: 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  protected _eventProcessors: EventProcessor[];\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    this._eventProcessors = [];\n\n    if (options.dsn) {\n      this._dsn = makeDsn(options.dsn);\n    } else {\n      DEBUG_BUILD && logger.warn('No DSN provided, client will not send events.');\n    }\n\n    if (this._dsn) {\n      const url = getEnvelopeEndpointWithUrlEncodedAuth(this._dsn, options);\n      this._transport = options.transport({\n        tunnel: this._options.tunnel,\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: ParameterizedString,\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 eventMessage = isParameterizedString(message) ? message : String(message);\n\n    const promisedEvent = isPrimitive(message)\n      ? this.eventFromMessage(eventMessage, 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    const sdkProcessingMetadata = event.sdkProcessingMetadata || {};\n    const capturedSpanScope: Scope | undefined = sdkProcessingMetadata.capturedSpanScope;\n\n    this._process(\n      this._captureEvent(event, hint, capturedSpanScope || 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 (!(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      if (this.metricsAggregator) {\n        this.metricsAggregator.flush();\n      }\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      if (this.metricsAggregator) {\n        this.metricsAggregator.close();\n      }\n      return result;\n    });\n  }\n\n  /** Get all installed event processors. */\n  public getEventProcessors(): EventProcessor[] {\n    return this._eventProcessors;\n  }\n\n  /** @inheritDoc */\n  public addEventProcessor(eventProcessor: EventProcessor): void {\n    this._eventProcessors.push(eventProcessor);\n  }\n\n  /**\n   * This is an internal function to setup all integrations that should run on the client.\n   * @deprecated Use `client.init()` instead.\n   */\n  public setupIntegrations(forceInitialize?: boolean): void {\n    if ((forceInitialize && !this._integrationsInitialized) || (this._isEnabled() && !this._integrationsInitialized)) {\n      this._setupIntegrations();\n    }\n  }\n\n  /** @inheritdoc */\n  public init(): void {\n    if (this._isEnabled()) {\n      this._setupIntegrations();\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   * @deprecated Use `getIntegrationByName()` instead.\n   */\n  public getIntegrationById(integrationId: string): Integration | undefined {\n    return this.getIntegrationByName(integrationId);\n  }\n\n  /**\n   * Gets an installed integration by its name.\n   *\n   * @returns The installed integration or `undefined` if no integration with that `name` was installed.\n   */\n  public getIntegrationByName<T extends Integration = Integration>(integrationName: string): T | undefined {\n    return this._integrations[integrationName] as T | undefined;\n  }\n\n  /**\n   * Returns the client's instance of the given integration class, it any.\n   * @deprecated Use `getIntegrationByName()` instead.\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    const isAlreadyInstalled = this._integrations[integration.name];\n\n    // This hook takes care of only installing if not already installed\n    setupIntegration(this, integration, this._integrations);\n    // Here we need to check manually to make sure to not run this multiple times\n    if (!isAlreadyInstalled) {\n      afterSetupIntegrations(this, [integration]);\n    }\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public sendEvent(event: Event, hint: EventHint = {}): void {\n    this.emit('beforeSendEvent', event, hint);\n\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   * @inheritDoc\n   */\n  public sendSession(session: Session | SessionAggregates): void {\n    const env = createSessionEnvelope(session, this._dsn, this._options._metadata, this._options.tunnel);\n\n    // _sendEnvelope should not throw\n    // eslint-disable-next-line @typescript-eslint/no-floating-promises\n    this._sendEnvelope(env);\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public recordDroppedEvent(reason: EventDropReason, category: DataCategory, eventOrCount?: Event | number): void {\n    if (this._options.sendClientReports) {\n      // TODO v9: We do not need the `event` passed as third argument anymore, and can possibly remove this overload\n      // If event is passed as third argument, we assume this is a count of 1\n      const count = typeof eventOrCount === 'number' ? eventOrCount : 1;\n\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(`Recording outcome: \"${key}\"${count > 1 ? ` (${count} times)` : ''}`);\n      this._outcomes[key] = (this._outcomes[key] || 0) + count;\n    }\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public captureAggregateMetrics(metricBucketItems: Array<MetricBucketItem>): void {\n    DEBUG_BUILD && logger.log(`Flushing aggregated metrics, number of metrics: ${metricBucketItems.length}`);\n    const metricsEnvelope = createMetricEnvelope(\n      metricBucketItems,\n      this._dsn,\n      this._options._metadata,\n      this._options.tunnel,\n    );\n\n    // _sendEnvelope should not throw\n    // eslint-disable-next-line @typescript-eslint/no-floating-promises\n    this._sendEnvelope(metricsEnvelope);\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(\n    hook: 'beforeSendFeedback',\n    callback: (feedback: FeedbackEvent, options?: { includeReplay: boolean }) => void,\n  ): void;\n\n  /** @inheritdoc */\n  public on(hook: 'startPageLoadSpan', callback: (options: StartSpanOptions) => void): void;\n\n  /** @inheritdoc */\n  public on(hook: 'startNavigationSpan', callback: (options: StartSpanOptions) => 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: 'beforeSendFeedback', feedback: FeedbackEvent, options?: { includeReplay: boolean }): void;\n\n  /** @inheritdoc */\n  public emit(hook: 'startPageLoadSpan', options: StartSpanOptions): void;\n\n  /** @inheritdoc */\n  public emit(hook: 'startNavigationSpan', options: StartSpanOptions): 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  /** Setup integrations for this client. */\n  protected _setupIntegrations(): void {\n    const { integrations } = this._options;\n    this._integrations = setupIntegrations(this, integrations);\n    afterSetupIntegrations(this, integrations);\n\n    // TODO v8: We don't need this flag anymore\n    this._integrationsInitialized = true;\n  }\n\n  /** Updates existing session based on the provided event */\n  protected _updateSessionFromEvent(session: Session, event: Event): void {\n    let crashed = false;\n    let errored = false;\n    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 transport is present. */\n  protected _isEnabled(): boolean {\n    return this.getOptions().enabled !== false && this._transport !== 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(\n    event: Event,\n    hint: EventHint,\n    scope?: Scope,\n    isolationScope = getIsolationScope(),\n  ): 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, this, isolationScope).then(evt => {\n      if (evt === null) {\n        return evt;\n      }\n\n      const propagationContext = {\n        ...isolationScope.getPropagationContext(),\n        ...(scope ? scope.getPropagationContext() : undefined),\n      };\n\n      const trace = evt.contexts && evt.contexts.trace;\n      if (!trace && propagationContext) {\n        const { traceId: trace_id, spanId, parentSpanId, dsc } = 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    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    const sdkProcessingMetadata = event.sdkProcessingMetadata || {};\n    const capturedSpanIsolationScope: Scope | undefined = sdkProcessingMetadata.capturedSpanIsolationScope;\n\n    return this._prepareEvent(event, hint, scope, capturedSpanIsolationScope)\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          if (isTransaction) {\n            const spans = event.spans || [];\n            // the transaction itself counts as one span, plus all the child spans that are added\n            const spanCount = 1 + spans.length;\n            this.recordDroppedEvent('before_send', 'span', spanCount);\n          }\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        if (isTransaction) {\n          const spanCountBefore =\n            (processedEvent.sdkProcessingMetadata && processedEvent.sdkProcessingMetadata.spanCountBeforeProcessing) ||\n            0;\n          const spanCountAfter = processedEvent.spans ? processedEvent.spans.length : 0;\n\n          const droppedSpanCount = spanCountBefore - spanCountAfter;\n          if (droppedSpanCount > 0) {\n            this.recordDroppedEvent('before_send', 'span', droppedSpanCount);\n          }\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    this.emit('beforeEnvelope', envelope);\n\n    if (this._isEnabled() && this._transport) {\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: ParameterizedString,\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    if (event.spans) {\n      // We store the # of spans before processing in SDK metadata,\n      // so we can compare it afterwards to determine how many spans were dropped\n      const spanCountBefore = event.spans.length;\n      event.sdkProcessingMetadata = {\n        ...event.sdkProcessingMetadata,\n        spanCountBeforeProcessing: spanCountBefore,\n      };\n    }\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\n/**\n * Add an event processor to the current client.\n * This event processor will run for all events processed by this client.\n */\nexport function addEventProcessor(callback: EventProcessor): void {\n  const client = getClient();\n\n  if (!client || !client.addEventProcessor) {\n    return;\n  }\n\n  client.addEventProcessor(callback);\n}\n", "import type {\n  CheckInEnvelope,\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): CheckInEnvelope {\n  const headers: CheckInEnvelope[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<CheckInEnvelope>(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", "export const COUNTER_METRIC_TYPE = 'c' as const;\nexport const GAUGE_METRIC_TYPE = 'g' as const;\nexport const SET_METRIC_TYPE = 's' as const;\nexport const DISTRIBUTION_METRIC_TYPE = 'd' as const;\n\n/**\n * This does not match spec in https://develop.sentry.dev/sdk/metrics\n * but was chosen to optimize for the most common case in browser environments.\n */\nexport const DEFAULT_BROWSER_FLUSH_INTERVAL = 5000;\n\n/**\n * SDKs are required to bucket into 10 second intervals (rollup in seconds)\n * which is the current lower bound of metric accuracy.\n */\nexport const DEFAULT_FLUSH_INTERVAL = 10000;\n\n/**\n * The maximum number of metrics that should be stored in memory.\n */\nexport const MAX_WEIGHT = 10000;\n", "import type { MetricInstance } from '@sentry/types';\nimport { COUNTER_METRIC_TYPE, DISTRIBUTION_METRIC_TYPE, GAUGE_METRIC_TYPE, SET_METRIC_TYPE } from './constants';\nimport { simpleHash } from './utils';\n\n/**\n * A metric instance representing a counter.\n */\nexport class CounterMetric implements MetricInstance {\n  public constructor(private _value: number) {}\n\n  /** @inheritDoc */\n  public get weight(): number {\n    return 1;\n  }\n\n  /** @inheritdoc */\n  public add(value: number): void {\n    this._value += value;\n  }\n\n  /** @inheritdoc */\n  public toString(): string {\n    return `${this._value}`;\n  }\n}\n\n/**\n * A metric instance representing a gauge.\n */\nexport class GaugeMetric implements MetricInstance {\n  private _last: number;\n  private _min: number;\n  private _max: number;\n  private _sum: number;\n  private _count: number;\n\n  public constructor(value: number) {\n    this._last = value;\n    this._min = value;\n    this._max = value;\n    this._sum = value;\n    this._count = 1;\n  }\n\n  /** @inheritDoc */\n  public get weight(): number {\n    return 5;\n  }\n\n  /** @inheritdoc */\n  public add(value: number): void {\n    this._last = value;\n    if (value < this._min) {\n      this._min = value;\n    }\n    if (value > this._max) {\n      this._max = value;\n    }\n    this._sum += value;\n    this._count++;\n  }\n\n  /** @inheritdoc */\n  public toString(): string {\n    return `${this._last}:${this._min}:${this._max}:${this._sum}:${this._count}`;\n  }\n}\n\n/**\n * A metric instance representing a distribution.\n */\nexport class DistributionMetric implements MetricInstance {\n  private _value: number[];\n\n  public constructor(first: number) {\n    this._value = [first];\n  }\n\n  /** @inheritDoc */\n  public get weight(): number {\n    return this._value.length;\n  }\n\n  /** @inheritdoc */\n  public add(value: number): void {\n    this._value.push(value);\n  }\n\n  /** @inheritdoc */\n  public toString(): string {\n    return this._value.join(':');\n  }\n}\n\n/**\n * A metric instance representing a set.\n */\nexport class SetMetric implements MetricInstance {\n  private _value: Set<number | string>;\n\n  public constructor(public first: number | string) {\n    this._value = new Set([first]);\n  }\n\n  /** @inheritDoc */\n  public get weight(): number {\n    return this._value.size;\n  }\n\n  /** @inheritdoc */\n  public add(value: number | string): void {\n    this._value.add(value);\n  }\n\n  /** @inheritdoc */\n  public toString(): string {\n    return Array.from(this._value)\n      .map(val => (typeof val === 'string' ? simpleHash(val) : val))\n      .join(':');\n  }\n}\n\nexport const METRIC_MAP = {\n  [COUNTER_METRIC_TYPE]: CounterMetric,\n  [GAUGE_METRIC_TYPE]: GaugeMetric,\n  [DISTRIBUTION_METRIC_TYPE]: DistributionMetric,\n  [SET_METRIC_TYPE]: SetMetric,\n};\n", "import type {\n  Client,\n  ClientOptions,\n  MeasurementUnit,\n  MetricsAggregator as MetricsAggregatorBase,\n  Primitive,\n} from '@sentry/types';\nimport { timestampInSeconds } from '@sentry/utils';\nimport { DEFAULT_FLUSH_INTERVAL, MAX_WEIGHT, SET_METRIC_TYPE } from './constants';\nimport { METRIC_MAP } from './instance';\nimport { updateMetricSummaryOnActiveSpan } from './metric-summary';\nimport type { MetricBucket, MetricType } from './types';\nimport { getBucketKey, sanitizeMetricKey, sanitizeTags, sanitizeUnit } from './utils';\n\n/**\n * A metrics aggregator that aggregates metrics in memory and flushes them periodically.\n */\nexport class MetricsAggregator implements MetricsAggregatorBase {\n  // TODO(@anonrig): Use FinalizationRegistry to have a proper way of flushing the buckets\n  // when the aggregator is garbage collected.\n  // Ref: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/FinalizationRegistry\n  private _buckets: MetricBucket;\n\n  // Different metrics have different weights. We use this to limit the number of metrics\n  // that we store in memory.\n  private _bucketsTotalWeight;\n\n  // Cast to any so that it can use Node.js timeout\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  private readonly _interval: any;\n\n  // SDKs are required to shift the flush interval by random() * rollup_in_seconds.\n  // That shift is determined once per startup to create jittering.\n  private readonly _flushShift: number;\n\n  // An SDK is required to perform force flushing ahead of scheduled time if the memory\n  // pressure is too high. There is no rule for this other than that SDKs should be tracking\n  // abstract aggregation complexity (eg: a counter only carries a single float, whereas a\n  // distribution is a float per emission).\n  //\n  // Force flush is used on either shutdown, flush() or when we exceed the max weight.\n  private _forceFlush: boolean;\n\n  public constructor(private readonly _client: Client<ClientOptions>) {\n    this._buckets = new Map();\n    this._bucketsTotalWeight = 0;\n\n    this._interval = setInterval(() => this._flush(), DEFAULT_FLUSH_INTERVAL) as any;\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n    if (this._interval.unref) {\n      // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n      this._interval.unref();\n    }\n\n    this._flushShift = Math.floor((Math.random() * DEFAULT_FLUSH_INTERVAL) / 1000);\n    this._forceFlush = false;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public add(\n    metricType: MetricType,\n    unsanitizedName: string,\n    value: number | string,\n    unsanitizedUnit: MeasurementUnit = 'none',\n    unsanitizedTags: Record<string, Primitive> = {},\n    maybeFloatTimestamp = timestampInSeconds(),\n  ): void {\n    const timestamp = Math.floor(maybeFloatTimestamp);\n    const name = sanitizeMetricKey(unsanitizedName);\n    const tags = sanitizeTags(unsanitizedTags);\n    const unit = sanitizeUnit(unsanitizedUnit as string);\n\n    const bucketKey = getBucketKey(metricType, name, unit, tags);\n\n    let bucketItem = this._buckets.get(bucketKey);\n    // If this is a set metric, we need to calculate the delta from the previous weight.\n    const previousWeight = bucketItem && metricType === SET_METRIC_TYPE ? bucketItem.metric.weight : 0;\n\n    if (bucketItem) {\n      bucketItem.metric.add(value);\n      // TODO(abhi): Do we need this check?\n      if (bucketItem.timestamp < timestamp) {\n        bucketItem.timestamp = timestamp;\n      }\n    } else {\n      bucketItem = {\n        // @ts-expect-error we don't need to narrow down the type of value here, saves bundle size.\n        metric: new METRIC_MAP[metricType](value),\n        timestamp,\n        metricType,\n        name,\n        unit,\n        tags,\n      };\n      this._buckets.set(bucketKey, bucketItem);\n    }\n\n    // If value is a string, it's a set metric so calculate the delta from the previous weight.\n    const val = typeof value === 'string' ? bucketItem.metric.weight - previousWeight : value;\n    updateMetricSummaryOnActiveSpan(metricType, name, val, unit, unsanitizedTags, bucketKey);\n\n    // We need to keep track of the total weight of the buckets so that we can\n    // flush them when we exceed the max weight.\n    this._bucketsTotalWeight += bucketItem.metric.weight;\n\n    if (this._bucketsTotalWeight >= MAX_WEIGHT) {\n      this.flush();\n    }\n  }\n\n  /**\n   * Flushes the current metrics to the transport via the transport.\n   */\n  public flush(): void {\n    this._forceFlush = true;\n    this._flush();\n  }\n\n  /**\n   * Shuts down metrics aggregator and clears all metrics.\n   */\n  public close(): void {\n    this._forceFlush = true;\n    clearInterval(this._interval);\n    this._flush();\n  }\n\n  /**\n   * Flushes the buckets according to the internal state of the aggregator.\n   * If it is a force flush, which happens on shutdown, it will flush all buckets.\n   * Otherwise, it will only flush buckets that are older than the flush interval,\n   * and according to the flush shift.\n   *\n   * This function mutates `_forceFlush` and `_bucketsTotalWeight` properties.\n   */\n  private _flush(): void {\n    // TODO(@anonrig): Add Atomics for locking to avoid having force flush and regular flush\n    // running at the same time.\n    // Ref: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Atomics\n\n    // This path eliminates the need for checking for timestamps since we're forcing a flush.\n    // Remember to reset the flag, or it will always flush all metrics.\n    if (this._forceFlush) {\n      this._forceFlush = false;\n      this._bucketsTotalWeight = 0;\n      this._captureMetrics(this._buckets);\n      this._buckets.clear();\n      return;\n    }\n    const cutoffSeconds = Math.floor(timestampInSeconds()) - DEFAULT_FLUSH_INTERVAL / 1000 - this._flushShift;\n    // TODO(@anonrig): Optimization opportunity.\n    // Convert this map to an array and store key in the bucketItem.\n    const flushedBuckets: MetricBucket = new Map();\n    for (const [key, bucket] of this._buckets) {\n      if (bucket.timestamp <= cutoffSeconds) {\n        flushedBuckets.set(key, bucket);\n        this._bucketsTotalWeight -= bucket.metric.weight;\n      }\n    }\n\n    for (const [key] of flushedBuckets) {\n      this._buckets.delete(key);\n    }\n\n    this._captureMetrics(flushedBuckets);\n  }\n\n  /**\n   * Only captures a subset of the buckets passed to this function.\n   * @param flushedBuckets\n   */\n  private _captureMetrics(flushedBuckets: MetricBucket): void {\n    if (flushedBuckets.size > 0 && this._client.captureAggregateMetrics) {\n      // TODO(@anonrig): Optimization opportunity.\n      // This copy operation can be avoided if we store the key in the bucketItem.\n      const buckets = Array.from(flushedBuckets).map(([, bucketItem]) => bucketItem);\n      this._client.captureAggregateMetrics(buckets);\n    }\n  }\n}\n", "import type {\n  BaseTransportOptions,\n  CheckIn,\n  ClientOptions,\n  DynamicSamplingContext,\n  Event,\n  EventHint,\n  MonitorConfig,\n  ParameterizedString,\n  SerializedCheckIn,\n  Severity,\n  SeverityLevel,\n  TraceContext,\n} from '@sentry/types';\nimport { eventFromMessage, eventFromUnknownInput, logger, resolvedSyncPromise, uuid4 } from '@sentry/utils';\n\nimport { BaseClient } from './baseclient';\nimport { createCheckInEnvelope } from './checkin';\nimport { DEBUG_BUILD } from './debug-build';\nimport { getClient } from './exports';\nimport { MetricsAggregator } from './metrics/aggregator';\nimport type { Scope } from './scope';\nimport { SessionFlusher } from './sessionflusher';\nimport {\n  addTracingExtensions,\n  getDynamicSamplingContextFromClient,\n  getDynamicSamplingContextFromSpan,\n} from './tracing';\nimport { getRootSpan } from './utils/getRootSpan';\nimport { spanToTraceContext } from './utils/spanUtils';\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  protected _sessionFlusher: SessionFlusher | undefined;\n\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    if (options._experiments && options._experiments['metricsAggregator']) {\n      this.metricsAggregator = new MetricsAggregator(this);\n    }\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public eventFromException(exception: unknown, hint?: EventHint): PromiseLike<Event> {\n    return resolvedSyncPromise(eventFromUnknownInput(getClient(), this._options.stackParser, exception, hint));\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public eventFromMessage(\n    message: ParameterizedString,\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   * @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    if (this._sessionFlusher) {\n      this._sessionFlusher.close();\n    }\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   * 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 = 'checkInId' in checkIn && 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 ('duration' in checkIn) {\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\n    // _sendEnvelope should not throw\n    // eslint-disable-next-line @typescript-eslint/no-floating-promises\n    this._sendEnvelope(envelope);\n\n    return id;\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  /**\n   * @inheritDoc\n   */\n  protected _prepareEvent(\n    event: Event,\n    hint: EventHint,\n    scope?: Scope,\n    isolationScope?: Scope,\n  ): 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, isolationScope);\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    // eslint-disable-next-line deprecation/deprecation\n    const span = scope.getSpan();\n    if (span) {\n      const samplingContext = getRootSpan(span) ? getDynamicSamplingContextFromSpan(span) : undefined;\n      return [samplingContext, spanToTraceContext(span)];\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 { consoleSandbox, logger } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from './debug-build';\nimport { getCurrentScope } from './exports';\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      consoleSandbox(() => {\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  }\n  const scope = getCurrentScope();\n  scope.update(options.initialScope);\n\n  const client = new clientClass(options);\n  setCurrentClient(client);\n  initializeClient(client);\n}\n\n/**\n * Make the given client the current client.\n */\nexport function setCurrentClient(client: Client): void {\n  // eslint-disable-next-line deprecation/deprecation\n  const hub = getCurrentHub();\n  // eslint-disable-next-line deprecation/deprecation\n  const top = hub.getStackTop();\n  top.client = client;\n  top.scope.setClient(client);\n}\n\n/**\n * Initialize the client for the current scope.\n * Make sure to call this after `setCurrentClient()`.\n */\nfunction initializeClient(client: Client): void {\n  if (client.init) {\n    client.init();\n    // TODO v8: Remove this fallback\n    // eslint-disable-next-line deprecation/deprecation\n  } else if (client.setupIntegrations) {\n    // eslint-disable-next-line deprecation/deprecation\n    client.setupIntegrations();\n  }\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  SentryError,\n  createEnvelope,\n  envelopeItemTypeToDataCategory,\n  forEachEnvelopeItem,\n  isRateLimited,\n  logger,\n  makePromiseBuffer,\n  resolvedSyncPromise,\n  serializeEnvelope,\n  updateRateLimits,\n} from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../debug-build';\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 dataCategory = envelopeItemTypeToDataCategory(type);\n      if (isRateLimited(rateLimits, dataCategory)) {\n        const event: Event | undefined = getEventForEnvelopeItem(item, type);\n        options.recordDroppedEvent('ratelimit_backoff', dataCategory, 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\nimport { DEBUG_BUILD } from '../debug-build';\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 { createEnvelope, 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      ...transport,\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    };\n  };\n}\n\n/** Overrides the DSN in the envelope header  */\nfunction overrideDsn(envelope: Envelope, dsn: string): Envelope {\n  return createEnvelope(\n    dsn\n      ? {\n          ...envelope[0],\n          dsn,\n        }\n      : envelope[0],\n    envelope[1],\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 = new Map<string, Transport>();\n\n    function getTransport(dsn: string, release: string | undefined): [string, 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      let transport = otherTransports.get(key);\n\n      if (!transport) {\n        const validatedDsn = dsnFromString(dsn);\n        if (!validatedDsn) {\n          return undefined;\n        }\n\n        const url = getEnvelopeEndpointWithUrlEncodedAuth(validatedDsn, options.tunnel);\n\n        transport = release\n          ? makeOverrideReleaseTransport(createTransport, release)({ ...options, url })\n          : createTransport({ ...options, url });\n\n        otherTransports.set(key, transport);\n      }\n\n      return [dsn, transport];\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 [string, Transport] => !!t);\n\n      // If we have no transports to send to, use the fallback transport\n      if (transports.length === 0) {\n        // Don't override the DSN in the header for the fallback transport. '' is falsy\n        transports.push(['', fallbackTransport]);\n      }\n\n      const results = await Promise.all(\n        transports.map(([dsn, transport]) => transport.send(overrideDsn(envelope, dsn))),\n      );\n\n      return results[0];\n    }\n\n    async function flush(timeout: number | undefined): Promise<boolean> {\n      const promises = [await fallbackTransport.flush(timeout)];\n      for (const [, transport] of otherTransports) {\n        promises.push(await transport.flush(timeout));\n      }\n\n      return promises.every(r => r);\n    }\n\n    return {\n      send,\n      flush,\n    };\n  };\n}\n", "import type { DsnComponents, SpanEnvelope, SpanItem } from '@sentry/types';\nimport type { Span } from '@sentry/types';\nimport { createEnvelope, dsnToString } from '@sentry/utils';\n\n/**\n * Create envelope from Span item.\n */\nexport function createSpanEnvelope(spans: Span[], dsn?: DsnComponents): SpanEnvelope {\n  const headers: SpanEnvelope[0] = {\n    sent_at: new Date().toISOString(),\n  };\n\n  if (dsn) {\n    headers.dsn = dsnToString(dsn);\n  }\n\n  const items = spans.map(createSpanItem);\n  return createEnvelope<SpanEnvelope>(headers, items);\n}\n\nfunction createSpanItem(span: Span): SpanItem {\n  const spanHeaders: SpanItem[0] = {\n    type: 'span',\n  };\n  return [spanHeaders, span];\n}\n", "import type { Client, DsnComponents, Hub } from '@sentry/types';\n\n/**\n * Checks whether given url points to Sentry server\n * @param url url to verify\n *\n * TODO(v8): Remove Hub fallback type\n */\n// eslint-disable-next-line deprecation/deprecation\nexport function isSentryRequestUrl(url: string, hubOrClient: Hub | Client | undefined): boolean {\n  const client =\n    hubOrClient && isHub(hubOrClient)\n      ? // eslint-disable-next-line deprecation/deprecation\n        hubOrClient.getClient()\n      : hubOrClient;\n  const dsn = client && client.getDsn();\n  const tunnel = client && client.getOptions().tunnel;\n\n  return checkDsn(url, dsn) || checkTunnel(url, tunnel);\n}\n\nfunction checkTunnel(url: string, tunnel: string | undefined): boolean {\n  if (!tunnel) {\n    return false;\n  }\n\n  return removeTrailingSlash(url) === removeTrailingSlash(tunnel);\n}\n\nfunction checkDsn(url: string, dsn: DsnComponents | undefined): boolean {\n  return dsn ? url.includes(dsn.host) : false;\n}\n\nfunction removeTrailingSlash(str: string): string {\n  return str[str.length - 1] === '/' ? str.slice(0, -1) : str;\n}\n\n// eslint-disable-next-line deprecation/deprecation\nfunction isHub(hubOrClient: Hub | Client | undefined): hubOrClient is Hub {\n  // eslint-disable-next-line deprecation/deprecation\n  return (hubOrClient as Hub).getClient !== undefined;\n}\n", "import type { ParameterizedString } from '@sentry/types';\n\n/**\n * Tagged template function which returns paramaterized representation of the message\n * For example: parameterize`This is a log statement with ${x} and ${y} params`, would return:\n * \"__sentry_template_string__\": 'This is a log statement with %s and %s params',\n * \"__sentry_template_values__\": ['first', 'second']\n * @param strings An array of string values splitted between expressions\n * @param values Expressions extracted from template string\n * @returns String with template information in __sentry_template_string__ and __sentry_template_values__ properties\n */\nexport function parameterize(strings: TemplateStringsArray, ...values: string[]): ParameterizedString {\n  const formatted = new String(String.raw(strings, ...values)) as ParameterizedString;\n  formatted.__sentry_template_string__ = strings.join('\\x00').replace(/%/g, '%%').replace(/\\0/g, '%s');\n  formatted.__sentry_template_values__ = values;\n  return formatted;\n}\n", "import type { Options } from '@sentry/types';\nimport { SDK_VERSION } from '../version';\n\n/**\n * A builder for the SDK metadata in the options for the SDK initialization.\n *\n * Note: This function is identical to `buildMetadata` in Remix and NextJS and SvelteKit.\n * We don't extract it for bundle size reasons.\n * @see https://github.com/getsentry/sentry-javascript/pull/7404\n * @see https://github.com/getsentry/sentry-javascript/pull/4196\n *\n * If you make changes to this function consider updating the others as well.\n *\n * @param options SDK options object that gets mutated\n * @param names list of package names\n */\nexport function applySdkMetadata(options: Options, name: string, names = [name], source = 'npm'): void {\n  const metadata = options._metadata || {};\n\n  if (!metadata.sdk) {\n    metadata.sdk = {\n      name: `sentry.javascript.${name}`,\n      packages: names.map(name => ({\n        name: `${source}:@sentry/${name}`,\n        version: SDK_VERSION,\n      })),\n      version: SDK_VERSION,\n    };\n  }\n\n  options._metadata = metadata;\n}\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 { Client, Event, EventHint, EventItem, Integration, IntegrationClass, IntegrationFn } from '@sentry/types';\nimport { forEachEnvelopeItem } from '@sentry/utils';\nimport { convertIntegrationFnToClass, defineIntegration } from '../integration';\n\nimport { addMetadataToStackFrames, stripMetadataFromStackFrames } from '../metadata';\n\nconst INTEGRATION_NAME = 'ModuleMetadata';\n\nconst _moduleMetadataIntegration = (() => {\n  return {\n    name: INTEGRATION_NAME,\n    // TODO v8: Remove this\n    setupOnce() {}, // eslint-disable-line @typescript-eslint/no-empty-function\n    setup(client) {\n      if (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\n    processEvent(event, _hint, client) {\n      const stackParser = client.getOptions().stackParser;\n      addMetadataToStackFrames(stackParser, event);\n      return event;\n    },\n  };\n}) satisfies IntegrationFn;\n\nexport const moduleMetadataIntegration = defineIntegration(_moduleMetadataIntegration);\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 *\n * @deprecated Use `moduleMetadataIntegration()` instead.\n */\n// eslint-disable-next-line deprecation/deprecation\nexport const ModuleMetadata = convertIntegrationFnToClass(\n  INTEGRATION_NAME,\n  moduleMetadataIntegration,\n) as IntegrationClass<\n  Integration & {\n    setup: (client: Client) => void;\n    processEvent: (event: Event, hint: EventHint, client: Client) => Event;\n  }\n>;\n", "import type {\n  Client,\n  Event,\n  EventHint,\n  Integration,\n  IntegrationClass,\n  IntegrationFn,\n  Transaction,\n} from '@sentry/types';\nimport type { AddRequestDataToEventOptions, TransactionNamingScheme } from '@sentry/utils';\nimport { addRequestDataToEvent, extractPathForTransaction } from '@sentry/utils';\nimport { convertIntegrationFnToClass, defineIntegration } from '../integration';\nimport { spanToJSON } from '../utils/spanUtils';\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\nconst INTEGRATION_NAME = 'RequestData';\n\nconst _requestDataIntegration = ((options: RequestDataIntegrationOptions = {}) => {\n  const _addRequestData = addRequestDataToEvent;\n  const _options: Required<RequestDataIntegrationOptions> = {\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  return {\n    name: INTEGRATION_NAME,\n    // TODO v8: Remove this\n    setupOnce() {}, // eslint-disable-line @typescript-eslint/no-empty-function\n    processEvent(event, _hint, client) {\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 } = _options;\n\n      const { sdkProcessingMetadata = {} } = event;\n      const req = sdkProcessingMetadata.request;\n\n      if (!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(_options);\n\n      const processedEvent = _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        const name = spanToJSON(transaction).description || '';\n\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(client) === 'sentry.javascript.nextjs'\n            ? name.startsWith('/api')\n            : transactionNamingScheme !== 'path';\n\n        const [transactionValue] = extractPathForTransaction(req, {\n          path: true,\n          method: shouldIncludeMethodInTransactionName,\n          customRoute: name,\n        });\n\n        processedEvent.transaction = transactionValue;\n      }\n\n      return processedEvent;\n    },\n  };\n}) satisfies IntegrationFn;\n\nexport const requestDataIntegration = defineIntegration(_requestDataIntegration);\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`.\n * @deprecated Use `requestDataIntegration()` instead.\n */\n// eslint-disable-next-line deprecation/deprecation\nexport const RequestData = convertIntegrationFnToClass(INTEGRATION_NAME, requestDataIntegration) as IntegrationClass<\n  Integration & { processEvent: (event: Event, hint: EventHint, client: Client) => Event }\n> & {\n  new (options?: {\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  }): Integration;\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(client: Client): 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 client.getOptions()._metadata!.sdk!.name;\n  } catch (err) {\n    // In theory we should never get here\n    return undefined;\n  }\n}\n", "import type { Client, Event, EventHint, Integration, IntegrationClass, IntegrationFn, StackFrame } from '@sentry/types';\nimport { getEventDescription, logger, stringMatchesSomePattern } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport { convertIntegrationFnToClass, defineIntegration } from '../integration';\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 = [\n  /^Script error\\.?$/,\n  /^Javascript error: Script error\\.? on line 0$/,\n  /^ResizeObserver loop completed with undelivered notifications.$/,\n  /^Cannot redefine property: googletag$/,\n];\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\nconst INTEGRATION_NAME = 'InboundFilters';\nconst _inboundFiltersIntegration = ((options: Partial<InboundFiltersOptions> = {}) => {\n  return {\n    name: INTEGRATION_NAME,\n    // TODO v8: Remove this\n    setupOnce() {}, // eslint-disable-line @typescript-eslint/no-empty-function\n    processEvent(event, _hint, client) {\n      const clientOptions = client.getOptions();\n      const mergedOptions = _mergeOptions(options, clientOptions);\n      return _shouldDropEvent(event, mergedOptions) ? null : event;\n    },\n  };\n}) satisfies IntegrationFn;\n\nexport const inboundFiltersIntegration = defineIntegration(_inboundFiltersIntegration);\n\n/**\n * Inbound filters configurable by the user.\n * @deprecated Use `inboundFiltersIntegration()` instead.\n */\n// eslint-disable-next-line deprecation/deprecation\nexport const InboundFilters = convertIntegrationFnToClass(\n  INTEGRATION_NAME,\n  inboundFiltersIntegration,\n) as IntegrationClass<Integration & { preprocessEvent: (event: Event, hint: EventHint, client: Client) => void }> & {\n  new (\n    options?: Partial<{\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  ): Integration;\n};\n\nfunction _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\nfunction _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", "import type { Client, Integration, IntegrationClass, IntegrationFn, WrappedFunction } from '@sentry/types';\nimport { getOriginalFunction } from '@sentry/utils';\nimport { getClient } from '../exports';\nimport { convertIntegrationFnToClass, defineIntegration } from '../integration';\n\nlet originalFunctionToString: () => void;\n\nconst INTEGRATION_NAME = 'FunctionToString';\n\nconst SETUP_CLIENTS = new WeakMap<Client, boolean>();\n\nconst _functionToStringIntegration = (() => {\n  return {\n    name: INTEGRATION_NAME,\n    setupOnce() {\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 originalFunction = getOriginalFunction(this);\n          const context =\n            SETUP_CLIENTS.has(getClient() as Client) && originalFunction !== undefined ? originalFunction : this;\n          return originalFunctionToString.apply(context, args);\n        };\n      } catch {\n        // ignore errors here, just don't patch this\n      }\n    },\n    setup(client) {\n      SETUP_CLIENTS.set(client, true);\n    },\n  };\n}) satisfies IntegrationFn;\n\n/**\n * Patch toString calls to return proper name for wrapped functions.\n *\n * ```js\n * Sentry.init({\n *   integrations: [\n *     functionToStringIntegration(),\n *   ],\n * });\n * ```\n */\nexport const functionToStringIntegration = defineIntegration(_functionToStringIntegration);\n\n/**\n * Patch toString calls to return proper name for wrapped functions.\n *\n * @deprecated Use `functionToStringIntegration()` instead.\n */\n// eslint-disable-next-line deprecation/deprecation\nexport const FunctionToString = convertIntegrationFnToClass(\n  INTEGRATION_NAME,\n  functionToStringIntegration,\n) as IntegrationClass<Integration & { setupOnce: () => void }>;\n\n// eslint-disable-next-line deprecation/deprecation\nexport type FunctionToString = typeof FunctionToString;\n", "import type { Client, Event, EventHint, Integration, IntegrationClass, IntegrationFn } from '@sentry/types';\nimport { applyAggregateErrorsToEvent, exceptionFromError } from '@sentry/utils';\nimport { convertIntegrationFnToClass, defineIntegration } from '../integration';\n\ninterface LinkedErrorsOptions {\n  key?: string;\n  limit?: number;\n}\n\nconst DEFAULT_KEY = 'cause';\nconst DEFAULT_LIMIT = 5;\n\nconst INTEGRATION_NAME = 'LinkedErrors';\n\nconst _linkedErrorsIntegration = ((options: LinkedErrorsOptions = {}) => {\n  const limit = options.limit || DEFAULT_LIMIT;\n  const key = options.key || DEFAULT_KEY;\n\n  return {\n    name: INTEGRATION_NAME,\n    // TODO v8: Remove this\n    setupOnce() {}, // eslint-disable-line @typescript-eslint/no-empty-function\n    preprocessEvent(event, hint, client) {\n      const options = client.getOptions();\n\n      applyAggregateErrorsToEvent(\n        exceptionFromError,\n        options.stackParser,\n        options.maxValueLength,\n        key,\n        limit,\n        event,\n        hint,\n      );\n    },\n  };\n}) satisfies IntegrationFn;\n\nexport const linkedErrorsIntegration = defineIntegration(_linkedErrorsIntegration);\n\n/**\n * Adds SDK info to an event.\n * @deprecated Use `linkedErrorsIntegration()` instead.\n */\n// eslint-disable-next-line deprecation/deprecation\nexport const LinkedErrors = convertIntegrationFnToClass(INTEGRATION_NAME, linkedErrorsIntegration) as IntegrationClass<\n  Integration & { preprocessEvent: (event: Event, hint: EventHint, client: Client) => void }\n> & { new (options?: { key?: string; limit?: number }): Integration };\n", "import type { Client, ClientOptions, MeasurementUnit, MetricsAggregator, Primitive } from '@sentry/types';\nimport { timestampInSeconds } from '@sentry/utils';\nimport { DEFAULT_BROWSER_FLUSH_INTERVAL, SET_METRIC_TYPE } from './constants';\nimport { METRIC_MAP } from './instance';\nimport { updateMetricSummaryOnActiveSpan } from './metric-summary';\nimport type { MetricBucket, MetricType } from './types';\nimport { getBucketKey, sanitizeMetricKey, sanitizeTags, sanitizeUnit } from './utils';\n\n/**\n * A simple metrics aggregator that aggregates metrics in memory and flushes them periodically.\n * Default flush interval is 5 seconds.\n *\n * @experimental This API is experimental and might change in the future.\n */\nexport class BrowserMetricsAggregator implements MetricsAggregator {\n  // TODO(@anonrig): Use FinalizationRegistry to have a proper way of flushing the buckets\n  // when the aggregator is garbage collected.\n  // Ref: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/FinalizationRegistry\n  private _buckets: MetricBucket;\n  private readonly _interval: ReturnType<typeof setInterval>;\n\n  public constructor(private readonly _client: Client<ClientOptions>) {\n    this._buckets = new Map();\n    this._interval = setInterval(() => this.flush(), DEFAULT_BROWSER_FLUSH_INTERVAL);\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public add(\n    metricType: MetricType,\n    unsanitizedName: string,\n    value: number | string,\n    unsanitizedUnit: MeasurementUnit | undefined = 'none',\n    unsanitizedTags: Record<string, Primitive> | undefined = {},\n    maybeFloatTimestamp: number | undefined = timestampInSeconds(),\n  ): void {\n    const timestamp = Math.floor(maybeFloatTimestamp);\n    const name = sanitizeMetricKey(unsanitizedName);\n    const tags = sanitizeTags(unsanitizedTags);\n    const unit = sanitizeUnit(unsanitizedUnit as string);\n\n    const bucketKey = getBucketKey(metricType, name, unit, tags);\n\n    let bucketItem = this._buckets.get(bucketKey);\n    // If this is a set metric, we need to calculate the delta from the previous weight.\n    const previousWeight = bucketItem && metricType === SET_METRIC_TYPE ? bucketItem.metric.weight : 0;\n\n    if (bucketItem) {\n      bucketItem.metric.add(value);\n      // TODO(abhi): Do we need this check?\n      if (bucketItem.timestamp < timestamp) {\n        bucketItem.timestamp = timestamp;\n      }\n    } else {\n      bucketItem = {\n        // @ts-expect-error we don't need to narrow down the type of value here, saves bundle size.\n        metric: new METRIC_MAP[metricType](value),\n        timestamp,\n        metricType,\n        name,\n        unit,\n        tags,\n      };\n      this._buckets.set(bucketKey, bucketItem);\n    }\n\n    // If value is a string, it's a set metric so calculate the delta from the previous weight.\n    const val = typeof value === 'string' ? bucketItem.metric.weight - previousWeight : value;\n    updateMetricSummaryOnActiveSpan(metricType, name, val, unit, unsanitizedTags, bucketKey);\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public flush(): void {\n    // short circuit if buckets are empty.\n    if (this._buckets.size === 0) {\n      return;\n    }\n\n    if (this._client.captureAggregateMetrics) {\n      // TODO(@anonrig): Use Object.values() when we support ES6+\n      const metricBuckets = Array.from(this._buckets).map(([, bucketItem]) => bucketItem);\n      this._client.captureAggregateMetrics(metricBuckets);\n    }\n\n    this._buckets.clear();\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public close(): void {\n    clearInterval(this._interval);\n    this.flush();\n  }\n}\n", "import type { Client, ClientOptions, Integration, IntegrationClass, IntegrationFn } from '@sentry/types';\nimport type { BaseClient } from '../baseclient';\nimport { convertIntegrationFnToClass, defineIntegration } from '../integration';\nimport { BrowserMetricsAggregator } from './browser-aggregator';\n\nconst INTEGRATION_NAME = 'MetricsAggregator';\n\nconst _metricsAggregatorIntegration = (() => {\n  return {\n    name: INTEGRATION_NAME,\n    // TODO v8: Remove this\n    setupOnce() {}, // eslint-disable-line @typescript-eslint/no-empty-function\n    setup(client: BaseClient<ClientOptions>) {\n      client.metricsAggregator = new BrowserMetricsAggregator(client);\n    },\n  };\n}) satisfies IntegrationFn;\n\nexport const metricsAggregatorIntegration = defineIntegration(_metricsAggregatorIntegration);\n\n/**\n * Enables Sentry metrics monitoring.\n *\n * @experimental This API is experimental and might having breaking changes in the future.\n * @deprecated Use `metricsAggegratorIntegration()` instead.\n */\n// eslint-disable-next-line deprecation/deprecation\nexport const MetricsAggregator = convertIntegrationFnToClass(\n  INTEGRATION_NAME,\n  metricsAggregatorIntegration,\n) as IntegrationClass<Integration & { setup: (client: Client) => void }>;\n", "import type { ClientOptions, MeasurementUnit, Primitive } from '@sentry/types';\nimport { logger } from '@sentry/utils';\nimport type { BaseClient } from '../baseclient';\nimport { DEBUG_BUILD } from '../debug-build';\nimport { getClient, getCurrentScope } from '../exports';\nimport { spanToJSON } from '../utils/spanUtils';\nimport { COUNTER_METRIC_TYPE, DISTRIBUTION_METRIC_TYPE, GAUGE_METRIC_TYPE, SET_METRIC_TYPE } from './constants';\nimport { MetricsAggregator, metricsAggregatorIntegration } from './integration';\nimport type { MetricType } from './types';\n\ninterface MetricData {\n  unit?: MeasurementUnit;\n  tags?: Record<string, Primitive>;\n  timestamp?: number;\n}\n\nfunction addToMetricsAggregator(\n  metricType: MetricType,\n  name: string,\n  value: number | string,\n  data: MetricData | undefined = {},\n): void {\n  const client = getClient<BaseClient<ClientOptions>>();\n  const scope = getCurrentScope();\n  if (client) {\n    if (!client.metricsAggregator) {\n      DEBUG_BUILD &&\n        logger.warn('No metrics aggregator enabled. Please add the MetricsAggregator integration to use metrics APIs');\n      return;\n    }\n    const { unit, tags, timestamp } = data;\n    const { release, environment } = client.getOptions();\n    // eslint-disable-next-line deprecation/deprecation\n    const transaction = scope.getTransaction();\n    const metricTags: Record<string, string> = {};\n    if (release) {\n      metricTags.release = release;\n    }\n    if (environment) {\n      metricTags.environment = environment;\n    }\n    if (transaction) {\n      metricTags.transaction = spanToJSON(transaction).description || '';\n    }\n\n    DEBUG_BUILD && logger.log(`Adding value of ${value} to ${metricType} metric ${name}`);\n    client.metricsAggregator.add(metricType, name, value, unit, { ...metricTags, ...tags }, timestamp);\n  }\n}\n\n/**\n * Adds a value to a counter metric\n *\n * @experimental This API is experimental and might have breaking changes in the future.\n */\nexport function increment(name: string, value: number = 1, data?: MetricData): void {\n  addToMetricsAggregator(COUNTER_METRIC_TYPE, name, value, data);\n}\n\n/**\n * Adds a value to a distribution metric\n *\n * @experimental This API is experimental and might have breaking changes in the future.\n */\nexport function distribution(name: string, value: number, data?: MetricData): void {\n  addToMetricsAggregator(DISTRIBUTION_METRIC_TYPE, name, value, data);\n}\n\n/**\n * Adds a value to a set metric. Value must be a string or integer.\n *\n * @experimental This API is experimental and might have breaking changes in the future.\n */\nexport function set(name: string, value: number | string, data?: MetricData): void {\n  addToMetricsAggregator(SET_METRIC_TYPE, name, value, data);\n}\n\n/**\n * Adds a value to a gauge metric\n *\n * @experimental This API is experimental and might have breaking changes in the future.\n */\nexport function gauge(name: string, value: number, data?: MetricData): void {\n  addToMetricsAggregator(GAUGE_METRIC_TYPE, name, value, data);\n}\n\nexport const metrics = {\n  increment,\n  distribution,\n  set,\n  gauge,\n  /** @deprecated Use `metrics.metricsAggregratorIntegration()` instead. */\n  // eslint-disable-next-line deprecation/deprecation\n  MetricsAggregator,\n  metricsAggregatorIntegration,\n};\n", "export type { ClientClass } from './sdk';\nexport type { AsyncContextStrategy, Carrier, Layer, RunWithAsyncContextOptions } from './hub';\nexport type { OfflineStore, OfflineTransportOptions } from './transports/offline';\nexport type { ServerRuntimeClientOptions } from './server-runtime-client';\nexport type { RequestDataIntegrationOptions } from './integrations/requestdata';\nexport type { IntegrationIndex } from './integration';\n\nexport * from './tracing';\nexport * from './semanticAttributes';\nexport { createEventEnvelope, createSessionEnvelope } from './envelope';\nexport {\n  addBreadcrumb,\n  captureCheckIn,\n  withMonitor,\n  captureException,\n  captureEvent,\n  captureMessage,\n  close,\n  // eslint-disable-next-line deprecation/deprecation\n  configureScope,\n  flush,\n  lastEventId,\n  // eslint-disable-next-line deprecation/deprecation\n  startTransaction,\n  setContext,\n  setExtra,\n  setExtras,\n  setTag,\n  setTags,\n  setUser,\n  withScope,\n  withIsolationScope,\n  getClient,\n  isInitialized,\n  getCurrentScope,\n  startSession,\n  endSession,\n  captureSession,\n  withActiveSpan,\n} from './exports';\nexport {\n  // eslint-disable-next-line deprecation/deprecation\n  getCurrentHub,\n  getIsolationScope,\n  getHubFromCarrier,\n  // eslint-disable-next-line deprecation/deprecation\n  Hub,\n  // eslint-disable-next-line deprecation/deprecation\n  makeMain,\n  getMainCarrier,\n  runWithAsyncContext,\n  setHubOnCarrier,\n  ensureHubOnCarrier,\n  setAsyncContextStrategy,\n} from './hub';\nexport { makeSession, closeSession, updateSession } from './session';\nexport { SessionFlusher } from './sessionflusher';\nexport { Scope, getGlobalScope, setGlobalScope } from './scope';\nexport {\n  notifyEventProcessors,\n  // eslint-disable-next-line deprecation/deprecation\n  addGlobalEventProcessor,\n} from './eventProcessors';\nexport { getEnvelopeEndpointWithUrlEncodedAuth, getReportDialogEndpoint } from './api';\nexport { BaseClient, addEventProcessor } from './baseclient';\nexport { ServerRuntimeClient } from './server-runtime-client';\nexport { initAndBind, setCurrentClient } from './sdk';\nexport { createTransport } from './transports/base';\nexport { makeOfflineTransport } from './transports/offline';\nexport { makeMultiplexedTransport } from './transports/multiplexed';\nexport { SDK_VERSION } from './version';\nexport {\n  getIntegrationsToSetup,\n  addIntegration,\n  defineIntegration,\n  // eslint-disable-next-line deprecation/deprecation\n  convertIntegrationFnToClass,\n} from './integration';\nexport { applyScopeDataToEvent, mergeScopeData } from './utils/applyScopeDataToEvent';\nexport { prepareEvent } from './utils/prepareEvent';\nexport { createCheckInEnvelope } from './checkin';\nexport { createSpanEnvelope } from './span';\nexport { hasTracingEnabled } from './utils/hasTracingEnabled';\nexport { isSentryRequestUrl } from './utils/isSentryRequestUrl';\nexport { handleCallbackErrors } from './utils/handleCallbackErrors';\nexport { parameterize } from './utils/parameterize';\nexport { spanToTraceHeader, spanToJSON, spanIsSampled, spanToTraceContext } from './utils/spanUtils';\nexport { getRootSpan } from './utils/getRootSpan';\nexport { applySdkMetadata } from './utils/sdkMetadata';\nexport { DEFAULT_ENVIRONMENT } from './constants';\n/* eslint-disable deprecation/deprecation */\nexport { ModuleMetadata } from './integrations/metadata';\nexport { RequestData } from './integrations/requestdata';\nexport { InboundFilters } from './integrations/inboundfilters';\nexport { FunctionToString } from './integrations/functiontostring';\nexport { LinkedErrors } from './integrations/linkederrors';\n/* eslint-enable deprecation/deprecation */\nimport * as INTEGRATIONS from './integrations';\nexport { functionToStringIntegration } from './integrations/functiontostring';\nexport { inboundFiltersIntegration } from './integrations/inboundfilters';\nexport { linkedErrorsIntegration } from './integrations/linkederrors';\nexport { moduleMetadataIntegration } from './integrations/metadata';\nexport { requestDataIntegration } from './integrations/requestdata';\nexport { metrics } from './metrics/exports';\n\n/** @deprecated Import the integration function directly, e.g. `inboundFiltersIntegration()` instead of `new Integrations.InboundFilter(). */\nconst Integrations = INTEGRATIONS;\n\n// eslint-disable-next-line deprecation/deprecation\nexport { Integrations };\n", "declare const __DEBUG_BUILD__: boolean;\n\n/**\n * This serves as a build time flag that will be true by default, but false in non-debug builds or if users replace `__SENTRY_DEBUG__` in their generated code.\n *\n * ATTENTION: This constant must never cross package boundaries (i.e. be exported) to guarantee that it can be used for tree shaking.\n */\nexport const DEBUG_BUILD = __DEBUG_BUILD__;\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 */\n// eslint-disable-next-line deprecation/deprecation\nexport function shouldDisableAutoInstrumentation(getCurrentHub: () => Hub): boolean {\n  // eslint-disable-next-line deprecation/deprecation\n  const clientOptions = getCurrentHub().getClient()?.getOptions();\n  const instrumenter = clientOptions?.instrumenter || 'sentry';\n\n  return instrumenter !== 'sentry';\n}\n", "/* eslint-disable max-lines */\nimport { SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, spanToJSON } from '@sentry/core';\nimport type { Hub, Integration, PolymorphicRequest, Transaction } from '@sentry/types';\nimport {\n  GLOBAL_OBJ,\n  extractPathForTransaction,\n  getNumberOfUrlSegments,\n  isRegExp,\n  logger,\n  stripUrlQueryAndFragment,\n} from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../../common/debug-build';\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  regexp?: RegExp;\n  keys?: { name: string | number; offset: number; optional: boolean }[];\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  // eslint-disable-next-line deprecation/deprecation\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          // eslint-disable-next-line deprecation/deprecation\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.end();\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        // eslint-disable-next-line deprecation/deprecation\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?.end();\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        // eslint-disable-next-line deprecation/deprecation\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?.end();\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    let partialRoute;\n\n    if (layerRoutePath) {\n      partialRoute = layerRoutePath;\n    } else {\n      /**\n       * prevent duplicate segment in _reconstructedRoute param if router match multiple routes before final path\n       * example:\n       * original url: /api/v1/1234\n       * prevent: /api/api/v1/:userId\n       * router structure\n       * /api -> middleware\n       * /api/v1 -> middleware\n       * /1234 -> endpoint with param :userId\n       * final _reconstructedRoute is /api/v1/:userId\n       */\n      partialRoute = preventDuplicateSegments(req.originalUrl, req._reconstructedRoute, layer.path) || '';\n    }\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(stripUrlQueryAndFragment(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      const attributes = (transaction && spanToJSON(transaction).data) || {};\n      if (transaction && attributes[SEMANTIC_ATTRIBUTE_SENTRY_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        const [name, source] = extractPathForTransaction(req, { path: true, method: true, customRoute: finalRoute });\n        transaction.updateName(name);\n        transaction.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, source);\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 * Recreate layer.route.path from layer.regexp and layer.keys.\n * Works until express.js used package path-to-regexp@0.1.7\n * or until layer.keys contain offset attribute\n *\n * @param layer the layer to extract the stringified route from\n *\n * @returns string in layer.route.path structure 'router/:pathParam' or undefined\n */\nexport const extractOriginalRoute = (\n  path?: Layer['path'],\n  regexp?: Layer['regexp'],\n  keys?: Layer['keys'],\n): string | undefined => {\n  if (\n    !path ||\n    !regexp ||\n    !keys ||\n    Object.keys(keys).length === 0 ||\n    keys[0]?.offset === undefined ||\n    keys[0]?.offset === null\n  ) {\n    return undefined;\n  }\n  const orderedKeys = keys.sort((a, b) => a.offset - b.offset);\n\n  // add d flag for getting indices from regexp result\n  // eslint-disable-next-line @sentry-internal/sdk/no-regexp-constructor -- regexp comes from express.js\n  const pathRegex = new RegExp(regexp, `${regexp.flags}d`);\n  /**\n   * use custom type cause of TS error with missing indices in RegExpExecArray\n   */\n  const execResult = pathRegex.exec(path) as (RegExpExecArray & { indices: [number, number][] }) | null;\n\n  if (!execResult || !execResult.indices) {\n    return undefined;\n  }\n  /**\n   * remove first match from regex cause contain whole layer.path\n   */\n  const [, ...paramIndices] = execResult.indices;\n\n  if (paramIndices.length !== orderedKeys.length) {\n    return undefined;\n  }\n  let resultPath = path;\n  let indexShift = 0;\n\n  /**\n   * iterate param matches from regexp.exec\n   */\n  paramIndices.forEach((item: [number, number] | undefined, index: number) => {\n    /** check if offsets is define because in some cases regex d flag returns undefined */\n    if (item) {\n      const [startOffset, endOffset] = item;\n      /**\n       * isolate part before param\n       */\n      const substr1 = resultPath.substring(0, startOffset - indexShift);\n      /**\n       * define paramName as replacement in format :pathParam\n       */\n      const replacement = `:${orderedKeys[index].name}`;\n\n      /**\n       * isolate part after param\n       */\n      const substr2 = resultPath.substring(endOffset - indexShift);\n\n      /**\n       * recreate original path but with param replacement\n       */\n      resultPath = substr1 + replacement + substr2;\n\n      /**\n       * calculate new index shift after resultPath was modified\n       */\n      indexShift = indexShift + (endOffset - startOffset - replacement.length);\n    }\n  });\n\n  return resultPath;\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  let lrp = layer.route?.path;\n\n  const isRegex = isRegExp(lrp);\n  const isArray = Array.isArray(lrp);\n\n  if (!lrp) {\n    // parse node.js major version\n    // Next.js will complain if we directly use `proces.versions` here because of edge runtime.\n    const [major] = (GLOBAL_OBJ as unknown as NodeJS.Global).process.versions.node.split('.').map(Number);\n\n    // allow call extractOriginalRoute only if node version support Regex d flag, node 16+\n    if (major >= 16) {\n      /**\n       * If lrp does not exist try to recreate original layer path from route regexp\n       */\n      lrp = extractOriginalRoute(layer.path, layer.regexp, layer.keys);\n    }\n  }\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\n/**\n * remove duplicate segment contain in layerPath against reconstructedRoute,\n * and return only unique segment that can be added into reconstructedRoute\n */\nexport function preventDuplicateSegments(\n  originalUrl?: string,\n  reconstructedRoute?: string,\n  layerPath?: string,\n): string | undefined {\n  // filter query params\n  const normalizeURL = stripUrlQueryAndFragment(originalUrl || '');\n  const originalUrlSplit = normalizeURL?.split('/').filter(v => !!v);\n  let tempCounter = 0;\n  const currentOffset = reconstructedRoute?.split('/').filter(v => !!v).length || 0;\n  const result = layerPath\n    ?.split('/')\n    .filter(segment => {\n      if (originalUrlSplit?.[currentOffset + tempCounter] === segment) {\n        tempCounter += 1;\n        return true;\n      }\n      return false;\n    })\n    .join('/');\n  return result;\n}\n", "import type { Hub } from '@sentry/core';\nimport type { EventProcessor } from '@sentry/types';\nimport { fill, isThenable, loadModule, logger } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../../common/debug-build';\nimport type { LazyLoadedIntegration } from './lazy';\nimport { shouldDisableAutoInstrumentation } from './utils/node-utils';\n\ntype PgClientQuery = (\n  config: unknown,\n  values?: unknown,\n  callback?: (err: unknown, result: unknown) => void,\n) => void | Promise<unknown>;\n\ninterface PgClient {\n  prototype: {\n    query: PgClientQuery;\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   * Supply your postgres module directly, instead of having Sentry attempt automatic resolution.\n   * Use this if you (a) use a module that's not `pg`, or (b) use a bundler that breaks resolution (e.g. esbuild).\n   *\n   * Usage:\n   * ```\n   * import pg from 'pg';\n   *\n   * Sentry.init({\n   *   integrations: [new Sentry.Integrations.Postgres({ module: pg })],\n   * });\n   * ```\n   */\n  module?: PGModule;\n}\n\ntype PGModule = { Client: PgClient; native: { Client: PgClient } | null };\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    this._module = options.module;\n  }\n\n  /** @inheritdoc */\n  public loadDependency(): PGModule | undefined {\n    return (this._module = this._module || loadModule('pg'));\n  }\n\n  /**\n   * @inheritDoc\n   */\n  // eslint-disable-next-line deprecation/deprecation\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    const Client = this._usePgNative ? pkg.native?.Client : pkg.Client;\n\n    if (!Client) {\n      DEBUG_BUILD && logger.error(\"Postgres Integration was unable to access 'pg-native' bindings.\");\n      return;\n    }\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: PgClientQuery) {\n      return function (this: PgClientThis, config: unknown, values: unknown, callback: unknown) {\n        // eslint-disable-next-line deprecation/deprecation\n        const scope = getCurrentHub().getScope();\n        // eslint-disable-next-line deprecation/deprecation\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        // eslint-disable-next-line deprecation/deprecation\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?.end();\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?.end();\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?.end();\n            return res;\n          });\n        }\n\n        span?.end();\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 { DEBUG_BUILD } from '../../common/debug-build';\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  // eslint-disable-next-line deprecation/deprecation\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, string | number | undefined> {\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.setAttribute(key, data[key]);\n      });\n\n      span.end();\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        // eslint-disable-next-line deprecation/deprecation\n        const scope = getCurrentHub().getScope();\n        // eslint-disable-next-line deprecation/deprecation\n        const parentSpan = scope.getSpan();\n\n        // eslint-disable-next-line deprecation/deprecation\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        // streaming, no callback!\n        const query = orig.call(this, options, values) as { on: (event: string, callback: () => void) => void };\n\n        query.on('end', () => {\n          finishSpan(span);\n        });\n\n        return query;\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 { DEBUG_BUILD } from '../../common/debug-build';\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  // eslint-disable-next-line deprecation/deprecation\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  // eslint-disable-next-line deprecation/deprecation\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  // eslint-disable-next-line deprecation/deprecation\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        // eslint-disable-next-line deprecation/deprecation\n        const hub = getCurrentHub();\n        // eslint-disable-next-line deprecation/deprecation\n        const scope = hub.getScope();\n        // eslint-disable-next-line deprecation/deprecation\n        const client = hub.getClient();\n        // eslint-disable-next-line deprecation/deprecation\n        const parentSpan = scope.getSpan();\n\n        const sendDefaultPii = client?.getOptions().sendDefaultPii;\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          // eslint-disable-next-line deprecation/deprecation\n          const span = parentSpan?.startChild(getSpanContext(this, operation, args, sendDefaultPii));\n          const maybePromiseOrCursor = orig.call(this, ...args);\n\n          if (isThenable(maybePromiseOrCursor)) {\n            return maybePromiseOrCursor.then((res: unknown) => {\n              span?.end();\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?.end();\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?.end();\n            }\n\n            return cursor;\n          } else {\n            span?.end();\n            return maybePromiseOrCursor;\n          }\n        }\n\n        // eslint-disable-next-line deprecation/deprecation\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?.end();\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    sendDefaultPii: boolean | undefined = false,\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 || !sendDefaultPii) {\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 { SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, getCurrentHub, startSpan } from '@sentry/core';\nimport type { Integration } from '@sentry/types';\nimport { addNonEnumerableProperty, logger } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../../common/debug-build';\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        // eslint-disable-next-line deprecation/deprecation\n        if (shouldDisableAutoInstrumentation(getCurrentHub)) {\n          return next(params);\n        }\n\n        const action = params.action;\n        const model = params.model;\n\n        return startSpan(\n          {\n            name: model ? `${model} ${action}` : action,\n            onlyIfParent: true,\n            op: 'db.prisma',\n            attributes: {\n              [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.db.prisma',\n            },\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 { DEBUG_BUILD } from '../../common/debug-build';\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  // eslint-disable-next-line deprecation/deprecation\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        // eslint-disable-next-line deprecation/deprecation\n        const scope = getCurrentHub().getScope();\n        // eslint-disable-next-line deprecation/deprecation\n        const parentSpan = scope.getSpan();\n\n        // eslint-disable-next-line deprecation/deprecation\n        const span = parentSpan?.startChild({\n          description: 'execute',\n          op: 'graphql.execute',\n          origin: 'auto.graphql.graphql',\n        });\n\n        // eslint-disable-next-line deprecation/deprecation\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?.end();\n            // eslint-disable-next-line deprecation/deprecation\n            scope?.setSpan(parentSpan);\n\n            return res;\n          });\n        }\n\n        span?.end();\n        // eslint-disable-next-line deprecation/deprecation\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 { DEBUG_BUILD } from '../../common/debug-build';\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  // eslint-disable-next-line deprecation/deprecation\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\n// eslint-disable-next-line deprecation/deprecation\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  // eslint-disable-next-line deprecation/deprecation\n  getCurrentHub: () => Hub,\n): void {\n  fill(model[resolverGroupName], resolverName, function (orig: () => unknown | Promise<unknown>) {\n    return function (this: unknown, ...args: unknown[]) {\n      // eslint-disable-next-line deprecation/deprecation\n      const scope = getCurrentHub().getScope();\n      // eslint-disable-next-line deprecation/deprecation\n      const parentSpan = scope.getSpan();\n      // eslint-disable-next-line deprecation/deprecation\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?.end();\n          return res;\n        });\n      }\n\n      span?.end();\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 &\n  // document is not available in all browser environments (webworkers). We make it optional so you have to explicitly check for it\n  Omit<Window, 'document'> &\n  Partial<Pick<Window, 'document'>>;\n", "import type { IdleTransaction, SpanStatusType } from '@sentry/core';\nimport { getActiveTransaction, spanToJSON } from '@sentry/core';\nimport { logger } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../common/debug-build';\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.document) {\n    WINDOW.document.addEventListener('visibilitychange', () => {\n      // eslint-disable-next-line deprecation/deprecation\n      const activeTransaction = getActiveTransaction() as IdleTransaction;\n      if (WINDOW.document!.hidden && activeTransaction) {\n        const statusType: SpanStatusType = 'cancelled';\n\n        const { op, status } = spanToJSON(activeTransaction);\n\n        DEBUG_BUILD &&\n          logger.log(`[Tracing] Transaction: ${statusType} -> since tab moved to the background, op: ${op}`);\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 (!status) {\n          activeTransaction.setStatus(statusType);\n        }\n        // TODO: Can we rewrite this to an attribute?\n        // eslint-disable-next-line deprecation/deprecation\n        activeTransaction.setTag('visibilitychange', 'document.hidden');\n        activeTransaction.end();\n      }\n    });\n  } else {\n    DEBUG_BUILD && 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 && 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        type,\n        buffered: true,\n        ...opts,\n      } as PerformanceObserverInit);\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\n  if (WINDOW.document) {\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", "/*\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 = (\n  onReport: ReportCallback,\n  options: { reportAllChanges?: boolean } = {},\n): 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, options.reportAllChanges);\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 = (): void => {\n  // If the document is hidden and not prerendering, assume it was always\n  // hidden and the page was loaded in the background.\n  if (WINDOW.document && WINDOW.document.visibilityState) {\n    firstHiddenTime = WINDOW.document.visibilityState === 'hidden' && !WINDOW.document.prerendering ? 0 : Infinity;\n  }\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    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 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 type { Metric } from '../../types';\nimport { observe } from '../observe';\n\ndeclare global {\n  interface Performance {\n    interactionCount: number;\n  }\n}\n\nlet interactionCountEstimate = 0;\nlet minKnownInteractionId = Infinity;\nlet maxKnownInteractionId = 0;\n\nconst updateEstimate = (entries: Metric['entries']): void => {\n  (entries as PerformanceEventTiming[]).forEach(e => {\n    if (e.interactionId) {\n      minKnownInteractionId = Math.min(minKnownInteractionId, e.interactionId);\n      maxKnownInteractionId = Math.max(maxKnownInteractionId, e.interactionId);\n\n      interactionCountEstimate = maxKnownInteractionId ? (maxKnownInteractionId - minKnownInteractionId) / 7 + 1 : 0;\n    }\n  });\n};\n\nlet po: PerformanceObserver | undefined;\n\n/**\n * Returns the `interactionCount` value using the native API (if available)\n * or the polyfill estimate in this module.\n */\nexport const getInteractionCount = (): number => {\n  return po ? interactionCountEstimate : performance.interactionCount || 0;\n};\n\n/**\n * Feature detects native support or initializes the polyfill if needed.\n */\nexport const initInteractionCountPolyfill = (): void => {\n  if ('interactionCount' in performance || po) return;\n\n  po = observe('event', updateEstimate, {\n    type: 'event',\n    buffered: true,\n    durationThreshold: 0,\n  } as PerformanceObserverInit);\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 { bindReporter } from './lib/bindReporter';\nimport { initMetric } from './lib/initMetric';\nimport { observe } from './lib/observe';\nimport { onHidden } from './lib/onHidden';\nimport { getInteractionCount, initInteractionCountPolyfill } from './lib/polyfills/interactionCountPolyfill';\nimport type { ReportCallback, ReportOpts } from './types';\nimport type { INPMetric } from './types/inp';\n\ninterface Interaction {\n  id: number;\n  latency: number;\n  entries: PerformanceEventTiming[];\n}\n\n/**\n * Returns the interaction count since the last bfcache restore (or for the\n * full page lifecycle if there were no bfcache restores).\n */\nconst getInteractionCountForNavigation = (): number => {\n  return getInteractionCount();\n};\n\n// To prevent unnecessary memory usage on pages with lots of interactions,\n// store at most 10 of the longest interactions to consider as INP candidates.\nconst MAX_INTERACTIONS_TO_CONSIDER = 10;\n\n// A list of longest interactions on the page (by latency) sorted so the\n// longest one is first. The list is as most MAX_INTERACTIONS_TO_CONSIDER long.\nconst longestInteractionList: Interaction[] = [];\n\n// A mapping of longest interactions by their interaction ID.\n// This is used for faster lookup.\nconst longestInteractionMap: { [interactionId: string]: Interaction } = {};\n\n/**\n * Takes a performance entry and adds it to the list of worst interactions\n * if its duration is long enough to make it among the worst. If the\n * entry is part of an existing interaction, it is merged and the latency\n * and entries list is updated as needed.\n */\nconst processEntry = (entry: PerformanceEventTiming): void => {\n  // The least-long of the 10 longest interactions.\n  const minLongestInteraction = longestInteractionList[longestInteractionList.length - 1];\n\n  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n  const existingInteraction = longestInteractionMap[entry.interactionId!];\n\n  // Only process the entry if it's possibly one of the ten longest,\n  // or if it's part of an existing interaction.\n  if (\n    existingInteraction ||\n    longestInteractionList.length < MAX_INTERACTIONS_TO_CONSIDER ||\n    entry.duration > minLongestInteraction.latency\n  ) {\n    // If the interaction already exists, update it. Otherwise create one.\n    if (existingInteraction) {\n      existingInteraction.entries.push(entry);\n      existingInteraction.latency = Math.max(existingInteraction.latency, entry.duration);\n    } else {\n      const interaction = {\n        // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n        id: entry.interactionId!,\n        latency: entry.duration,\n        entries: [entry],\n      };\n      longestInteractionMap[interaction.id] = interaction;\n      longestInteractionList.push(interaction);\n    }\n\n    // Sort the entries by latency (descending) and keep only the top ten.\n    longestInteractionList.sort((a, b) => b.latency - a.latency);\n    longestInteractionList.splice(MAX_INTERACTIONS_TO_CONSIDER).forEach(i => {\n      // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n      delete longestInteractionMap[i.id];\n    });\n  }\n};\n\n/**\n * Returns the estimated p98 longest interaction based on the stored\n * interaction candidates and the interaction count for the current page.\n */\nconst estimateP98LongestInteraction = (): Interaction => {\n  const candidateInteractionIndex = Math.min(\n    longestInteractionList.length - 1,\n    Math.floor(getInteractionCountForNavigation() / 50),\n  );\n\n  return longestInteractionList[candidateInteractionIndex];\n};\n\n/**\n * Calculates the [INP](https://web.dev/responsiveness/) value for the current\n * page and calls the `callback` function once the value is ready, along with\n * the `event` performance entries reported for that interaction. The reported\n * value is a `DOMHighResTimeStamp`.\n *\n * A custom `durationThreshold` configuration option can optionally be passed to\n * control what `event-timing` entries are considered for INP reporting. The\n * default threshold is `40`, which means INP scores of less than 40 are\n * reported as 0. Note that this will not affect your 75th percentile INP value\n * unless that value is also less than 40 (well below the recommended\n * [good](https://web.dev/inp/#what-is-a-good-inp-score) threshold).\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:** INP 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 onINP = (onReport: ReportCallback, opts?: ReportOpts): void => {\n  // Set defaults\n  // eslint-disable-next-line no-param-reassign\n  opts = opts || {};\n\n  // https://web.dev/inp/#what's-a-%22good%22-inp-value\n  // const thresholds = [200, 500];\n\n  // TODO(philipwalton): remove once the polyfill is no longer needed.\n  initInteractionCountPolyfill();\n\n  const metric = initMetric('INP');\n  // eslint-disable-next-line prefer-const\n  let report: ReturnType<typeof bindReporter>;\n\n  const handleEntries = (entries: INPMetric['entries']): void => {\n    entries.forEach(entry => {\n      if (entry.interactionId) {\n        processEntry(entry);\n      }\n\n      // Entries of type `first-input` don't currently have an `interactionId`,\n      // so to consider them in INP we have to first check that an existing\n      // entry doesn't match the `duration` and `startTime`.\n      // Note that this logic assumes that `event` entries are dispatched\n      // before `first-input` entries. This is true in Chrome but it is not\n      // true in Firefox; however, Firefox doesn't support interactionId, so\n      // it's not an issue at the moment.\n      // TODO(philipwalton): remove once crbug.com/1325826 is fixed.\n      if (entry.entryType === 'first-input') {\n        const noMatchingEntry = !longestInteractionList.some(interaction => {\n          return interaction.entries.some(prevEntry => {\n            return entry.duration === prevEntry.duration && entry.startTime === prevEntry.startTime;\n          });\n        });\n        if (noMatchingEntry) {\n          processEntry(entry);\n        }\n      }\n    });\n\n    const inp = estimateP98LongestInteraction();\n\n    if (inp && inp.latency !== metric.value) {\n      metric.value = inp.latency;\n      metric.entries = inp.entries;\n      report();\n    }\n  };\n\n  const po = observe('event', handleEntries, {\n    // Event Timing entries have their durations rounded to the nearest 8ms,\n    // so a duration of 40ms would be any event that spans 2.5 or more frames\n    // at 60Hz. This threshold is chosen to strike a balance between usefulness\n    // and performance. Running this callback for any interaction that spans\n    // just one or two frames is likely not worth the insight that could be\n    // gained.\n    durationThreshold: opts.durationThreshold || 40,\n  } as PerformanceObserverInit);\n\n  report = bindReporter(onReport, metric, opts.reportAllChanges);\n\n  if (po) {\n    // Also observe entries of type `first-input`. This is useful in cases\n    // where the first interaction is less than the `durationThreshold`.\n    po.observe({ type: 'first-input', buffered: true });\n\n    onHidden(() => {\n      handleEntries(po.takeRecords() as INPMetric['entries']);\n\n      // If the interaction count shows that there were interactions but\n      // none were captured by the PerformanceObserver, report a latency of 0.\n      if (metric.value < 0 && getInteractionCountForNavigation() > 0) {\n        metric.value = 0;\n        metric.entries = [];\n      }\n\n      report(true);\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 { WINDOW } from '../types';\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      if (WINDOW.document) {\n        addEventListener(type, stopListening, { once: true, capture: true });\n      }\n    });\n\n    onHidden(stopListening, true);\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 { bindReporter } from './lib/bindReporter';\nimport { getActivationStart } from './lib/getActivationStart';\nimport { getNavigationEntry } from './lib/getNavigationEntry';\nimport { initMetric } from './lib/initMetric';\nimport type { ReportCallback, ReportOpts } from './types';\nimport type { TTFBMetric } from './types/ttfb';\n\n/**\n * Runs in the next task after the page is done loading and/or prerendering.\n * @param callback\n */\nconst whenReady = (callback: () => void): void => {\n  if (!WINDOW.document) {\n    return;\n  }\n\n  if (WINDOW.document.prerendering) {\n    addEventListener('prerenderingchange', () => whenReady(callback), true);\n  } else if (WINDOW.document.readyState !== 'complete') {\n    addEventListener('load', () => whenReady(callback), true);\n  } else {\n    // Queue a task so the callback runs after `loadEventEnd`.\n    setTimeout(callback, 0);\n  }\n};\n\n/**\n * Calculates the [TTFB](https://web.dev/time-to-first-byte/) value for the\n * current page and calls the `callback` function once the page has loaded,\n * along with the relevant `navigation` performance entry used to determine the\n * value. The reported value is a `DOMHighResTimeStamp`.\n *\n * Note, this function waits until after the page is loaded to call `callback`\n * in order to ensure all properties of the `navigation` entry are populated.\n * This is useful if you want to report on other metrics exposed by the\n * [Navigation Timing API](https://w3c.github.io/navigation-timing/). For\n * example, the TTFB metric starts from the page's [time\n * origin](https://www.w3.org/TR/hr-time-2/#sec-time-origin), which means it\n * includes time spent on DNS lookup, connection negotiation, network latency,\n * and server processing time.\n */\nexport const onTTFB = (onReport: ReportCallback, opts?: ReportOpts): void => {\n  // Set defaults\n  // eslint-disable-next-line no-param-reassign\n  opts = opts || {};\n\n  // https://web.dev/ttfb/#what-is-a-good-ttfb-score\n  // const thresholds = [800, 1800];\n\n  const metric = initMetric('TTFB');\n  const report = bindReporter(onReport, metric, opts.reportAllChanges);\n\n  whenReady(() => {\n    const navEntry = getNavigationEntry() as TTFBMetric['entries'][number];\n\n    if (navEntry) {\n      // The activationStart reference is used because TTFB should be\n      // relative to page activation rather than navigation start if the\n      // page was prerendered. But in cases where `activationStart` occurs\n      // after the first byte is received, this time should be clamped at 0.\n      metric.value = Math.max(navEntry.responseStart - getActivationStart(), 0);\n\n      // In some cases the value reported is negative or is larger\n      // than the current page time. Ignore these cases:\n      // https://github.com/GoogleChrome/web-vitals/issues/137\n      // https://github.com/GoogleChrome/web-vitals/issues/162\n      if (metric.value < 0 || metric.value > performance.now()) return;\n\n      metric.entries = [navEntry];\n\n      report(true);\n    }\n  });\n};\n", "import { getFunctionName, logger } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../common/debug-build';\nimport { onCLS } from './web-vitals/getCLS';\nimport { onFID } from './web-vitals/getFID';\nimport { onINP } from './web-vitals/getINP';\nimport { onLCP } from './web-vitals/getLCP';\nimport { observe } from './web-vitals/lib/observe';\nimport { onTTFB } from './web-vitals/onTTFB';\n\ntype InstrumentHandlerTypePerformanceObserver =\n  | 'longtask'\n  | 'event'\n  | 'navigation'\n  | 'paint'\n  | 'resource'\n  | 'first-input';\n\ntype InstrumentHandlerTypeMetric = 'cls' | 'lcp' | 'fid' | 'ttfb' | 'inp';\n\n// We provide this here manually instead of relying on a global, as this is not available in non-browser environements\n// And we do not want to expose such types\ninterface PerformanceEntry {\n  readonly duration: number;\n  readonly entryType: string;\n  readonly name: string;\n  readonly startTime: number;\n  toJSON(): Record<string, unknown>;\n}\ninterface PerformanceEventTiming extends PerformanceEntry {\n  processingStart: number;\n  processingEnd: number;\n  duration: number;\n  cancelable?: boolean;\n  target?: unknown | null;\n  interactionId?: number;\n}\n\ninterface Metric {\n  /**\n   * The name of the metric (in acronym form).\n   */\n  name: 'CLS' | 'FCP' | 'FID' | 'INP' | 'LCP' | 'TTFB';\n\n  /**\n   * The current value of the metric.\n   */\n  value: number;\n\n  /**\n   * The rating as to whether the metric value is within the \"good\",\n   * \"needs improvement\", or \"poor\" thresholds of the metric.\n   */\n  rating: 'good' | 'needs-improvement' | 'poor';\n\n  /**\n   * The delta between the current value and the last-reported value.\n   * On the first report, `delta` and `value` will always be the same.\n   */\n  delta: number;\n\n  /**\n   * A unique ID representing this particular metric instance. This ID can\n   * be used by an analytics tool to dedupe multiple values sent for the same\n   * metric instance, or to group multiple deltas together and calculate a\n   * total. It can also be used to differentiate multiple different metric\n   * instances sent from the same page, which can happen if the page is\n   * restored from the back/forward cache (in that case new metrics object\n   * get created).\n   */\n  id: string;\n\n  /**\n   * Any performance entries relevant to the metric value calculation.\n   * The array may also be empty if the metric value was not based on any\n   * entries (e.g. a CLS value of 0 given no layout shifts).\n   */\n  entries: PerformanceEntry[];\n\n  /**\n   * The type of navigation\n   *\n   * Navigation Timing API (or `undefined` if the browser doesn't\n   * support that API). For pages that are restored from the bfcache, this\n   * value will be 'back-forward-cache'.\n   */\n  navigationType: 'navigate' | 'reload' | 'back-forward' | 'back-forward-cache' | 'prerender';\n}\n\ntype InstrumentHandlerType = InstrumentHandlerTypeMetric | InstrumentHandlerTypePerformanceObserver;\n\ntype StopListening = undefined | void | (() => void);\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype InstrumentHandlerCallback = (data: any) => void;\n\ntype CleanupHandlerCallback = () => void;\n\nconst handlers: { [key in InstrumentHandlerType]?: InstrumentHandlerCallback[] } = {};\nconst instrumented: { [key in InstrumentHandlerType]?: boolean } = {};\n\nlet _previousCls: Metric | undefined;\nlet _previousFid: Metric | undefined;\nlet _previousLcp: Metric | undefined;\nlet _previousTtfb: Metric | undefined;\nlet _previousInp: Metric | undefined;\n\n/**\n * Add a callback that will be triggered when a CLS metric is available.\n * Returns a cleanup callback which can be called to remove the instrumentation handler.\n *\n * Pass `stopOnCallback = true` to stop listening for CLS when the cleanup callback is called.\n * This will lead to the CLS being finalized and frozen.\n */\nexport function addClsInstrumentationHandler(\n  callback: (data: { metric: Metric }) => void,\n  stopOnCallback = false,\n): CleanupHandlerCallback {\n  return addMetricObserver('cls', callback, instrumentCls, _previousCls, stopOnCallback);\n}\n\n/**\n * Add a callback that will be triggered when a LCP metric is available.\n * Returns a cleanup callback which can be called to remove the instrumentation handler.\n *\n * Pass `stopOnCallback = true` to stop listening for LCP when the cleanup callback is called.\n * This will lead to the LCP being finalized and frozen.\n */\nexport function addLcpInstrumentationHandler(\n  callback: (data: { metric: Metric }) => void,\n  stopOnCallback = false,\n): CleanupHandlerCallback {\n  return addMetricObserver('lcp', callback, instrumentLcp, _previousLcp, stopOnCallback);\n}\n\n/**\n * Add a callback that will be triggered when a FID metric is available.\n */\nexport function addTtfbInstrumentationHandler(callback: (data: { metric: Metric }) => void): CleanupHandlerCallback {\n  return addMetricObserver('ttfb', callback, instrumentTtfb, _previousTtfb);\n}\n\n/**\n * Add a callback that will be triggered when a FID metric is available.\n * Returns a cleanup callback which can be called to remove the instrumentation handler.\n */\nexport function addFidInstrumentationHandler(callback: (data: { metric: Metric }) => void): CleanupHandlerCallback {\n  return addMetricObserver('fid', callback, instrumentFid, _previousFid);\n}\n\n/**\n * Add a callback that will be triggered when a INP metric is available.\n * Returns a cleanup callback which can be called to remove the instrumentation handler.\n */\nexport function addInpInstrumentationHandler(\n  callback: (data: { metric: Omit<Metric, 'entries'> & { entries: PerformanceEventTiming[] } }) => void,\n): CleanupHandlerCallback {\n  return addMetricObserver('inp', callback, instrumentInp, _previousInp);\n}\n\nexport function addPerformanceInstrumentationHandler(\n  type: 'event' | 'first-input',\n  callback: (data: { entries: ((PerformanceEntry & { target?: unknown | null }) | PerformanceEventTiming)[] }) => void,\n): CleanupHandlerCallback;\nexport function addPerformanceInstrumentationHandler(\n  type: InstrumentHandlerTypePerformanceObserver,\n  callback: (data: { entries: PerformanceEntry[] }) => void,\n): CleanupHandlerCallback;\n\n/**\n * Add a callback that will be triggered when a performance observer is triggered,\n * and receives the entries of the observer.\n * Returns a cleanup callback which can be called to remove the instrumentation handler.\n */\nexport function addPerformanceInstrumentationHandler(\n  type: InstrumentHandlerTypePerformanceObserver,\n  callback: (data: { entries: PerformanceEntry[] }) => void,\n): CleanupHandlerCallback {\n  addHandler(type, callback);\n\n  if (!instrumented[type]) {\n    instrumentPerformanceObserver(type);\n    instrumented[type] = true;\n  }\n\n  return getCleanupCallback(type, callback);\n}\n\n/** Trigger all handlers of a given type. */\nfunction triggerHandlers(type: InstrumentHandlerType, data: unknown): void {\n  const typeHandlers = handlers[type];\n\n  if (!typeHandlers || !typeHandlers.length) {\n    return;\n  }\n\n  for (const handler of typeHandlers) {\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\nfunction instrumentCls(): StopListening {\n  return onCLS(\n    metric => {\n      triggerHandlers('cls', {\n        metric,\n      });\n      _previousCls = metric;\n    },\n    { reportAllChanges: true },\n  );\n}\n\nfunction instrumentFid(): void {\n  return onFID(metric => {\n    triggerHandlers('fid', {\n      metric,\n    });\n    _previousFid = metric;\n  });\n}\n\nfunction instrumentLcp(): StopListening {\n  return onLCP(metric => {\n    triggerHandlers('lcp', {\n      metric,\n    });\n    _previousLcp = metric;\n  });\n}\n\nfunction instrumentTtfb(): StopListening {\n  return onTTFB(metric => {\n    triggerHandlers('ttfb', {\n      metric,\n    });\n    _previousTtfb = metric;\n  });\n}\n\nfunction instrumentInp(): void {\n  return onINP(metric => {\n    triggerHandlers('inp', {\n      metric,\n    });\n    _previousInp = metric;\n  });\n}\n\nfunction addMetricObserver(\n  type: InstrumentHandlerTypeMetric,\n  callback: InstrumentHandlerCallback,\n  instrumentFn: () => StopListening,\n  previousValue: Metric | undefined,\n  stopOnCallback = false,\n): CleanupHandlerCallback {\n  addHandler(type, callback);\n\n  let stopListening: StopListening | undefined;\n\n  if (!instrumented[type]) {\n    stopListening = instrumentFn();\n    instrumented[type] = true;\n  }\n\n  if (previousValue) {\n    callback({ metric: previousValue });\n  }\n\n  return getCleanupCallback(type, callback, stopOnCallback ? stopListening : undefined);\n}\n\nfunction instrumentPerformanceObserver(type: InstrumentHandlerTypePerformanceObserver): void {\n  const options: PerformanceObserverInit = {};\n\n  // Special per-type options we want to use\n  if (type === 'event') {\n    options.durationThreshold = 0;\n  }\n\n  observe(\n    type,\n    entries => {\n      triggerHandlers(type, { entries });\n    },\n    options,\n  );\n}\n\nfunction addHandler(type: InstrumentHandlerType, handler: InstrumentHandlerCallback): void {\n  handlers[type] = handlers[type] || [];\n  (handlers[type] as InstrumentHandlerCallback[]).push(handler);\n}\n\n// Get a callback which can be called to remove the instrumentation handler\nfunction getCleanupCallback(\n  type: InstrumentHandlerType,\n  callback: InstrumentHandlerCallback,\n  stopListening: StopListening,\n): CleanupHandlerCallback {\n  return () => {\n    if (stopListening) {\n      stopListening();\n    }\n\n    const typeHandlers = handlers[type];\n\n    if (!typeHandlers) {\n      return;\n    }\n\n    const index = typeHandlers.indexOf(callback);\n    if (index !== -1) {\n      typeHandlers.splice(index, 1);\n    }\n  };\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 *\n * Note: this will not be possible anymore in v8,\n * unless we do some special handling for browser here...\n */\nexport function _startChild(transaction: Transaction, { startTimestamp, ...ctx }: SpanContext): Span {\n  // eslint-disable-next-line deprecation/deprecation\n  if (startTimestamp && transaction.startTimestamp > startTimestamp) {\n    // eslint-disable-next-line deprecation/deprecation\n    transaction.startTimestamp = startTimestamp;\n  }\n\n  // eslint-disable-next-line deprecation/deprecation\n  return transaction.startChild({\n    startTimestamp,\n    ...ctx,\n  });\n}\n", "/* eslint-disable max-lines */\nimport type { IdleTransaction, Transaction } from '@sentry/core';\nimport {\n  Span,\n  getActiveTransaction,\n  getClient,\n  hasTracingEnabled,\n  isValidSampleRate,\n  setMeasurement,\n} from '@sentry/core';\nimport type { ClientOptions, Measurements, SpanContext, TransactionContext } from '@sentry/types';\nimport { browserPerformanceTimeOrigin, getComponentName, htmlTreeAsString, logger, parseUrl } from '@sentry/utils';\n\nimport { spanToJSON } from '@sentry/core';\nimport { DEBUG_BUILD } from '../../common/debug-build';\nimport {\n  addClsInstrumentationHandler,\n  addFidInstrumentationHandler,\n  addInpInstrumentationHandler,\n  addLcpInstrumentationHandler,\n  addPerformanceInstrumentationHandler,\n  addTtfbInstrumentationHandler,\n} from '../instrument';\nimport { WINDOW } from '../types';\nimport { getVisibilityWatcher } from '../web-vitals/lib/getVisibilityWatcher';\nimport type {\n  InteractionRouteNameMapping,\n  NavigatorDeviceMemory,\n  NavigatorNetworkInformation,\n} from '../web-vitals/types';\nimport { _startChild, isMeasurementValue } from './utils';\n\nimport { createSpanEnvelope } from '@sentry/core';\nimport { getNavigationEntry } from '../web-vitals/lib/getNavigationEntry';\n\nconst MAX_INT_AS_BYTES = 2147483647;\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 * The callback returned by this function can be used to stop tracking & ensure all measurements are final & captured.\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    const fidCallback = _trackFID();\n    const clsCallback = _trackCLS();\n    const lcpCallback = _trackLCP();\n    const ttfbCallback = _trackTtfb();\n\n    return (): void => {\n      fidCallback();\n      clsCallback();\n      lcpCallback();\n      ttfbCallback();\n    };\n  }\n\n  return () => undefined;\n}\n\n/**\n * Start tracking long tasks.\n */\nexport function startTrackingLongTasks(): void {\n  addPerformanceInstrumentationHandler('longtask', ({ entries }) => {\n    for (const entry of entries) {\n      // eslint-disable-next-line deprecation/deprecation\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      // eslint-disable-next-line deprecation/deprecation\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\n/**\n * Start tracking interaction events.\n */\nexport function startTrackingInteractions(): void {\n  addPerformanceInstrumentationHandler('event', ({ entries }) => {\n    for (const entry of entries) {\n      // eslint-disable-next-line deprecation/deprecation\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        const span: SpanContext = {\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        const componentName = getComponentName(entry.target);\n        if (componentName) {\n          span.attributes = { 'ui.component_name': componentName };\n        }\n\n        // eslint-disable-next-line deprecation/deprecation\n        transaction.startChild(span);\n      }\n    }\n  });\n}\n\n/**\n * Start tracking INP webvital events.\n */\nexport function startTrackingINP(\n  interactionIdtoRouteNameMapping: InteractionRouteNameMapping,\n  interactionsSampleRate: number,\n): () => void {\n  const performance = getBrowserPerformanceAPI();\n  if (performance && browserPerformanceTimeOrigin) {\n    const inpCallback = _trackINP(interactionIdtoRouteNameMapping, interactionsSampleRate);\n\n    return (): void => {\n      inpCallback();\n    };\n  }\n\n  return () => undefined;\n}\n\n/** Starts tracking the Cumulative Layout Shift on the current page. */\nfunction _trackCLS(): () => void {\n  return addClsInstrumentationHandler(({ metric }) => {\n    const entry = metric.entries[metric.entries.length - 1];\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  }, true);\n}\n\n/** Starts tracking the Largest Contentful Paint on the current page. */\nfunction _trackLCP(): () => void {\n  return addLcpInstrumentationHandler(({ metric }) => {\n    const entry = metric.entries[metric.entries.length - 1];\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  }, true);\n}\n\n/** Starts tracking the First Input Delay on the current page. */\nfunction _trackFID(): () => void {\n  return addFidInstrumentationHandler(({ metric }) => {\n    const entry = metric.entries[metric.entries.length - 1];\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\nfunction _trackTtfb(): () => void {\n  return addTtfbInstrumentationHandler(({ metric }) => {\n    const entry = metric.entries[metric.entries.length - 1];\n    if (!entry) {\n      return;\n    }\n\n    DEBUG_BUILD && logger.log('[Measurements] Adding TTFB');\n    _measurements['ttfb'] = { value: metric.value, unit: 'millisecond' };\n  });\n}\n\nconst INP_ENTRY_MAP: Record<string, 'click' | 'hover' | 'drag' | 'press'> = {\n  click: 'click',\n  pointerdown: 'click',\n  pointerup: 'click',\n  mousedown: 'click',\n  mouseup: 'click',\n  touchstart: 'click',\n  touchend: 'click',\n  mouseover: 'hover',\n  mouseout: 'hover',\n  mouseenter: 'hover',\n  mouseleave: 'hover',\n  pointerover: 'hover',\n  pointerout: 'hover',\n  pointerenter: 'hover',\n  pointerleave: 'hover',\n  dragstart: 'drag',\n  dragend: 'drag',\n  drag: 'drag',\n  dragenter: 'drag',\n  dragleave: 'drag',\n  dragover: 'drag',\n  drop: 'drag',\n  keydown: 'press',\n  keyup: 'press',\n  keypress: 'press',\n  input: 'press',\n};\n\n/** Starts tracking the Interaction to Next Paint on the current page. */\nfunction _trackINP(\n  interactionIdToRouteNameMapping: InteractionRouteNameMapping,\n  interactionsSampleRate: number,\n): () => void {\n  return addInpInstrumentationHandler(({ metric }) => {\n    if (metric.value === undefined) {\n      return;\n    }\n    const entry = metric.entries.find(\n      entry => entry.duration === metric.value && INP_ENTRY_MAP[entry.name] !== undefined,\n    );\n    const client = getClient();\n    if (!entry || !client) {\n      return;\n    }\n    const interactionType = INP_ENTRY_MAP[entry.name];\n    const options = client.getOptions();\n    /** Build the INP span, create an envelope from the span, and then send the envelope */\n    const startTime = msToSec((browserPerformanceTimeOrigin as number) + entry.startTime);\n    const duration = msToSec(metric.value);\n    const interaction =\n      entry.interactionId !== undefined ? interactionIdToRouteNameMapping[entry.interactionId] : undefined;\n    if (interaction === undefined) {\n      return;\n    }\n    const { routeName, parentContext, activeTransaction, user, replayId } = interaction;\n    const userDisplay = user !== undefined ? user.email || user.id || user.ip_address : undefined;\n    // eslint-disable-next-line deprecation/deprecation\n    const profileId = activeTransaction !== undefined ? activeTransaction.getProfileId() : undefined;\n    const span = new Span({\n      startTimestamp: startTime,\n      endTimestamp: startTime + duration,\n      op: `ui.interaction.${interactionType}`,\n      name: htmlTreeAsString(entry.target),\n      attributes: {\n        release: options.release,\n        environment: options.environment,\n        transaction: routeName,\n        ...(userDisplay !== undefined && userDisplay !== '' ? { user: userDisplay } : {}),\n        ...(profileId !== undefined ? { profile_id: profileId } : {}),\n        ...(replayId !== undefined ? { replay_id: replayId } : {}),\n      },\n      exclusiveTime: metric.value,\n      measurements: {\n        inp: { value: metric.value, unit: 'millisecond' },\n      },\n    });\n\n    /** Check to see if the span should be sampled */\n    const sampleRate = getSampleRate(parentContext, options, interactionsSampleRate);\n\n    if (!sampleRate) {\n      return;\n    }\n\n    if (Math.random() < (sampleRate as number | boolean)) {\n      const envelope = span ? createSpanEnvelope([span], client.getDsn()) : undefined;\n      const transport = client && client.getTransport();\n      if (transport && envelope) {\n        transport.send(envelope).then(null, reason => {\n          DEBUG_BUILD && logger.error('Error while sending interaction:', reason);\n        });\n      }\n      return;\n    }\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  const { op, start_timestamp: transactionStartTime } = spanToJSON(transaction);\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    // eslint-disable-next-line deprecation/deprecation\n    if (transaction.op === 'navigation' && transactionStartTime && timeOrigin + startTime < transactionStartTime) {\n      return;\n    }\n\n    switch (entry.entryType) {\n      case 'navigation': {\n        _addNavigationSpans(transaction, entry, timeOrigin);\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        _addResourceSpans(transaction, entry, entry.name as string, 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 (op === 'pageload') {\n    _addTtfbRequestTimeToMeasurements(_measurements);\n\n    ['fcp', 'fp', 'lcp'].forEach(name => {\n      if (!_measurements[name] || !transactionStartTime || timeOrigin >= transactionStartTime) {\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 - transactionStartTime) * 1000);\n      const delta = normalizedValue - oldValue;\n\n      DEBUG_BUILD && 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      setMeasurement(measurementName, _measurements[measurementName].value, _measurements[measurementName].unit);\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  if (entry.responseEnd) {\n    // It is possible that we are collecting these metrics when the page hasn't finished loading yet, for example when the HTML slowly streams in.\n    // In this case, ie. when the document request hasn't finished yet, `entry.responseEnd` will be 0.\n    // In order not to produce faulty spans, where the end timestamp is before the start timestamp, we will only collect\n    // these spans when the responseEnd value is available. The backend (Relay) would drop the entire transaction if it contained faulty spans.\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}\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  resourceUrl: 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  const parsedUrl = parseUrl(resourceUrl);\n\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  const data: Record<string, any> = {};\n  setResourceEntrySizeData(data, entry, 'transferSize', 'http.response_transfer_size');\n  setResourceEntrySizeData(data, entry, 'encodedBodySize', 'http.response_content_length');\n  setResourceEntrySizeData(data, entry, 'decodedBodySize', 'http.decoded_response_content_length');\n\n  if ('renderBlockingStatus' in entry) {\n    data['resource.render_blocking_status'] = entry.renderBlockingStatus;\n  }\n  if (parsedUrl.protocol) {\n    data['url.scheme'] = parsedUrl.protocol.split(':').pop(); // the protocol returned by parseUrl includes a :, but OTEL spec does not, so we remove it.\n  }\n\n  if (parsedUrl.host) {\n    data['server.address'] = parsedUrl.host;\n  }\n\n  data['url.same_origin'] = resourceUrl.includes(WINDOW.location.origin);\n\n  const startTimestamp = timeOrigin + startTime;\n  const endTimestamp = startTimestamp + duration;\n\n  _startChild(transaction, {\n    description: resourceUrl.replace(WINDOW.location.origin, ''),\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      // TODO: Can we rewrite this to an attribute?\n      // eslint-disable-next-line deprecation/deprecation\n      transaction.setTag('effectiveConnectionType', connection.effectiveType);\n    }\n\n    if (connection.type) {\n      // TODO: Can we rewrite this to an attribute?\n      // eslint-disable-next-line deprecation/deprecation\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    // TODO: Can we rewrite this to an attribute?\n    // eslint-disable-next-line deprecation/deprecation\n    transaction.setTag('deviceMemory', `${navigator.deviceMemory} GB`);\n  }\n\n  if (isMeasurementValue(navigator.hardwareConcurrency)) {\n    // TODO: Can we rewrite this to an attribute?\n    // eslint-disable-next-line deprecation/deprecation\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      // TODO: Can we rewrite this to an attribute?\n      // eslint-disable-next-line deprecation/deprecation\n      transaction.setTag('lcp.element', htmlTreeAsString(_lcpEntry.element));\n    }\n\n    if (_lcpEntry.id) {\n      // TODO: Can we rewrite this to an attribute?\n      // eslint-disable-next-line deprecation/deprecation\n      transaction.setTag('lcp.id', _lcpEntry.id);\n    }\n\n    if (_lcpEntry.url) {\n      // Trim URL to the first 200 characters.\n      // TODO: Can we rewrite this to an attribute?\n      // eslint-disable-next-line deprecation/deprecation\n      transaction.setTag('lcp.url', _lcpEntry.url.trim().slice(0, 200));\n    }\n\n    // TODO: Can we rewrite this to an attribute?\n    // eslint-disable-next-line deprecation/deprecation\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      // TODO: Can we rewrite this to an attribute?\n      // eslint-disable-next-line deprecation/deprecation\n      transaction.setTag(`cls.source.${index + 1}`, htmlTreeAsString(source.node)),\n    );\n  }\n}\n\nfunction setResourceEntrySizeData(\n  data: Record<string, unknown>,\n  entry: ResourceEntry,\n  key: keyof Pick<ResourceEntry, 'transferSize' | 'encodedBodySize' | 'decodedBodySize'>,\n  dataKey: 'http.response_transfer_size' | 'http.response_content_length' | 'http.decoded_response_content_length',\n): void {\n  const entryVal = entry[key];\n  if (entryVal != null && entryVal < MAX_INT_AS_BYTES) {\n    data[dataKey] = entryVal;\n  }\n}\n\n/**\n * Add ttfb request time information to measurements.\n *\n * ttfb information is added via vendored web vitals library.\n */\nfunction _addTtfbRequestTimeToMeasurements(_measurements: Measurements): void {\n  const navEntry = getNavigationEntry();\n  if (!navEntry) {\n    return;\n  }\n\n  const { responseStart, requestStart } = navEntry;\n\n  if (requestStart <= responseStart) {\n    DEBUG_BUILD && logger.log('[Measurements] Adding TTFB Request Time');\n    _measurements['ttfb.requestTime'] = {\n      value: responseStart - requestStart,\n      unit: 'millisecond',\n    };\n  }\n}\n\n/** Taken from @sentry/core sampling.ts */\nfunction getSampleRate(\n  transactionContext: TransactionContext | undefined,\n  options: ClientOptions,\n  interactionsSampleRate: number,\n): number | boolean {\n  if (!hasTracingEnabled(options)) {\n    return false;\n  }\n  let sampleRate;\n  if (transactionContext !== undefined && typeof options.tracesSampler === 'function') {\n    sampleRate = options.tracesSampler({\n      transactionContext,\n      name: transactionContext.name,\n      parentSampled: transactionContext.parentSampled,\n      attributes: {\n        // eslint-disable-next-line deprecation/deprecation\n        ...transactionContext.data,\n        ...transactionContext.attributes,\n      },\n      location: WINDOW.location,\n    });\n  } else if (transactionContext !== undefined && transactionContext.sampled !== undefined) {\n    sampleRate = transactionContext.sampled;\n  } else if (typeof options.tracesSampleRate !== 'undefined') {\n    sampleRate = options.tracesSampleRate;\n  } else {\n    sampleRate = 1;\n  }\n  if (!isValidSampleRate(sampleRate)) {\n    DEBUG_BUILD && logger.warn('[Tracing] Discarding interaction span because of invalid sample rate.');\n    return false;\n  }\n  if (sampleRate === true) {\n    return interactionsSampleRate;\n  } else if (sampleRate === false) {\n    return 0;\n  }\n  return sampleRate * interactionsSampleRate;\n}\n", "import {\n  SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n  getClient,\n  getCurrentScope,\n  getDynamicSamplingContextFromClient,\n  getDynamicSamplingContextFromSpan,\n  getIsolationScope,\n  hasTracingEnabled,\n  setHttpStatus,\n  spanToTraceHeader,\n  startInactiveSpan,\n} from '@sentry/core';\nimport type { Client, HandlerDataFetch, Scope, Span, SpanOrigin } from '@sentry/types';\nimport {\n  BAGGAGE_HEADER_NAME,\n  dynamicSamplingContextToSentryBaggageHeader,\n  generateSentryTraceHeader,\n  isInstanceOf,\n  parseUrl,\n} from '@sentry/utils';\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\n/**\n * Create and track fetch request spans for usage in combination with `addInstrumentationHandler`.\n *\n * @returns Span if a span was created, otherwise void.\n */\nexport function instrumentFetchRequest(\n  handlerData: HandlerDataFetch,\n  shouldCreateSpan: (url: string) => boolean,\n  shouldAttachHeaders: (url: string) => boolean,\n  spans: Record<string, Span>,\n  spanOrigin: SpanOrigin = 'auto.http.browser',\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      endSpan(span, handlerData);\n      // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n      delete spans[spanId];\n    }\n    return undefined;\n  }\n\n  const scope = getCurrentScope();\n  const client = getClient();\n\n  const { method, url } = handlerData.fetchData;\n\n  const fullUrl = getFullURL(url);\n  const host = fullUrl ? parseUrl(fullUrl).host : undefined;\n\n  const span = shouldCreateSpanResult\n    ? startInactiveSpan({\n        name: `${method} ${url}`,\n        onlyIfParent: true,\n        attributes: {\n          url,\n          type: 'fetch',\n          'http.method': method,\n          'http.url': fullUrl,\n          'server.address': host,\n          [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: spanOrigin,\n        },\n        op: 'http.client',\n      })\n    : undefined;\n\n  if (span) {\n    handlerData.fetchData.__span = span.spanContext().spanId;\n    spans[span.spanContext().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  // eslint-disable-next-line deprecation/deprecation\n  const span = requestSpan || scope.getSpan();\n\n  const isolationScope = getIsolationScope();\n\n  const { traceId, spanId, sampled, dsc } = {\n    ...isolationScope.getPropagationContext(),\n    ...scope.getPropagationContext(),\n  };\n\n  const sentryTraceHeader = span ? spanToTraceHeader(span) : generateSentryTraceHeader(traceId, spanId, sampled);\n\n  const sentryBaggageHeader = dynamicSamplingContextToSentryBaggageHeader(\n    dsc ||\n      (span ? getDynamicSamplingContextFromSpan(span) : getDynamicSamplingContextFromClient(traceId, client, scope)),\n  );\n\n  const headers =\n    options.headers ||\n    (typeof Request !== 'undefined' && isInstanceOf(request, Request) ? (request as Request).headers : undefined);\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\nfunction getFullURL(url: string): string | undefined {\n  try {\n    const parsed = new URL(url);\n    return parsed.href;\n  } catch {\n    return undefined;\n  }\n}\n\nfunction endSpan(span: Span, handlerData: HandlerDataFetch): void {\n  if (handlerData.response) {\n    setHttpStatus(span, handlerData.response.status);\n\n    const contentLength =\n      handlerData.response && handlerData.response.headers && handlerData.response.headers.get('content-length');\n\n    if (contentLength) {\n      const contentLengthNum = parseInt(contentLength);\n      if (contentLengthNum > 0) {\n        span.setAttribute('http.response_content_length', contentLengthNum);\n      }\n    }\n  } else if (handlerData.error) {\n    span.setStatus('internal_error');\n  }\n  span.end();\n}\n", "/* eslint-disable max-lines */\nimport {\n  SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n  getClient,\n  getCurrentScope,\n  getDynamicSamplingContextFromClient,\n  getDynamicSamplingContextFromSpan,\n  getIsolationScope,\n  hasTracingEnabled,\n  setHttpStatus,\n  spanToJSON,\n  spanToTraceHeader,\n  startInactiveSpan,\n} from '@sentry/core';\nimport type { HandlerDataXhr, SentryWrappedXMLHttpRequest, Span } from '@sentry/types';\nimport {\n  BAGGAGE_HEADER_NAME,\n  SENTRY_XHR_DATA_KEY,\n  addFetchInstrumentationHandler,\n  addXhrInstrumentationHandler,\n  browserPerformanceTimeOrigin,\n  dynamicSamplingContextToSentryBaggageHeader,\n  generateSentryTraceHeader,\n  parseUrl,\n  stringMatchesSomePattern,\n} from '@sentry/utils';\n\nimport { instrumentFetchRequest } from '../common/fetch';\nimport { addPerformanceInstrumentationHandler } from './instrument';\nimport { WINDOW } from './types';\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\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    addFetchInstrumentationHandler(handlerData => {\n      const createdSpan = instrumentFetchRequest(handlerData, shouldCreateSpan, shouldAttachHeadersWithTargets, spans);\n      // We cannot use `window.location` in the generic fetch instrumentation,\n      // but we need it for reliable `server.address` attribute.\n      // so we extend this in here\n      if (createdSpan) {\n        const fullUrl = getFullURL(handlerData.fetchData.url);\n        const host = fullUrl ? parseUrl(fullUrl).host : undefined;\n        createdSpan.setAttributes({\n          'http.url': fullUrl,\n          'server.address': host,\n        });\n      }\n\n      if (enableHTTPTimings && createdSpan) {\n        addHTTPTimings(createdSpan);\n      }\n    });\n  }\n\n  if (traceXHR) {\n    addXhrInstrumentationHandler(handlerData => {\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 } = spanToJSON(span).data || {};\n\n  if (!url || typeof url !== 'string') {\n    return;\n  }\n\n  const cleanup = addPerformanceInstrumentationHandler('resource', ({ entries }) => {\n    entries.forEach(entry => {\n      if (isPerformanceResourceTiming(entry) && entry.name.endsWith(url)) {\n        const spanData = resourceTimingEntryToSpanData(entry);\n        spanData.forEach(data => span.setAttribute(...data));\n        // In the next tick, clean this handler up\n        // We have to wait here because otherwise this cleans itself up before it is fully done\n        setTimeout(cleanup);\n      }\n    });\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 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: HandlerDataXhr,\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__ || !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 && sentryXhrData.status_code !== undefined) {\n      setHttpStatus(span, sentryXhrData.status_code);\n      span.end();\n\n      // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n      delete spans[spanId];\n    }\n    return undefined;\n  }\n\n  const scope = getCurrentScope();\n  const isolationScope = getIsolationScope();\n\n  const fullUrl = getFullURL(sentryXhrData.url);\n  const host = fullUrl ? parseUrl(fullUrl).host : undefined;\n\n  const span = shouldCreateSpanResult\n    ? startInactiveSpan({\n        name: `${sentryXhrData.method} ${sentryXhrData.url}`,\n        onlyIfParent: true,\n        attributes: {\n          type: 'xhr',\n          'http.method': sentryXhrData.method,\n          'http.url': fullUrl,\n          url: sentryXhrData.url,\n          'server.address': host,\n          [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.http.browser',\n        },\n        op: 'http.client',\n      })\n    : undefined;\n\n  if (span) {\n    xhr.__sentry_xhr_span_id__ = span.spanContext().spanId;\n    spans[xhr.__sentry_xhr_span_id__] = span;\n  }\n\n  const client = getClient();\n\n  if (xhr.setRequestHeader && shouldAttachHeaders(sentryXhrData.url) && client) {\n    const { traceId, spanId, sampled, dsc } = {\n      ...isolationScope.getPropagationContext(),\n      ...scope.getPropagationContext(),\n    };\n\n    const sentryTraceHeader = span ? spanToTraceHeader(span) : generateSentryTraceHeader(traceId, spanId, sampled);\n\n    const sentryBaggageHeader = dynamicSamplingContextToSentryBaggageHeader(\n      dsc ||\n        (span ? getDynamicSamplingContextFromSpan(span) : getDynamicSamplingContextFromClient(traceId, client, scope)),\n    );\n\n    setHeaderOnXhr(xhr, sentryTraceHeader, sentryBaggageHeader);\n  }\n\n  return span;\n}\n\nfunction setHeaderOnXhr(\n  xhr: SentryWrappedXMLHttpRequest,\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\nfunction getFullURL(url: string): string | undefined {\n  try {\n    // By adding a base URL to new URL(), this will also work for relative urls\n    // If `url` is a full URL, the base URL is ignored anyhow\n    const parsed = new URL(url, WINDOW.location.origin);\n    return parsed.href;\n  } catch {\n    return undefined;\n  }\n}\n", "import type { Transaction, TransactionContext } from '@sentry/types';\nimport { addHistoryInstrumentationHandler, browserPerformanceTimeOrigin, logger } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../common/debug-build';\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    addHistoryInstrumentationHandler(({ to, from }) => {\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.end();\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 { getClient, getCurrentScope } from '@sentry/core';\nimport {\n  SEMANTIC_ATTRIBUTE_SENTRY_SOURCE,\n  TRACING_DEFAULTS,\n  addTracingExtensions,\n  getActiveTransaction,\n  startIdleTransaction,\n} from '@sentry/core';\nimport type { EventProcessor, Integration, Transaction, TransactionContext, TransactionSource } from '@sentry/types';\nimport { getDomElement, logger, propagationContextFromHeaders } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../common/debug-build';\nimport { registerBackgroundTabDetection } from './backgroundtab';\nimport { addPerformanceInstrumentationHandler } from './instrument';\nimport {\n  addPerformanceEntries,\n  startTrackingINP,\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';\nimport type { InteractionRouteNameMapping } from './web-vitals/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   * If true, Sentry will capture INP web vitals as standalone spans .\n   *\n   * Default: false\n   */\n  enableInp: boolean;\n\n  /**\n   * Sample rate to determine interaction span sampling.\n   * interactionsSampleRate is applied on top of the global tracesSampleRate.\n   * ie a tracesSampleRate of 0.1 and interactionsSampleRate of 0.5 will result in a 0.05 sample rate for interactions.\n   *\n   * Default: 1\n   */\n  interactionsSampleRate: number;\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    // eslint-disable-next-line deprecation/deprecation\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  enableInp: false,\n  interactionsSampleRate: 1,\n  _experiments: {},\n  ...defaultRequestInstrumentationOptions,\n};\n\n/** We store up to 10 interaction candidates max to cap memory usage. This is the same cap as getINP from web-vitals */\nconst MAX_INTERACTIONS = 10;\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 *\n * @deprecated Use `browserTracingIntegration()` instead.\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  // eslint-disable-next-line deprecation/deprecation\n  private _getCurrentHub?: () => Hub;\n\n  private _collectWebVitals: () => void;\n\n  private _hasSetTracePropagationTargets: boolean;\n  private _interactionIdToRouteNameMapping: InteractionRouteNameMapping;\n  private _latestRoute: {\n    name: string | undefined;\n    context: TransactionContext | undefined;\n  };\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    /** Stores a mapping of interactionIds from PerformanceEventTimings to the origin interaction path */\n    this._interactionIdToRouteNameMapping = {};\n\n    if (this.options.enableInp) {\n      startTrackingINP(this._interactionIdToRouteNameMapping, this.options.interactionsSampleRate);\n    }\n    if (this.options.enableLongTask) {\n      startTrackingLongTasks();\n    }\n    if (this.options._experiments.enableInteractions) {\n      startTrackingInteractions();\n    }\n\n    this._latestRoute = {\n      name: undefined,\n      context: undefined,\n    };\n  }\n\n  /**\n   * @inheritDoc\n   */\n  // eslint-disable-next-line deprecation/deprecation\n  public setupOnce(_: (callback: EventProcessor) => void, getCurrentHub: () => Hub): void {\n    this._getCurrentHub = getCurrentHub;\n    const hub = getCurrentHub();\n    // eslint-disable-next-line deprecation/deprecation\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    if (this.options.enableInp) {\n      this._registerInpInteractionListener();\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    let expandedContext: TransactionContext;\n    if (isPageloadTransaction) {\n      const sentryTrace = isPageloadTransaction ? getMetaContent('sentry-trace') : '';\n      const baggage = isPageloadTransaction ? getMetaContent('baggage') : undefined;\n      const { traceId, dsc, parentSpanId, sampled } = propagationContextFromHeaders(sentryTrace, baggage);\n      expandedContext = {\n        traceId,\n        parentSpanId,\n        parentSampled: sampled,\n        ...context,\n        metadata: {\n          // eslint-disable-next-line deprecation/deprecation\n          ...context.metadata,\n          dynamicSamplingContext: dsc,\n        },\n        trimEnd: true,\n      };\n    } else {\n      expandedContext = {\n        trimEnd: true,\n        ...context,\n      };\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    // eslint-disable-next-line deprecation/deprecation\n    finalContext.metadata =\n      finalContext.name !== expandedContext.name\n        ? // eslint-disable-next-line deprecation/deprecation\n          { ...finalContext.metadata, source: 'custom' }\n        : // eslint-disable-next-line deprecation/deprecation\n          finalContext.metadata;\n\n    this._latestRoute.name = finalContext.name;\n    this._latestRoute.context = finalContext;\n\n    // eslint-disable-next-line deprecation/deprecation\n    if (finalContext.sampled === false) {\n      DEBUG_BUILD && 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      isPageloadTransaction, // should wait for finish signal if it's a pageload transaction\n    );\n\n    if (isPageloadTransaction) {\n      if (WINDOW.document) {\n        WINDOW.document.addEventListener('readystatechange', () => {\n          if (['interactive', 'complete'].includes(WINDOW.document!.readyState)) {\n            idleTransaction.sendAutoFinishSignal();\n          }\n        });\n\n        if (['interactive', 'complete'].includes(WINDOW.document.readyState)) {\n          idleTransaction.sendAutoFinishSignal();\n        }\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      // eslint-disable-next-line deprecation/deprecation\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.end();\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._latestRoute.name) {\n        DEBUG_BUILD && 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._latestRoute.name,\n        op,\n        trimEnd: true,\n        data: {\n          [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: this._latestRoute.context\n            ? getSource(this._latestRoute.context)\n            : undefined || '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      if (WINDOW.document) {\n        addEventListener(type, registerInteractionTransaction, { once: false, capture: true });\n      }\n    });\n  }\n\n  /** Creates a listener on interaction entries, and maps interactionIds to the origin path of the interaction */\n  private _registerInpInteractionListener(): void {\n    const handleEntries = ({ entries }: { entries: PerformanceEntry[] }): void => {\n      const client = getClient();\n      // We need to get the replay, user, and activeTransaction from the current scope\n      // so that we can associate replay id, profile id, and a user display to the span\n      const replay =\n        client !== undefined && client.getIntegrationByName !== undefined\n          ? (client.getIntegrationByName('Replay') as Integration & { getReplayId: () => string })\n          : undefined;\n      const replayId = replay !== undefined ? replay.getReplayId() : undefined;\n      // eslint-disable-next-line deprecation/deprecation\n      const activeTransaction = getActiveTransaction();\n      const currentScope = getCurrentScope();\n      const user = currentScope !== undefined ? currentScope.getUser() : undefined;\n      entries.forEach(entry => {\n        if (isPerformanceEventTiming(entry)) {\n          const interactionId = entry.interactionId;\n          if (interactionId === undefined) {\n            return;\n          }\n          const existingInteraction = this._interactionIdToRouteNameMapping[interactionId];\n          const duration = entry.duration;\n          const startTime = entry.startTime;\n          const keys = Object.keys(this._interactionIdToRouteNameMapping);\n          const minInteractionId =\n            keys.length > 0\n              ? keys.reduce((a, b) => {\n                  return this._interactionIdToRouteNameMapping[a].duration <\n                    this._interactionIdToRouteNameMapping[b].duration\n                    ? a\n                    : b;\n                })\n              : undefined;\n          // For a first input event to be considered, we must check that an interaction event does not already exist with the same duration and start time.\n          // This is also checked in the web-vitals library.\n          if (entry.entryType === 'first-input') {\n            const matchingEntry = keys\n              .map(key => this._interactionIdToRouteNameMapping[key])\n              .some(interaction => {\n                return interaction.duration === duration && interaction.startTime === startTime;\n              });\n            if (matchingEntry) {\n              return;\n            }\n          }\n          // Interactions with an id of 0 and are not first-input are not valid.\n          if (!interactionId) {\n            return;\n          }\n          // If the interaction already exists, we want to use the duration of the longest entry, since that is what the INP metric uses.\n          if (existingInteraction) {\n            existingInteraction.duration = Math.max(existingInteraction.duration, duration);\n          } else if (\n            keys.length < MAX_INTERACTIONS ||\n            minInteractionId === undefined ||\n            duration > this._interactionIdToRouteNameMapping[minInteractionId].duration\n          ) {\n            // If the interaction does not exist, we want to add it to the mapping if there is space, or if the duration is longer than the shortest entry.\n            const routeName = this._latestRoute.name;\n            const parentContext = this._latestRoute.context;\n            if (routeName && parentContext) {\n              if (minInteractionId && Object.keys(this._interactionIdToRouteNameMapping).length >= MAX_INTERACTIONS) {\n                // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n                delete this._interactionIdToRouteNameMapping[minInteractionId];\n              }\n              this._interactionIdToRouteNameMapping[interactionId] = {\n                routeName,\n                duration,\n                parentContext,\n                user,\n                activeTransaction,\n                replayId,\n                startTime,\n              };\n            }\n          }\n        }\n      });\n    };\n    addPerformanceInstrumentationHandler('event', handleEntries);\n    addPerformanceInstrumentationHandler('first-input', handleEntries);\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\nfunction getSource(context: TransactionContext): TransactionSource | undefined {\n  const sourceFromAttributes = context.attributes && context.attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE];\n  // eslint-disable-next-line deprecation/deprecation\n  const sourceFromData = context.data && context.data[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE];\n  // eslint-disable-next-line deprecation/deprecation\n  const sourceFromMetadata = context.metadata && context.metadata.source;\n\n  return sourceFromAttributes || sourceFromData || sourceFromMetadata;\n}\n\nfunction isPerformanceEventTiming(entry: PerformanceEntry): entry is PerformanceEventTiming {\n  return 'duration' in entry;\n}\n", "/* eslint-disable max-lines */\nimport type { IdleTransaction } from '@sentry/core';\nimport { getActiveSpan, getClient, getCurrentScope } from '@sentry/core';\nimport { getCurrentHub } from '@sentry/core';\nimport {\n  SEMANTIC_ATTRIBUTE_SENTRY_SOURCE,\n  TRACING_DEFAULTS,\n  addTracingExtensions,\n  getActiveTransaction,\n  spanToJSON,\n  startIdleTransaction,\n} from '@sentry/core';\nimport type {\n  Client,\n  Integration,\n  IntegrationFn,\n  StartSpanOptions,\n  Transaction,\n  TransactionContext,\n  TransactionSource,\n} from '@sentry/types';\nimport type { Span } from '@sentry/types';\nimport {\n  addHistoryInstrumentationHandler,\n  browserPerformanceTimeOrigin,\n  getDomElement,\n  logger,\n  propagationContextFromHeaders,\n} from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../common/debug-build';\nimport { registerBackgroundTabDetection } from './backgroundtab';\nimport { addPerformanceInstrumentationHandler } from './instrument';\nimport {\n  addPerformanceEntries,\n  startTrackingINP,\n  startTrackingInteractions,\n  startTrackingLongTasks,\n  startTrackingWebVitals,\n} from './metrics';\nimport type { RequestInstrumentationOptions } from './request';\nimport { defaultRequestInstrumentationOptions, instrumentOutgoingRequests } from './request';\nimport { WINDOW } from './types';\nimport type { InteractionRouteNameMapping } from './web-vitals/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   * If a span should be created on page load.\n   * If this is set to `false`, this integration will not start the default page load span.\n   * Default: true\n   */\n  instrumentPageLoad: boolean;\n\n  /**\n   * If a span should be created on navigation (history change).\n   * If this is set to `false`, this integration will not start the default navigation spans.\n   * Default: true\n   */\n  instrumentNavigation: boolean;\n\n  /**\n   * Flag spans 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  markBackgroundSpan: 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   * If true, Sentry will capture INP web vitals as standalone spans .\n   *\n   * Default: false\n   */\n  enableInp: boolean;\n\n  /**\n   * Sample rate to determine interaction span sampling.\n   * interactionsSampleRate is applied on top of the global tracesSampleRate.\n   * ie a tracesSampleRate of 0.1 and interactionsSampleRate of 0.5 will result in a 0.05 sample rate for interactions.\n   *\n   * Default: 1\n   */\n  interactionsSampleRate: number;\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    enableInteractions: boolean;\n  }>;\n\n  /**\n   * A callback which is called before a span for a pageload or navigation is started.\n   * It receives the options passed to `startSpan`, and expects to return an updated options object.\n   */\n  beforeStartSpan?: (options: StartSpanOptions) => StartSpanOptions;\n}\n\nconst DEFAULT_BROWSER_TRACING_OPTIONS: BrowserTracingOptions = {\n  ...TRACING_DEFAULTS,\n  instrumentNavigation: true,\n  instrumentPageLoad: true,\n  markBackgroundSpan: true,\n  enableLongTask: true,\n  enableInp: false,\n  interactionsSampleRate: 1,\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 *\n * We explicitly export the proper type here, as this has to be extended in some cases.\n */\nexport const browserTracingIntegration = ((_options: Partial<BrowserTracingOptions> = {}) => {\n  const _hasSetTracePropagationTargets = DEBUG_BUILD\n    ? !!(\n        // eslint-disable-next-line deprecation/deprecation\n        (_options.tracePropagationTargets || _options.tracingOrigins)\n      )\n    : false;\n\n  addTracingExtensions();\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.tracePropagationTargets && _options.tracingOrigins) {\n    // eslint-disable-next-line deprecation/deprecation\n    _options.tracePropagationTargets = _options.tracingOrigins;\n  }\n\n  const options = {\n    ...DEFAULT_BROWSER_TRACING_OPTIONS,\n    ..._options,\n  };\n\n  const _collectWebVitals = startTrackingWebVitals();\n\n  /** Stores a mapping of interactionIds from PerformanceEventTimings to the origin interaction path */\n  const interactionIdToRouteNameMapping: InteractionRouteNameMapping = {};\n  if (options.enableInp) {\n    startTrackingINP(interactionIdToRouteNameMapping, options.interactionsSampleRate);\n  }\n\n  if (options.enableLongTask) {\n    startTrackingLongTasks();\n  }\n  if (options._experiments.enableInteractions) {\n    startTrackingInteractions();\n  }\n\n  const latestRoute: {\n    name: string | undefined;\n    context: TransactionContext | undefined;\n  } = {\n    name: undefined,\n    context: undefined,\n  };\n\n  /** Create routing idle transaction. */\n  function _createRouteTransaction(context: TransactionContext): Transaction | undefined {\n    // eslint-disable-next-line deprecation/deprecation\n    const hub = getCurrentHub();\n\n    const { beforeStartSpan, idleTimeout, finalTimeout, heartbeatInterval } = options;\n\n    const isPageloadTransaction = context.op === 'pageload';\n\n    let expandedContext: TransactionContext;\n    if (isPageloadTransaction) {\n      const sentryTrace = isPageloadTransaction ? getMetaContent('sentry-trace') : '';\n      const baggage = isPageloadTransaction ? getMetaContent('baggage') : undefined;\n      const { traceId, dsc, parentSpanId, sampled } = propagationContextFromHeaders(sentryTrace, baggage);\n      expandedContext = {\n        traceId,\n        parentSpanId,\n        parentSampled: sampled,\n        ...context,\n        metadata: {\n          // eslint-disable-next-line deprecation/deprecation\n          ...context.metadata,\n          dynamicSamplingContext: dsc,\n        },\n        trimEnd: true,\n      };\n    } else {\n      expandedContext = {\n        trimEnd: true,\n        ...context,\n      };\n    }\n\n    const finalContext = beforeStartSpan ? beforeStartSpan(expandedContext) : expandedContext;\n\n    // If `beforeStartSpan` set a custom name, record that fact\n    // eslint-disable-next-line deprecation/deprecation\n    finalContext.metadata =\n      finalContext.name !== expandedContext.name\n        ? // eslint-disable-next-line deprecation/deprecation\n          { ...finalContext.metadata, source: 'custom' }\n        : // eslint-disable-next-line deprecation/deprecation\n          finalContext.metadata;\n\n    latestRoute.name = finalContext.name;\n    latestRoute.context = finalContext;\n\n    if (finalContext.sampled === false) {\n      DEBUG_BUILD && 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      isPageloadTransaction, // should wait for finish signal if it's a pageload transaction\n    );\n\n    if (isPageloadTransaction && WINDOW.document) {\n      WINDOW.document.addEventListener('readystatechange', () => {\n        if (['interactive', 'complete'].includes(WINDOW.document!.readyState)) {\n          idleTransaction.sendAutoFinishSignal();\n        }\n      });\n\n      if (['interactive', 'complete'].includes(WINDOW.document.readyState)) {\n        idleTransaction.sendAutoFinishSignal();\n      }\n    }\n\n    idleTransaction.registerBeforeFinishCallback(transaction => {\n      _collectWebVitals();\n      addPerformanceEntries(transaction);\n    });\n\n    return idleTransaction as Transaction;\n  }\n\n  return {\n    name: BROWSER_TRACING_INTEGRATION_ID,\n    // eslint-disable-next-line @typescript-eslint/no-empty-function\n    setupOnce: () => {},\n    afterAllSetup(client) {\n      const clientOptions = client.getOptions();\n\n      const { markBackgroundSpan, traceFetch, traceXHR, shouldCreateSpanForRequest, enableHTTPTimings, _experiments } =\n        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 || options.tracePropagationTargets;\n      if (DEBUG_BUILD && _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      let activeSpan: Span | undefined;\n      let startingUrl: string | undefined = WINDOW.location && WINDOW.location.href;\n\n      if (client.on) {\n        client.on('startNavigationSpan', (context: StartSpanOptions) => {\n          if (activeSpan) {\n            DEBUG_BUILD && logger.log(`[Tracing] Finishing current transaction with op: ${spanToJSON(activeSpan).op}`);\n            // If there's an open transaction on the scope, we need to finish it before creating an new one.\n            activeSpan.end();\n          }\n          activeSpan = _createRouteTransaction({\n            op: 'navigation',\n            ...context,\n          });\n        });\n\n        client.on('startPageLoadSpan', (context: StartSpanOptions) => {\n          if (activeSpan) {\n            DEBUG_BUILD && logger.log(`[Tracing] Finishing current transaction with op: ${spanToJSON(activeSpan).op}`);\n            // If there's an open transaction on the scope, we need to finish it before creating an new one.\n            activeSpan.end();\n          }\n          activeSpan = _createRouteTransaction({\n            op: 'pageload',\n            ...context,\n          });\n        });\n      }\n\n      if (options.instrumentPageLoad && client.emit && WINDOW.location) {\n        const context: StartSpanOptions = {\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          origin: 'auto.pageload.browser',\n          attributes: {\n            [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'url',\n          },\n        };\n        startBrowserTracingPageLoadSpan(client, context);\n      }\n\n      if (options.instrumentNavigation && client.emit && WINDOW.location) {\n        addHistoryInstrumentationHandler(({ to, from }) => {\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            const context: StartSpanOptions = {\n              name: WINDOW.location.pathname,\n              origin: 'auto.navigation.browser',\n              attributes: {\n                [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'url',\n              },\n            };\n\n            startBrowserTracingNavigationSpan(client, context);\n          }\n        });\n      }\n\n      if (markBackgroundSpan) {\n        registerBackgroundTabDetection();\n      }\n\n      if (_experiments.enableInteractions) {\n        registerInteractionListener(options, latestRoute);\n      }\n\n      if (options.enableInp) {\n        registerInpInteractionListener(interactionIdToRouteNameMapping, latestRoute);\n      }\n\n      instrumentOutgoingRequests({\n        traceFetch,\n        traceXHR,\n        tracePropagationTargets,\n        shouldCreateSpanForRequest,\n        enableHTTPTimings,\n      });\n    },\n    // TODO v8: Remove this again\n    // This is private API that we use to fix converted BrowserTracing integrations in Next.js & SvelteKit\n    options,\n  };\n}) satisfies IntegrationFn;\n\n/**\n * Manually start a page load span.\n * This will only do something if the BrowserTracing integration has been setup.\n */\nexport function startBrowserTracingPageLoadSpan(client: Client, spanOptions: StartSpanOptions): Span | undefined {\n  if (!client.emit) {\n    return;\n  }\n\n  client.emit('startPageLoadSpan', spanOptions);\n\n  const span = getActiveSpan();\n  const op = span && spanToJSON(span).op;\n  return op === 'pageload' ? span : undefined;\n}\n\n/**\n * Manually start a navigation span.\n * This will only do something if the BrowserTracing integration has been setup.\n */\nexport function startBrowserTracingNavigationSpan(client: Client, spanOptions: StartSpanOptions): Span | undefined {\n  if (!client.emit) {\n    return;\n  }\n\n  client.emit('startNavigationSpan', spanOptions);\n\n  const span = getActiveSpan();\n  const op = span && spanToJSON(span).op;\n  return op === 'navigation' ? span : undefined;\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\n/** Start listener for interaction transactions */\nfunction registerInteractionListener(\n  options: BrowserTracingOptions,\n  latestRoute: {\n    name: string | undefined;\n    context: TransactionContext | undefined;\n  },\n): void {\n  let inflightInteractionTransaction: IdleTransaction | undefined;\n  const registerInteractionTransaction = (): void => {\n    const { idleTimeout, finalTimeout, heartbeatInterval } = options;\n    const op = 'ui.action.click';\n\n    // eslint-disable-next-line deprecation/deprecation\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.end();\n      inflightInteractionTransaction = undefined;\n    }\n\n    if (!latestRoute.name) {\n      DEBUG_BUILD && logger.warn(`[Tracing] Did not create ${op} transaction because _latestRouteName is missing.`);\n      return undefined;\n    }\n\n    const { location } = WINDOW;\n\n    const context: TransactionContext = {\n      name: latestRoute.name,\n      op,\n      trimEnd: true,\n      data: {\n        [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: latestRoute.context ? getSource(latestRoute.context) : undefined || 'url',\n      },\n    };\n\n    inflightInteractionTransaction = startIdleTransaction(\n      // eslint-disable-next-line deprecation/deprecation\n      getCurrentHub(),\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    if (WINDOW.document) {\n      addEventListener(type, registerInteractionTransaction, { once: false, capture: true });\n    }\n  });\n}\n\nfunction isPerformanceEventTiming(entry: PerformanceEntry): entry is PerformanceEventTiming {\n  return 'duration' in entry;\n}\n\n/** We store up to 10 interaction candidates max to cap memory usage. This is the same cap as getINP from web-vitals */\nconst MAX_INTERACTIONS = 10;\n\n/** Creates a listener on interaction entries, and maps interactionIds to the origin path of the interaction */\nfunction registerInpInteractionListener(\n  interactionIdToRouteNameMapping: InteractionRouteNameMapping,\n  latestRoute: {\n    name: string | undefined;\n    context: TransactionContext | undefined;\n  },\n): void {\n  const handleEntries = ({ entries }: { entries: PerformanceEntry[] }): void => {\n    const client = getClient();\n    // We need to get the replay, user, and activeTransaction from the current scope\n    // so that we can associate replay id, profile id, and a user display to the span\n    const replay =\n      client !== undefined && client.getIntegrationByName !== undefined\n        ? (client.getIntegrationByName('Replay') as Integration & { getReplayId: () => string })\n        : undefined;\n    const replayId = replay !== undefined ? replay.getReplayId() : undefined;\n    // eslint-disable-next-line deprecation/deprecation\n    const activeTransaction = getActiveTransaction();\n    const currentScope = getCurrentScope();\n    const user = currentScope !== undefined ? currentScope.getUser() : undefined;\n    entries.forEach(entry => {\n      if (isPerformanceEventTiming(entry)) {\n        const interactionId = entry.interactionId;\n        if (interactionId === undefined) {\n          return;\n        }\n        const existingInteraction = interactionIdToRouteNameMapping[interactionId];\n        const duration = entry.duration;\n        const startTime = entry.startTime;\n        const keys = Object.keys(interactionIdToRouteNameMapping);\n        const minInteractionId =\n          keys.length > 0\n            ? keys.reduce((a, b) => {\n                return interactionIdToRouteNameMapping[a].duration < interactionIdToRouteNameMapping[b].duration\n                  ? a\n                  : b;\n              })\n            : undefined;\n        // For a first input event to be considered, we must check that an interaction event does not already exist with the same duration and start time.\n        // This is also checked in the web-vitals library.\n        if (entry.entryType === 'first-input') {\n          const matchingEntry = keys\n            .map(key => interactionIdToRouteNameMapping[key])\n            .some(interaction => {\n              return interaction.duration === duration && interaction.startTime === startTime;\n            });\n          if (matchingEntry) {\n            return;\n          }\n        }\n        // Interactions with an id of 0 and are not first-input are not valid.\n        if (!interactionId) {\n          return;\n        }\n        // If the interaction already exists, we want to use the duration of the longest entry, since that is what the INP metric uses.\n        if (existingInteraction) {\n          existingInteraction.duration = Math.max(existingInteraction.duration, duration);\n        } else if (\n          keys.length < MAX_INTERACTIONS ||\n          minInteractionId === undefined ||\n          duration > interactionIdToRouteNameMapping[minInteractionId].duration\n        ) {\n          // If the interaction does not exist, we want to add it to the mapping if there is space, or if the duration is longer than the shortest entry.\n          const routeName = latestRoute.name;\n          const parentContext = latestRoute.context;\n          if (routeName && parentContext) {\n            if (minInteractionId && Object.keys(interactionIdToRouteNameMapping).length >= MAX_INTERACTIONS) {\n              // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n              delete interactionIdToRouteNameMapping[minInteractionId];\n            }\n            interactionIdToRouteNameMapping[interactionId] = {\n              routeName,\n              duration,\n              parentContext,\n              user,\n              activeTransaction,\n              replayId,\n              startTime,\n            };\n          }\n        }\n      }\n    });\n  };\n  addPerformanceInstrumentationHandler('event', handleEntries);\n  addPerformanceInstrumentationHandler('first-input', handleEntries);\n}\n\nfunction getSource(context: TransactionContext): TransactionSource | undefined {\n  const sourceFromAttributes = context.attributes && context.attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE];\n  // eslint-disable-next-line deprecation/deprecation\n  const sourceFromData = context.data && context.data[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE];\n  // eslint-disable-next-line deprecation/deprecation\n  const sourceFromMetadata = context.metadata && context.metadata.source;\n\n  return sourceFromAttributes || sourceFromData || sourceFromMetadata;\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 browserTracingIntegration = require('./browser/browserTracingIntegration.js');\nconst request = require('./browser/request.js');\nconst instrument = require('./browser/instrument.js');\nconst fetch = require('./common/fetch.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.browserTracingIntegration = browserTracingIntegration.browserTracingIntegration;\nexports.startBrowserTracingNavigationSpan = browserTracingIntegration.startBrowserTracingNavigationSpan;\nexports.startBrowserTracingPageLoadSpan = browserTracingIntegration.startBrowserTracingPageLoadSpan;\nexports.defaultRequestInstrumentationOptions = request.defaultRequestInstrumentationOptions;\nexports.instrumentOutgoingRequests = request.instrumentOutgoingRequests;\nexports.addClsInstrumentationHandler = instrument.addClsInstrumentationHandler;\nexports.addFidInstrumentationHandler = instrument.addFidInstrumentationHandler;\nexports.addLcpInstrumentationHandler = instrument.addLcpInstrumentationHandler;\nexports.addPerformanceInstrumentationHandler = instrument.addPerformanceInstrumentationHandler;\nexports.addTracingHeadersToFetchRequest = fetch.addTracingHeadersToFetchRequest;\nexports.instrumentFetchRequest = fetch.instrumentFetchRequest;\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 * as os from 'os';\nimport { TextEncoder } from 'util';\nimport type { ServerRuntimeClientOptions } from '@sentry/core';\nimport { ServerRuntimeClient, applySdkMetadata } from '@sentry/core';\n\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 ServerRuntimeClient<NodeClientOptions> {\n  /**\n   * Creates a new Node SDK instance.\n   * @param options Configuration options for this SDK.\n   */\n  public constructor(options: NodeClientOptions) {\n    applySdkMetadata(options, 'node');\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    const clientOptions: ServerRuntimeClientOptions = {\n      ...options,\n      platform: 'node',\n      runtime: { name: 'node', version: global.process.version },\n      serverName: options.serverName || global.process.env.SENTRY_NAME || os.hostname(),\n    };\n\n    super(clientOptions);\n  }\n}\n", "/**\n * This code was originally forked from https://github.com/TooTallNate/proxy-agents/tree/b133295fd16f6475578b6b15bd9b4e33ecb0d0b7\n * With the following licence:\n *\n * (The MIT License)\n *\n * Copyright (c) 2013 Nathan Rajlich <nathan@tootallnate.net>*\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a 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\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:*\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.*\n *\n * THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\n * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\n * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\n * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\n * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n\n/* eslint-disable @typescript-eslint/explicit-member-accessibility */\n/* eslint-disable @typescript-eslint/member-ordering */\n/* eslint-disable jsdoc/require-jsdoc */\nimport * as http from 'http';\nimport type * as net from 'net';\nimport type { Duplex } from 'stream';\nimport type * as tls from 'tls';\n\nexport * from './helpers';\n\ninterface HttpConnectOpts extends net.TcpNetConnectOpts {\n  secureEndpoint: false;\n  protocol?: string;\n}\n\ninterface HttpsConnectOpts extends tls.ConnectionOptions {\n  secureEndpoint: true;\n  protocol?: string;\n  port: number;\n}\n\nexport type AgentConnectOpts = HttpConnectOpts | HttpsConnectOpts;\n\nconst INTERNAL = Symbol('AgentBaseInternalState');\n\ninterface InternalState {\n  defaultPort?: number;\n  protocol?: string;\n  currentSocket?: Duplex;\n}\n\nexport abstract class Agent extends http.Agent {\n  private [INTERNAL]: InternalState;\n\n  // Set by `http.Agent` - missing from `@types/node`\n  options!: Partial<net.TcpNetConnectOpts & tls.ConnectionOptions>;\n  keepAlive!: boolean;\n\n  constructor(opts?: http.AgentOptions) {\n    super(opts);\n    this[INTERNAL] = {};\n  }\n\n  abstract connect(\n    req: http.ClientRequest,\n    options: AgentConnectOpts,\n  ): Promise<Duplex | http.Agent> | Duplex | http.Agent;\n\n  /**\n   * Determine whether this is an `http` or `https` request.\n   */\n  isSecureEndpoint(options?: AgentConnectOpts): boolean {\n    if (options) {\n      // First check the `secureEndpoint` property explicitly, since this\n      // means that a parent `Agent` is \"passing through\" to this instance.\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access\n      if (typeof (options as any).secureEndpoint === 'boolean') {\n        return options.secureEndpoint;\n      }\n\n      // If no explicit `secure` endpoint, check if `protocol` property is\n      // set. This will usually be the case since using a full string URL\n      // or `URL` instance should be the most common usage.\n      if (typeof options.protocol === 'string') {\n        return options.protocol === 'https:';\n      }\n    }\n\n    // Finally, if no `protocol` property was set, then fall back to\n    // checking the stack trace of the current call stack, and try to\n    // detect the \"https\" module.\n    const { stack } = new Error();\n    if (typeof stack !== 'string') return false;\n    return stack.split('\\n').some(l => l.indexOf('(https.js:') !== -1 || l.indexOf('node:https:') !== -1);\n  }\n\n  createSocket(req: http.ClientRequest, options: AgentConnectOpts, cb: (err: Error | null, s?: Duplex) => void): void {\n    const connectOpts = {\n      ...options,\n      secureEndpoint: this.isSecureEndpoint(options),\n    };\n    Promise.resolve()\n      .then(() => this.connect(req, connectOpts))\n      .then(socket => {\n        if (socket instanceof http.Agent) {\n          // @ts-expect-error `addRequest()` isn't defined in `@types/node`\n          return socket.addRequest(req, connectOpts);\n        }\n        this[INTERNAL].currentSocket = socket;\n        // @ts-expect-error `createSocket()` isn't defined in `@types/node`\n        super.createSocket(req, options, cb);\n      }, cb);\n  }\n\n  createConnection(): Duplex {\n    const socket = this[INTERNAL].currentSocket;\n    this[INTERNAL].currentSocket = undefined;\n    if (!socket) {\n      throw new Error('No socket was returned in the `connect()` function');\n    }\n    return socket;\n  }\n\n  get defaultPort(): number {\n    return this[INTERNAL].defaultPort ?? (this.protocol === 'https:' ? 443 : 80);\n  }\n\n  set defaultPort(v: number) {\n    if (this[INTERNAL]) {\n      this[INTERNAL].defaultPort = v;\n    }\n  }\n\n  get protocol(): string {\n    return this[INTERNAL].protocol ?? (this.isSecureEndpoint() ? 'https:' : 'http:');\n  }\n\n  set protocol(v: string) {\n    if (this[INTERNAL]) {\n      this[INTERNAL].protocol = v;\n    }\n  }\n}\n", "/**\n * This code was originally forked from https://github.com/TooTallNate/proxy-agents/tree/b133295fd16f6475578b6b15bd9b4e33ecb0d0b7\n * With the following licence:\n *\n * (The MIT License)\n *\n * Copyright (c) 2013 Nathan Rajlich <nathan@tootallnate.net>*\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a 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\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:*\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.*\n *\n * THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\n * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\n * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\n * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\n * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n\n/* eslint-disable @typescript-eslint/explicit-function-return-type */\n/* eslint-disable jsdoc/require-jsdoc */\nimport type { IncomingHttpHeaders } from 'http';\nimport type { Readable } from 'stream';\nimport { logger } from '@sentry/utils';\n\nfunction debug(...args: unknown[]): void {\n  logger.log('[https-proxy-agent:parse-proxy-response]', ...args);\n}\n\nexport interface ConnectResponse {\n  statusCode: number;\n  statusText: string;\n  headers: IncomingHttpHeaders;\n}\n\nexport function parseProxyResponse(socket: Readable): Promise<{ connect: ConnectResponse; buffered: Buffer }> {\n  return new Promise((resolve, reject) => {\n    // we need to buffer any HTTP traffic that happens with the proxy before we get\n    // the CONNECT response, so that if the response is anything other than an \"200\"\n    // response code, then we can re-play the \"data\" events on the socket once the\n    // HTTP parser is hooked up...\n    let buffersLength = 0;\n    const buffers: Buffer[] = [];\n\n    function read() {\n      const b = socket.read();\n      if (b) ondata(b);\n      else socket.once('readable', read);\n    }\n\n    function cleanup() {\n      socket.removeListener('end', onend);\n      socket.removeListener('error', onerror);\n      socket.removeListener('readable', read);\n    }\n\n    function onend() {\n      cleanup();\n      debug('onend');\n      reject(new Error('Proxy connection ended before receiving CONNECT response'));\n    }\n\n    function onerror(err: Error) {\n      cleanup();\n      debug('onerror %o', err);\n      reject(err);\n    }\n\n    function ondata(b: Buffer) {\n      buffers.push(b);\n      buffersLength += b.length;\n\n      const buffered = Buffer.concat(buffers, buffersLength);\n      const endOfHeaders = buffered.indexOf('\\r\\n\\r\\n');\n\n      if (endOfHeaders === -1) {\n        // keep buffering\n        debug('have not received end of HTTP headers yet...');\n        read();\n        return;\n      }\n\n      const headerParts = buffered.slice(0, endOfHeaders).toString('ascii').split('\\r\\n');\n      const firstLine = headerParts.shift();\n      if (!firstLine) {\n        socket.destroy();\n        return reject(new Error('No header received from proxy CONNECT response'));\n      }\n      const firstLineParts = firstLine.split(' ');\n      const statusCode = +firstLineParts[1];\n      const statusText = firstLineParts.slice(2).join(' ');\n      const headers: IncomingHttpHeaders = {};\n      for (const header of headerParts) {\n        if (!header) continue;\n        const firstColon = header.indexOf(':');\n        if (firstColon === -1) {\n          socket.destroy();\n          return reject(new Error(`Invalid header from proxy CONNECT response: \"${header}\"`));\n        }\n        const key = header.slice(0, firstColon).toLowerCase();\n        const value = header.slice(firstColon + 1).trimStart();\n        const current = headers[key];\n        if (typeof current === 'string') {\n          headers[key] = [current, value];\n        } else if (Array.isArray(current)) {\n          current.push(value);\n        } else {\n          headers[key] = value;\n        }\n      }\n      debug('got proxy server response: %o %o', firstLine, headers);\n      cleanup();\n      resolve({\n        connect: {\n          statusCode,\n          statusText,\n          headers,\n        },\n        buffered,\n      });\n    }\n\n    socket.on('error', onerror);\n    socket.on('end', onend);\n\n    read();\n  });\n}\n", "/**\n * This code was originally forked from https://github.com/TooTallNate/proxy-agents/tree/b133295fd16f6475578b6b15bd9b4e33ecb0d0b7\n * With the following licence:\n *\n * (The MIT License)\n *\n * Copyright (c) 2013 Nathan Rajlich <nathan@tootallnate.net>*\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a 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\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:*\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.*\n *\n * THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\n * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\n * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\n * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\n * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n\n/* eslint-disable @typescript-eslint/explicit-member-accessibility */\n/* eslint-disable @typescript-eslint/no-unused-vars */\nimport type * as http from 'http';\nimport type { OutgoingHttpHeaders } from 'http';\nimport * as net from 'net';\nimport * as tls from 'tls';\n// TODO (v8): Remove this when Node < 12 is no longer supported\nimport { URL } from 'url';\nimport { logger } from '@sentry/utils';\nimport { Agent } from './base';\nimport type { AgentConnectOpts } from './base';\nimport { parseProxyResponse } from './parse-proxy-response';\n\nfunction debug(...args: unknown[]): void {\n  logger.log('[https-proxy-agent]', ...args);\n}\n\ntype Protocol<T> = T extends `${infer Protocol}:${infer _}` ? Protocol : never;\n\ntype ConnectOptsMap = {\n  http: Omit<net.TcpNetConnectOpts, 'host' | 'port'>;\n  https: Omit<tls.ConnectionOptions, 'host' | 'port'>;\n};\n\ntype ConnectOpts<T> = {\n  [P in keyof ConnectOptsMap]: Protocol<T> extends P ? ConnectOptsMap[P] : never;\n}[keyof ConnectOptsMap];\n\nexport type HttpsProxyAgentOptions<T> = ConnectOpts<T> &\n  http.AgentOptions & {\n    headers?: OutgoingHttpHeaders | (() => OutgoingHttpHeaders);\n  };\n\n/**\n * The `HttpsProxyAgent` implements an HTTP Agent subclass that connects to\n * the specified \"HTTP(s) proxy server\" in order to proxy HTTPS requests.\n *\n * Outgoing HTTP requests are first tunneled through the proxy server using the\n * `CONNECT` HTTP request method to establish a connection to the proxy server,\n * and then the proxy server connects to the destination target and issues the\n * HTTP request from the proxy server.\n *\n * `https:` requests have their socket connection upgraded to TLS once\n * the connection to the proxy server has been established.\n */\nexport class HttpsProxyAgent<Uri extends string> extends Agent {\n  static protocols = ['http', 'https'] as const;\n\n  readonly proxy: URL;\n  proxyHeaders: OutgoingHttpHeaders | (() => OutgoingHttpHeaders);\n  connectOpts: net.TcpNetConnectOpts & tls.ConnectionOptions;\n\n  constructor(proxy: Uri | URL, opts?: HttpsProxyAgentOptions<Uri>) {\n    super(opts);\n    this.options = {};\n    this.proxy = typeof proxy === 'string' ? new URL(proxy) : proxy;\n    this.proxyHeaders = opts?.headers ?? {};\n    debug('Creating new HttpsProxyAgent instance: %o', this.proxy.href);\n\n    // Trim off the brackets from IPv6 addresses\n    const host = (this.proxy.hostname || this.proxy.host).replace(/^\\[|\\]$/g, '');\n    const port = this.proxy.port ? parseInt(this.proxy.port, 10) : this.proxy.protocol === 'https:' ? 443 : 80;\n    this.connectOpts = {\n      // Attempt to negotiate http/1.1 for proxy servers that support http/2\n      ALPNProtocols: ['http/1.1'],\n      ...(opts ? omit(opts, 'headers') : null),\n      host,\n      port,\n    };\n  }\n\n  /**\n   * Called when the node-core HTTP client library is creating a\n   * new HTTP request.\n   */\n  async connect(req: http.ClientRequest, opts: AgentConnectOpts): Promise<net.Socket> {\n    const { proxy } = this;\n\n    if (!opts.host) {\n      throw new TypeError('No \"host\" provided');\n    }\n\n    // Create a socket connection to the proxy server.\n    let socket: net.Socket;\n    if (proxy.protocol === 'https:') {\n      debug('Creating `tls.Socket`: %o', this.connectOpts);\n      const servername = this.connectOpts.servername || this.connectOpts.host;\n      socket = tls.connect({\n        ...this.connectOpts,\n        servername: servername && net.isIP(servername) ? undefined : servername,\n      });\n    } else {\n      debug('Creating `net.Socket`: %o', this.connectOpts);\n      socket = net.connect(this.connectOpts);\n    }\n\n    const headers: OutgoingHttpHeaders =\n      typeof this.proxyHeaders === 'function' ? this.proxyHeaders() : { ...this.proxyHeaders };\n    const host = net.isIPv6(opts.host) ? `[${opts.host}]` : opts.host;\n    let payload = `CONNECT ${host}:${opts.port} HTTP/1.1\\r\\n`;\n\n    // Inject the `Proxy-Authorization` header if necessary.\n    if (proxy.username || proxy.password) {\n      const auth = `${decodeURIComponent(proxy.username)}:${decodeURIComponent(proxy.password)}`;\n      headers['Proxy-Authorization'] = `Basic ${Buffer.from(auth).toString('base64')}`;\n    }\n\n    headers.Host = `${host}:${opts.port}`;\n\n    if (!headers['Proxy-Connection']) {\n      headers['Proxy-Connection'] = this.keepAlive ? 'Keep-Alive' : 'close';\n    }\n    for (const name of Object.keys(headers)) {\n      payload += `${name}: ${headers[name]}\\r\\n`;\n    }\n\n    const proxyResponsePromise = parseProxyResponse(socket);\n\n    socket.write(`${payload}\\r\\n`);\n\n    const { connect, buffered } = await proxyResponsePromise;\n    req.emit('proxyConnect', connect);\n    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n    // @ts-ignore Not EventEmitter in Node types\n    this.emit('proxyConnect', connect, req);\n\n    if (connect.statusCode === 200) {\n      req.once('socket', resume);\n\n      if (opts.secureEndpoint) {\n        // The proxy is connecting to a TLS server, so upgrade\n        // this socket connection to a TLS connection.\n        debug('Upgrading socket connection to TLS');\n        const servername = opts.servername || opts.host;\n        return tls.connect({\n          ...omit(opts, 'host', 'path', 'port'),\n          socket,\n          servername: net.isIP(servername) ? undefined : servername,\n        });\n      }\n\n      return socket;\n    }\n\n    // Some other status code that's not 200... need to re-play the HTTP\n    // header \"data\" events onto the socket once the HTTP machinery is\n    // attached so that the node core `http` can parse and handle the\n    // error status code.\n\n    // Close the original socket, and a new \"fake\" socket is returned\n    // instead, so that the proxy doesn't get the HTTP request\n    // written to it (which may contain `Authorization` headers or other\n    // sensitive data).\n    //\n    // See: https://hackerone.com/reports/541502\n    socket.destroy();\n\n    const fakeSocket = new net.Socket({ writable: false });\n    fakeSocket.readable = true;\n\n    // Need to wait for the \"socket\" event to re-play the \"data\" events.\n    req.once('socket', (s: net.Socket) => {\n      debug('Replaying proxy buffer for failed request');\n      // Replay the \"buffered\" Buffer onto the fake `socket`, since at\n      // this point the HTTP module machinery has been hooked up for\n      // the user.\n      s.push(buffered);\n      s.push(null);\n    });\n\n    return fakeSocket;\n  }\n}\n\nfunction resume(socket: net.Socket | tls.TLSSocket): void {\n  socket.resume();\n}\n\nfunction omit<T extends object, K extends [...(keyof T)[]]>(\n  obj: T,\n  ...keys: K\n): {\n  [K2 in Exclude<keyof T, K[number]>]: T[K2];\n} {\n  const ret = {} as {\n    [K in keyof typeof obj]: (typeof obj)[K];\n  };\n  let key: keyof typeof obj;\n  for (key in obj) {\n    if (!keys.includes(key)) {\n      ret[key] = obj[key];\n    }\n  }\n  return ret;\n}\n", "import * as http from 'http';\nimport * as https from 'https';\nimport { Readable } from 'stream';\nimport { URL } from 'url';\nimport { createGzip } from 'zlib';\nimport { createTransport } from '@sentry/core';\nimport type {\n  BaseTransportOptions,\n  Transport,\n  TransportMakeRequestResponse,\n  TransportRequest,\n  TransportRequestExecutor,\n} from '@sentry/types';\nimport { consoleSandbox } from '@sentry/utils';\nimport { HttpsProxyAgent } from '../proxy';\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    consoleSandbox(() => {\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    });\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 = parseSemver(process.versions.node) as { major: number; minor: number; patch: number };\n", "import * as domain from 'domain';\nimport type { Carrier, Hub, RunWithAsyncContextOptions } from '@sentry/core';\nimport { ensureHubOnCarrier, getHubFromCarrier, setAsyncContextStrategy, setHubOnCarrier } from '@sentry/core';\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\n// eslint-disable-next-line deprecation/deprecation\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\n// eslint-disable-next-line deprecation/deprecation\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\n// eslint-disable-next-line deprecation/deprecation\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    // eslint-disable-next-line deprecation/deprecation\n    asyncStorage = new (async_hooks as NewerAsyncHooks).AsyncLocalStorage<Hub>();\n  }\n\n  // eslint-disable-next-line deprecation/deprecation\n  function getCurrentHub(): Hub | undefined {\n    return asyncStorage.getStore();\n  }\n\n  // eslint-disable-next-line deprecation/deprecation\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 >= 14) {\n    setHooksAsyncContextStrategy();\n  } else {\n    setDomainAsyncContextStrategy();\n  }\n}\n", "import * as util from 'util';\nimport { addBreadcrumb, convertIntegrationFnToClass, defineIntegration, getClient } from '@sentry/core';\nimport type { Client, Integration, IntegrationClass, IntegrationFn } from '@sentry/types';\nimport { addConsoleInstrumentationHandler, severityLevelFromString } from '@sentry/utils';\n\nconst INTEGRATION_NAME = 'Console';\n\nconst _consoleIntegration = (() => {\n  return {\n    name: INTEGRATION_NAME,\n    // TODO v8: Remove this\n    setupOnce() {}, // eslint-disable-line @typescript-eslint/no-empty-function\n    setup(client) {\n      addConsoleInstrumentationHandler(({ args, level }) => {\n        if (getClient() !== client) {\n          return;\n        }\n\n        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}) satisfies IntegrationFn;\n\nexport const consoleIntegration = defineIntegration(_consoleIntegration);\n\n/**\n * Console module integration.\n * @deprecated Use `consoleIntegration()` instead.\n */\n// eslint-disable-next-line deprecation/deprecation\nexport const Console = convertIntegrationFnToClass(INTEGRATION_NAME, consoleIntegration) as IntegrationClass<\n  Integration & { setup: (client: Client) => void }\n>;\n\n// eslint-disable-next-line deprecation/deprecation\nexport type Console = typeof Console;\n", "/* eslint-disable max-lines */\nimport { execFile } from 'child_process';\nimport { readFile, readdir } from 'fs';\nimport * as os from 'os';\nimport { join } from 'path';\nimport { promisify } from 'util';\nimport { convertIntegrationFnToClass, defineIntegration } from '@sentry/core';\nimport type {\n  AppContext,\n  CloudResourceContext,\n  Contexts,\n  CultureContext,\n  DeviceContext,\n  Event,\n  Integration,\n  IntegrationClass,\n  IntegrationFn,\n  OsContext,\n} from '@sentry/types';\n\n// TODO: Required until we drop support for Node v8\nexport const readFileAsync = promisify(readFile);\nexport const readDirAsync = promisify(readdir);\n\nconst INTEGRATION_NAME = 'Context';\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\nconst _nodeContextIntegration = ((options: ContextOptions = {}) => {\n  let cachedContext: Promise<Contexts> | undefined;\n\n  const _options = {\n    app: true,\n    os: true,\n    device: true,\n    culture: true,\n    cloudResource: true,\n    ...options,\n  };\n\n  /** Add contexts to the event. Caches the context so we only look it up once. */\n  async function addContext(event: Event): Promise<Event> {\n    if (cachedContext === undefined) {\n      cachedContext = _getContexts();\n    }\n\n    const updatedContext = _updateContext(await 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  /** Get the contexts from node. */\n  async function _getContexts(): Promise<Contexts> {\n    const contexts: Contexts = {};\n\n    if (_options.os) {\n      contexts.os = await getOsContext();\n    }\n\n    if (_options.app) {\n      contexts.app = getAppContext();\n    }\n\n    if (_options.device) {\n      contexts.device = getDeviceContext(_options.device);\n    }\n\n    if (_options.culture) {\n      const culture = getCultureContext();\n\n      if (culture) {\n        contexts.culture = culture;\n      }\n    }\n\n    if (_options.cloudResource) {\n      contexts.cloud_resource = getCloudResourceContext();\n    }\n\n    return contexts;\n  }\n\n  return {\n    name: INTEGRATION_NAME,\n    // TODO v8: Remove this\n    setupOnce() {}, // eslint-disable-line @typescript-eslint/no-empty-function\n    processEvent(event) {\n      return addContext(event);\n    },\n  };\n}) satisfies IntegrationFn;\n\nexport const nodeContextIntegration = defineIntegration(_nodeContextIntegration);\n\n/**\n * Add node modules / packages to the event.\n * @deprecated Use `nodeContextIntegration()` instead.\n */\n// eslint-disable-next-line deprecation/deprecation\nexport const Context = convertIntegrationFnToClass(INTEGRATION_NAME, nodeContextIntegration) as IntegrationClass<\n  Integration & { processEvent: (event: Event) => Promise<Event> }\n> & {\n  new (options?: {\n    app?: boolean;\n    os?: boolean;\n    device?: { cpu?: boolean; memory?: boolean } | boolean;\n    culture?: boolean;\n    cloudResource?: boolean;\n  }): Integration;\n};\n\n// eslint-disable-next-line deprecation/deprecation\nexport type Context = typeof Context;\n\n/**\n * Updates the context with dynamic values that can change\n */\nfunction _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 * 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", "import { readFile } from 'fs';\nimport { convertIntegrationFnToClass, defineIntegration } from '@sentry/core';\nimport type { Event, Integration, IntegrationClass, IntegrationFn, StackFrame } from '@sentry/types';\nimport { LRUMap, addContextToFrame } from '@sentry/utils';\n\nconst FILE_CONTENT_CACHE = new LRUMap<string, string[] | null>(100);\nconst DEFAULT_LINES_OF_CONTEXT = 7;\nconst INTEGRATION_NAME = 'ContextLines';\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\nconst _contextLinesIntegration = ((options: ContextLinesOptions = {}) => {\n  const contextLines = options.frameContextLines !== undefined ? options.frameContextLines : DEFAULT_LINES_OF_CONTEXT;\n\n  return {\n    name: INTEGRATION_NAME,\n    // TODO v8: Remove this\n    setupOnce() {}, // eslint-disable-line @typescript-eslint/no-empty-function\n    processEvent(event) {\n      return addSourceContext(event, contextLines);\n    },\n  };\n}) satisfies IntegrationFn;\n\nexport const contextLinesIntegration = defineIntegration(_contextLinesIntegration);\n\n/**\n * Add node modules / packages to the event.\n * @deprecated Use `contextLinesIntegration()` instead.\n */\n// eslint-disable-next-line deprecation/deprecation\nexport const ContextLines = convertIntegrationFnToClass(INTEGRATION_NAME, contextLinesIntegration) as IntegrationClass<\n  Integration & { processEvent: (event: Event) => Promise<Event> }\n> & { new (options?: { frameContextLines?: number }): Integration };\n\nasync function addSourceContext(event: Event, contextLines: number): 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 (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 (frame.filename && !enqueuedReadSourceFileTasks[frame.filename] && !FILE_CONTENT_CACHE.get(frame.filename)) {\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 (contextLines > 0 && event.exception?.values) {\n    for (const exception of event.exception.values) {\n      if (exception.stacktrace && exception.stacktrace.frames) {\n        await addSourceContextToFrames(exception.stacktrace.frames, contextLines);\n      }\n    }\n  }\n\n  return event;\n}\n\n/** Adds context lines to frames */\nfunction addSourceContextToFrames(frames: StackFrame[], contextLines: number): 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, 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// eslint-disable-next-line deprecation/deprecation\nexport type ContextLines = typeof ContextLines;\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", "declare const __DEBUG_BUILD__: boolean;\n\n/**\n * This serves as a build time flag that will be true by default, but false in non-debug builds or if users replace `__SENTRY_DEBUG__` in their generated code.\n *\n * ATTENTION: This constant must never cross package boundaries (i.e. be exported) to guarantee that it can be used for tree shaking.\n */\nexport const DEBUG_BUILD = __DEBUG_BUILD__;\n", "import type * as http from 'http';\nimport type * as https from 'https';\nimport { URL } from 'url';\n\nimport { NODE_VERSION } from '../../nodeVersion';\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, hostname, port } = parseRequestOptions(requestOptions);\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, hostname, port } = parseRequestOptions(requestOptions);\n\n  const path = requestOptions.pathname || '/';\n\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    try {\n      const parsed = new URL(\n        requestOptions.path || '',\n        `${requestOptions.protocol || 'http:'}//${requestOptions.hostname}`,\n      );\n      requestOptions = {\n        pathname: parsed.pathname,\n        search: parsed.search,\n        hash: parsed.hash,\n        ...requestOptions,\n      };\n    } catch (e) {\n      // ignore\n    }\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 > 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\nfunction parseRequestOptions(requestOptions: RequestOptions): {\n  protocol: string;\n  hostname: string;\n  port: string;\n} {\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  // Also don't add port if the hostname already includes a port\n  const port =\n    !requestOptions.port || requestOptions.port === 80 || requestOptions.port === 443 || /^(.*):(\\d+)$/.test(hostname)\n      ? ''\n      : `:${requestOptions.port}`;\n\n  return { protocol, hostname, port };\n}\n", "/* eslint-disable max-lines */\nimport type * as http from 'http';\nimport type * as https from 'https';\nimport type { Hub } from '@sentry/core';\nimport { defineIntegration, getIsolationScope, hasTracingEnabled } from '@sentry/core';\nimport {\n  addBreadcrumb,\n  getActiveSpan,\n  getClient,\n  getCurrentHub,\n  getCurrentScope,\n  getDynamicSamplingContextFromClient,\n  getDynamicSamplingContextFromSpan,\n  isSentryRequestUrl,\n  setHttpStatus,\n  spanToJSON,\n  spanToTraceHeader,\n} from '@sentry/core';\nimport type {\n  ClientOptions,\n  EventProcessor,\n  Integration,\n  IntegrationFn,\n  IntegrationFnResult,\n  SanitizedRequestData,\n  TracePropagationTargets,\n} from '@sentry/types';\nimport {\n  LRUMap,\n  dropUndefinedKeys,\n  dynamicSamplingContextToSentryBaggageHeader,\n  fill,\n  generateSentryTraceHeader,\n  logger,\n  stringMatchesSomePattern,\n} from '@sentry/utils';\n\nimport type { NodeClient } from '../client';\nimport { DEBUG_BUILD } from '../debug-build';\nimport { NODE_VERSION } from '../nodeVersion';\nimport type { NodeClientOptions } from '../types';\nimport type { RequestMethod, RequestMethodArgs, RequestOptions } from './utils/http';\nimport { cleanSpanDescription, extractRawUrl, extractUrl, 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  /**\n   * This option is just for compatibility with v7.\n   * In v8, this will be the default behavior.\n   */\n  enableIfHasTracingEnabled?: 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/* These are the newer options for `httpIntegration`. */\ninterface HttpIntegrationOptions {\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   * If not set, this will be enabled/disabled based on if tracing is enabled.\n   */\n  tracing?: boolean;\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\nconst _httpIntegration = ((options: HttpIntegrationOptions = {}) => {\n  const { breadcrumbs, tracing, shouldCreateSpanForRequest } = options;\n\n  const convertedOptions: HttpOptions = {\n    breadcrumbs,\n    tracing:\n      tracing === false\n        ? false\n        : dropUndefinedKeys({\n            // If tracing is forced to `true`, we don't want to set `enableIfHasTracingEnabled`\n            enableIfHasTracingEnabled: tracing === true ? undefined : true,\n            shouldCreateSpanForRequest,\n          }),\n  };\n\n  // eslint-disable-next-line deprecation/deprecation\n  return new Http(convertedOptions) as unknown as IntegrationFnResult;\n}) satisfies IntegrationFn;\n\n/**\n * The http module integration instruments Node's internal http module. It creates breadcrumbs, spans for outgoing\n * http requests, and attaches trace data when tracing is enabled via its `tracing` option.\n *\n * By default, this will always create breadcrumbs, and will create spans if tracing is enabled.\n */\nexport const httpIntegration = defineIntegration(_httpIntegration);\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 *\n * @deprecated Use `httpIntegration()` instead.\n */\nexport class Http implements Integration {\n  /**\n   * @inheritDoc\n   */\n  public static id: string = 'Http';\n\n  /**\n   * @inheritDoc\n   */\n  // eslint-disable-next-line deprecation/deprecation\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    // eslint-disable-next-line deprecation/deprecation\n    setupOnceGetCurrentHub: () => Hub,\n  ): void {\n    // eslint-disable-next-line deprecation/deprecation\n    const clientOptions = setupOnceGetCurrentHub().getClient<NodeClient>()?.getOptions();\n\n    // If `tracing` is not explicitly set, we default this based on whether or not tracing is enabled.\n    // But for compatibility, we only do that if `enableIfHasTracingEnabled` is set.\n    const shouldCreateSpans = _shouldCreateSpans(this._tracing, clientOptions);\n\n    // No need to instrument if we don't want to track anything\n    if (!this._breadcrumbs && !shouldCreateSpans) {\n      return;\n    }\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 = _getShouldCreateSpanForRequest(shouldCreateSpans, this._tracing, clientOptions);\n\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 > 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    // eslint-disable-next-line deprecation/deprecation\n    if (!getCurrentHub().getIntegration(Http)) {\n      return;\n    }\n\n    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      const client = getClient();\n\n      // we don't want to record requests to Sentry as either breadcrumbs or spans, so just use the original method\n      if (isSentryRequestUrl(requestUrl, client)) {\n        return originalRequestMethod.apply(httpModule, requestArgs);\n      }\n\n      const scope = getCurrentScope();\n      const isolationScope = getIsolationScope();\n      const parentSpan = getActiveSpan();\n\n      const data = getRequestSpanData(requestUrl, requestOptions);\n\n      const requestSpan = shouldCreateSpan(rawRequestUrl)\n        ? // eslint-disable-next-line deprecation/deprecation\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 (client && shouldAttachTraceData(rawRequestUrl)) {\n        const { traceId, spanId, sampled, dsc } = {\n          ...isolationScope.getPropagationContext(),\n          ...scope.getPropagationContext(),\n        };\n\n        const sentryTraceHeader = requestSpan\n          ? spanToTraceHeader(requestSpan)\n          : generateSentryTraceHeader(traceId, spanId, sampled);\n\n        const sentryBaggageHeader = dynamicSamplingContextToSentryBaggageHeader(\n          dsc ||\n            (requestSpan\n              ? getDynamicSamplingContextFromSpan(requestSpan)\n              : getDynamicSamplingContextFromClient(traceId, client, scope)),\n        );\n\n        addHeadersToRequestOptions(requestOptions, requestUrl, sentryTraceHeader, sentryBaggageHeader);\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              setHttpStatus(requestSpan, res.statusCode);\n            }\n            requestSpan.updateName(\n              cleanSpanDescription(spanToJSON(requestSpan).description || '', requestOptions, req) || '',\n            );\n            requestSpan.end();\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            setHttpStatus(requestSpan, 500);\n            requestSpan.updateName(\n              cleanSpanDescription(spanToJSON(requestSpan).description || '', requestOptions, req) || '',\n            );\n            requestSpan.end();\n          }\n        });\n    };\n  };\n}\n\nfunction addHeadersToRequestOptions(\n  requestOptions: RequestOptions,\n  requestUrl: string,\n  sentryTraceHeader: string,\n  sentryBaggageHeader: string | 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\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 &&\n      sentryBaggageHeader.length > 0 && { baggage: normalizeBaggageHeader(requestOptions, 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\n/** Exported for tests only. */\nexport function _shouldCreateSpans(\n  tracingOptions: TracingOptions | undefined,\n  clientOptions: Partial<ClientOptions> | undefined,\n): boolean {\n  return tracingOptions === undefined\n    ? false\n    : tracingOptions.enableIfHasTracingEnabled\n      ? hasTracingEnabled(clientOptions)\n      : true;\n}\n\n/** Exported for tests only. */\nexport function _getShouldCreateSpanForRequest(\n  shouldCreateSpans: boolean,\n  tracingOptions: TracingOptions | undefined,\n  clientOptions: Partial<NodeClientOptions> | undefined,\n): undefined | ((url: string) => boolean) {\n  const handler = shouldCreateSpans\n    ? // eslint-disable-next-line deprecation/deprecation\n      tracingOptions?.shouldCreateSpanForRequest || clientOptions?.shouldCreateSpanForRequest\n    : () => false;\n\n  return handler;\n}\n", "import type { StackFrame, StackParser } from '@sentry/types';\nimport type { Debugger } from 'inspector';\n\nexport type Variables = Record<string, unknown>;\n\nexport type RateLimitIncrement = () => void;\n\n/**\n * Creates a rate limiter that will call the disable callback when the rate limit is reached and the enable callback\n * when a timeout has occurred.\n * @param maxPerSecond Maximum number of calls per second\n * @param enable Callback to enable capture\n * @param disable Callback to disable capture\n * @returns A function to call to increment the rate limiter count\n */\nexport function createRateLimiter(\n  maxPerSecond: number,\n  enable: () => void,\n  disable: (seconds: number) => void,\n): RateLimitIncrement {\n  let count = 0;\n  let retrySeconds = 5;\n  let disabledTimeout = 0;\n\n  setInterval(() => {\n    if (disabledTimeout === 0) {\n      if (count > maxPerSecond) {\n        retrySeconds *= 2;\n        disable(retrySeconds);\n\n        // Cap at one day\n        if (retrySeconds > 86400) {\n          retrySeconds = 86400;\n        }\n        disabledTimeout = retrySeconds;\n      }\n    } else {\n      disabledTimeout -= 1;\n\n      if (disabledTimeout === 0) {\n        enable();\n      }\n    }\n\n    count = 0;\n  }, 1_000).unref();\n\n  return () => {\n    count += 1;\n  };\n}\n\n// Add types for the exception event data\nexport type PausedExceptionEvent = Debugger.PausedEventDataType & {\n  data: {\n    // This contains error.stack\n    description: string;\n  };\n};\n\n/** Could this be an anonymous function? */\nexport function isAnonymous(name: string | undefined): boolean {\n  return name !== undefined && (name.length === 0 || name === '?' || name === '<anonymous>');\n}\n\n/** Do the function names appear to match? */\nexport function 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 */\nexport function 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 */\nexport function 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\nexport interface LocalVariablesIntegrationOptions {\n  /**\n   * Capture local variables for both caught and uncaught exceptions\n   *\n   * - When false, only uncaught exceptions will have local variables\n   * - When true, both caught and uncaught exceptions will have local variables.\n   *\n   * Defaults to `true`.\n   *\n   * Capturing local variables for all exceptions can be expensive since the debugger pauses for every throw to collect\n   * local variables.\n   *\n   * To reduce the likelihood of this feature impacting app performance or throughput, this feature is rate-limited.\n   * Once the rate limit is reached, local variables will only be captured for uncaught exceptions until a timeout has\n   * been reached.\n   */\n  captureAllExceptions?: boolean;\n  /**\n   * Maximum number of exceptions to capture local variables for per second before rate limiting is triggered.\n   */\n  maxExceptionsPerSecond?: number;\n}\n", "/* eslint-disable max-lines */\nimport { convertIntegrationFnToClass, defineIntegration, getClient } from '@sentry/core';\nimport type { Event, Exception, Integration, IntegrationClass, IntegrationFn, StackParser } from '@sentry/types';\nimport { LRUMap, logger } from '@sentry/utils';\nimport type { Debugger, InspectorNotification, Runtime, Session } from 'inspector';\nimport type { NodeClient } from '../../client';\n\nimport { NODE_VERSION } from '../../nodeVersion';\nimport type {\n  FrameVariables,\n  LocalVariablesIntegrationOptions,\n  PausedExceptionEvent,\n  RateLimitIncrement,\n  Variables,\n} from './common';\nimport { createRateLimiter, functionNamesMatch, hashFrames, hashFromStack } from './common';\n\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  /** Updates which kind of exceptions to capture */\n  setPauseOnExceptions(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  public setPauseOnExceptions(captureAll: boolean): void {\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 != null || prop?.value?.description != null) {\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 != null) {\n      vars[prop.name] = prop.value.value;\n    } else if (prop?.value?.description != null && 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\nconst INTEGRATION_NAME = 'LocalVariables';\n\n/**\n * Adds local variables to exception frames\n */\nconst _localVariablesSyncIntegration = ((\n  options: LocalVariablesIntegrationOptions = {},\n  session: DebugSession | undefined = tryNewAsyncSession(),\n) => {\n  const cachedFrames: LRUMap<string, FrameVariables[]> = new LRUMap(20);\n  let rateLimiter: RateLimitIncrement | undefined;\n  let shouldProcessEvent = false;\n\n  function 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    rateLimiter?.();\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      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          session?.getLocalVariables(id, vars => {\n            frames[i] = { function: fn, vars };\n            next(frames);\n          }),\n        );\n      }\n    }\n\n    next([]);\n  }\n\n  function 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    // remove is identical to get but also removes the entry from the cache\n    const cachedFrame = cachedFrames.remove(hash);\n\n    if (cachedFrame === undefined) {\n      return;\n    }\n\n    // Filter out frames where the function name is `new Promise` since these are in the error.stack frames\n    // but do not appear in the debugger call frames\n    const frames = (exception.stacktrace?.frames || []).filter(frame => frame.function !== 'new Promise');\n\n    for (let i = 0; i < frames.length; i++) {\n      // Sentry frames are in reverse order\n      const frameIndex = frames.length - i - 1;\n\n      // Drop out if we run out of frames to match up\n      if (!frames[frameIndex] || !cachedFrame[i]) {\n        break;\n      }\n\n      if (\n        // We need to have vars to add\n        cachedFrame[i].vars === undefined ||\n        // We're not interested in frames that are not in_app because the vars are not relevant\n        frames[frameIndex].in_app === false ||\n        // The function names need to match\n        !functionNamesMatch(frames[frameIndex].function, cachedFrame[i].function)\n      ) {\n        continue;\n      }\n\n      frames[frameIndex].vars = cachedFrame[i].vars;\n    }\n  }\n\n  function addLocalVariablesToEvent(event: Event): Event {\n    for (const exception of event?.exception?.values || []) {\n      addLocalVariablesToException(exception);\n    }\n\n    return event;\n  }\n\n  return {\n    name: INTEGRATION_NAME,\n    setupOnce() {\n      const client = getClient<NodeClient>();\n      const clientOptions = client?.getOptions();\n\n      if (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 < 18;\n\n        if (unsupportedNodeVersion) {\n          logger.log('The `LocalVariables` integration is only supported on Node >= v18.');\n          return;\n        }\n\n        const captureAll = options.captureAllExceptions !== false;\n\n        session.configureAndConnect(\n          (ev, complete) =>\n            handlePaused(clientOptions.stackParser, ev as InspectorNotification<PausedExceptionEvent>, complete),\n          captureAll,\n        );\n\n        if (captureAll) {\n          const max = options.maxExceptionsPerSecond || 50;\n\n          rateLimiter = createRateLimiter(\n            max,\n            () => {\n              logger.log('Local variables rate-limit lifted.');\n              session?.setPauseOnExceptions(true);\n            },\n            seconds => {\n              logger.log(\n                `Local variables rate-limit exceeded. Disabling capturing of caught exceptions for ${seconds} seconds.`,\n              );\n              session?.setPauseOnExceptions(false);\n            },\n          );\n        }\n\n        shouldProcessEvent = true;\n      }\n    },\n    processEvent(event: Event): Event {\n      if (shouldProcessEvent) {\n        return addLocalVariablesToEvent(event);\n      }\n\n      return event;\n    },\n    // These are entirely for testing\n    _getCachedFramesCount(): number {\n      return cachedFrames.size;\n    },\n    _getFirstCachedFrame(): FrameVariables[] | undefined {\n      return cachedFrames.values()[0];\n    },\n  };\n}) satisfies IntegrationFn;\n\nexport const localVariablesSyncIntegration = defineIntegration(_localVariablesSyncIntegration);\n\n/**\n * Adds local variables to exception frames.\n * @deprecated Use `localVariablesSyncIntegration()` instead.\n */\n// eslint-disable-next-line deprecation/deprecation\nexport const LocalVariablesSync = convertIntegrationFnToClass(\n  INTEGRATION_NAME,\n  localVariablesSyncIntegration,\n) as IntegrationClass<Integration & { processEvent: (event: Event) => Event; setup: (client: NodeClient) => void }> & {\n  new (options?: LocalVariablesIntegrationOptions, session?: DebugSession): Integration;\n};\n\n// eslint-disable-next-line deprecation/deprecation\nexport type LocalVariablesSync = typeof LocalVariablesSync;\n", "import { LocalVariablesSync, localVariablesSyncIntegration } from './local-variables-sync';\n\n/**\n * Adds local variables to exception frames.\n *\n * @deprecated Use `localVariablesIntegration()` instead.\n */\n// eslint-disable-next-line deprecation/deprecation\nexport const LocalVariables = LocalVariablesSync;\n// eslint-disable-next-line deprecation/deprecation\nexport type LocalVariables = LocalVariablesSync;\n\nexport const localVariablesIntegration = localVariablesSyncIntegration;\n", "import { existsSync, readFileSync } from 'fs';\nimport { dirname, join } from 'path';\nimport { convertIntegrationFnToClass, defineIntegration } from '@sentry/core';\nimport type { Event, Integration, IntegrationClass, IntegrationFn } from '@sentry/types';\n\nlet moduleCache: { [key: string]: string };\n\nconst INTEGRATION_NAME = 'Modules';\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/** Fetches the list of modules and the versions loaded by the entry file for your node.js app. */\nfunction _getModules(): { [key: string]: string } {\n  if (!moduleCache) {\n    moduleCache = collectModules();\n  }\n  return moduleCache;\n}\n\nconst _modulesIntegration = (() => {\n  return {\n    name: INTEGRATION_NAME,\n    // TODO v8: Remove this\n    setupOnce() {}, // eslint-disable-line @typescript-eslint/no-empty-function\n    processEvent(event) {\n      event.modules = {\n        ...event.modules,\n        ..._getModules(),\n      };\n\n      return event;\n    },\n  };\n}) satisfies IntegrationFn;\n\nexport const modulesIntegration = defineIntegration(_modulesIntegration);\n\n/**\n * Add node modules / packages to the event.\n * @deprecated Use `modulesIntegration()` instead.\n */\n// eslint-disable-next-line deprecation/deprecation\nexport const Modules = convertIntegrationFnToClass(INTEGRATION_NAME, modulesIntegration) as IntegrationClass<\n  Integration & { processEvent: (event: Event) => Event }\n>;\n\n// eslint-disable-next-line deprecation/deprecation\nexport type Modules = typeof Modules;\n", "import { getClient } from '@sentry/core';\nimport { consoleSandbox, logger } from '@sentry/utils';\n\nimport type { NodeClient } from '../../client';\nimport { DEBUG_BUILD } from '../../debug-build';\n\nconst DEFAULT_SHUTDOWN_TIMEOUT = 2000;\n\n/**\n * @hidden\n */\nexport function logAndExitProcess(error: Error): void {\n  consoleSandbox(() => {\n    // eslint-disable-next-line no-console\n    console.error(error);\n  });\n\n  const client = 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 { captureException, convertIntegrationFnToClass, defineIntegration } from '@sentry/core';\nimport { getClient } from '@sentry/core';\nimport type { Integration, IntegrationClass, IntegrationFn } from '@sentry/types';\nimport { logger } from '@sentry/utils';\n\nimport type { NodeClient } from '../client';\nimport { DEBUG_BUILD } from '../debug-build';\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\nconst INTEGRATION_NAME = 'OnUncaughtException';\n\nconst _onUncaughtExceptionIntegration = ((options: Partial<OnUncaughtExceptionOptions> = {}) => {\n  const _options = {\n    exitEvenIfOtherHandlersAreRegistered: true,\n    ...options,\n  };\n\n  return {\n    name: INTEGRATION_NAME,\n    // TODO v8: Remove this\n    setupOnce() {}, // eslint-disable-line @typescript-eslint/no-empty-function\n    setup(client: NodeClient) {\n      global.process.on('uncaughtException', makeErrorHandler(client, _options));\n    },\n  };\n}) satisfies IntegrationFn;\n\nexport const onUncaughtExceptionIntegration = defineIntegration(_onUncaughtExceptionIntegration);\n\n/**\n * Global Exception handler.\n * @deprecated Use `onUncaughtExceptionIntegration()` instead.\n */\n// eslint-disable-next-line deprecation/deprecation\nexport const OnUncaughtException = convertIntegrationFnToClass(\n  INTEGRATION_NAME,\n  onUncaughtExceptionIntegration,\n) as IntegrationClass<Integration & { setup: (client: NodeClient) => void }> & {\n  new (\n    options?: Partial<{\n      exitEvenIfOtherHandlersAreRegistered: boolean;\n      onFatalError?(this: void, firstError: Error, secondError?: Error): void;\n    }>,\n  ): Integration;\n};\n\n// eslint-disable-next-line deprecation/deprecation\nexport type OnUncaughtException = typeof OnUncaughtException;\n\ntype ErrorHandler = { _errorHandler: boolean } & ((error: Error) => void);\n\n/** Exported only for tests */\nexport function makeErrorHandler(client: NodeClient, options: OnUncaughtExceptionOptions): ErrorHandler {\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  const clientOptions = client.getOptions();\n\n  return Object.assign(\n    (error: Error): void => {\n      let onFatalError: OnFatalErrorHandler = logAndExitProcess;\n\n      if (options.onFatalError) {\n        onFatalError = options.onFatalError;\n      } else if (clientOptions.onFatalError) {\n        onFatalError = clientOptions.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 as ErrorHandler)._errorHandler // 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 = options.exitEvenIfOtherHandlersAreRegistered || processWouldExit;\n\n      if (!caughtFirstError) {\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 (getClient() === client) {\n          captureException(error, {\n            originalException: error,\n            captureContext: {\n              level: 'fatal',\n            },\n            mechanism: {\n              handled: false,\n              type: 'onuncaughtexception',\n            },\n          });\n        }\n\n        if (!calledFatalError && shouldApplyFatalHandlingLogic) {\n          calledFatalError = true;\n          onFatalError(error);\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    { _errorHandler: true },\n  );\n}\n", "import { captureException, convertIntegrationFnToClass, defineIntegration, getClient } from '@sentry/core';\nimport type { Client, Integration, IntegrationClass, IntegrationFn } from '@sentry/types';\nimport { consoleSandbox } from '@sentry/utils';\n\nimport { logAndExitProcess } from './utils/errorhandling';\n\ntype UnhandledRejectionMode = 'none' | 'warn' | 'strict';\n\ninterface OnUnhandledRejectionOptions {\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}\n\nconst INTEGRATION_NAME = 'OnUnhandledRejection';\n\nconst _onUnhandledRejectionIntegration = ((options: Partial<OnUnhandledRejectionOptions> = {}) => {\n  const mode = options.mode || 'warn';\n\n  return {\n    name: INTEGRATION_NAME,\n    // TODO v8: Remove this\n    setupOnce() {}, // eslint-disable-line @typescript-eslint/no-empty-function\n    setup(client) {\n      global.process.on('unhandledRejection', makeUnhandledPromiseHandler(client, { mode }));\n    },\n  };\n}) satisfies IntegrationFn;\n\nexport const onUnhandledRejectionIntegration = defineIntegration(_onUnhandledRejectionIntegration);\n\n/**\n * Global Promise Rejection handler.\n * @deprecated Use `onUnhandledRejectionIntegration()` instead.\n */\n// eslint-disable-next-line deprecation/deprecation\nexport const OnUnhandledRejection = convertIntegrationFnToClass(\n  INTEGRATION_NAME,\n  onUnhandledRejectionIntegration,\n) as IntegrationClass<Integration & { setup: (client: Client) => void }> & {\n  new (options?: Partial<{ mode: UnhandledRejectionMode }>): Integration;\n};\n\n// eslint-disable-next-line deprecation/deprecation\nexport type OnUnhandledRejection = typeof OnUnhandledRejection;\n\n/**\n * Send an exception with reason\n * @param reason string\n * @param promise promise\n *\n * Exported only for tests.\n */\nexport function makeUnhandledPromiseHandler(\n  client: Client,\n  options: OnUnhandledRejectionOptions,\n): (reason: unknown, promise: unknown) => void {\n  return function sendUnhandledPromise(reason: unknown, promise: unknown): void {\n    if (getClient() !== client) {\n      return;\n    }\n\n    captureException(reason, {\n      originalException: promise,\n      captureContext: {\n        extra: { unhandledPromiseRejection: true },\n      },\n      mechanism: {\n        handled: false,\n        type: 'onunhandledrejection',\n      },\n    });\n\n    handleRejection(reason, options);\n  };\n}\n\n/**\n * Handler for `mode` option\n\n */\nfunction handleRejection(\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  reason: any,\n  options: OnUnhandledRejectionOptions,\n): 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 (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 (options.mode === 'strict') {\n    consoleSandbox(() => {\n      console.warn(rejectionWarning);\n    });\n    logAndExitProcess(reason);\n  }\n  /* eslint-enable no-console */\n}\n", "import * as http from 'http';\nimport { URL } from 'url';\nimport { convertIntegrationFnToClass, defineIntegration } from '@sentry/core';\nimport type { Client, Envelope, Integration, IntegrationClass, IntegrationFn } from '@sentry/types';\nimport { logger, serializeEnvelope } from '@sentry/utils';\n\ntype SpotlightConnectionOptions = {\n  /**\n   * Set this if the Spotlight Sidecar is not running on localhost:8969\n   * By default, the Url is set to http://localhost:8969/stream\n   */\n  sidecarUrl?: string;\n};\n\nconst INTEGRATION_NAME = 'Spotlight';\n\nconst _spotlightIntegration = ((options: Partial<SpotlightConnectionOptions> = {}) => {\n  const _options = {\n    sidecarUrl: options.sidecarUrl || 'http://localhost:8969/stream',\n  };\n\n  return {\n    name: INTEGRATION_NAME,\n    // TODO v8: Remove this\n    setupOnce() {}, // eslint-disable-line @typescript-eslint/no-empty-function\n    setup(client) {\n      if (typeof process === 'object' && process.env && process.env.NODE_ENV !== 'development') {\n        logger.warn(\"[Spotlight] It seems you're not in dev mode. Do you really want to have Spotlight enabled?\");\n      }\n      connectToSpotlight(client, _options);\n    },\n  };\n}) satisfies IntegrationFn;\n\nexport const spotlightIntegration = defineIntegration(_spotlightIntegration);\n\n/**\n * Use this integration to send errors and transactions to Spotlight.\n *\n * Learn more about spotlight at https://spotlightjs.com\n *\n * Important: This integration only works with Node 18 or newer.\n *\n * @deprecated Use `spotlightIntegration()` instead.\n */\n// eslint-disable-next-line deprecation/deprecation\nexport const Spotlight = convertIntegrationFnToClass(INTEGRATION_NAME, spotlightIntegration) as IntegrationClass<\n  Integration & { setup: (client: Client) => void }\n> & {\n  new (\n    options?: Partial<{\n      sidecarUrl?: string;\n    }>,\n  ): Integration;\n};\n\n// eslint-disable-next-line deprecation/deprecation\nexport type Spotlight = typeof Spotlight;\n\nfunction connectToSpotlight(client: Client, options: Required<SpotlightConnectionOptions>): void {\n  const spotlightUrl = parseSidecarUrl(options.sidecarUrl);\n  if (!spotlightUrl) {\n    return;\n  }\n\n  let failedRequests = 0;\n\n  if (typeof client.on !== 'function') {\n    logger.warn('[Spotlight] Cannot connect to spotlight due to missing method on SDK client (`client.on`)');\n    return;\n  }\n\n  client.on('beforeEnvelope', (envelope: Envelope) => {\n    if (failedRequests > 3) {\n      logger.warn('[Spotlight] Disabled Sentry -> Spotlight integration due to too many failed requests');\n      return;\n    }\n\n    const serializedEnvelope = serializeEnvelope(envelope);\n\n    const request = getNativeHttpRequest();\n    const req = request(\n      {\n        method: 'POST',\n        path: spotlightUrl.pathname,\n        hostname: spotlightUrl.hostname,\n        port: spotlightUrl.port,\n        headers: {\n          'Content-Type': 'application/x-sentry-envelope',\n        },\n      },\n      res => {\n        res.on('data', () => {\n          // Drain socket\n        });\n\n        res.on('end', () => {\n          // Drain socket\n        });\n        res.setEncoding('utf8');\n      },\n    );\n\n    req.on('error', () => {\n      failedRequests++;\n      logger.warn('[Spotlight] Failed to send envelope to Spotlight Sidecar');\n    });\n    req.write(serializedEnvelope);\n    req.end();\n  });\n}\n\nfunction parseSidecarUrl(url: string): URL | undefined {\n  try {\n    return new URL(`${url}`);\n  } catch {\n    logger.warn(`[Spotlight] Invalid sidecar URL: ${url}`);\n    return undefined;\n  }\n}\n\ntype HttpRequestImpl = typeof http.request;\ntype WrappedHttpRequest = HttpRequestImpl & { __sentry_original__: HttpRequestImpl };\n\n/**\n * We want to get an unpatched http request implementation to avoid capturing our own calls.\n */\nexport function getNativeHttpRequest(): HttpRequestImpl {\n  const { request } = http;\n  if (isWrapped(request)) {\n    return request.__sentry_original__;\n  }\n\n  return request;\n}\n\nfunction isWrapped(impl: HttpRequestImpl): impl is WrappedHttpRequest {\n  return '__sentry_original__' in impl;\n}\n", "import {\n  addBreadcrumb,\n  defineIntegration,\n  getActiveSpan,\n  getClient,\n  getCurrentScope,\n  getDynamicSamplingContextFromClient,\n  getDynamicSamplingContextFromSpan,\n  getIsolationScope,\n  hasTracingEnabled,\n  isSentryRequestUrl,\n  setHttpStatus,\n  spanToTraceHeader,\n} from '@sentry/core';\nimport type { EventProcessor, Integration, IntegrationFn, IntegrationFnResult, Span } from '@sentry/types';\nimport {\n  LRUMap,\n  dynamicSamplingContextToSentryBaggageHeader,\n  generateSentryTraceHeader,\n  getSanitizedUrlString,\n  parseUrl,\n  stringMatchesSomePattern,\n} from '@sentry/utils';\n\nimport type { NodeClient } from '../../client';\nimport { NODE_VERSION } from '../../nodeVersion';\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  /**\n   * Whether tracing spans should be created for requests\n   * If not set, this will be enabled/disabled based on if tracing is enabled.\n   */\n  tracing?: boolean;\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\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\nconst _nativeNodeFetchintegration = ((options?: Partial<UndiciOptions>) => {\n  // eslint-disable-next-line deprecation/deprecation\n  return new Undici(options) as unknown as IntegrationFnResult;\n}) satisfies IntegrationFn;\n\nexport const nativeNodeFetchintegration = defineIntegration(_nativeNodeFetchintegration);\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 *\n * @deprecated Use `nativeNodeFetchintegration()` instead.\n */\nexport class Undici implements Integration {\n  /**\n   * @inheritDoc\n   */\n  public static id: string = 'Undici';\n\n  /**\n   * @inheritDoc\n   */\n  // eslint-disable-next-line deprecation/deprecation\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      tracing: _options.tracing,\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 < 16) {\n      return;\n    }\n\n    let ds: DiagnosticsChannel | undefined;\n    try {\n      // eslint-disable-next-line @typescript-eslint/no-var-requires\n      ds = require('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.tracing === false || (this._options.tracing === undefined && !hasTracingEnabled())) {\n      return false;\n    }\n\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    // eslint-disable-next-line deprecation/deprecation\n    if (!getClient()?.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    const client = getClient<NodeClient>();\n    if (!client) {\n      return;\n    }\n\n    if (isSentryRequestUrl(stringUrl, client) || request.__sentry_span__ !== undefined) {\n      return;\n    }\n\n    const clientOptions = client.getOptions();\n    const scope = getCurrentScope();\n    const isolationScope = getIsolationScope();\n    const parentSpan = getActiveSpan();\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      const { traceId, spanId, sampled, dsc } = {\n        ...isolationScope.getPropagationContext(),\n        ...scope.getPropagationContext(),\n      };\n\n      const sentryTraceHeader = span ? spanToTraceHeader(span) : generateSentryTraceHeader(traceId, spanId, sampled);\n\n      const sentryBaggageHeader = dynamicSamplingContextToSentryBaggageHeader(\n        dsc ||\n          (span\n            ? getDynamicSamplingContextFromSpan(span)\n            : getDynamicSamplingContextFromClient(traceId, client, scope)),\n      );\n\n      setHeadersOnRequest(request, sentryTraceHeader, sentryBaggageHeader);\n    }\n  };\n\n  private _onRequestEnd = (message: unknown): void => {\n    // eslint-disable-next-line deprecation/deprecation\n    if (!getClient()?.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 (isSentryRequestUrl(stringUrl, getClient())) {\n      return;\n    }\n\n    const span = request.__sentry_span__;\n    if (span) {\n      setHttpStatus(span, response.statusCode);\n      span.end();\n    }\n\n    if (this._options.breadcrumbs) {\n      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    // eslint-disable-next-line deprecation/deprecation\n    if (!getClient()?.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 (isSentryRequestUrl(stringUrl, getClient())) {\n      return;\n    }\n\n    const span = request.__sentry_span__;\n    if (span) {\n      span.setStatus('internal_error');\n      span.end();\n    }\n\n    if (this._options.breadcrumbs) {\n      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  let hasSentryHeaders: boolean;\n  if (Array.isArray(request.headers)) {\n    hasSentryHeaders = request.headers.some(headerLine => headerLine === 'sentry-trace');\n  } else {\n    const headerLines = request.headers.split('\\r\\n');\n    hasSentryHeaders = headerLines.some(headerLine => headerLine.startsWith('sentry-trace:'));\n  }\n\n  if (hasSentryHeaders) {\n    return;\n  }\n\n  request.addHeader('sentry-trace', sentryTrace);\n  if (sentryBaggageHeader) {\n    request.addHeader('baggage', sentryBaggageHeader);\n  }\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  // eslint-disable-next-line deprecation/deprecation\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';\nimport { dirname } from '@sentry/utils';\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/** Creates a function that gets the module name from a filename */\nexport function createGetModuleFromFilename(\n  basePath: string = process.argv[1] ? dirname(process.argv[1]) : process.cwd(),\n  isWindows: boolean = sep === '\\\\',\n): (filename: string | undefined) => string | undefined {\n  const normalizedBase = isWindows ? normalizeWindowsPath(basePath) : basePath;\n\n  return (filename: string | undefined) => {\n    if (!filename) {\n      return;\n    }\n\n    const normalizedFilename = isWindows ? normalizeWindowsPath(filename) : filename;\n\n    // eslint-disable-next-line prefer-const\n    let { dir, base: file, ext } = posix.parse(normalizedFilename);\n\n    if (ext === '.js' || ext === '.mjs' || ext === '.cjs') {\n      file = file.slice(0, ext.length * -1);\n    }\n\n    if (!dir) {\n      // No dirname whatsoever\n      dir = '.';\n    }\n\n    const n = dir.lastIndexOf('/node_modules');\n    if (n > -1) {\n      return `${dir.slice(n + 14).replace(/\\//g, '.')}:${file}`;\n    }\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    if (dir.startsWith(normalizedBase)) {\n      let moduleName = dir.slice(normalizedBase.length + 1).replace(/\\//g, '.');\n\n      if (moduleName) {\n        moduleName += ':';\n      }\n      moduleName += file;\n\n      return moduleName;\n    }\n\n    return file;\n  };\n}\n", "/* eslint-disable max-lines */\nimport {\n  endSession,\n  functionToStringIntegration,\n  getClient,\n  getCurrentScope,\n  getIntegrationsToSetup,\n  getIsolationScope,\n  getMainCarrier,\n  inboundFiltersIntegration,\n  initAndBind,\n  linkedErrorsIntegration,\n  requestDataIntegration,\n  startSession,\n} from '@sentry/core';\nimport type { Integration, Options, SessionStatus, StackParser } from '@sentry/types';\nimport {\n  GLOBAL_OBJ,\n  createStackParser,\n  nodeStackLineParser,\n  propagationContextFromHeaders,\n  stackParserFromStackParserOptions,\n} from '@sentry/utils';\n\nimport { setNodeAsyncContextStrategy } from './async';\nimport { NodeClient } from './client';\nimport { consoleIntegration } from './integrations/console';\nimport { nodeContextIntegration } from './integrations/context';\nimport { contextLinesIntegration } from './integrations/contextlines';\nimport { httpIntegration } from './integrations/http';\nimport { localVariablesIntegration } from './integrations/local-variables';\nimport { modulesIntegration } from './integrations/modules';\nimport { onUncaughtExceptionIntegration } from './integrations/onuncaughtexception';\nimport { onUnhandledRejectionIntegration } from './integrations/onunhandledrejection';\nimport { spotlightIntegration } from './integrations/spotlight';\nimport { nativeNodeFetchintegration } from './integrations/undici';\nimport { createGetModuleFromFilename } from './module';\nimport { makeNodeTransport } from './transports';\nimport type { NodeClientOptions, NodeOptions } from './types';\n\n/** @deprecated Use `getDefaultIntegrations(options)` instead. */\nexport const defaultIntegrations = [\n  // Common\n  inboundFiltersIntegration(),\n  functionToStringIntegration(),\n  linkedErrorsIntegration(),\n  requestDataIntegration(),\n  // Native Wrappers\n  consoleIntegration(),\n  httpIntegration(),\n  nativeNodeFetchintegration(),\n  // Global Handlers\n  onUncaughtExceptionIntegration(),\n  onUnhandledRejectionIntegration(),\n  // Event Info\n  contextLinesIntegration(),\n  localVariablesIntegration(),\n  nodeContextIntegration(),\n  modulesIntegration(),\n];\n\n/** Get the default integrations for the Node SDK. */\nexport function getDefaultIntegrations(_options: Options): Integration[] {\n  const carrier = getMainCarrier();\n\n  const autoloadedIntegrations = carrier.__SENTRY__?.integrations || [];\n\n  return [\n    // eslint-disable-next-line deprecation/deprecation\n    ...defaultIntegrations,\n    ...autoloadedIntegrations,\n  ];\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 */\n// eslint-disable-next-line complexity\nexport function init(options: NodeOptions = {}): void {\n  setNodeAsyncContextStrategy();\n\n  if (options.defaultIntegrations === undefined) {\n    options.defaultIntegrations = getDefaultIntegrations(options);\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  if (options.spotlight) {\n    const client = getClient();\n    if (client && client.addIntegration) {\n      // force integrations to be setup even if no DSN was set\n      // If they have already been added before, they will be ignored anyhow\n      const integrations = client.getOptions().integrations;\n      for (const integration of integrations) {\n        client.addIntegration(integration);\n      }\n      client.addIntegration(\n        spotlightIntegration({ sidecarUrl: typeof options.spotlight === 'string' ? options.spotlight : undefined }),\n      );\n    }\n  }\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    // Cloudflare Pages - https://developers.cloudflare.com/pages/platform/build-configuration/#environment-variables\n    process.env.CF_PAGES_COMMIT_SHA ||\n    fallback\n  );\n}\n\n/** Node.js stack parser */\nexport const defaultStackParser: StackParser = createStackParser(nodeStackLineParser(createGetModuleFromFilename()));\n\n/**\n * Enable automatic Session Tracking for the node process.\n */\nfunction startSessionTracking(): void {\n  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 = getIsolationScope().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)) {\n      endSession();\n    }\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 = propagationContextFromHeaders(sentryTraceEnv, baggageEnv);\n    getCurrentScope().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 * @deprecated This function will be removed in the next major version.\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", "/*! @sentry/node 7.120.4 (0469cab) | https://github.com/getsentry/sentry-javascript */\nexports.base64WorkerScript=\"aW1wb3J0IHsgU2Vzc2lvbiB9IGZyb20gJ2luc3BlY3Rvcic7CmltcG9ydCB7IHdvcmtlckRhdGEsIHBhcmVudFBvcnQgfSBmcm9tICd3b3JrZXJfdGhyZWFkcyc7CmltcG9ydCB7IHBvc2l4LCBzZXAgfSBmcm9tICdwYXRoJzsKaW1wb3J0ICogYXMgaHR0cCBmcm9tICdodHRwJzsKaW1wb3J0ICogYXMgaHR0cHMgZnJvbSAnaHR0cHMnOwppbXBvcnQgeyBSZWFkYWJsZSB9IGZyb20gJ3N0cmVhbSc7CmltcG9ydCB7IFVSTCB9IGZyb20gJ3VybCc7CmltcG9ydCB7IGNyZWF0ZUd6aXAgfSBmcm9tICd6bGliJzsKaW1wb3J0ICogYXMgbmV0IGZyb20gJ25ldCc7CmltcG9ydCAqIGFzIHRscyBmcm9tICd0bHMnOwoKLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC91bmJvdW5kLW1ldGhvZApjb25zdCBvYmplY3RUb1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7CgovKioKICogQ2hlY2tzIHdoZXRoZXIgZ2l2ZW4gdmFsdWUncyB0eXBlIGlzIG9uZSBvZiBhIGZldyBFcnJvciBvciBFcnJvci1saWtlCiAqIHtAbGluayBpc0Vycm9yfS4KICoKICogQHBhcmFtIHdhdCBBIHZhbHVlIHRvIGJlIGNoZWNrZWQuCiAqIEByZXR1cm5zIEEgYm9vbGVhbiByZXByZXNlbnRpbmcgdGhlIHJlc3VsdC4KICovCmZ1bmN0aW9uIGlzRXJyb3Iod2F0KSB7CiAgc3dpdGNoIChvYmplY3RUb1N0cmluZy5jYWxsKHdhdCkpIHsKICAgIGNhc2UgJ1tvYmplY3QgRXJyb3JdJzoKICAgIGNhc2UgJ1tvYmplY3QgRXhjZXB0aW9uXSc6CiAgICBjYXNlICdbb2JqZWN0IERPTUV4Y2VwdGlvbl0nOgogICAgICByZXR1cm4gdHJ1ZTsKICAgIGRlZmF1bHQ6CiAgICAgIHJldHVybiBpc0luc3RhbmNlT2Yod2F0LCBFcnJvcik7CiAgfQp9Ci8qKgogKiBDaGVja3Mgd2hldGhlciBnaXZlbiB2YWx1ZSBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgZ2l2ZW4gYnVpbHQtaW4gY2xhc3MuCiAqCiAqIEBwYXJhbSB3YXQgVGhlIHZhbHVlIHRvIGJlIGNoZWNrZWQKICogQHBhcmFtIGNsYXNzTmFtZQogKiBAcmV0dXJucyBBIGJvb2xlYW4gcmVwcmVzZW50aW5nIHRoZSByZXN1bHQuCiAqLwpmdW5jdGlvbiBpc0J1aWx0aW4od2F0LCBjbGFzc05hbWUpIHsKICByZXR1cm4gb2JqZWN0VG9TdHJpbmcuY2FsbCh3YXQpID09PSBgW29iamVjdCAke2NsYXNzTmFtZX1dYDsKfQoKLyoqCiAqIENoZWNrcyB3aGV0aGVyIGdpdmVuIHZhbHVlJ3MgdHlwZSBpcyBhIHN0cmluZwogKiB7QGxpbmsgaXNTdHJpbmd9LgogKgogKiBAcGFyYW0gd2F0IEEgdmFsdWUgdG8gYmUgY2hlY2tlZC4KICogQHJldHVybnMgQSBib29sZWFuIHJlcHJlc2VudGluZyB0aGUgcmVzdWx0LgogKi8KZnVuY3Rpb24gaXNTdHJpbmcod2F0KSB7CiAgcmV0dXJuIGlzQnVpbHRpbih3YXQsICdTdHJpbmcnKTsKfQoKLyoqCiAqIENoZWNrcyB3aGV0aGVyIGdpdmVuIHZhbHVlJ3MgdHlwZSBpcyBhbiBvYmplY3QgbGl0ZXJhbCwgb3IgYSBjbGFzcyBpbnN0YW5jZS4KICoge0BsaW5rIGlzUGxhaW5PYmplY3R9LgogKgogKiBAcGFyYW0gd2F0IEEgdmFsdWUgdG8gYmUgY2hlY2tlZC4KICogQHJldHVybnMgQSBib29sZWFuIHJlcHJlc2VudGluZyB0aGUgcmVzdWx0LgogKi8KZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh3YXQpIHsKICByZXR1cm4gaXNCdWlsdGluKHdhdCwgJ09iamVjdCcpOwp9CgovKioKICogQ2hlY2tzIHdoZXRoZXIgZ2l2ZW4gdmFsdWUncyB0eXBlIGlzIGFuIEV2ZW50IGluc3RhbmNlCiAqIHtAbGluayBpc0V2ZW50fS4KICoKICogQHBhcmFtIHdhdCBBIHZhbHVlIHRvIGJlIGNoZWNrZWQuCiAqIEByZXR1cm5zIEEgYm9vbGVhbiByZXByZXNlbnRpbmcgdGhlIHJlc3VsdC4KICovCmZ1bmN0aW9uIGlzRXZlbnQod2F0KSB7CiAgcmV0dXJuIHR5cGVvZiBFdmVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgaXNJbnN0YW5jZU9mKHdhdCwgRXZlbnQpOwp9CgovKioKICogQ2hlY2tzIHdoZXRoZXIgZ2l2ZW4gdmFsdWUncyB0eXBlIGlzIGFuIEVsZW1lbnQgaW5zdGFuY2UKICoge0BsaW5rIGlzRWxlbWVudH0uCiAqCiAqIEBwYXJhbSB3YXQgQSB2YWx1ZSB0byBiZSBjaGVja2VkLgogKiBAcmV0dXJucyBBIGJvb2xlYW4gcmVwcmVzZW50aW5nIHRoZSByZXN1bHQuCiAqLwpmdW5jdGlvbiBpc0VsZW1lbnQod2F0KSB7CiAgcmV0dXJuIHR5cGVvZiBFbGVtZW50ICE9PSAndW5kZWZpbmVkJyAmJiBpc0luc3RhbmNlT2Yod2F0LCBFbGVtZW50KTsKfQoKLyoqCiAqIENoZWNrcyB3aGV0aGVyIGdpdmVuIHZhbHVlIGhhcyBhIHRoZW4gZnVuY3Rpb24uCiAqIEBwYXJhbSB3YXQgQSB2YWx1ZSB0byBiZSBjaGVja2VkLgogKi8KZnVuY3Rpb24gaXNUaGVuYWJsZSh3YXQpIHsKICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1tZW1iZXItYWNjZXNzCiAgcmV0dXJuIEJvb2xlYW4od2F0ICYmIHdhdC50aGVuICYmIHR5cGVvZiB3YXQudGhlbiA9PT0gJ2Z1bmN0aW9uJyk7Cn0KCi8qKgogKiBDaGVja3Mgd2hldGhlciBnaXZlbiB2YWx1ZSdzIHR5cGUgaXMgYSBTeW50aGV0aWNFdmVudAogKiB7QGxpbmsgaXNTeW50aGV0aWNFdmVudH0uCiAqCiAqIEBwYXJhbSB3YXQgQSB2YWx1ZSB0byBiZSBjaGVja2VkLgogKiBAcmV0dXJucyBBIGJvb2xlYW4gcmVwcmVzZW50aW5nIHRoZSByZXN1bHQuCiAqLwpmdW5jdGlvbiBpc1N5bnRoZXRpY0V2ZW50KHdhdCkgewogIHJldHVybiBpc1BsYWluT2JqZWN0KHdhdCkgJiYgJ25hdGl2ZUV2ZW50JyBpbiB3YXQgJiYgJ3ByZXZlbnREZWZhdWx0JyBpbiB3YXQgJiYgJ3N0b3BQcm9wYWdhdGlvbicgaW4gd2F0Owp9CgovKioKICogQ2hlY2tzIHdoZXRoZXIgZ2l2ZW4gdmFsdWUgaXMgTmFOCiAqIHtAbGluayBpc05hTn0uCiAqCiAqIEBwYXJhbSB3YXQgQSB2YWx1ZSB0byBiZSBjaGVja2VkLgogKiBAcmV0dXJucyBBIGJvb2xlYW4gcmVwcmVzZW50aW5nIHRoZSByZXN1bHQuCiAqLwpmdW5jdGlvbiBpc05hTiQxKHdhdCkgewogIHJldHVybiB0eXBlb2Ygd2F0ID09PSAnbnVtYmVyJyAmJiB3YXQgIT09IHdhdDsKfQoKLyoqCiAqIENoZWNrcyB3aGV0aGVyIGdpdmVuIHZhbHVlJ3MgdHlwZSBpcyBhbiBpbnN0YW5jZSBvZiBwcm92aWRlZCBjb25zdHJ1Y3Rvci4KICoge0BsaW5rIGlzSW5zdGFuY2VPZn0uCiAqCiAqIEBwYXJhbSB3YXQgQSB2YWx1ZSB0byBiZSBjaGVja2VkLgogKiBAcGFyYW0gYmFzZSBBIGNvbnN0cnVjdG9yIHRvIGJlIHVzZWQgaW4gYSBjaGVjay4KICogQHJldHVybnMgQSBib29sZWFuIHJlcHJlc2VudGluZyB0aGUgcmVzdWx0LgogKi8KZnVuY3Rpb24gaXNJbnN0YW5jZU9mKHdhdCwgYmFzZSkgewogIHRyeSB7CiAgICByZXR1cm4gd2F0IGluc3RhbmNlb2YgYmFzZTsKICB9IGNhdGNoIChfZSkgewogICAgcmV0dXJuIGZhbHNlOwogIH0KfQoKLyoqCiAqIENoZWNrcyB3aGV0aGVyIGdpdmVuIHZhbHVlJ3MgdHlwZSBpcyBhIFZ1ZSBWaWV3TW9kZWwuCiAqCiAqIEBwYXJhbSB3YXQgQSB2YWx1ZSB0byBiZSBjaGVja2VkLgogKiBAcmV0dXJucyBBIGJvb2xlYW4gcmVwcmVzZW50aW5nIHRoZSByZXN1bHQuCiAqLwpmdW5jdGlvbiBpc1Z1ZVZpZXdNb2RlbCh3YXQpIHsKICAvLyBOb3QgdXNpbmcgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyBiZWNhdXNlIGluIFZ1ZSAzIGl0IHdvdWxkIHJlYWQgdGhlIGluc3RhbmNlJ3MgU3ltYm9sKFN5bWJvbC50b1N0cmluZ1RhZykgcHJvcGVydHkuCiAgcmV0dXJuICEhKHR5cGVvZiB3YXQgPT09ICdvYmplY3QnICYmIHdhdCAhPT0gbnVsbCAmJiAoKHdhdCApLl9faXNWdWUgfHwgKHdhdCApLl9pc1Z1ZSkpOwp9CgovKiogSW50ZXJuYWwgZ2xvYmFsIHdpdGggY29tbW9uIHByb3BlcnRpZXMgYW5kIFNlbnRyeSBleHRlbnNpb25zICAqLwoKLy8gVGhlIGNvZGUgYmVsb3cgZm9yICdpc0dsb2JhbE9iaicgYW5kICdHTE9CQUxfT0JKJyB3YXMgY29waWVkIGZyb20gY29yZS1qcyBiZWZvcmUgbW9kaWZpY2F0aW9uCi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2Jsb2IvMWI5NDRkZjU1MjgyY2RjOTljOTBkYjVmNDllYjBiNmVkYTJjYzBhMy9wYWNrYWdlcy9jb3JlLWpzL2ludGVybmFscy9nbG9iYWwuanMKLy8gY29yZS1qcyBoYXMgdGhlIGZvbGxvd2luZyBsaWNlbmNlOgovLwovLyBDb3B5cmlnaHQgKGMpIDIwMTQtMjAyMiBEZW5pcyBQdXNoa2FyZXYKLy8KLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQovLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAovLyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCi8vIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKLy8gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCi8vIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci8vCi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCi8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgovLwovLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgovLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi8vIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKLy8gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgovLyBUSEUgU09GVFdBUkUuCgovKiogUmV0dXJucyAnb2JqJyBpZiBpdCdzIHRoZSBnbG9iYWwgb2JqZWN0LCBvdGhlcndpc2UgcmV0dXJucyB1bmRlZmluZWQgKi8KZnVuY3Rpb24gaXNHbG9iYWxPYmoob2JqKSB7CiAgcmV0dXJuIG9iaiAmJiBvYmouTWF0aCA9PSBNYXRoID8gb2JqIDogdW5kZWZpbmVkOwp9CgovKiogR2V0J3MgdGhlIGdsb2JhbCBvYmplY3QgZm9yIHRoZSBjdXJyZW50IEphdmFTY3JpcHQgcnVudGltZSAqLwpjb25zdCBHTE9CQUxfT0JKID0KICAodHlwZW9mIGdsb2JhbFRoaXMgPT0gJ29iamVjdCcgJiYgaXNHbG9iYWxPYmooZ2xvYmFsVGhpcykpIHx8CiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFscwogICh0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnICYmIGlzR2xvYmFsT2JqKHdpbmRvdykpIHx8CiAgKHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIGlzR2xvYmFsT2JqKHNlbGYpKSB8fAogICh0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGlzR2xvYmFsT2JqKGdsb2JhbCkpIHx8CiAgKGZ1bmN0aW9uICgpIHsKICAgIHJldHVybiB0aGlzOwogIH0pKCkgfHwKICB7fTsKCi8qKgogKiBAZGVwcmVjYXRlZCBVc2UgR0xPQkFMX09CSiBpbnN0ZWFkIG9yIFdJTkRPVyBmcm9tIEBzZW50cnkvYnJvd3Nlci4gVGhpcyB3aWxsIGJlIHJlbW92ZWQgaW4gdjgKICovCmZ1bmN0aW9uIGdldEdsb2JhbE9iamVjdCgpIHsKICByZXR1cm4gR0xPQkFMX09CSiA7Cn0KCi8qKgogKiBSZXR1cm5zIGEgZ2xvYmFsIHNpbmdsZXRvbiBjb250YWluZWQgaW4gdGhlIGdsb2JhbCBgX19TRU5UUllfX2Agb2JqZWN0LgogKgogKiBJZiB0aGUgc2luZ2xldG9uIGRvZXNuJ3QgYWxyZWFkeSBleGlzdCBpbiBgX19TRU5UUllfX2AsIGl0IHdpbGwgYmUgY3JlYXRlZCB1c2luZyB0aGUgZ2l2ZW4gZmFjdG9yeQogKiBmdW5jdGlvbiBhbmQgYWRkZWQgdG8gdGhlIGBfX1NFTlRSWV9fYCBvYmplY3QuCiAqCiAqIEBwYXJhbSBuYW1lIG5hbWUgb2YgdGhlIGdsb2JhbCBzaW5nbGV0b24gb24gX19TRU5UUllfXwogKiBAcGFyYW0gY3JlYXRvciBjcmVhdG9yIEZhY3RvcnkgZnVuY3Rpb24gdG8gY3JlYXRlIHRoZSBzaW5nbGV0b24gaWYgaXQgZG9lc24ndCBhbHJlYWR5IGV4aXN0IG9uIGBfX1NFTlRSWV9fYAogKiBAcGFyYW0gb2JqIChPcHRpb25hbCkgVGhlIGdsb2JhbCBvYmplY3Qgb24gd2hpY2ggdG8gbG9vayBmb3IgYF9fU0VOVFJZX19gLCBpZiBub3QgYEdMT0JBTF9PQkpgJ3MgcmV0dXJuIHZhbHVlCiAqIEByZXR1cm5zIHRoZSBzaW5nbGV0b24KICovCmZ1bmN0aW9uIGdldEdsb2JhbFNpbmdsZXRvbihuYW1lLCBjcmVhdG9yLCBvYmopIHsKICBjb25zdCBnYmwgPSAob2JqIHx8IEdMT0JBTF9PQkopIDsKICBjb25zdCBfX1NFTlRSWV9fID0gKGdibC5fX1NFTlRSWV9fID0gZ2JsLl9fU0VOVFJZX18gfHwge30pOwogIGNvbnN0IHNpbmdsZXRvbiA9IF9fU0VOVFJZX19bbmFtZV0gfHwgKF9fU0VOVFJZX19bbmFtZV0gPSBjcmVhdG9yKCkpOwogIHJldHVybiBzaW5nbGV0b247Cn0KCi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgpjb25zdCBXSU5ET1cgPSBnZXRHbG9iYWxPYmplY3QoKTsKCmNvbnN0IERFRkFVTFRfTUFYX1NUUklOR19MRU5HVEggPSA4MDsKCi8qKgogKiBHaXZlbiBhIGNoaWxkIERPTSBlbGVtZW50LCByZXR1cm5zIGEgcXVlcnktc2VsZWN0b3Igc3RhdGVtZW50IGRlc2NyaWJpbmcgdGhhdAogKiBhbmQgaXRzIGFuY2VzdG9ycwogKiBlLmcuIFtIVE1MRWxlbWVudF0gPT4gYm9keSA+IGRpdiA+IGlucHV0I2Zvby5idG5bbmFtZT1iYXpdCiAqIEByZXR1cm5zIGdlbmVyYXRlZCBET00gcGF0aAogKi8KZnVuY3Rpb24gaHRtbFRyZWVBc1N0cmluZygKICBlbGVtLAogIG9wdGlvbnMgPSB7fSwKKSB7CiAgaWYgKCFlbGVtKSB7CiAgICByZXR1cm4gJzx1bmtub3duPic7CiAgfQoKICAvLyB0cnkvY2F0Y2ggYm90aDoKICAvLyAtIGFjY2Vzc2luZyBldmVudC50YXJnZXQgKHNlZSBnZXRzZW50cnkvcmF2ZW4tanMjODM4LCAjNzY4KQogIC8vIC0gYGh0bWxUcmVlQXNTdHJpbmdgIGJlY2F1c2UgaXQncyBjb21wbGV4LCBhbmQganVzdCBhY2Nlc3NpbmcgdGhlIERPTSBpbmNvcnJlY3RseQogIC8vIC0gY2FuIHRocm93IGFuIGV4Y2VwdGlvbiBpbiBzb21lIGNpcmN1bXN0YW5jZXMuCiAgdHJ5IHsKICAgIGxldCBjdXJyZW50RWxlbSA9IGVsZW0gOwogICAgY29uc3QgTUFYX1RSQVZFUlNFX0hFSUdIVCA9IDU7CiAgICBjb25zdCBvdXQgPSBbXTsKICAgIGxldCBoZWlnaHQgPSAwOwogICAgbGV0IGxlbiA9IDA7CiAgICBjb25zdCBzZXBhcmF0b3IgPSAnID4gJzsKICAgIGNvbnN0IHNlcExlbmd0aCA9IHNlcGFyYXRvci5sZW5ndGg7CiAgICBsZXQgbmV4dFN0cjsKICAgIGNvbnN0IGtleUF0dHJzID0gQXJyYXkuaXNBcnJheShvcHRpb25zKSA/IG9wdGlvbnMgOiBvcHRpb25zLmtleUF0dHJzOwogICAgY29uc3QgbWF4U3RyaW5nTGVuZ3RoID0gKCFBcnJheS5pc0FycmF5KG9wdGlvbnMpICYmIG9wdGlvbnMubWF4U3RyaW5nTGVuZ3RoKSB8fCBERUZBVUxUX01BWF9TVFJJTkdfTEVOR1RIOwoKICAgIHdoaWxlIChjdXJyZW50RWxlbSAmJiBoZWlnaHQrKyA8IE1BWF9UUkFWRVJTRV9IRUlHSFQpIHsKICAgICAgbmV4dFN0ciA9IF9odG1sRWxlbWVudEFzU3RyaW5nKGN1cnJlbnRFbGVtLCBrZXlBdHRycyk7CiAgICAgIC8vIGJhaWwgb3V0IGlmCiAgICAgIC8vIC0gbmV4dFN0ciBpcyB0aGUgJ2h0bWwnIGVsZW1lbnQKICAgICAgLy8gLSB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcgdGhhdCB3b3VsZCBiZSBjcmVhdGVkIGV4Y2VlZHMgbWF4U3RyaW5nTGVuZ3RoCiAgICAgIC8vICAgKGlnbm9yZSB0aGlzIGxpbWl0IGlmIHdlIGFyZSBvbiB0aGUgZmlyc3QgaXRlcmF0aW9uKQogICAgICBpZiAobmV4dFN0ciA9PT0gJ2h0bWwnIHx8IChoZWlnaHQgPiAxICYmIGxlbiArIG91dC5sZW5ndGggKiBzZXBMZW5ndGggKyBuZXh0U3RyLmxlbmd0aCA+PSBtYXhTdHJpbmdMZW5ndGgpKSB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KCiAgICAgIG91dC5wdXNoKG5leHRTdHIpOwoKICAgICAgbGVuICs9IG5leHRTdHIubGVuZ3RoOwogICAgICBjdXJyZW50RWxlbSA9IGN1cnJlbnRFbGVtLnBhcmVudE5vZGU7CiAgICB9CgogICAgcmV0dXJuIG91dC5yZXZlcnNlKCkuam9pbihzZXBhcmF0b3IpOwogIH0gY2F0Y2ggKF9vTykgewogICAgcmV0dXJuICc8dW5rbm93bj4nOwogIH0KfQoKLyoqCiAqIFJldHVybnMgYSBzaW1wbGUsIHF1ZXJ5LXNlbGVjdG9yIHJlcHJlc2VudGF0aW9uIG9mIGEgRE9NIGVsZW1lbnQKICogZS5nLiBbSFRNTEVsZW1lbnRdID0+IGlucHV0I2Zvby5idG5bbmFtZT1iYXpdCiAqIEByZXR1cm5zIGdlbmVyYXRlZCBET00gcGF0aAogKi8KZnVuY3Rpb24gX2h0bWxFbGVtZW50QXNTdHJpbmcoZWwsIGtleUF0dHJzKSB7CiAgY29uc3QgZWxlbSA9IGVsCgo7CgogIGNvbnN0IG91dCA9IFtdOwogIGxldCBjbGFzc05hbWU7CiAgbGV0IGNsYXNzZXM7CiAgbGV0IGtleTsKICBsZXQgYXR0cjsKICBsZXQgaTsKCiAgaWYgKCFlbGVtIHx8ICFlbGVtLnRhZ05hbWUpIHsKICAgIHJldHVybiAnJzsKICB9CgogIC8vIEB0cy1leHBlY3QtZXJyb3IgV0lORE9XIGhhcyBIVE1MRWxlbWVudAogIGlmIChXSU5ET1cuSFRNTEVsZW1lbnQpIHsKICAgIC8vIElmIHVzaW5nIHRoZSBjb21wb25lbnQgbmFtZSBhbm5vdGF0aW9uIHBsdWdpbiwgdGhpcyB2YWx1ZSBtYXkgYmUgYXZhaWxhYmxlIG9uIHRoZSBET00gbm9kZQogICAgaWYgKGVsZW0gaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiBlbGVtLmRhdGFzZXQgJiYgZWxlbS5kYXRhc2V0WydzZW50cnlDb21wb25lbnQnXSkgewogICAgICByZXR1cm4gZWxlbS5kYXRhc2V0WydzZW50cnlDb21wb25lbnQnXTsKICAgIH0KICB9CgogIG91dC5wdXNoKGVsZW0udGFnTmFtZS50b0xvd2VyQ2FzZSgpKTsKCiAgLy8gUGFpcnMgb2YgYXR0cmlidXRlIGtleXMgZGVmaW5lZCBpbiBgc2VyaWFsaXplQXR0cmlidXRlYCBhbmQgdGhlaXIgdmFsdWVzIG9uIGVsZW1lbnQuCiAgY29uc3Qga2V5QXR0clBhaXJzID0KICAgIGtleUF0dHJzICYmIGtleUF0dHJzLmxlbmd0aAogICAgICA/IGtleUF0dHJzLmZpbHRlcihrZXlBdHRyID0+IGVsZW0uZ2V0QXR0cmlidXRlKGtleUF0dHIpKS5tYXAoa2V5QXR0ciA9PiBba2V5QXR0ciwgZWxlbS5nZXRBdHRyaWJ1dGUoa2V5QXR0cildKQogICAgICA6IG51bGw7CgogIGlmIChrZXlBdHRyUGFpcnMgJiYga2V5QXR0clBhaXJzLmxlbmd0aCkgewogICAga2V5QXR0clBhaXJzLmZvckVhY2goa2V5QXR0clBhaXIgPT4gewogICAgICBvdXQucHVzaChgWyR7a2V5QXR0clBhaXJbMF19PSIke2tleUF0dHJQYWlyWzFdfSJdYCk7CiAgICB9KTsKICB9IGVsc2UgewogICAgaWYgKGVsZW0uaWQpIHsKICAgICAgb3V0LnB1c2goYCMke2VsZW0uaWR9YCk7CiAgICB9CgogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdAogICAgY2xhc3NOYW1lID0gZWxlbS5jbGFzc05hbWU7CiAgICBpZiAoY2xhc3NOYW1lICYmIGlzU3RyaW5nKGNsYXNzTmFtZSkpIHsKICAgICAgY2xhc3NlcyA9IGNsYXNzTmFtZS5zcGxpdCgvXHMrLyk7CiAgICAgIGZvciAoaSA9IDA7IGkgPCBjbGFzc2VzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgb3V0LnB1c2goYC4ke2NsYXNzZXNbaV19YCk7CiAgICAgIH0KICAgIH0KICB9CiAgY29uc3QgYWxsb3dlZEF0dHJzID0gWydhcmlhLWxhYmVsJywgJ3R5cGUnLCAnbmFtZScsICd0aXRsZScsICdhbHQnXTsKICBmb3IgKGkgPSAwOyBpIDwgYWxsb3dlZEF0dHJzLmxlbmd0aDsgaSsrKSB7CiAgICBrZXkgPSBhbGxvd2VkQXR0cnNbaV07CiAgICBhdHRyID0gZWxlbS5nZXRBdHRyaWJ1dGUoa2V5KTsKICAgIGlmIChhdHRyKSB7CiAgICAgIG91dC5wdXNoKGBbJHtrZXl9PSIke2F0dHJ9Il1gKTsKICAgIH0KICB9CiAgcmV0dXJuIG91dC5qb2luKCcnKTsKfQoKLyoqCiAqIFRoaXMgc2VydmVzIGFzIGEgYnVpbGQgdGltZSBmbGFnIHRoYXQgd2lsbCBiZSB0cnVlIGJ5IGRlZmF1bHQsIGJ1dCBmYWxzZSBpbiBub24tZGVidWcgYnVpbGRzIG9yIGlmIHVzZXJzIHJlcGxhY2UgYF9fU0VOVFJZX0RFQlVHX19gIGluIHRoZWlyIGdlbmVyYXRlZCBjb2RlLgogKgogKiBBVFRFTlRJT046IFRoaXMgY29uc3RhbnQgbXVzdCBuZXZlciBjcm9zcyBwYWNrYWdlIGJvdW5kYXJpZXMgKGkuZS4gYmUgZXhwb3J0ZWQpIHRvIGd1YXJhbnRlZSB0aGF0IGl0IGNhbiBiZSB1c2VkIGZvciB0cmVlIHNoYWtpbmcuCiAqLwpjb25zdCBERUJVR19CVUlMRCQxID0gKHR5cGVvZiBfX1NFTlRSWV9ERUJVR19fID09PSAndW5kZWZpbmVkJyB8fCBfX1NFTlRSWV9ERUJVR19fKTsKCi8qKiBQcmVmaXggZm9yIGxvZ2dpbmcgc3RyaW5ncyAqLwpjb25zdCBQUkVGSVggPSAnU2VudHJ5IExvZ2dlciAnOwoKY29uc3QgQ09OU09MRV9MRVZFTFMgPSBbCiAgJ2RlYnVnJywKICAnaW5mbycsCiAgJ3dhcm4nLAogICdlcnJvcicsCiAgJ2xvZycsCiAgJ2Fzc2VydCcsCiAgJ3RyYWNlJywKXSA7CgovKiogVGhpcyBtYXkgYmUgbXV0YXRlZCBieSB0aGUgY29uc29sZSBpbnN0cnVtZW50YXRpb24uICovCmNvbnN0IG9yaWdpbmFsQ29uc29sZU1ldGhvZHMKCiA9IHt9OwoKLyoqIEpTRG9jICovCgovKioKICogVGVtcG9yYXJpbHkgZGlzYWJsZSBzZW50cnkgY29uc29sZSBpbnN0cnVtZW50YXRpb25zLgogKgogKiBAcGFyYW0gY2FsbGJhY2sgVGhlIGZ1bmN0aW9uIHRvIHJ1biBhZ2FpbnN0IHRoZSBvcmlnaW5hbCBgY29uc29sZWAgbWVzc2FnZXMKICogQHJldHVybnMgVGhlIHJlc3VsdHMgb2YgdGhlIGNhbGxiYWNrCiAqLwpmdW5jdGlvbiBjb25zb2xlU2FuZGJveChjYWxsYmFjaykgewogIGlmICghKCdjb25zb2xlJyBpbiBHTE9CQUxfT0JKKSkgewogICAgcmV0dXJuIGNhbGxiYWNrKCk7CiAgfQoKICBjb25zdCBjb25zb2xlID0gR0xPQkFMX09CSi5jb25zb2xlIDsKICBjb25zdCB3cmFwcGVkRnVuY3MgPSB7fTsKCiAgY29uc3Qgd3JhcHBlZExldmVscyA9IE9iamVjdC5rZXlzKG9yaWdpbmFsQ29uc29sZU1ldGhvZHMpIDsKCiAgLy8gUmVzdG9yZSBhbGwgd3JhcHBlZCBjb25zb2xlIG1ldGhvZHMKICB3cmFwcGVkTGV2ZWxzLmZvckVhY2gobGV2ZWwgPT4gewogICAgY29uc3Qgb3JpZ2luYWxDb25zb2xlTWV0aG9kID0gb3JpZ2luYWxDb25zb2xlTWV0aG9kc1tsZXZlbF0gOwogICAgd3JhcHBlZEZ1bmNzW2xldmVsXSA9IGNvbnNvbGVbbGV2ZWxdIDsKICAgIGNvbnNvbGVbbGV2ZWxdID0gb3JpZ2luYWxDb25zb2xlTWV0aG9kOwogIH0pOwoKICB0cnkgewogICAgcmV0dXJuIGNhbGxiYWNrKCk7CiAgfSBmaW5hbGx5IHsKICAgIC8vIFJldmVydCByZXN0b3JhdGlvbiB0byB3cmFwcGVkIHN0YXRlCiAgICB3cmFwcGVkTGV2ZWxzLmZvckVhY2gobGV2ZWwgPT4gewogICAgICBjb25zb2xlW2xldmVsXSA9IHdyYXBwZWRGdW5jc1tsZXZlbF0gOwogICAgfSk7CiAgfQp9CgpmdW5jdGlvbiBtYWtlTG9nZ2VyKCkgewogIGxldCBlbmFibGVkID0gZmFsc2U7CiAgY29uc3QgbG9nZ2VyID0gewogICAgZW5hYmxlOiAoKSA9PiB7CiAgICAgIGVuYWJsZWQgPSB0cnVlOwogICAgfSwKICAgIGRpc2FibGU6ICgpID0+IHsKICAgICAgZW5hYmxlZCA9IGZhbHNlOwogICAgfSwKICAgIGlzRW5hYmxlZDogKCkgPT4gZW5hYmxlZCwKICB9OwoKICBpZiAoREVCVUdfQlVJTEQkMSkgewogICAgQ09OU09MRV9MRVZFTFMuZm9yRWFjaChuYW1lID0+IHsKICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkKICAgICAgbG9nZ2VyW25hbWVdID0gKC4uLmFyZ3MpID0+IHsKICAgICAgICBpZiAoZW5hYmxlZCkgewogICAgICAgICAgY29uc29sZVNhbmRib3goKCkgPT4gewogICAgICAgICAgICBHTE9CQUxfT0JKLmNvbnNvbGVbbmFtZV0oYCR7UFJFRklYfVske25hbWV9XTpgLCAuLi5hcmdzKTsKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgIH0pOwogIH0gZWxzZSB7CiAgICBDT05TT0xFX0xFVkVMUy5mb3JFYWNoKG5hbWUgPT4gewogICAgICBsb2dnZXJbbmFtZV0gPSAoKSA9PiB1bmRlZmluZWQ7CiAgICB9KTsKICB9CgogIHJldHVybiBsb2dnZXIgOwp9Cgpjb25zdCBsb2dnZXIgPSBtYWtlTG9nZ2VyKCk7CgovKioKICogUmVuZGVycyB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgRHNuLgogKgogKiBCeSBkZWZhdWx0LCB0aGlzIHdpbGwgcmVuZGVyIHRoZSBwdWJsaWMgcmVwcmVzZW50YXRpb24gd2l0aG91dCB0aGUgcGFzc3dvcmQKICogY29tcG9uZW50LiBUbyBnZXQgdGhlIGRlcHJlY2F0ZWQgcHJpdmF0ZSByZXByZXNlbnRhdGlvbiwgc2V0IGB3aXRoUGFzc3dvcmRgCiAqIHRvIHRydWUuCiAqCiAqIEBwYXJhbSB3aXRoUGFzc3dvcmQgV2hlbiBzZXQgdG8gdHJ1ZSwgdGhlIHBhc3N3b3JkIHdpbGwgYmUgaW5jbHVkZWQuCiAqLwpmdW5jdGlvbiBkc25Ub1N0cmluZyhkc24sIHdpdGhQYXNzd29yZCA9IGZhbHNlKSB7CiAgY29uc3QgeyBob3N0LCBwYXRoLCBwYXNzLCBwb3J0LCBwcm9qZWN0SWQsIHByb3RvY29sLCBwdWJsaWNLZXkgfSA9IGRzbjsKICByZXR1cm4gKAogICAgYCR7cHJvdG9jb2x9Oi8vJHtwdWJsaWNLZXl9JHt3aXRoUGFzc3dvcmQgJiYgcGFzcyA/IGA6JHtwYXNzfWAgOiAnJ31gICsKICAgIGBAJHtob3N0fSR7cG9ydCA/IGA6JHtwb3J0fWAgOiAnJ30vJHtwYXRoID8gYCR7cGF0aH0vYCA6IHBhdGh9JHtwcm9qZWN0SWR9YAogICk7Cn0KCi8qKiBBbiBlcnJvciBlbWl0dGVkIGJ5IFNlbnRyeSBTREtzIGFuZCByZWxhdGVkIHV0aWxpdGllcy4gKi8KY2xhc3MgU2VudHJ5RXJyb3IgZXh0ZW5kcyBFcnJvciB7CiAgLyoqIERpc3BsYXkgbmFtZSBvZiB0aGlzIGVycm9yIGluc3RhbmNlLiAqLwoKICAgY29uc3RydWN0b3IoIG1lc3NhZ2UsIGxvZ0xldmVsID0gJ3dhcm4nKSB7CiAgICBzdXBlcihtZXNzYWdlKTt0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlOwogICAgdGhpcy5uYW1lID0gbmV3LnRhcmdldC5wcm90b3R5cGUuY29uc3RydWN0b3IubmFtZTsKICAgIC8vIFRoaXMgc2V0cyB0aGUgcHJvdG90eXBlIHRvIGJlIGBFcnJvcmAsIG5vdCBgU2VudHJ5RXJyb3JgLiBJdCdzIHVuY2xlYXIgd2h5IHdlIGRvIHRoaXMsIGJ1dCBjb21tZW50aW5nIHRoaXMgbGluZQogICAgLy8gb3V0IGNhdXNlcyB2YXJpb3VzIChzZWVtaW5nbHkgdG90YWxseSB1bnJlbGF0ZWQpIHBsYXl3cmlnaHQgdGVzdHMgY29uc2lzdGVudGx5IHRpbWUgb3V0LiBGWUksIHRoaXMgbWFrZXMKICAgIC8vIGluc3RhbmNlcyBvZiBgU2VudHJ5RXJyb3JgIGZhaWwgYG9iaiBpbnN0YW5jZW9mIFNlbnRyeUVycm9yYCBjaGVja3MuCiAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgbmV3LnRhcmdldC5wcm90b3R5cGUpOwogICAgdGhpcy5sb2dMZXZlbCA9IGxvZ0xldmVsOwogIH0KfQoKLyoqCiAqIEVuY29kZXMgZ2l2ZW4gb2JqZWN0IGludG8gdXJsLWZyaWVuZGx5IGZvcm1hdAogKgogKiBAcGFyYW0gb2JqZWN0IEFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIHNlcmlhbGl6YWJsZSB2YWx1ZXMKICogQHJldHVybnMgc3RyaW5nIEVuY29kZWQKICovCmZ1bmN0aW9uIHVybEVuY29kZShvYmplY3QpIHsKICByZXR1cm4gT2JqZWN0LmtleXMob2JqZWN0KQogICAgLm1hcChrZXkgPT4gYCR7ZW5jb2RlVVJJQ29tcG9uZW50KGtleSl9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KG9iamVjdFtrZXldKX1gKQogICAgLmpvaW4oJyYnKTsKfQoKLyoqCiAqIFRyYW5zZm9ybXMgYW55IGBFcnJvcmAgb3IgYEV2ZW50YCBpbnRvIGEgcGxhaW4gb2JqZWN0IHdpdGggYWxsIG9mIHRoZWlyIGVudW1lcmFibGUgcHJvcGVydGllcywgYW5kIHNvbWUgb2YgdGhlaXIKICogbm9uLWVudW1lcmFibGUgcHJvcGVydGllcyBhdHRhY2hlZC4KICoKICogQHBhcmFtIHZhbHVlIEluaXRpYWwgc291cmNlIHRoYXQgd2UgaGF2ZSB0byB0cmFuc2Zvcm0gaW4gb3JkZXIgZm9yIGl0IHRvIGJlIHVzYWJsZSBieSB0aGUgc2VyaWFsaXplcgogKiBAcmV0dXJucyBBbiBFdmVudCBvciBFcnJvciB0dXJuZWQgaW50byBhbiBvYmplY3QgLSBvciB0aGUgdmFsdWUgYXJndXJtZW50IGl0c2VsZiwgd2hlbiB2YWx1ZSBpcyBuZWl0aGVyIGFuIEV2ZW50IG5vcgogKiAgYW4gRXJyb3IuCiAqLwpmdW5jdGlvbiBjb252ZXJ0VG9QbGFpbk9iamVjdCgKICB2YWx1ZSwKKQoKIHsKICBpZiAoaXNFcnJvcih2YWx1ZSkpIHsKICAgIHJldHVybiB7CiAgICAgIG1lc3NhZ2U6IHZhbHVlLm1lc3NhZ2UsCiAgICAgIG5hbWU6IHZhbHVlLm5hbWUsCiAgICAgIHN0YWNrOiB2YWx1ZS5zdGFjaywKICAgICAgLi4uZ2V0T3duUHJvcGVydGllcyh2YWx1ZSksCiAgICB9OwogIH0gZWxzZSBpZiAoaXNFdmVudCh2YWx1ZSkpIHsKICAgIGNvbnN0IG5ld09iagoKID0gewogICAgICB0eXBlOiB2YWx1ZS50eXBlLAogICAgICB0YXJnZXQ6IHNlcmlhbGl6ZUV2ZW50VGFyZ2V0KHZhbHVlLnRhcmdldCksCiAgICAgIGN1cnJlbnRUYXJnZXQ6IHNlcmlhbGl6ZUV2ZW50VGFyZ2V0KHZhbHVlLmN1cnJlbnRUYXJnZXQpLAogICAgICAuLi5nZXRPd25Qcm9wZXJ0aWVzKHZhbHVlKSwKICAgIH07CgogICAgaWYgKHR5cGVvZiBDdXN0b21FdmVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgaXNJbnN0YW5jZU9mKHZhbHVlLCBDdXN0b21FdmVudCkpIHsKICAgICAgbmV3T2JqLmRldGFpbCA9IHZhbHVlLmRldGFpbDsKICAgIH0KCiAgICByZXR1cm4gbmV3T2JqOwogIH0gZWxzZSB7CiAgICByZXR1cm4gdmFsdWU7CiAgfQp9CgovKiogQ3JlYXRlcyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdGFyZ2V0IG9mIGFuIGBFdmVudGAgb2JqZWN0ICovCmZ1bmN0aW9uIHNlcmlhbGl6ZUV2ZW50VGFyZ2V0KHRhcmdldCkgewogIHRyeSB7CiAgICByZXR1cm4gaXNFbGVtZW50KHRhcmdldCkgPyBodG1sVHJlZUFzU3RyaW5nKHRhcmdldCkgOiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodGFyZ2V0KTsKICB9IGNhdGNoIChfb08pIHsKICAgIHJldHVybiAnPHVua25vd24+JzsKICB9Cn0KCi8qKiBGaWx0ZXJzIG91dCBhbGwgYnV0IGFuIG9iamVjdCdzIG93biBwcm9wZXJ0aWVzICovCmZ1bmN0aW9uIGdldE93blByb3BlcnRpZXMob2JqKSB7CiAgaWYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIG9iaiAhPT0gbnVsbCkgewogICAgY29uc3QgZXh0cmFjdGVkUHJvcHMgPSB7fTsKICAgIGZvciAoY29uc3QgcHJvcGVydHkgaW4gb2JqKSB7CiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wZXJ0eSkpIHsKICAgICAgICBleHRyYWN0ZWRQcm9wc1twcm9wZXJ0eV0gPSAob2JqIClbcHJvcGVydHldOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZXh0cmFjdGVkUHJvcHM7CiAgfSBlbHNlIHsKICAgIHJldHVybiB7fTsKICB9Cn0KCi8qKgogKiBHaXZlbiBhbnkgb2JqZWN0LCByZXR1cm4gYSBuZXcgb2JqZWN0IGhhdmluZyByZW1vdmVkIGFsbCBmaWVsZHMgd2hvc2UgdmFsdWUgd2FzIGB1bmRlZmluZWRgLgogKiBXb3JrcyByZWN1cnNpdmVseSBvbiBvYmplY3RzIGFuZCBhcnJheXMuCiAqCiAqIEF0dGVudGlvbjogVGhpcyBmdW5jdGlvbiBrZWVwcyBjaXJjdWxhciByZWZlcmVuY2VzIGluIHRoZSByZXR1cm5lZCBvYmplY3QuCiAqLwpmdW5jdGlvbiBkcm9wVW5kZWZpbmVkS2V5cyhpbnB1dFZhbHVlKSB7CiAgLy8gVGhpcyBtYXAga2VlcHMgdHJhY2sgb2Ygd2hhdCBhbHJlYWR5IHZpc2l0ZWQgbm9kZXMgbWFwIHRvLgogIC8vIE91ciBTZXQgLSBiYXNlZCBtZW1vQnVpbGRlciBkb2Vzbid0IHdvcmsgaGVyZSBiZWNhdXNlIHdlIHdhbnQgdG8gdGhlIG91dHB1dCBvYmplY3QgdG8gaGF2ZSB0aGUgc2FtZSBjaXJjdWxhcgogIC8vIHJlZmVyZW5jZXMgYXMgdGhlIGlucHV0IG9iamVjdC4KICBjb25zdCBtZW1vaXphdGlvbk1hcCA9IG5ldyBNYXAoKTsKCiAgLy8gVGhpcyBmdW5jdGlvbiBqdXN0IHByb3hpZXMgYF9kcm9wVW5kZWZpbmVkS2V5c2AgdG8ga2VlcCB0aGUgYG1lbW9CdWlsZGVyYCBvdXQgb2YgdGhpcyBmdW5jdGlvbidzIEFQSQogIHJldHVybiBfZHJvcFVuZGVmaW5lZEtleXMoaW5wdXRWYWx1ZSwgbWVtb2l6YXRpb25NYXApOwp9CgpmdW5jdGlvbiBfZHJvcFVuZGVmaW5lZEtleXMoaW5wdXRWYWx1ZSwgbWVtb2l6YXRpb25NYXApIHsKICBpZiAoaXNQb2pvKGlucHV0VmFsdWUpKSB7CiAgICAvLyBJZiB0aGlzIG5vZGUgaGFzIGFscmVhZHkgYmVlbiB2aXNpdGVkIGR1ZSB0byBhIGNpcmN1bGFyIHJlZmVyZW5jZSwgcmV0dXJuIHRoZSBvYmplY3QgaXQgd2FzIG1hcHBlZCB0byBpbiB0aGUgbmV3IG9iamVjdAogICAgY29uc3QgbWVtb1ZhbCA9IG1lbW9pemF0aW9uTWFwLmdldChpbnB1dFZhbHVlKTsKICAgIGlmIChtZW1vVmFsICE9PSB1bmRlZmluZWQpIHsKICAgICAgcmV0dXJuIG1lbW9WYWwgOwogICAgfQoKICAgIGNvbnN0IHJldHVyblZhbHVlID0ge307CiAgICAvLyBTdG9yZSB0aGUgbWFwcGluZyBvZiB0aGlzIHZhbHVlIGluIGNhc2Ugd2UgdmlzaXQgaXQgYWdhaW4sIGluIGNhc2Ugb2YgY2lyY3VsYXIgZGF0YQogICAgbWVtb2l6YXRpb25NYXAuc2V0KGlucHV0VmFsdWUsIHJldHVyblZhbHVlKTsKCiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhpbnB1dFZhbHVlKSkgewogICAgICBpZiAodHlwZW9mIGlucHV0VmFsdWVba2V5XSAhPT0gJ3VuZGVmaW5lZCcpIHsKICAgICAgICByZXR1cm5WYWx1ZVtrZXldID0gX2Ryb3BVbmRlZmluZWRLZXlzKGlucHV0VmFsdWVba2V5XSwgbWVtb2l6YXRpb25NYXApOwogICAgICB9CiAgICB9CgogICAgcmV0dXJuIHJldHVyblZhbHVlIDsKICB9CgogIGlmIChBcnJheS5pc0FycmF5KGlucHV0VmFsdWUpKSB7CiAgICAvLyBJZiB0aGlzIG5vZGUgaGFzIGFscmVhZHkgYmVlbiB2aXNpdGVkIGR1ZSB0byBhIGNpcmN1bGFyIHJlZmVyZW5jZSwgcmV0dXJuIHRoZSBhcnJheSBpdCB3YXMgbWFwcGVkIHRvIGluIHRoZSBuZXcgb2JqZWN0CiAgICBjb25zdCBtZW1vVmFsID0gbWVtb2l6YXRpb25NYXAuZ2V0KGlucHV0VmFsdWUpOwogICAgaWYgKG1lbW9WYWwgIT09IHVuZGVmaW5lZCkgewogICAgICByZXR1cm4gbWVtb1ZhbCA7CiAgICB9CgogICAgY29uc3QgcmV0dXJuVmFsdWUgPSBbXTsKICAgIC8vIFN0b3JlIHRoZSBtYXBwaW5nIG9mIHRoaXMgdmFsdWUgaW4gY2FzZSB3ZSB2aXNpdCBpdCBhZ2FpbiwgaW4gY2FzZSBvZiBjaXJjdWxhciBkYXRhCiAgICBtZW1vaXphdGlvbk1hcC5zZXQoaW5wdXRWYWx1ZSwgcmV0dXJuVmFsdWUpOwoKICAgIGlucHV0VmFsdWUuZm9yRWFjaCgoaXRlbSkgPT4gewogICAgICByZXR1cm5WYWx1ZS5wdXNoKF9kcm9wVW5kZWZpbmVkS2V5cyhpdGVtLCBtZW1vaXphdGlvbk1hcCkpOwogICAgfSk7CgogICAgcmV0dXJuIHJldHVyblZhbHVlIDsKICB9CgogIHJldHVybiBpbnB1dFZhbHVlOwp9CgpmdW5jdGlvbiBpc1Bvam8oaW5wdXQpIHsKICBpZiAoIWlzUGxhaW5PYmplY3QoaW5wdXQpKSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICB0cnkgewogICAgY29uc3QgbmFtZSA9IChPYmplY3QuZ2V0UHJvdG90eXBlT2YoaW5wdXQpICkuY29uc3RydWN0b3IubmFtZTsKICAgIHJldHVybiAhbmFtZSB8fCBuYW1lID09PSAnT2JqZWN0JzsKICB9IGNhdGNoIChlKSB7CiAgICByZXR1cm4gdHJ1ZTsKICB9Cn0KCi8qKgogKiBEb2VzIHRoaXMgZmlsZW5hbWUgbG9vayBsaWtlIGl0J3MgcGFydCBvZiB0aGUgYXBwIGNvZGU/CiAqLwpmdW5jdGlvbiBmaWxlbmFtZUlzSW5BcHAoZmlsZW5hbWUsIGlzTmF0aXZlID0gZmFsc2UpIHsKICBjb25zdCBpc0ludGVybmFsID0KICAgIGlzTmF0aXZlIHx8CiAgICAoZmlsZW5hbWUgJiYKICAgICAgLy8gSXQncyBub3QgaW50ZXJuYWwgaWYgaXQncyBhbiBhYnNvbHV0ZSBsaW51eCBwYXRoCiAgICAgICFmaWxlbmFtZS5zdGFydHNXaXRoKCcvJykgJiYKICAgICAgLy8gSXQncyBub3QgaW50ZXJuYWwgaWYgaXQncyBhbiBhYnNvbHV0ZSB3aW5kb3dzIHBhdGgKICAgICAgIWZpbGVuYW1lLm1hdGNoKC9eW0EtWl06LykgJiYKICAgICAgLy8gSXQncyBub3QgaW50ZXJuYWwgaWYgdGhlIHBhdGggaXMgc3RhcnRpbmcgd2l0aCBhIGRvdAogICAgICAhZmlsZW5hbWUuc3RhcnRzV2l0aCgnLicpICYmCiAgICAgIC8vIEl0J3Mgbm90IGludGVybmFsIGlmIHRoZSBmcmFtZSBoYXMgYSBwcm90b2NvbC4gSW4gbm9kZSwgdGhpcyBpcyB1c3VhbGx5IHRoZSBjYXNlIGlmIHRoZSBmaWxlIGdvdCBwcmUtcHJvY2Vzc2VkIHdpdGggYSBidW5kbGVyIGxpa2Ugd2VicGFjawogICAgICAhZmlsZW5hbWUubWF0Y2goL15bYS16QS1aXShbYS16QS1aMC05LlwtK10pKjpcL1wvLykpOyAvLyBTY2hlbWEgZnJvbTogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzM2NDE3ODIKCiAgLy8gaW5fYXBwIGlzIGFsbCB0aGF0J3Mgbm90IGFuIGludGVybmFsIE5vZGUgZnVuY3Rpb24gb3IgYSBtb2R1bGUgd2l0aGluIG5vZGVfbW9kdWxlcwogIC8vIG5vdGUgdGhhdCBpc05hdGl2ZSBhcHBlYXJzIHRvIHJldHVybiB0cnVlIGV2ZW4gZm9yIG5vZGUgY29yZSBsaWJyYXJpZXMKICAvLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2dldHNlbnRyeS9yYXZlbi1ub2RlL2lzc3Vlcy8xNzYKCiAgcmV0dXJuICFpc0ludGVybmFsICYmIGZpbGVuYW1lICE9PSB1bmRlZmluZWQgJiYgIWZpbGVuYW1lLmluY2x1ZGVzKCdub2RlX21vZHVsZXMvJyk7Cn0KCmNvbnN0IFNUQUNLVFJBQ0VfRlJBTUVfTElNSVQgPSA1MDsKY29uc3QgU1RSSVBfRlJBTUVfUkVHRVhQID0gL2NhcHR1cmVNZXNzYWdlfGNhcHR1cmVFeGNlcHRpb24vOwoKLyoqCiAqIFJlbW92ZXMgU2VudHJ5IGZyYW1lcyBmcm9tIHRoZSB0b3AgYW5kIGJvdHRvbSBvZiB0aGUgc3RhY2sgaWYgcHJlc2VudCBhbmQgZW5mb3JjZXMgYSBsaW1pdCBvZiBtYXggbnVtYmVyIG9mIGZyYW1lcy4KICogQXNzdW1lcyBzdGFjayBpbnB1dCBpcyBvcmRlcmVkIGZyb20gdG9wIHRvIGJvdHRvbSBhbmQgcmV0dXJucyB0aGUgcmV2ZXJzZSByZXByZXNlbnRhdGlvbiBzbyBjYWxsIHNpdGUgb2YgdGhlCiAqIGZ1bmN0aW9uIHRoYXQgY2F1c2VkIHRoZSBjcmFzaCBpcyB0aGUgbGFzdCBmcmFtZSBpbiB0aGUgYXJyYXkuCiAqIEBoaWRkZW4KICovCmZ1bmN0aW9uIHN0cmlwU2VudHJ5RnJhbWVzQW5kUmV2ZXJzZShzdGFjaykgewogIGlmICghc3RhY2subGVuZ3RoKSB7CiAgICByZXR1cm4gW107CiAgfQoKICBjb25zdCBsb2NhbFN0YWNrID0gQXJyYXkuZnJvbShzdGFjayk7CgogIC8vIElmIHN0YWNrIHN0YXJ0cyB3aXRoIG9uZSBvZiBvdXIgQVBJIGNhbGxzLCByZW1vdmUgaXQgKHN0YXJ0cywgbWVhbmluZyBpdCdzIHRoZSB0b3Agb2YgdGhlIHN0YWNrIC0gYWthIGxhc3QgY2FsbCkKICBpZiAoL3NlbnRyeVdyYXBwZWQvLnRlc3QobG9jYWxTdGFja1tsb2NhbFN0YWNrLmxlbmd0aCAtIDFdLmZ1bmN0aW9uIHx8ICcnKSkgewogICAgbG9jYWxTdGFjay5wb3AoKTsKICB9CgogIC8vIFJldmVyc2luZyBpbiB0aGUgbWlkZGxlIG9mIHRoZSBwcm9jZWR1cmUgYWxsb3dzIHVzIHRvIGp1c3QgcG9wIHRoZSB2YWx1ZXMgb2ZmIHRoZSBzdGFjawogIGxvY2FsU3RhY2sucmV2ZXJzZSgpOwoKICAvLyBJZiBzdGFjayBlbmRzIHdpdGggb25lIG9mIG91ciBpbnRlcm5hbCBBUEkgY2FsbHMsIHJlbW92ZSBpdCAoZW5kcywgbWVhbmluZyBpdCdzIHRoZSBib3R0b20gb2YgdGhlIHN0YWNrIC0gYWthIHRvcC1tb3N0IGNhbGwpCiAgaWYgKFNUUklQX0ZSQU1FX1JFR0VYUC50ZXN0KGxvY2FsU3RhY2tbbG9jYWxTdGFjay5sZW5ndGggLSAxXS5mdW5jdGlvbiB8fCAnJykpIHsKICAgIGxvY2FsU3RhY2sucG9wKCk7CgogICAgLy8gV2hlbiB1c2luZyBzeW50aGV0aWMgZXZlbnRzLCB3ZSB3aWxsIGhhdmUgYSAyIGxldmVscyBkZWVwIHN0YWNrLCBhcyBgbmV3IEVycm9yKCdTZW50cnkgc3ludGhldGljRXhjZXB0aW9uJylgCiAgICAvLyBpcyBwcm9kdWNlZCB3aXRoaW4gdGhlIGh1YiBpdHNlbGYsIG1ha2luZyBpdDoKICAgIC8vCiAgICAvLyAgIFNlbnRyeS5jYXB0dXJlRXhjZXB0aW9uKCkKICAgIC8vICAgZ2V0Q3VycmVudEh1YigpLmNhcHR1cmVFeGNlcHRpb24oKQogICAgLy8KICAgIC8vIGluc3RlYWQgb2YganVzdCB0aGUgdG9wIGBTZW50cnlgIGNhbGwgaXRzZWxmLgogICAgLy8gVGhpcyBmb3JjZXMgdXMgdG8gcG9zc2libHkgc3RyaXAgYW4gYWRkaXRpb25hbCBmcmFtZSBpbiB0aGUgZXhhY3Qgc2FtZSB3YXMgYXMgYWJvdmUuCiAgICBpZiAoU1RSSVBfRlJBTUVfUkVHRVhQLnRlc3QobG9jYWxTdGFja1tsb2NhbFN0YWNrLmxlbmd0aCAtIDFdLmZ1bmN0aW9uIHx8ICcnKSkgewogICAgICBsb2NhbFN0YWNrLnBvcCgpOwogICAgfQogIH0KCiAgcmV0dXJuIGxvY2FsU3RhY2suc2xpY2UoMCwgU1RBQ0tUUkFDRV9GUkFNRV9MSU1JVCkubWFwKGZyYW1lID0+ICh7CiAgICAuLi5mcmFtZSwKICAgIGZpbGVuYW1lOiBmcmFtZS5maWxlbmFtZSB8fCBsb2NhbFN0YWNrW2xvY2FsU3RhY2subGVuZ3RoIC0gMV0uZmlsZW5hbWUsCiAgICBmdW5jdGlvbjogZnJhbWUuZnVuY3Rpb24gfHwgJz8nLAogIH0pKTsKfQoKY29uc3QgZGVmYXVsdEZ1bmN0aW9uTmFtZSA9ICc8YW5vbnltb3VzPic7CgovKioKICogU2FmZWx5IGV4dHJhY3QgZnVuY3Rpb24gbmFtZSBmcm9tIGl0c2VsZgogKi8KZnVuY3Rpb24gZ2V0RnVuY3Rpb25OYW1lKGZuKSB7CiAgdHJ5IHsKICAgIGlmICghZm4gfHwgdHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7CiAgICAgIHJldHVybiBkZWZhdWx0RnVuY3Rpb25OYW1lOwogICAgfQogICAgcmV0dXJuIGZuLm5hbWUgfHwgZGVmYXVsdEZ1bmN0aW9uTmFtZTsKICB9IGNhdGNoIChlKSB7CiAgICAvLyBKdXN0IGFjY2Vzc2luZyBjdXN0b20gcHJvcHMgaW4gc29tZSBTZWxlbml1bSBlbnZpcm9ubWVudHMKICAgIC8vIGNhbiBjYXVzZSBhICJQZXJtaXNzaW9uIGRlbmllZCIgZXhjZXB0aW9uIChzZWUgcmF2ZW4tanMjNDk1KS4KICAgIHJldHVybiBkZWZhdWx0RnVuY3Rpb25OYW1lOwogIH0KfQoKLyoqCiAqIFVVSUQ0IGdlbmVyYXRvcgogKgogKiBAcmV0dXJucyBzdHJpbmcgR2VuZXJhdGVkIFVVSUQ0LgogKi8KZnVuY3Rpb24gdXVpZDQoKSB7CiAgY29uc3QgZ2JsID0gR0xPQkFMX09CSiA7CiAgY29uc3QgY3J5cHRvID0gZ2JsLmNyeXB0byB8fCBnYmwubXNDcnlwdG87CgogIGxldCBnZXRSYW5kb21CeXRlID0gKCkgPT4gTWF0aC5yYW5kb20oKSAqIDE2OwogIHRyeSB7CiAgICBpZiAoY3J5cHRvICYmIGNyeXB0by5yYW5kb21VVUlEKSB7CiAgICAgIHJldHVybiBjcnlwdG8ucmFuZG9tVVVJRCgpLnJlcGxhY2UoLy0vZywgJycpOwogICAgfQogICAgaWYgKGNyeXB0byAmJiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKSB7CiAgICAgIGdldFJhbmRvbUJ5dGUgPSAoKSA9PiB7CiAgICAgICAgLy8gY3J5cHRvLmdldFJhbmRvbVZhbHVlcyBtaWdodCByZXR1cm4gdW5kZWZpbmVkIGluc3RlYWQgb2YgdGhlIHR5cGVkIGFycmF5CiAgICAgICAgLy8gaW4gb2xkIENocm9taXVtIHZlcnNpb25zIChlLmcuIDIzLjAuMTIzNS4wICgxNTE0MjIpKQogICAgICAgIC8vIEhvd2V2ZXIsIGB0eXBlZEFycmF5YCBpcyBzdGlsbCBmaWxsZWQgaW4tcGxhY2UuCiAgICAgICAgLy8gQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvQ3J5cHRvL2dldFJhbmRvbVZhbHVlcyN0eXBlZGFycmF5CiAgICAgICAgY29uc3QgdHlwZWRBcnJheSA9IG5ldyBVaW50OEFycmF5KDEpOwogICAgICAgIGNyeXB0by5nZXRSYW5kb21WYWx1ZXModHlwZWRBcnJheSk7CiAgICAgICAgcmV0dXJuIHR5cGVkQXJyYXlbMF07CiAgICAgIH07CiAgICB9CiAgfSBjYXRjaCAoXykgewogICAgLy8gc29tZSBydW50aW1lcyBjYW4gY3Jhc2ggaW52b2tpbmcgY3J5cHRvCiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZ2V0c2VudHJ5L3NlbnRyeS1qYXZhc2NyaXB0L2lzc3Vlcy84OTM1CiAgfQoKICAvLyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzEwNTAzNC9ob3ctdG8tY3JlYXRlLWEtZ3VpZC11dWlkLWluLWphdmFzY3JpcHQvMjExNzUyMyMyMTE3NTIzCiAgLy8gQ29uY2F0ZW5hdGluZyB0aGUgZm9sbG93aW5nIG51bWJlcnMgYXMgc3RyaW5ncyByZXN1bHRzIGluICcxMDAwMDAwMDEwMDA0MDAwODAwMDEwMDAwMDAwMDAwMCcKICByZXR1cm4gKChbMWU3XSApICsgMWUzICsgNGUzICsgOGUzICsgMWUxMSkucmVwbGFjZSgvWzAxOF0vZywgYyA9PgogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWJpdHdpc2UKICAgICgoYyApIF4gKChnZXRSYW5kb21CeXRlKCkgJiAxNSkgPj4gKChjICkgLyA0KSkpLnRvU3RyaW5nKDE2KSwKICApOwp9CgovKioKICogQ2hlY2tzIHdoZXRoZXIgdGhlIGdpdmVuIGlucHV0IGlzIGFscmVhZHkgYW4gYXJyYXksIGFuZCBpZiBpdCBpc24ndCwgd3JhcHMgaXQgaW4gb25lLgogKgogKiBAcGFyYW0gbWF5YmVBcnJheSBJbnB1dCB0byB0dXJuIGludG8gYW4gYXJyYXksIGlmIG5lY2Vzc2FyeQogKiBAcmV0dXJucyBUaGUgaW5wdXQsIGlmIGFscmVhZHkgYW4gYXJyYXksIG9yIGFuIGFycmF5IHdpdGggdGhlIGlucHV0IGFzIHRoZSBvbmx5IGVsZW1lbnQsIGlmIG5vdAogKi8KZnVuY3Rpb24gYXJyYXlpZnkobWF5YmVBcnJheSkgewogIHJldHVybiBBcnJheS5pc0FycmF5KG1heWJlQXJyYXkpID8gbWF5YmVBcnJheSA6IFttYXliZUFycmF5XTsKfQoKLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1tZW1iZXItYWNjZXNzICovCi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi8KCi8qKgogKiBIZWxwZXIgdG8gZGVjeWNsZSBqc29uIG9iamVjdHMKICovCmZ1bmN0aW9uIG1lbW9CdWlsZGVyKCkgewogIGNvbnN0IGhhc1dlYWtTZXQgPSB0eXBlb2YgV2Vha1NldCA9PT0gJ2Z1bmN0aW9uJzsKICBjb25zdCBpbm5lciA9IGhhc1dlYWtTZXQgPyBuZXcgV2Vha1NldCgpIDogW107CiAgZnVuY3Rpb24gbWVtb2l6ZShvYmopIHsKICAgIGlmIChoYXNXZWFrU2V0KSB7CiAgICAgIGlmIChpbm5lci5oYXMob2JqKSkgewogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICAgIGlubmVyLmFkZChvYmopOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3ByZWZlci1mb3Itb2YKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5uZXIubGVuZ3RoOyBpKyspIHsKICAgICAgY29uc3QgdmFsdWUgPSBpbm5lcltpXTsKICAgICAgaWYgKHZhbHVlID09PSBvYmopIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgfQogICAgaW5uZXIucHVzaChvYmopOwogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgZnVuY3Rpb24gdW5tZW1vaXplKG9iaikgewogICAgaWYgKGhhc1dlYWtTZXQpIHsKICAgICAgaW5uZXIuZGVsZXRlKG9iaik7CiAgICB9IGVsc2UgewogICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlubmVyLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgaWYgKGlubmVyW2ldID09PSBvYmopIHsKICAgICAgICAgIGlubmVyLnNwbGljZShpLCAxKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KICByZXR1cm4gW21lbW9pemUsIHVubWVtb2l6ZV07Cn0KCi8qKgogKiBSZWN1cnNpdmVseSBub3JtYWxpemVzIHRoZSBnaXZlbiBvYmplY3QuCiAqCiAqIC0gQ3JlYXRlcyBhIGNvcHkgdG8gcHJldmVudCBvcmlnaW5hbCBpbnB1dCBtdXRhdGlvbgogKiAtIFNraXBzIG5vbi1lbnVtZXJhYmxlIHByb3BlcnRpZXMKICogLSBXaGVuIHN0cmluZ2lmeWluZywgY2FsbHMgYHRvSlNPTmAgaWYgaW1wbGVtZW50ZWQKICogLSBSZW1vdmVzIGNpcmN1bGFyIHJlZmVyZW5jZXMKICogLSBUcmFuc2xhdGVzIG5vbi1zZXJpYWxpemFibGUgdmFsdWVzIChgdW5kZWZpbmVkYC9gTmFOYC9mdW5jdGlvbnMpIHRvIHNlcmlhbGl6YWJsZSBmb3JtYXQKICogLSBUcmFuc2xhdGVzIGtub3duIGdsb2JhbCBvYmplY3RzL2NsYXNzZXMgdG8gYSBzdHJpbmcgcmVwcmVzZW50YXRpb25zCiAqIC0gVGFrZXMgY2FyZSBvZiBgRXJyb3JgIG9iamVjdCBzZXJpYWxpemF0aW9uCiAqIC0gT3B0aW9uYWxseSBsaW1pdHMgZGVwdGggb2YgZmluYWwgb3V0cHV0CiAqIC0gT3B0aW9uYWxseSBsaW1pdHMgbnVtYmVyIG9mIHByb3BlcnRpZXMvZWxlbWVudHMgaW5jbHVkZWQgaW4gYW55IHNpbmdsZSBvYmplY3QvYXJyYXkKICoKICogQHBhcmFtIGlucHV0IFRoZSBvYmplY3QgdG8gYmUgbm9ybWFsaXplZC4KICogQHBhcmFtIGRlcHRoIFRoZSBtYXggZGVwdGggdG8gd2hpY2ggdG8gbm9ybWFsaXplIHRoZSBvYmplY3QuIChBbnl0aGluZyBkZWVwZXIgc3RyaW5naWZpZWQgd2hvbGUuKQogKiBAcGFyYW0gbWF4UHJvcGVydGllcyBUaGUgbWF4IG51bWJlciBvZiBlbGVtZW50cyBvciBwcm9wZXJ0aWVzIHRvIGJlIGluY2x1ZGVkIGluIGFueSBzaW5nbGUgYXJyYXkgb3IKICogb2JqZWN0IGluIHRoZSBub3JtYWxsaXplZCBvdXRwdXQuCiAqIEByZXR1cm5zIEEgbm9ybWFsaXplZCB2ZXJzaW9uIG9mIHRoZSBvYmplY3QsIG9yIGAiKipub24tc2VyaWFsaXphYmxlKioiYCBpZiBhbnkgZXJyb3JzIGFyZSB0aHJvd24gZHVyaW5nIG5vcm1hbGl6YXRpb24uCiAqLwovLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueQpmdW5jdGlvbiBub3JtYWxpemUoaW5wdXQsIGRlcHRoID0gMTAwLCBtYXhQcm9wZXJ0aWVzID0gK0luZmluaXR5KSB7CiAgdHJ5IHsKICAgIC8vIHNpbmNlIHdlJ3JlIGF0IHRoZSBvdXRlcm1vc3QgbGV2ZWwsIHdlIGRvbid0IHByb3ZpZGUgYSBrZXkKICAgIHJldHVybiB2aXNpdCgnJywgaW5wdXQsIGRlcHRoLCBtYXhQcm9wZXJ0aWVzKTsKICB9IGNhdGNoIChlcnIpIHsKICAgIHJldHVybiB7IEVSUk9SOiBgKipub24tc2VyaWFsaXphYmxlKiogKCR7ZXJyfSlgIH07CiAgfQp9CgovKioKICogVmlzaXRzIGEgbm9kZSB0byBwZXJmb3JtIG5vcm1hbGl6YXRpb24gb24gaXQKICoKICogQHBhcmFtIGtleSBUaGUga2V5IGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIG5vZGUKICogQHBhcmFtIHZhbHVlIFRoZSBub2RlIHRvIGJlIHZpc2l0ZWQKICogQHBhcmFtIGRlcHRoIE9wdGlvbmFsIG51bWJlciBpbmRpY2F0aW5nIHRoZSBtYXhpbXVtIHJlY3Vyc2lvbiBkZXB0aAogKiBAcGFyYW0gbWF4UHJvcGVydGllcyBPcHRpb25hbCBtYXhpbXVtIG51bWJlciBvZiBwcm9wZXJ0aWVzL2VsZW1lbnRzIGluY2x1ZGVkIGluIGFueSBzaW5nbGUgb2JqZWN0L2FycmF5CiAqIEBwYXJhbSBtZW1vIE9wdGlvbmFsIE1lbW8gY2xhc3MgaGFuZGxpbmcgZGVjeWNsaW5nCiAqLwpmdW5jdGlvbiB2aXNpdCgKICBrZXksCiAgdmFsdWUsCiAgZGVwdGggPSArSW5maW5pdHksCiAgbWF4UHJvcGVydGllcyA9ICtJbmZpbml0eSwKICBtZW1vID0gbWVtb0J1aWxkZXIoKSwKKSB7CiAgY29uc3QgW21lbW9pemUsIHVubWVtb2l6ZV0gPSBtZW1vOwoKICAvLyBHZXQgdGhlIHNpbXBsZSBjYXNlcyBvdXQgb2YgdGhlIHdheSBmaXJzdAogIGlmICgKICAgIHZhbHVlID09IG51bGwgfHwgLy8gdGhpcyBtYXRjaGVzIG51bGwgYW5kIHVuZGVmaW5lZCAtPiBlcWVxIG5vdCBlcWVxZXEKICAgIChbJ251bWJlcicsICdib29sZWFuJywgJ3N0cmluZyddLmluY2x1ZGVzKHR5cGVvZiB2YWx1ZSkgJiYgIWlzTmFOJDEodmFsdWUpKQogICkgewogICAgcmV0dXJuIHZhbHVlIDsKICB9CgogIGNvbnN0IHN0cmluZ2lmaWVkID0gc3RyaW5naWZ5VmFsdWUoa2V5LCB2YWx1ZSk7CgogIC8vIEFueXRoaW5nIHdlIGNvdWxkIHBvdGVudGlhbGx5IGRpZyBpbnRvIG1vcmUgKG9iamVjdHMgb3IgYXJyYXlzKSB3aWxsIGhhdmUgY29tZSBiYWNrIGFzIGAiW29iamVjdCBYWFhYXSJgLgogIC8vIEV2ZXJ5dGhpbmcgZWxzZSB3aWxsIGhhdmUgYWxyZWFkeSBiZWVuIHNlcmlhbGl6ZWQsIHNvIGlmIHdlIGRvbid0IHNlZSB0aGF0IHBhdHRlcm4sIHdlJ3JlIGRvbmUuCiAgaWYgKCFzdHJpbmdpZmllZC5zdGFydHNXaXRoKCdbb2JqZWN0ICcpKSB7CiAgICByZXR1cm4gc3RyaW5naWZpZWQ7CiAgfQoKICAvLyBGcm9tIGhlcmUgb24sIHdlIGNhbiBhc3NlcnQgdGhhdCBgdmFsdWVgIGlzIGVpdGhlciBhbiBvYmplY3Qgb3IgYW4gYXJyYXkuCgogIC8vIERvIG5vdCBub3JtYWxpemUgb2JqZWN0cyB0aGF0IHdlIGtub3cgaGF2ZSBhbHJlYWR5IGJlZW4gbm9ybWFsaXplZC4gQXMgYSBnZW5lcmFsIHJ1bGUsIHRoZQogIC8vICJfX3NlbnRyeV9za2lwX25vcm1hbGl6YXRpb25fXyIgcHJvcGVydHkgc2hvdWxkIG9ubHkgYmUgdXNlZCBzcGFyaW5nbHkgYW5kIG9ubHkgc2hvdWxkIG9ubHkgYmUgc2V0IG9uIG9iamVjdHMgdGhhdAogIC8vIGhhdmUgYWxyZWFkeSBiZWVuIG5vcm1hbGl6ZWQuCiAgaWYgKCh2YWx1ZSApWydfX3NlbnRyeV9za2lwX25vcm1hbGl6YXRpb25fXyddKSB7CiAgICByZXR1cm4gdmFsdWUgOwogIH0KCiAgLy8gV2UgY2FuIHNldCBgX19zZW50cnlfb3ZlcnJpZGVfbm9ybWFsaXphdGlvbl9kZXB0aF9fYCBvbiBhbiBvYmplY3QgdG8gZW5zdXJlIHRoYXQgZnJvbSB0aGVyZQogIC8vIFdlIGtlZXAgYSBjZXJ0YWluIGFtb3VudCBvZiBkZXB0aC4KICAvLyBUaGlzIHNob3VsZCBiZSB1c2VkIHNwYXJpbmdseSwgZS5nLiB3ZSB1c2UgaXQgZm9yIHRoZSByZWR1eCBpbnRlZ3JhdGlvbiB0byBlbnN1cmUgd2UgZ2V0IGEgY2VydGFpbiBhbW91bnQgb2Ygc3RhdGUuCiAgY29uc3QgcmVtYWluaW5nRGVwdGggPQogICAgdHlwZW9mICh2YWx1ZSApWydfX3NlbnRyeV9vdmVycmlkZV9ub3JtYWxpemF0aW9uX2RlcHRoX18nXSA9PT0gJ251bWJlcicKICAgICAgPyAoKHZhbHVlIClbJ19fc2VudHJ5X292ZXJyaWRlX25vcm1hbGl6YXRpb25fZGVwdGhfXyddICkKICAgICAgOiBkZXB0aDsKCiAgLy8gV2UncmUgYWxzbyBkb25lIGlmIHdlJ3ZlIHJlYWNoZWQgdGhlIG1heCBkZXB0aAogIGlmIChyZW1haW5pbmdEZXB0aCA9PT0gMCkgewogICAgLy8gQXQgdGhpcyBwb2ludCB3ZSBrbm93IGBzZXJpYWxpemVkYCBpcyBhIHN0cmluZyBvZiB0aGUgZm9ybSBgIltvYmplY3QgWFhYWF0iYC4gQ2xlYW4gaXQgdXAgc28gaXQncyBqdXN0IGAiW1hYWFhdImAuCiAgICByZXR1cm4gc3RyaW5naWZpZWQucmVwbGFjZSgnb2JqZWN0ICcsICcnKTsKICB9CgogIC8vIElmIHdlJ3ZlIGFscmVhZHkgdmlzaXRlZCB0aGlzIGJyYW5jaCwgYmFpbCBvdXQsIGFzIGl0J3MgY2lyY3VsYXIgcmVmZXJlbmNlLiBJZiBub3QsIG5vdGUgdGhhdCB3ZSdyZSBzZWVpbmcgaXQgbm93LgogIGlmIChtZW1vaXplKHZhbHVlKSkgewogICAgcmV0dXJuICdbQ2lyY3VsYXIgfl0nOwogIH0KCiAgLy8gSWYgdGhlIHZhbHVlIGhhcyBhIGB0b0pTT05gIG1ldGhvZCwgd2UgY2FsbCBpdCB0byBleHRyYWN0IG1vcmUgaW5mb3JtYXRpb24KICBjb25zdCB2YWx1ZVdpdGhUb0pTT04gPSB2YWx1ZSA7CiAgaWYgKHZhbHVlV2l0aFRvSlNPTiAmJiB0eXBlb2YgdmFsdWVXaXRoVG9KU09OLnRvSlNPTiA9PT0gJ2Z1bmN0aW9uJykgewogICAgdHJ5IHsKICAgICAgY29uc3QganNvblZhbHVlID0gdmFsdWVXaXRoVG9KU09OLnRvSlNPTigpOwogICAgICAvLyBXZSBuZWVkIHRvIG5vcm1hbGl6ZSB0aGUgcmV0dXJuIHZhbHVlIG9mIGAudG9KU09OKClgIGluIGNhc2UgaXQgaGFzIGNpcmN1bGFyIHJlZmVyZW5jZXMKICAgICAgcmV0dXJuIHZpc2l0KCcnLCBqc29uVmFsdWUsIHJlbWFpbmluZ0RlcHRoIC0gMSwgbWF4UHJvcGVydGllcywgbWVtbyk7CiAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgLy8gcGFzcyAoVGhlIGJ1aWx0LWluIGB0b0pTT05gIGZhaWxlZCwgYnV0IHdlIGNhbiBzdGlsbCB0cnkgdG8gZG8gaXQgb3Vyc2VsdmVzKQogICAgfQogIH0KCiAgLy8gQXQgdGhpcyBwb2ludCB3ZSBrbm93IHdlIGVpdGhlciBoYXZlIGFuIG9iamVjdCBvciBhbiBhcnJheSwgd2UgaGF2ZW4ndCBzZWVuIGl0IGJlZm9yZSwgYW5kIHdlJ3JlIGdvaW5nIHRvIHJlY3Vyc2UKICAvLyBiZWNhdXNlIHdlIGhhdmVuJ3QgeWV0IHJlYWNoZWQgdGhlIG1heCBkZXB0aC4gQ3JlYXRlIGFuIGFjY3VtdWxhdG9yIHRvIGhvbGQgdGhlIHJlc3VsdHMgb2YgdmlzaXRpbmcgZWFjaAogIC8vIHByb3BlcnR5L2VudHJ5LCBhbmQga2VlcCB0cmFjayBvZiB0aGUgbnVtYmVyIG9mIGl0ZW1zIHdlIGFkZCB0byBpdC4KICBjb25zdCBub3JtYWxpemVkID0gKEFycmF5LmlzQXJyYXkodmFsdWUpID8gW10gOiB7fSkgOwogIGxldCBudW1BZGRlZCA9IDA7CgogIC8vIEJlZm9yZSB3ZSBiZWdpbiwgY29udmVydGBFcnJvcmAgYW5kYEV2ZW50YCBpbnN0YW5jZXMgaW50byBwbGFpbiBvYmplY3RzLCBzaW5jZSBzb21lIG9mIGVhY2ggb2YgdGhlaXIgcmVsZXZhbnQKICAvLyBwcm9wZXJ0aWVzIGFyZSBub24tZW51bWVyYWJsZSBhbmQgb3RoZXJ3aXNlIHdvdWxkIGdldCBtaXNzZWQuCiAgY29uc3QgdmlzaXRhYmxlID0gY29udmVydFRvUGxhaW5PYmplY3QodmFsdWUgKTsKCiAgZm9yIChjb25zdCB2aXNpdEtleSBpbiB2aXNpdGFibGUpIHsKICAgIC8vIEF2b2lkIGl0ZXJhdGluZyBvdmVyIGZpZWxkcyBpbiB0aGUgcHJvdG90eXBlIGlmIHRoZXkndmUgc29tZWhvdyBiZWVuIGV4cG9zZWQgdG8gZW51bWVyYXRpb24uCiAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh2aXNpdGFibGUsIHZpc2l0S2V5KSkgewogICAgICBjb250aW51ZTsKICAgIH0KCiAgICBpZiAobnVtQWRkZWQgPj0gbWF4UHJvcGVydGllcykgewogICAgICBub3JtYWxpemVkW3Zpc2l0S2V5XSA9ICdbTWF4UHJvcGVydGllcyB+XSc7CiAgICAgIGJyZWFrOwogICAgfQoKICAgIC8vIFJlY3Vyc2l2ZWx5IHZpc2l0IGFsbCB0aGUgY2hpbGQgbm9kZXMKICAgIGNvbnN0IHZpc2l0VmFsdWUgPSB2aXNpdGFibGVbdmlzaXRLZXldOwogICAgbm9ybWFsaXplZFt2aXNpdEtleV0gPSB2aXNpdCh2aXNpdEtleSwgdmlzaXRWYWx1ZSwgcmVtYWluaW5nRGVwdGggLSAxLCBtYXhQcm9wZXJ0aWVzLCBtZW1vKTsKCiAgICBudW1BZGRlZCsrOwogIH0KCiAgLy8gT25jZSB3ZSd2ZSB2aXNpdGVkIGFsbCB0aGUgYnJhbmNoZXMsIHJlbW92ZSB0aGUgcGFyZW50IGZyb20gbWVtbyBzdG9yYWdlCiAgdW5tZW1vaXplKHZhbHVlKTsKCiAgLy8gUmV0dXJuIGFjY3VtdWxhdGVkIHZhbHVlcwogIHJldHVybiBub3JtYWxpemVkOwp9CgovKiBlc2xpbnQtZGlzYWJsZSBjb21wbGV4aXR5ICovCi8qKgogKiBTdHJpbmdpZnkgdGhlIGdpdmVuIHZhbHVlLiBIYW5kbGVzIHZhcmlvdXMga25vd24gc3BlY2lhbCB2YWx1ZXMgYW5kIHR5cGVzLgogKgogKiBOb3QgbWVhbnQgdG8gYmUgdXNlZCBvbiBzaW1wbGUgcHJpbWl0aXZlcyB3aGljaCBhbHJlYWR5IGhhdmUgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24sIGFzIGl0IHdpbGwsIGZvciBleGFtcGxlLCB0dXJuCiAqIHRoZSBudW1iZXIgMTIzMSBpbnRvICJbT2JqZWN0IE51bWJlcl0iLCBub3Igb24gYG51bGxgLCBhcyBpdCB3aWxsIHRocm93LgogKgogKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRvIHN0cmluZ2lmeQogKiBAcmV0dXJucyBBIHN0cmluZ2lmaWVkIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiB2YWx1ZQogKi8KZnVuY3Rpb24gc3RyaW5naWZ5VmFsdWUoCiAga2V5LAogIC8vIHRoaXMgdHlwZSBpcyBhIHRpbnkgYml0IG9mIGEgY2hlYXQsIHNpbmNlIHRoaXMgZnVuY3Rpb24gZG9lcyBoYW5kbGUgTmFOICh3aGljaCBpcyB0ZWNobmljYWxseSBhIG51bWJlciksIGJ1dCBmb3IKICAvLyBvdXIgaW50ZXJuYWwgdXNlLCBpdCdsbCBkbwogIHZhbHVlLAopIHsKICB0cnkgewogICAgaWYgKGtleSA9PT0gJ2RvbWFpbicgJiYgdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiAodmFsdWUgKS5fZXZlbnRzKSB7CiAgICAgIHJldHVybiAnW0RvbWFpbl0nOwogICAgfQoKICAgIGlmIChrZXkgPT09ICdkb21haW5FbWl0dGVyJykgewogICAgICByZXR1cm4gJ1tEb21haW5FbWl0dGVyXSc7CiAgICB9CgogICAgLy8gSXQncyBzYWZlIHRvIHVzZSBgZ2xvYmFsYCwgYHdpbmRvd2AsIGFuZCBgZG9jdW1lbnRgIGhlcmUgaW4gdGhpcyBtYW5uZXIsIGFzIHdlIGFyZSBhc3NlcnRpbmcgdXNpbmcgYHR5cGVvZmAgZmlyc3QKICAgIC8vIHdoaWNoIHdvbid0IHRocm93IGlmIHRoZXkgYXJlIG5vdCBwcmVzZW50LgoKICAgIGlmICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJyAmJiB2YWx1ZSA9PT0gZ2xvYmFsKSB7CiAgICAgIHJldHVybiAnW0dsb2JhbF0nOwogICAgfQoKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLWdsb2JhbHMKICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB2YWx1ZSA9PT0gd2luZG93KSB7CiAgICAgIHJldHVybiAnW1dpbmRvd10nOwogICAgfQoKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLWdsb2JhbHMKICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnICYmIHZhbHVlID09PSBkb2N1bWVudCkgewogICAgICByZXR1cm4gJ1tEb2N1bWVudF0nOwogICAgfQoKICAgIGlmIChpc1Z1ZVZpZXdNb2RlbCh2YWx1ZSkpIHsKICAgICAgcmV0dXJuICdbVnVlVmlld01vZGVsXSc7CiAgICB9CgogICAgLy8gUmVhY3QncyBTeW50aGV0aWNFdmVudCB0aGluZ3kKICAgIGlmIChpc1N5bnRoZXRpY0V2ZW50KHZhbHVlKSkgewogICAgICByZXR1cm4gJ1tTeW50aGV0aWNFdmVudF0nOwogICAgfQoKICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIHZhbHVlICE9PSB2YWx1ZSkgewogICAgICByZXR1cm4gJ1tOYU5dJzsKICAgIH0KCiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSB7CiAgICAgIHJldHVybiBgW0Z1bmN0aW9uOiAke2dldEZ1bmN0aW9uTmFtZSh2YWx1ZSl9XWA7CiAgICB9CgogICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N5bWJvbCcpIHsKICAgICAgcmV0dXJuIGBbJHtTdHJpbmcodmFsdWUpfV1gOwogICAgfQoKICAgIC8vIHN0cmluZ2lmaWVkIEJpZ0ludHMgYXJlIGluZGlzdGluZ3Vpc2hhYmxlIGZyb20gcmVndWxhciBudW1iZXJzLCBzbyB3ZSBuZWVkIHRvIGxhYmVsIHRoZW0gdG8gYXZvaWQgY29uZnVzaW9uCiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnYmlnaW50JykgewogICAgICByZXR1cm4gYFtCaWdJbnQ6ICR7U3RyaW5nKHZhbHVlKX1dYDsKICAgIH0KCiAgICAvLyBOb3cgdGhhdCB3ZSd2ZSBrbm9ja2VkIG91dCBhbGwgdGhlIHNwZWNpYWwgY2FzZXMgYW5kIHRoZSBwcmltaXRpdmVzLCBhbGwgd2UgaGF2ZSBsZWZ0IGFyZSBvYmplY3RzLiBTaW1wbHkgY2FzdGluZwogICAgLy8gdGhlbSB0byBzdHJpbmdzIG1lYW5zIHRoYXQgaW5zdGFuY2VzIG9mIGNsYXNzZXMgd2hpY2ggaGF2ZW4ndCBkZWZpbmVkIHRoZWlyIGB0b1N0cmluZ1RhZ2Agd2lsbCBqdXN0IGNvbWUgb3V0IGFzCiAgICAvLyBgIltvYmplY3QgT2JqZWN0XSJgLiBJZiB3ZSBpbnN0ZWFkIGxvb2sgYXQgdGhlIGNvbnN0cnVjdG9yJ3MgbmFtZSAod2hpY2ggaXMgdGhlIHNhbWUgYXMgdGhlIG5hbWUgb2YgdGhlIGNsYXNzKSwKICAgIC8vIHdlIGNhbiBtYWtlIHN1cmUgdGhhdCBvbmx5IHBsYWluIG9iamVjdHMgY29tZSBvdXQgdGhhdCB3YXkuCiAgICBjb25zdCBvYmpOYW1lID0gZ2V0Q29uc3RydWN0b3JOYW1lKHZhbHVlKTsKCiAgICAvLyBIYW5kbGUgSFRNTCBFbGVtZW50cwogICAgaWYgKC9eSFRNTChcdyopRWxlbWVudCQvLnRlc3Qob2JqTmFtZSkpIHsKICAgICAgcmV0dXJuIGBbSFRNTEVsZW1lbnQ6ICR7b2JqTmFtZX1dYDsKICAgIH0KCiAgICByZXR1cm4gYFtvYmplY3QgJHtvYmpOYW1lfV1gOwogIH0gY2F0Y2ggKGVycikgewogICAgcmV0dXJuIGAqKm5vbi1zZXJpYWxpemFibGUqKiAoJHtlcnJ9KWA7CiAgfQp9Ci8qIGVzbGludC1lbmFibGUgY29tcGxleGl0eSAqLwoKZnVuY3Rpb24gZ2V0Q29uc3RydWN0b3JOYW1lKHZhbHVlKSB7CiAgY29uc3QgcHJvdG90eXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlKTsKCiAgcmV0dXJuIHByb3RvdHlwZSA/IHByb3RvdHlwZS5jb25zdHJ1Y3Rvci5uYW1lIDogJ251bGwgcHJvdG90eXBlJzsKfQoKLyoqCiAqIE5vcm1hbGl6ZXMgVVJMcyBpbiBleGNlcHRpb25zIGFuZCBzdGFja3RyYWNlcyB0byBhIGJhc2UgcGF0aCBzbyBTZW50cnkgY2FuIGZpbmdlcnByaW50CiAqIGFjcm9zcyBwbGF0Zm9ybXMgYW5kIHdvcmtpbmcgZGlyZWN0b3J5LgogKgogKiBAcGFyYW0gdXJsIFRoZSBVUkwgdG8gYmUgbm9ybWFsaXplZC4KICogQHBhcmFtIGJhc2VQYXRoIFRoZSBhcHBsaWNhdGlvbiBiYXNlIHBhdGguCiAqIEByZXR1cm5zIFRoZSBub3JtYWxpemVkIFVSTC4KICovCmZ1bmN0aW9uIG5vcm1hbGl6ZVVybFRvQmFzZSh1cmwsIGJhc2VQYXRoKSB7CiAgY29uc3QgZXNjYXBlZEJhc2UgPSBiYXNlUGF0aAogICAgLy8gQmFja3NsYXNoIHRvIGZvcndhcmQKICAgIC5yZXBsYWNlKC9cXC9nLCAnLycpCiAgICAvLyBFc2NhcGUgUmVnRXhwIHNwZWNpYWwgY2hhcmFjdGVycwogICAgLnJlcGxhY2UoL1t8XFx7fSgpW1xdXiQrKj8uXS9nLCAnXFwkJicpOwoKICBsZXQgbmV3VXJsID0gdXJsOwogIHRyeSB7CiAgICBuZXdVcmwgPSBkZWNvZGVVUkkodXJsKTsKICB9IGNhdGNoIChfT28pIHsKICAgIC8vIFNvbWV0aW1lIHRoaXMgYnJlYWtzCiAgfQogIHJldHVybiAoCiAgICBuZXdVcmwKICAgICAgLnJlcGxhY2UoL1xcL2csICcvJykKICAgICAgLnJlcGxhY2UoL3dlYnBhY2s6XC8/L2csICcnKSAvLyBSZW1vdmUgaW50ZXJtZWRpYXRlIGJhc2UgcGF0aAogICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHNlbnRyeS1pbnRlcm5hbC9zZGsvbm8tcmVnZXhwLWNvbnN0cnVjdG9yCiAgICAgIC5yZXBsYWNlKG5ldyBSZWdFeHAoYChmaWxlOi8vKT8vKiR7ZXNjYXBlZEJhc2V9LypgLCAnaWcnKSwgJ2FwcDovLy8nKQogICk7Cn0KCi8vIFNsaWdodGx5IG1vZGlmaWVkIChubyBJRTggc3VwcG9ydCwgRVM2KSBhbmQgdHJhbnNjcmliZWQgdG8gVHlwZVNjcmlwdAoKLy8gU3BsaXQgYSBmaWxlbmFtZSBpbnRvIFtyb290LCBkaXIsIGJhc2VuYW1lLCBleHRdLCB1bml4IHZlcnNpb24KLy8gJ3Jvb3QnIGlzIGp1c3QgYSBzbGFzaCwgb3Igbm90aGluZy4KY29uc3Qgc3BsaXRQYXRoUmUgPSAvXihcUys6XFx8XC8/KShbXHNcU10qPykoKD86XC57MSwyfXxbXi9cXF0rP3wpKFwuW14uL1xcXSp8KSkoPzpbL1xcXSopJC87Ci8qKiBKU0RvYyAqLwpmdW5jdGlvbiBzcGxpdFBhdGgoZmlsZW5hbWUpIHsKICAvLyBUcnVuY2F0ZSBmaWxlcyBuYW1lcyBncmVhdGVyIHRoYW4gMTAyNCBjaGFyYWN0ZXJzIHRvIGF2b2lkIHJlZ2V4IGRvcwogIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nZXRzZW50cnkvc2VudHJ5LWphdmFzY3JpcHQvcHVsbC84NzM3I2Rpc2N1c3Npb25fcjEyODU3MTkxNzIKICBjb25zdCB0cnVuY2F0ZWQgPSBmaWxlbmFtZS5sZW5ndGggPiAxMDI0ID8gYDx0cnVuY2F0ZWQ+JHtmaWxlbmFtZS5zbGljZSgtMTAyNCl9YCA6IGZpbGVuYW1lOwogIGNvbnN0IHBhcnRzID0gc3BsaXRQYXRoUmUuZXhlYyh0cnVuY2F0ZWQpOwogIHJldHVybiBwYXJ0cyA/IHBhcnRzLnNsaWNlKDEpIDogW107Cn0KCi8qKiBKU0RvYyAqLwpmdW5jdGlvbiBkaXJuYW1lKHBhdGgpIHsKICBjb25zdCByZXN1bHQgPSBzcGxpdFBhdGgocGF0aCk7CiAgY29uc3Qgcm9vdCA9IHJlc3VsdFswXTsKICBsZXQgZGlyID0gcmVzdWx0WzFdOwoKICBpZiAoIXJvb3QgJiYgIWRpcikgewogICAgLy8gTm8gZGlybmFtZSB3aGF0c29ldmVyCiAgICByZXR1cm4gJy4nOwogIH0KCiAgaWYgKGRpcikgewogICAgLy8gSXQgaGFzIGEgZGlybmFtZSwgc3RyaXAgdHJhaWxpbmcgc2xhc2gKICAgIGRpciA9IGRpci5zbGljZSgwLCBkaXIubGVuZ3RoIC0gMSk7CiAgfQoKICByZXR1cm4gcm9vdCArIGRpcjsKfQoKLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LWZ1bmN0aW9uLXJldHVybi10eXBlICovCgovKiogU3luY1Byb21pc2UgaW50ZXJuYWwgc3RhdGVzICovCnZhciBTdGF0ZXM7IChmdW5jdGlvbiAoU3RhdGVzKSB7CiAgLyoqIFBlbmRpbmcgKi8KICBjb25zdCBQRU5ESU5HID0gMDsgU3RhdGVzW1N0YXRlc1siUEVORElORyJdID0gUEVORElOR10gPSAiUEVORElORyI7CiAgLyoqIFJlc29sdmVkIC8gT0sgKi8KICBjb25zdCBSRVNPTFZFRCA9IDE7IFN0YXRlc1tTdGF0ZXNbIlJFU09MVkVEIl0gPSBSRVNPTFZFRF0gPSAiUkVTT0xWRUQiOwogIC8qKiBSZWplY3RlZCAvIEVycm9yICovCiAgY29uc3QgUkVKRUNURUQgPSAyOyBTdGF0ZXNbU3RhdGVzWyJSRUpFQ1RFRCJdID0gUkVKRUNURURdID0gIlJFSkVDVEVEIjsKfSkoU3RhdGVzIHx8IChTdGF0ZXMgPSB7fSkpOwoKLy8gT3ZlcmxvYWRzIHNvIHdlIGNhbiBjYWxsIHJlc29sdmVkU3luY1Byb21pc2Ugd2l0aG91dCBhcmd1bWVudHMgYW5kIGdlbmVyaWMgYXJndW1lbnQKCi8qKgogKiBDcmVhdGVzIGEgcmVzb2x2ZWQgc3luYyBwcm9taXNlLgogKgogKiBAcGFyYW0gdmFsdWUgdGhlIHZhbHVlIHRvIHJlc29sdmUgdGhlIHByb21pc2Ugd2l0aAogKiBAcmV0dXJucyB0aGUgcmVzb2x2ZWQgc3luYyBwcm9taXNlCiAqLwpmdW5jdGlvbiByZXNvbHZlZFN5bmNQcm9taXNlKHZhbHVlKSB7CiAgcmV0dXJuIG5ldyBTeW5jUHJvbWlzZShyZXNvbHZlID0+IHsKICAgIHJlc29sdmUodmFsdWUpOwogIH0pOwp9CgovKioKICogQ3JlYXRlcyBhIHJlamVjdGVkIHN5bmMgcHJvbWlzZS4KICoKICogQHBhcmFtIHZhbHVlIHRoZSB2YWx1ZSB0byByZWplY3QgdGhlIHByb21pc2Ugd2l0aAogKiBAcmV0dXJucyB0aGUgcmVqZWN0ZWQgc3luYyBwcm9taXNlCiAqLwpmdW5jdGlvbiByZWplY3RlZFN5bmNQcm9taXNlKHJlYXNvbikgewogIHJldHVybiBuZXcgU3luY1Byb21pc2UoKF8sIHJlamVjdCkgPT4gewogICAgcmVqZWN0KHJlYXNvbik7CiAgfSk7Cn0KCi8qKgogKiBUaGVuYWJsZSBjbGFzcyB0aGF0IGJlaGF2ZXMgbGlrZSBhIFByb21pc2UgYW5kIGZvbGxvd3MgaXQncyBpbnRlcmZhY2UKICogYnV0IGlzIG5vdCBhc3luYyBpbnRlcm5hbGx5CiAqLwpjbGFzcyBTeW5jUHJvbWlzZSB7CgogICBjb25zdHJ1Y3RvcigKICAgIGV4ZWN1dG9yLAogICkge1N5bmNQcm9taXNlLnByb3RvdHlwZS5fX2luaXQuY2FsbCh0aGlzKTtTeW5jUHJvbWlzZS5wcm90b3R5cGUuX19pbml0Mi5jYWxsKHRoaXMpO1N5bmNQcm9taXNlLnByb3RvdHlwZS5fX2luaXQzLmNhbGwodGhpcyk7U3luY1Byb21pc2UucHJvdG90eXBlLl9faW5pdDQuY2FsbCh0aGlzKTsKICAgIHRoaXMuX3N0YXRlID0gU3RhdGVzLlBFTkRJTkc7CiAgICB0aGlzLl9oYW5kbGVycyA9IFtdOwoKICAgIHRyeSB7CiAgICAgIGV4ZWN1dG9yKHRoaXMuX3Jlc29sdmUsIHRoaXMuX3JlamVjdCk7CiAgICB9IGNhdGNoIChlKSB7CiAgICAgIHRoaXMuX3JlamVjdChlKTsKICAgIH0KICB9CgogIC8qKiBKU0RvYyAqLwogICB0aGVuKAogICAgb25mdWxmaWxsZWQsCiAgICBvbnJlamVjdGVkLAogICkgewogICAgcmV0dXJuIG5ldyBTeW5jUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7CiAgICAgIHRoaXMuX2hhbmRsZXJzLnB1c2goWwogICAgICAgIGZhbHNlLAogICAgICAgIHJlc3VsdCA9PiB7CiAgICAgICAgICBpZiAoIW9uZnVsZmlsbGVkKSB7CiAgICAgICAgICAgIC8vIFRPRE86IMKvXF8o44OEKV8vwq8KICAgICAgICAgICAgLy8gVE9ETzogRklYTUUKICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQgKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgcmVzb2x2ZShvbmZ1bGZpbGxlZChyZXN1bHQpKTsKICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgIHJlamVjdChlKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgcmVhc29uID0+IHsKICAgICAgICAgIGlmICghb25yZWplY3RlZCkgewogICAgICAgICAgICByZWplY3QocmVhc29uKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgcmVzb2x2ZShvbnJlamVjdGVkKHJlYXNvbikpOwogICAgICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgICAgcmVqZWN0KGUpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgXSk7CiAgICAgIHRoaXMuX2V4ZWN1dGVIYW5kbGVycygpOwogICAgfSk7CiAgfQoKICAvKiogSlNEb2MgKi8KICAgY2F0Y2goCiAgICBvbnJlamVjdGVkLAogICkgewogICAgcmV0dXJuIHRoaXMudGhlbih2YWwgPT4gdmFsLCBvbnJlamVjdGVkKTsKICB9CgogIC8qKiBKU0RvYyAqLwogICBmaW5hbGx5KG9uZmluYWxseSkgewogICAgcmV0dXJuIG5ldyBTeW5jUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7CiAgICAgIGxldCB2YWw7CiAgICAgIGxldCBpc1JlamVjdGVkOwoKICAgICAgcmV0dXJuIHRoaXMudGhlbigKICAgICAgICB2YWx1ZSA9PiB7CiAgICAgICAgICBpc1JlamVjdGVkID0gZmFsc2U7CiAgICAgICAgICB2YWwgPSB2YWx1ZTsKICAgICAgICAgIGlmIChvbmZpbmFsbHkpIHsKICAgICAgICAgICAgb25maW5hbGx5KCk7CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICByZWFzb24gPT4gewogICAgICAgICAgaXNSZWplY3RlZCA9IHRydWU7CiAgICAgICAgICB2YWwgPSByZWFzb247CiAgICAgICAgICBpZiAob25maW5hbGx5KSB7CiAgICAgICAgICAgIG9uZmluYWxseSgpOwogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICkudGhlbigoKSA9PiB7CiAgICAgICAgaWYgKGlzUmVqZWN0ZWQpIHsKICAgICAgICAgIHJlamVjdCh2YWwpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgcmVzb2x2ZSh2YWwgKTsKICAgICAgfSk7CiAgICB9KTsKICB9CgogIC8qKiBKU0RvYyAqLwogICAgX19pbml0KCkge3RoaXMuX3Jlc29sdmUgPSAodmFsdWUpID0+IHsKICAgIHRoaXMuX3NldFJlc3VsdChTdGF0ZXMuUkVTT0xWRUQsIHZhbHVlKTsKICB9O30KCiAgLyoqIEpTRG9jICovCiAgICBfX2luaXQyKCkge3RoaXMuX3JlamVjdCA9IChyZWFzb24pID0+IHsKICAgIHRoaXMuX3NldFJlc3VsdChTdGF0ZXMuUkVKRUNURUQsIHJlYXNvbik7CiAgfTt9CgogIC8qKiBKU0RvYyAqLwogICAgX19pbml0MygpIHt0aGlzLl9zZXRSZXN1bHQgPSAoc3RhdGUsIHZhbHVlKSA9PiB7CiAgICBpZiAodGhpcy5fc3RhdGUgIT09IFN0YXRlcy5QRU5ESU5HKSB7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoaXNUaGVuYWJsZSh2YWx1ZSkpIHsKICAgICAgdm9pZCAodmFsdWUgKS50aGVuKHRoaXMuX3Jlc29sdmUsIHRoaXMuX3JlamVjdCk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICB0aGlzLl9zdGF0ZSA9IHN0YXRlOwogICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTsKCiAgICB0aGlzLl9leGVjdXRlSGFuZGxlcnMoKTsKICB9O30KCiAgLyoqIEpTRG9jICovCiAgICBfX2luaXQ0KCkge3RoaXMuX2V4ZWN1dGVIYW5kbGVycyA9ICgpID0+IHsKICAgIGlmICh0aGlzLl9zdGF0ZSA9PT0gU3RhdGVzLlBFTkRJTkcpIHsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIGNvbnN0IGNhY2hlZEhhbmRsZXJzID0gdGhpcy5faGFuZGxlcnMuc2xpY2UoKTsKICAgIHRoaXMuX2hhbmRsZXJzID0gW107CgogICAgY2FjaGVkSGFuZGxlcnMuZm9yRWFjaChoYW5kbGVyID0+IHsKICAgICAgaWYgKGhhbmRsZXJbMF0pIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KCiAgICAgIGlmICh0aGlzLl9zdGF0ZSA9PT0gU3RhdGVzLlJFU09MVkVEKSB7CiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1mbG9hdGluZy1wcm9taXNlcwogICAgICAgIGhhbmRsZXJbMV0odGhpcy5fdmFsdWUgKTsKICAgICAgfQoKICAgICAgaWYgKHRoaXMuX3N0YXRlID09PSBTdGF0ZXMuUkVKRUNURUQpIHsKICAgICAgICBoYW5kbGVyWzJdKHRoaXMuX3ZhbHVlKTsKICAgICAgfQoKICAgICAgaGFuZGxlclswXSA9IHRydWU7CiAgICB9KTsKICB9O30KfQoKLyoqCiAqIENyZWF0ZXMgYW4gbmV3IFByb21pc2VCdWZmZXIgb2JqZWN0IHdpdGggdGhlIHNwZWNpZmllZCBsaW1pdAogKiBAcGFyYW0gbGltaXQgbWF4IG51bWJlciBvZiBwcm9taXNlcyB0aGF0IGNhbiBiZSBzdG9yZWQgaW4gdGhlIGJ1ZmZlcgogKi8KZnVuY3Rpb24gbWFrZVByb21pc2VCdWZmZXIobGltaXQpIHsKICBjb25zdCBidWZmZXIgPSBbXTsKCiAgZnVuY3Rpb24gaXNSZWFkeSgpIHsKICAgIHJldHVybiBsaW1pdCA9PT0gdW5kZWZpbmVkIHx8IGJ1ZmZlci5sZW5ndGggPCBsaW1pdDsKICB9CgogIC8qKgogICAqIFJlbW92ZSBhIHByb21pc2UgZnJvbSB0aGUgcXVldWUuCiAgICoKICAgKiBAcGFyYW0gdGFzayBDYW4gYmUgYW55IFByb21pc2VMaWtlPFQ+CiAgICogQHJldHVybnMgUmVtb3ZlZCBwcm9taXNlLgogICAqLwogIGZ1bmN0aW9uIHJlbW92ZSh0YXNrKSB7CiAgICByZXR1cm4gYnVmZmVyLnNwbGljZShidWZmZXIuaW5kZXhPZih0YXNrKSwgMSlbMF07CiAgfQoKICAvKioKICAgKiBBZGQgYSBwcm9taXNlIChyZXByZXNlbnRpbmcgYW4gaW4tZmxpZ2h0IGFjdGlvbikgdG8gdGhlIHF1ZXVlLCBhbmQgc2V0IGl0IHRvIHJlbW92ZSBpdHNlbGYgb24gZnVsZmlsbG1lbnQuCiAgICoKICAgKiBAcGFyYW0gdGFza1Byb2R1Y2VyIEEgZnVuY3Rpb24gcHJvZHVjaW5nIGFueSBQcm9taXNlTGlrZTxUPjsgSW4gcHJldmlvdXMgdmVyc2lvbnMgdGhpcyB1c2VkIHRvIGJlIGB0YXNrOgogICAqICAgICAgICBQcm9taXNlTGlrZTxUPmAsIGJ1dCB1bmRlciB0aGF0IG1vZGVsLCBQcm9taXNlcyB3ZXJlIGluc3RhbnRseSBjcmVhdGVkIG9uIHRoZSBjYWxsLXNpdGUgYW5kIHRoZWlyIGV4ZWN1dG9yCiAgICogICAgICAgIGZ1bmN0aW9ucyB0aGVyZWZvcmUgcmFuIGltbWVkaWF0ZWx5LiBUaHVzLCBldmVuIGlmIHRoZSBidWZmZXIgd2FzIGZ1bGwsIHRoZSBhY3Rpb24gc3RpbGwgaGFwcGVuZWQuIEJ5CiAgICogICAgICAgIHJlcXVpcmluZyB0aGUgcHJvbWlzZSB0byBiZSB3cmFwcGVkIGluIGEgZnVuY3Rpb24sIHdlIGNhbiBkZWZlciBwcm9taXNlIGNyZWF0aW9uIHVudGlsIGFmdGVyIHRoZSBidWZmZXIKICAgKiAgICAgICAgbGltaXQgY2hlY2suCiAgICogQHJldHVybnMgVGhlIG9yaWdpbmFsIHByb21pc2UuCiAgICovCiAgZnVuY3Rpb24gYWRkKHRhc2tQcm9kdWNlcikgewogICAgaWYgKCFpc1JlYWR5KCkpIHsKICAgICAgcmV0dXJuIHJlamVjdGVkU3luY1Byb21pc2UobmV3IFNlbnRyeUVycm9yKCdOb3QgYWRkaW5nIFByb21pc2UgYmVjYXVzZSBidWZmZXIgbGltaXQgd2FzIHJlYWNoZWQuJykpOwogICAgfQoKICAgIC8vIHN0YXJ0IHRoZSB0YXNrIGFuZCBhZGQgaXRzIHByb21pc2UgdG8gdGhlIHF1ZXVlCiAgICBjb25zdCB0YXNrID0gdGFza1Byb2R1Y2VyKCk7CiAgICBpZiAoYnVmZmVyLmluZGV4T2YodGFzaykgPT09IC0xKSB7CiAgICAgIGJ1ZmZlci5wdXNoKHRhc2spOwogICAgfQogICAgdm9pZCB0YXNrCiAgICAgIC50aGVuKCgpID0+IHJlbW92ZSh0YXNrKSkKICAgICAgLy8gVXNlIGB0aGVuKG51bGwsIHJlamVjdGlvbkhhbmRsZXIpYCByYXRoZXIgdGhhbiBgY2F0Y2gocmVqZWN0aW9uSGFuZGxlcilgIHNvIHRoYXQgd2UgY2FuIHVzZSBgUHJvbWlzZUxpa2VgCiAgICAgIC8vIHJhdGhlciB0aGFuIGBQcm9taXNlYC4gYFByb21pc2VMaWtlYCBkb2Vzbid0IGhhdmUgYSBgLmNhdGNoYCBtZXRob2QsIG1ha2luZyBpdHMgcG9seWZpbGwgc21hbGxlci4gKEVTNSBkaWRuJ3QKICAgICAgLy8gaGF2ZSBwcm9taXNlcywgc28gVFMgaGFzIHRvIHBvbHlmaWxsIHdoZW4gZG93bi1jb21waWxpbmcuKQogICAgICAudGhlbihudWxsLCAoKSA9PgogICAgICAgIHJlbW92ZSh0YXNrKS50aGVuKG51bGwsICgpID0+IHsKICAgICAgICAgIC8vIFdlIGhhdmUgdG8gYWRkIGFub3RoZXIgY2F0Y2ggaGVyZSBiZWNhdXNlIGByZW1vdmUoKWAgc3RhcnRzIGEgbmV3IHByb21pc2UgY2hhaW4uCiAgICAgICAgfSksCiAgICAgICk7CiAgICByZXR1cm4gdGFzazsKICB9CgogIC8qKgogICAqIFdhaXQgZm9yIGFsbCBwcm9taXNlcyBpbiB0aGUgcXVldWUgdG8gcmVzb2x2ZSBvciBmb3IgdGltZW91dCB0byBleHBpcmUsIHdoaWNoZXZlciBjb21lcyBmaXJzdC4KICAgKgogICAqIEBwYXJhbSB0aW1lb3V0IFRoZSB0aW1lLCBpbiBtcywgYWZ0ZXIgd2hpY2ggdG8gcmVzb2x2ZSB0byBgZmFsc2VgIGlmIHRoZSBxdWV1ZSBpcyBzdGlsbCBub24tZW1wdHkuIFBhc3NpbmcgYDBgIChvcgogICAqIG5vdCBwYXNzaW5nIGFueXRoaW5nKSB3aWxsIG1ha2UgdGhlIHByb21pc2Ugd2FpdCBhcyBsb25nIGFzIGl0IHRha2VzIGZvciB0aGUgcXVldWUgdG8gZHJhaW4gYmVmb3JlIHJlc29sdmluZyB0bwogICAqIGB0cnVlYC4KICAgKiBAcmV0dXJucyBBIHByb21pc2Ugd2hpY2ggd2lsbCByZXNvbHZlIHRvIGB0cnVlYCBpZiB0aGUgcXVldWUgaXMgYWxyZWFkeSBlbXB0eSBvciBkcmFpbnMgYmVmb3JlIHRoZSB0aW1lb3V0LCBhbmQKICAgKiBgZmFsc2VgIG90aGVyd2lzZQogICAqLwogIGZ1bmN0aW9uIGRyYWluKHRpbWVvdXQpIHsKICAgIHJldHVybiBuZXcgU3luY1Byb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gewogICAgICBsZXQgY291bnRlciA9IGJ1ZmZlci5sZW5ndGg7CgogICAgICBpZiAoIWNvdW50ZXIpIHsKICAgICAgICByZXR1cm4gcmVzb2x2ZSh0cnVlKTsKICAgICAgfQoKICAgICAgLy8gd2FpdCBmb3IgYHRpbWVvdXRgIG1zIGFuZCB0aGVuIHJlc29sdmUgdG8gYGZhbHNlYCAoaWYgbm90IGNhbmNlbGxlZCBmaXJzdCkKICAgICAgY29uc3QgY2FwdHVyZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgaWYgKHRpbWVvdXQgJiYgdGltZW91dCA+IDApIHsKICAgICAgICAgIHJlc29sdmUoZmFsc2UpOwogICAgICAgIH0KICAgICAgfSwgdGltZW91dCk7CgogICAgICAvLyBpZiBhbGwgcHJvbWlzZXMgcmVzb2x2ZSBpbiB0aW1lLCBjYW5jZWwgdGhlIHRpbWVyIGFuZCByZXNvbHZlIHRvIGB0cnVlYAogICAgICBidWZmZXIuZm9yRWFjaChpdGVtID0+IHsKICAgICAgICB2b2lkIHJlc29sdmVkU3luY1Byb21pc2UoaXRlbSkudGhlbigoKSA9PiB7CiAgICAgICAgICBpZiAoIS0tY291bnRlcikgewogICAgICAgICAgICBjbGVhclRpbWVvdXQoY2FwdHVyZWRTZXRUaW1lb3V0KTsKICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTsKICAgICAgICAgIH0KICAgICAgICB9LCByZWplY3QpOwogICAgICB9KTsKICAgIH0pOwogIH0KCiAgcmV0dXJuIHsKICAgICQ6IGJ1ZmZlciwKICAgIGFkZCwKICAgIGRyYWluLAogIH07Cn0KCmNvbnN0IE9ORV9TRUNPTkRfSU5fTVMgPSAxMDAwOwoKLyoqCiAqIEEgcGFydGlhbCBkZWZpbml0aW9uIG9mIHRoZSBbUGVyZm9ybWFuY2UgV2ViIEFQSV17QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1BlcmZvcm1hbmNlfQogKiBmb3IgYWNjZXNzaW5nIGEgaGlnaC1yZXNvbHV0aW9uIG1vbm90b25pYyBjbG9jay4KICovCgovKioKICogUmV0dXJucyBhIHRpbWVzdGFtcCBpbiBzZWNvbmRzIHNpbmNlIHRoZSBVTklYIGVwb2NoIHVzaW5nIHRoZSBEYXRlIEFQSS4KICoKICogVE9ETyh2OCk6IFJldHVybiB0eXBlIHNob3VsZCBiZSByb3VuZGVkLgogKi8KZnVuY3Rpb24gZGF0ZVRpbWVzdGFtcEluU2Vjb25kcygpIHsKICByZXR1cm4gRGF0ZS5ub3coKSAvIE9ORV9TRUNPTkRfSU5fTVM7Cn0KCi8qKgogKiBSZXR1cm5zIGEgd3JhcHBlciBhcm91bmQgdGhlIG5hdGl2ZSBQZXJmb3JtYW5jZSBBUEkgYnJvd3NlciBpbXBsZW1lbnRhdGlvbiwgb3IgdW5kZWZpbmVkIGZvciBicm93c2VycyB0aGF0IGRvIG5vdAogKiBzdXBwb3J0IHRoZSBBUEkuCiAqCiAqIFdyYXBwaW5nIHRoZSBuYXRpdmUgQVBJIHdvcmtzIGFyb3VuZCBkaWZmZXJlbmNlcyBpbiBiZWhhdmlvciBmcm9tIGRpZmZlcmVudCBicm93c2Vycy4KICovCmZ1bmN0aW9uIGNyZWF0ZVVuaXhUaW1lc3RhbXBJblNlY29uZHNGdW5jKCkgewogIGNvbnN0IHsgcGVyZm9ybWFuY2UgfSA9IEdMT0JBTF9PQkogOwogIGlmICghcGVyZm9ybWFuY2UgfHwgIXBlcmZvcm1hbmNlLm5vdykgewogICAgcmV0dXJuIGRhdGVUaW1lc3RhbXBJblNlY29uZHM7CiAgfQoKICAvLyBTb21lIGJyb3dzZXIgYW5kIGVudmlyb25tZW50cyBkb24ndCBoYXZlIGEgdGltZU9yaWdpbiwgc28gd2UgZmFsbGJhY2sgdG8KICAvLyB1c2luZyBEYXRlLm5vdygpIHRvIGNvbXB1dGUgdGhlIHN0YXJ0aW5nIHRpbWUuCiAgY29uc3QgYXBwcm94U3RhcnRpbmdUaW1lT3JpZ2luID0gRGF0ZS5ub3coKSAtIHBlcmZvcm1hbmNlLm5vdygpOwogIGNvbnN0IHRpbWVPcmlnaW4gPSBwZXJmb3JtYW5jZS50aW1lT3JpZ2luID09IHVuZGVmaW5lZCA/IGFwcHJveFN0YXJ0aW5nVGltZU9yaWdpbiA6IHBlcmZvcm1hbmNlLnRpbWVPcmlnaW47CgogIC8vIHBlcmZvcm1hbmNlLm5vdygpIGlzIGEgbW9ub3RvbmljIGNsb2NrLCB3aGljaCBtZWFucyBpdCBzdGFydHMgYXQgMCB3aGVuIHRoZSBwcm9jZXNzIGJlZ2lucy4gVG8gZ2V0IHRoZSBjdXJyZW50CiAgLy8gd2FsbCBjbG9jayB0aW1lIChhY3R1YWwgVU5JWCB0aW1lc3RhbXApLCB3ZSBuZWVkIHRvIGFkZCB0aGUgc3RhcnRpbmcgdGltZSBvcmlnaW4gYW5kIHRoZSBjdXJyZW50IHRpbWUgZWxhcHNlZC4KICAvLwogIC8vIFRPRE86IFRoaXMgZG9lcyBub3QgYWNjb3VudCBmb3IgdGhlIGNhc2Ugd2hlcmUgdGhlIG1vbm90b25pYyBjbG9jayB0aGF0IHBvd2VycyBwZXJmb3JtYW5jZS5ub3coKSBkcmlmdHMgZnJvbSB0aGUKICAvLyB3YWxsIGNsb2NrIHRpbWUsIHdoaWNoIGNhdXNlcyB0aGUgcmV0dXJuZWQgdGltZXN0YW1wIHRvIGJlIGluYWNjdXJhdGUuIFdlIHNob3VsZCBpbnZlc3RpZ2F0ZSBob3cgdG8gZGV0ZWN0IGFuZAogIC8vIGNvcnJlY3QgZm9yIHRoaXMuCiAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZ2V0c2VudHJ5L3NlbnRyeS1qYXZhc2NyaXB0L2lzc3Vlcy8yNTkwCiAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vbWRuL2NvbnRlbnQvaXNzdWVzLzQ3MTMKICAvLyBTZWU6IGh0dHBzOi8vZGV2LnRvL25vYW1yL3doZW4tYS1taWxsaXNlY29uZC1pcy1ub3QtYS1taWxsaXNlY29uZC0zaDYKICByZXR1cm4gKCkgPT4gewogICAgcmV0dXJuICh0aW1lT3JpZ2luICsgcGVyZm9ybWFuY2Uubm93KCkpIC8gT05FX1NFQ09ORF9JTl9NUzsKICB9Owp9CgovKioKICogUmV0dXJucyBhIHRpbWVzdGFtcCBpbiBzZWNvbmRzIHNpbmNlIHRoZSBVTklYIGVwb2NoIHVzaW5nIGVpdGhlciB0aGUgUGVyZm9ybWFuY2Ugb3IgRGF0ZSBBUElzLCBkZXBlbmRpbmcgb24gdGhlCiAqIGF2YWlsYWJpbGl0eSBvZiB0aGUgUGVyZm9ybWFuY2UgQVBJLgogKgogKiBCVUc6IE5vdGUgdGhhdCBiZWNhdXNlIG9mIGhvdyBicm93c2VycyBpbXBsZW1lbnQgdGhlIFBlcmZvcm1hbmNlIEFQSSwgdGhlIGNsb2NrIG1pZ2h0IHN0b3Agd2hlbiB0aGUgY29tcHV0ZXIgaXMKICogYXNsZWVwLiBUaGlzIGNyZWF0ZXMgYSBza2V3IGJldHdlZW4gYGRhdGVUaW1lc3RhbXBJblNlY29uZHNgIGFuZCBgdGltZXN0YW1wSW5TZWNvbmRzYC4gVGhlCiAqIHNrZXcgY2FuIGdyb3cgdG8gYXJiaXRyYXJ5IGFtb3VudHMgbGlrZSBkYXlzLCB3ZWVrcyBvciBtb250aHMuCiAqIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZ2V0c2VudHJ5L3NlbnRyeS1qYXZhc2NyaXB0L2lzc3Vlcy8yNTkwLgogKi8KY29uc3QgdGltZXN0YW1wSW5TZWNvbmRzID0gY3JlYXRlVW5peFRpbWVzdGFtcEluU2Vjb25kc0Z1bmMoKTsKCi8qKgogKiBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBzaW5jZSB0aGUgVU5JWCBlcG9jaC4gVGhpcyB2YWx1ZSBpcyBvbmx5IHVzYWJsZSBpbiBhIGJyb3dzZXIsIGFuZCBvbmx5IHdoZW4gdGhlCiAqIHBlcmZvcm1hbmNlIEFQSSBpcyBhdmFpbGFibGUuCiAqLwooKCkgPT4gewogIC8vIFVuZm9ydHVuYXRlbHkgYnJvd3NlcnMgbWF5IHJlcG9ydCBhbiBpbmFjY3VyYXRlIHRpbWUgb3JpZ2luIGRhdGEsIHRocm91Z2ggZWl0aGVyIHBlcmZvcm1hbmNlLnRpbWVPcmlnaW4gb3IKICAvLyBwZXJmb3JtYW5jZS50aW1pbmcubmF2aWdhdGlvblN0YXJ0LCB3aGljaCByZXN1bHRzIGluIHBvb3IgcmVzdWx0cyBpbiBwZXJmb3JtYW5jZSBkYXRhLiBXZSBvbmx5IHRyZWF0IHRpbWUgb3JpZ2luCiAgLy8gZGF0YSBhcyByZWxpYWJsZSBpZiB0aGV5IGFyZSB3aXRoaW4gYSByZWFzb25hYmxlIHRocmVzaG9sZCBvZiB0aGUgY3VycmVudCB0aW1lLgoKICBjb25zdCB7IHBlcmZvcm1hbmNlIH0gPSBHTE9CQUxfT0JKIDsKICBpZiAoIXBlcmZvcm1hbmNlIHx8ICFwZXJmb3JtYW5jZS5ub3cpIHsKICAgIHJldHVybiB1bmRlZmluZWQ7CiAgfQoKICBjb25zdCB0aHJlc2hvbGQgPSAzNjAwICogMTAwMDsKICBjb25zdCBwZXJmb3JtYW5jZU5vdyA9IHBlcmZvcm1hbmNlLm5vdygpOwogIGNvbnN0IGRhdGVOb3cgPSBEYXRlLm5vdygpOwoKICAvLyBpZiB0aW1lT3JpZ2luIGlzbid0IGF2YWlsYWJsZSBzZXQgZGVsdGEgdG8gdGhyZXNob2xkIHNvIGl0IGlzbid0IHVzZWQKICBjb25zdCB0aW1lT3JpZ2luRGVsdGEgPSBwZXJmb3JtYW5jZS50aW1lT3JpZ2luCiAgICA/IE1hdGguYWJzKHBlcmZvcm1hbmNlLnRpbWVPcmlnaW4gKyBwZXJmb3JtYW5jZU5vdyAtIGRhdGVOb3cpCiAgICA6IHRocmVzaG9sZDsKICBjb25zdCB0aW1lT3JpZ2luSXNSZWxpYWJsZSA9IHRpbWVPcmlnaW5EZWx0YSA8IHRocmVzaG9sZDsKCiAgLy8gV2hpbGUgcGVyZm9ybWFuY2UudGltaW5nLm5hdmlnYXRpb25TdGFydCBpcyBkZXByZWNhdGVkIGluIGZhdm9yIG9mIHBlcmZvcm1hbmNlLnRpbWVPcmlnaW4sIHBlcmZvcm1hbmNlLnRpbWVPcmlnaW4KICAvLyBpcyBub3QgYXMgd2lkZWx5IHN1cHBvcnRlZC4gTmFtZWx5LCBwZXJmb3JtYW5jZS50aW1lT3JpZ2luIGlzIHVuZGVmaW5lZCBpbiBTYWZhcmkgYXMgb2Ygd3JpdGluZy4KICAvLyBBbHNvIGFzIG9mIHdyaXRpbmcsIHBlcmZvcm1hbmNlLnRpbWluZyBpcyBub3QgYXZhaWxhYmxlIGluIFdlYiBXb3JrZXJzIGluIG1haW5zdHJlYW0gYnJvd3NlcnMsIHNvIGl0IGlzIG5vdCBhbHdheXMKICAvLyBhIHZhbGlkIGZhbGxiYWNrLiBJbiB0aGUgYWJzZW5jZSBvZiBhbiBpbml0aWFsIHRpbWUgcHJvdmlkZWQgYnkgdGhlIGJyb3dzZXIsIGZhbGxiYWNrIHRvIHRoZSBjdXJyZW50IHRpbWUgZnJvbSB0aGUKICAvLyBEYXRlIEFQSS4KICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb24KICBjb25zdCBuYXZpZ2F0aW9uU3RhcnQgPSBwZXJmb3JtYW5jZS50aW1pbmcgJiYgcGVyZm9ybWFuY2UudGltaW5nLm5hdmlnYXRpb25TdGFydDsKICBjb25zdCBoYXNOYXZpZ2F0aW9uU3RhcnQgPSB0eXBlb2YgbmF2aWdhdGlvblN0YXJ0ID09PSAnbnVtYmVyJzsKICAvLyBpZiBuYXZpZ2F0aW9uU3RhcnQgaXNuJ3QgYXZhaWxhYmxlIHNldCBkZWx0YSB0byB0aHJlc2hvbGQgc28gaXQgaXNuJ3QgdXNlZAogIGNvbnN0IG5hdmlnYXRpb25TdGFydERlbHRhID0gaGFzTmF2aWdhdGlvblN0YXJ0ID8gTWF0aC5hYnMobmF2aWdhdGlvblN0YXJ0ICsgcGVyZm9ybWFuY2VOb3cgLSBkYXRlTm93KSA6IHRocmVzaG9sZDsKICBjb25zdCBuYXZpZ2F0aW9uU3RhcnRJc1JlbGlhYmxlID0gbmF2aWdhdGlvblN0YXJ0RGVsdGEgPCB0aHJlc2hvbGQ7CgogIGlmICh0aW1lT3JpZ2luSXNSZWxpYWJsZSB8fCBuYXZpZ2F0aW9uU3RhcnRJc1JlbGlhYmxlKSB7CiAgICAvLyBVc2UgdGhlIG1vcmUgcmVsaWFibGUgdGltZSBvcmlnaW4KICAgIGlmICh0aW1lT3JpZ2luRGVsdGEgPD0gbmF2aWdhdGlvblN0YXJ0RGVsdGEpIHsKICAgICAgcmV0dXJuIHBlcmZvcm1hbmNlLnRpbWVPcmlnaW47CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gbmF2aWdhdGlvblN0YXJ0OwogICAgfQogIH0KICByZXR1cm4gZGF0ZU5vdzsKfSkoKTsKCi8qKgogKiBDcmVhdGVzIGFuIGVudmVsb3BlLgogKiBNYWtlIHN1cmUgdG8gYWx3YXlzIGV4cGxpY2l0bHkgcHJvdmlkZSB0aGUgZ2VuZXJpYyB0byB0aGlzIGZ1bmN0aW9uCiAqIHNvIHRoYXQgdGhlIGVudmVsb3BlIHR5cGVzIHJlc29sdmUgY29ycmVjdGx5LgogKi8KZnVuY3Rpb24gY3JlYXRlRW52ZWxvcGUoaGVhZGVycywgaXRlbXMgPSBbXSkgewogIHJldHVybiBbaGVhZGVycywgaXRlbXNdIDsKfQoKLyoqCiAqIENvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIGxvb3AgdGhyb3VnaCB0aGUgaXRlbXMgYW5kIGl0ZW0gdHlwZXMgb2YgYW4gZW52ZWxvcGUuCiAqIChUaGlzIGZ1bmN0aW9uIHdhcyBtb3N0bHkgY3JlYXRlZCBiZWNhdXNlIHdvcmtpbmcgd2l0aCBlbnZlbG9wZSB0eXBlcyBpcyBwYWluZnVsIGF0IHRoZSBtb21lbnQpCiAqCiAqIElmIHRoZSBjYWxsYmFjayByZXR1cm5zIHRydWUsIHRoZSByZXN0IG9mIHRoZSBpdGVtcyB3aWxsIGJlIHNraXBwZWQuCiAqLwpmdW5jdGlvbiBmb3JFYWNoRW52ZWxvcGVJdGVtKAogIGVudmVsb3BlLAogIGNhbGxiYWNrLAopIHsKICBjb25zdCBlbnZlbG9wZUl0ZW1zID0gZW52ZWxvcGVbMV07CgogIGZvciAoY29uc3QgZW52ZWxvcGVJdGVtIG9mIGVudmVsb3BlSXRlbXMpIHsKICAgIGNvbnN0IGVudmVsb3BlSXRlbVR5cGUgPSBlbnZlbG9wZUl0ZW1bMF0udHlwZTsKICAgIGNvbnN0IHJlc3VsdCA9IGNhbGxiYWNrKGVudmVsb3BlSXRlbSwgZW52ZWxvcGVJdGVtVHlwZSk7CgogICAgaWYgKHJlc3VsdCkgewogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICB9CgogIHJldHVybiBmYWxzZTsKfQoKLyoqCiAqIEVuY29kZSBhIHN0cmluZyB0byBVVEY4LgogKi8KZnVuY3Rpb24gZW5jb2RlVVRGOChpbnB1dCwgdGV4dEVuY29kZXIpIHsKICBjb25zdCB1dGY4ID0gdGV4dEVuY29kZXIgfHwgbmV3IFRleHRFbmNvZGVyKCk7CiAgcmV0dXJuIHV0ZjguZW5jb2RlKGlucHV0KTsKfQoKLyoqCiAqIFNlcmlhbGl6ZXMgYW4gZW52ZWxvcGUuCiAqLwpmdW5jdGlvbiBzZXJpYWxpemVFbnZlbG9wZShlbnZlbG9wZSwgdGV4dEVuY29kZXIpIHsKICBjb25zdCBbZW52SGVhZGVycywgaXRlbXNdID0gZW52ZWxvcGU7CgogIC8vIEluaXRpYWxseSB3ZSBjb25zdHJ1Y3Qgb3VyIGVudmVsb3BlIGFzIGEgc3RyaW5nIGFuZCBvbmx5IGNvbnZlcnQgdG8gYmluYXJ5IGNodW5rcyBpZiB3ZSBlbmNvdW50ZXIgYmluYXJ5IGRhdGEKICBsZXQgcGFydHMgPSBKU09OLnN0cmluZ2lmeShlbnZIZWFkZXJzKTsKCiAgZnVuY3Rpb24gYXBwZW5kKG5leHQpIHsKICAgIGlmICh0eXBlb2YgcGFydHMgPT09ICdzdHJpbmcnKSB7CiAgICAgIHBhcnRzID0gdHlwZW9mIG5leHQgPT09ICdzdHJpbmcnID8gcGFydHMgKyBuZXh0IDogW2VuY29kZVVURjgocGFydHMsIHRleHRFbmNvZGVyKSwgbmV4dF07CiAgICB9IGVsc2UgewogICAgICBwYXJ0cy5wdXNoKHR5cGVvZiBuZXh0ID09PSAnc3RyaW5nJyA/IGVuY29kZVVURjgobmV4dCwgdGV4dEVuY29kZXIpIDogbmV4dCk7CiAgICB9CiAgfQoKICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHsKICAgIGNvbnN0IFtpdGVtSGVhZGVycywgcGF5bG9hZF0gPSBpdGVtOwoKICAgIGFwcGVuZChgXG4ke0pTT04uc3RyaW5naWZ5KGl0ZW1IZWFkZXJzKX1cbmApOwoKICAgIGlmICh0eXBlb2YgcGF5bG9hZCA9PT0gJ3N0cmluZycgfHwgcGF5bG9hZCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHsKICAgICAgYXBwZW5kKHBheWxvYWQpOwogICAgfSBlbHNlIHsKICAgICAgbGV0IHN0cmluZ2lmaWVkUGF5bG9hZDsKICAgICAgdHJ5IHsKICAgICAgICBzdHJpbmdpZmllZFBheWxvYWQgPSBKU09OLnN0cmluZ2lmeShwYXlsb2FkKTsKICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgIC8vIEluIGNhc2UsIGRlc3BpdGUgYWxsIG91ciBlZmZvcnRzIHRvIGtlZXAgYHBheWxvYWRgIGNpcmN1bGFyLWRlcGVuZGVuY3ktZnJlZSwgYEpTT04uc3RyaW5pZnkoKWAgc3RpbGwKICAgICAgICAvLyBmYWlscywgd2UgdHJ5IGFnYWluIGFmdGVyIG5vcm1hbGl6aW5nIGl0IGFnYWluIHdpdGggaW5maW5pdGUgbm9ybWFsaXphdGlvbiBkZXB0aC4gVGhpcyBvZiBjb3Vyc2UgaGFzIGEKICAgICAgICAvLyBwZXJmb3JtYW5jZSBpbXBhY3QgYnV0IGluIHRoaXMgY2FzZSBhIHBlcmZvcm1hbmNlIGhpdCBpcyBiZXR0ZXIgdGhhbiB0aHJvd2luZy4KICAgICAgICBzdHJpbmdpZmllZFBheWxvYWQgPSBKU09OLnN0cmluZ2lmeShub3JtYWxpemUocGF5bG9hZCkpOwogICAgICB9CiAgICAgIGFwcGVuZChzdHJpbmdpZmllZFBheWxvYWQpOwogICAgfQogIH0KCiAgcmV0dXJuIHR5cGVvZiBwYXJ0cyA9PT0gJ3N0cmluZycgPyBwYXJ0cyA6IGNvbmNhdEJ1ZmZlcnMocGFydHMpOwp9CgpmdW5jdGlvbiBjb25jYXRCdWZmZXJzKGJ1ZmZlcnMpIHsKICBjb25zdCB0b3RhbExlbmd0aCA9IGJ1ZmZlcnMucmVkdWNlKChhY2MsIGJ1ZikgPT4gYWNjICsgYnVmLmxlbmd0aCwgMCk7CgogIGNvbnN0IG1lcmdlZCA9IG5ldyBVaW50OEFycmF5KHRvdGFsTGVuZ3RoKTsKICBsZXQgb2Zmc2V0ID0gMDsKICBmb3IgKGNvbnN0IGJ1ZmZlciBvZiBidWZmZXJzKSB7CiAgICBtZXJnZWQuc2V0KGJ1ZmZlciwgb2Zmc2V0KTsKICAgIG9mZnNldCArPSBidWZmZXIubGVuZ3RoOwogIH0KCiAgcmV0dXJuIG1lcmdlZDsKfQoKY29uc3QgSVRFTV9UWVBFX1RPX0RBVEFfQ0FURUdPUllfTUFQID0gewogIHNlc3Npb246ICdzZXNzaW9uJywKICBzZXNzaW9uczogJ3Nlc3Npb24nLAogIGF0dGFjaG1lbnQ6ICdhdHRhY2htZW50JywKICB0cmFuc2FjdGlvbjogJ3RyYW5zYWN0aW9uJywKICBldmVudDogJ2Vycm9yJywKICBjbGllbnRfcmVwb3J0OiAnaW50ZXJuYWwnLAogIHVzZXJfcmVwb3J0OiAnZGVmYXVsdCcsCiAgcHJvZmlsZTogJ3Byb2ZpbGUnLAogIHJlcGxheV9ldmVudDogJ3JlcGxheScsCiAgcmVwbGF5X3JlY29yZGluZzogJ3JlcGxheScsCiAgY2hlY2tfaW46ICdtb25pdG9yJywKICBmZWVkYmFjazogJ2ZlZWRiYWNrJywKICBzcGFuOiAnc3BhbicsCiAgc3RhdHNkOiAnbWV0cmljX2J1Y2tldCcsCn07CgovKioKICogTWFwcyB0aGUgdHlwZSBvZiBhbiBlbnZlbG9wZSBpdGVtIHRvIGEgZGF0YSBjYXRlZ29yeS4KICovCmZ1bmN0aW9uIGVudmVsb3BlSXRlbVR5cGVUb0RhdGFDYXRlZ29yeSh0eXBlKSB7CiAgcmV0dXJuIElURU1fVFlQRV9UT19EQVRBX0NBVEVHT1JZX01BUFt0eXBlXTsKfQoKLyoqIEV4dHJhY3RzIHRoZSBtaW5pbWFsIFNESyBpbmZvIGZyb20gdGhlIG1ldGFkYXRhIG9yIGFuIGV2ZW50cyAqLwpmdW5jdGlvbiBnZXRTZGtNZXRhZGF0YUZvckVudmVsb3BlSGVhZGVyKG1ldGFkYXRhT3JFdmVudCkgewogIGlmICghbWV0YWRhdGFPckV2ZW50IHx8ICFtZXRhZGF0YU9yRXZlbnQuc2RrKSB7CiAgICByZXR1cm47CiAgfQogIGNvbnN0IHsgbmFtZSwgdmVyc2lvbiB9ID0gbWV0YWRhdGFPckV2ZW50LnNkazsKICByZXR1cm4geyBuYW1lLCB2ZXJzaW9uIH07Cn0KCi8qKgogKiBDcmVhdGVzIGV2ZW50IGVudmVsb3BlIGhlYWRlcnMsIGJhc2VkIG9uIGV2ZW50LCBzZGsgaW5mbyBhbmQgdHVubmVsCiAqIE5vdGU6IFRoaXMgZnVuY3Rpb24gd2FzIGV4dHJhY3RlZCBmcm9tIHRoZSBjb3JlIHBhY2thZ2UgdG8gbWFrZSBpdCBhdmFpbGFibGUgaW4gUmVwbGF5CiAqLwpmdW5jdGlvbiBjcmVhdGVFdmVudEVudmVsb3BlSGVhZGVycygKICBldmVudCwKICBzZGtJbmZvLAogIHR1bm5lbCwKICBkc24sCikgewogIGNvbnN0IGR5bmFtaWNTYW1wbGluZ0NvbnRleHQgPSBldmVudC5zZGtQcm9jZXNzaW5nTWV0YWRhdGEgJiYgZXZlbnQuc2RrUHJvY2Vzc2luZ01ldGFkYXRhLmR5bmFtaWNTYW1wbGluZ0NvbnRleHQ7CiAgcmV0dXJuIHsKICAgIGV2ZW50X2lkOiBldmVudC5ldmVudF9pZCAsCiAgICBzZW50X2F0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksCiAgICAuLi4oc2RrSW5mbyAmJiB7IHNkazogc2RrSW5mbyB9KSwKICAgIC4uLighIXR1bm5lbCAmJiBkc24gJiYgeyBkc246IGRzblRvU3RyaW5nKGRzbikgfSksCiAgICAuLi4oZHluYW1pY1NhbXBsaW5nQ29udGV4dCAmJiB7CiAgICAgIHRyYWNlOiBkcm9wVW5kZWZpbmVkS2V5cyh7IC4uLmR5bmFtaWNTYW1wbGluZ0NvbnRleHQgfSksCiAgICB9KSwKICB9Owp9CgovLyBJbnRlbnRpb25hbGx5IGtlZXBpbmcgdGhlIGtleSBicm9hZCwgYXMgd2UgZG9uJ3Qga25vdyBmb3Igc3VyZSB3aGF0IHJhdGUgbGltaXQgaGVhZGVycyBnZXQgcmV0dXJuZWQgZnJvbSBiYWNrZW5kCgpjb25zdCBERUZBVUxUX1JFVFJZX0FGVEVSID0gNjAgKiAxMDAwOyAvLyA2MCBzZWNvbmRzCgovKioKICogRXh0cmFjdHMgUmV0cnktQWZ0ZXIgdmFsdWUgZnJvbSB0aGUgcmVxdWVzdCBoZWFkZXIgb3IgcmV0dXJucyBkZWZhdWx0IHZhbHVlCiAqIEBwYXJhbSBoZWFkZXIgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mICdSZXRyeS1BZnRlcicgaGVhZGVyCiAqIEBwYXJhbSBub3cgY3VycmVudCB1bml4IHRpbWVzdGFtcAogKgogKi8KZnVuY3Rpb24gcGFyc2VSZXRyeUFmdGVySGVhZGVyKGhlYWRlciwgbm93ID0gRGF0ZS5ub3coKSkgewogIGNvbnN0IGhlYWRlckRlbGF5ID0gcGFyc2VJbnQoYCR7aGVhZGVyfWAsIDEwKTsKICBpZiAoIWlzTmFOKGhlYWRlckRlbGF5KSkgewogICAgcmV0dXJuIGhlYWRlckRlbGF5ICogMTAwMDsKICB9CgogIGNvbnN0IGhlYWRlckRhdGUgPSBEYXRlLnBhcnNlKGAke2hlYWRlcn1gKTsKICBpZiAoIWlzTmFOKGhlYWRlckRhdGUpKSB7CiAgICByZXR1cm4gaGVhZGVyRGF0ZSAtIG5vdzsKICB9CgogIHJldHVybiBERUZBVUxUX1JFVFJZX0FGVEVSOwp9CgovKioKICogR2V0cyB0aGUgdGltZSB0aGF0IHRoZSBnaXZlbiBjYXRlZ29yeSBpcyBkaXNhYmxlZCB1bnRpbCBmb3IgcmF0ZSBsaW1pdGluZy4KICogSW4gY2FzZSBubyBjYXRlZ29yeS1zcGVjaWZpYyBsaW1pdCBpcyBzZXQgYnV0IGEgZ2VuZXJhbCByYXRlIGxpbWl0IGFjcm9zcyBhbGwgY2F0ZWdvcmllcyBpcyBhY3RpdmUsCiAqIHRoYXQgdGltZSBpcyByZXR1cm5lZC4KICoKICogQHJldHVybiB0aGUgdGltZSBpbiBtcyB0aGF0IHRoZSBjYXRlZ29yeSBpcyBkaXNhYmxlZCB1bnRpbCBvciAwIGlmIHRoZXJlJ3Mgbm8gYWN0aXZlIHJhdGUgbGltaXQuCiAqLwpmdW5jdGlvbiBkaXNhYmxlZFVudGlsKGxpbWl0cywgZGF0YUNhdGVnb3J5KSB7CiAgcmV0dXJuIGxpbWl0c1tkYXRhQ2F0ZWdvcnldIHx8IGxpbWl0cy5hbGwgfHwgMDsKfQoKLyoqCiAqIENoZWNrcyBpZiBhIGNhdGVnb3J5IGlzIHJhdGUgbGltaXRlZAogKi8KZnVuY3Rpb24gaXNSYXRlTGltaXRlZChsaW1pdHMsIGRhdGFDYXRlZ29yeSwgbm93ID0gRGF0ZS5ub3coKSkgewogIHJldHVybiBkaXNhYmxlZFVudGlsKGxpbWl0cywgZGF0YUNhdGVnb3J5KSA+IG5vdzsKfQoKLyoqCiAqIFVwZGF0ZSByYXRlbGltaXRzIGZyb20gaW5jb21pbmcgaGVhZGVycy4KICoKICogQHJldHVybiB0aGUgdXBkYXRlZCBSYXRlTGltaXRzIG9iamVjdC4KICovCmZ1bmN0aW9uIHVwZGF0ZVJhdGVMaW1pdHMoCiAgbGltaXRzLAogIHsgc3RhdHVzQ29kZSwgaGVhZGVycyB9LAogIG5vdyA9IERhdGUubm93KCksCikgewogIGNvbnN0IHVwZGF0ZWRSYXRlTGltaXRzID0gewogICAgLi4ubGltaXRzLAogIH07CgogIC8vICJUaGUgbmFtZSBpcyBjYXNlLWluc2Vuc2l0aXZlLiIKICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSGVhZGVycy9nZXQKICBjb25zdCByYXRlTGltaXRIZWFkZXIgPSBoZWFkZXJzICYmIGhlYWRlcnNbJ3gtc2VudHJ5LXJhdGUtbGltaXRzJ107CiAgY29uc3QgcmV0cnlBZnRlckhlYWRlciA9IGhlYWRlcnMgJiYgaGVhZGVyc1sncmV0cnktYWZ0ZXInXTsKCiAgaWYgKHJhdGVMaW1pdEhlYWRlcikgewogICAgLyoqCiAgICAgKiByYXRlIGxpbWl0IGhlYWRlcnMgYXJlIG9mIHRoZSBmb3JtCiAgICAgKiAgICAgPGhlYWRlcj4sPGhlYWRlcj4sLi4KICAgICAqIHdoZXJlIGVhY2ggPGhlYWRlcj4gaXMgb2YgdGhlIGZvcm0KICAgICAqICAgICA8cmV0cnlfYWZ0ZXI+OiA8Y2F0ZWdvcmllcz46IDxzY29wZT46IDxyZWFzb25fY29kZT46IDxuYW1lc3BhY2VzPgogICAgICogd2hlcmUKICAgICAqICAgICA8cmV0cnlfYWZ0ZXI+IGlzIGEgZGVsYXkgaW4gc2Vjb25kcwogICAgICogICAgIDxjYXRlZ29yaWVzPiBpcyB0aGUgZXZlbnQgdHlwZShzKSAoZXJyb3IsIHRyYW5zYWN0aW9uLCBldGMpIGJlaW5nIHJhdGUgbGltaXRlZCBhbmQgaXMgb2YgdGhlIGZvcm0KICAgICAqICAgICAgICAgPGNhdGVnb3J5Pjs8Y2F0ZWdvcnk+Oy4uLgogICAgICogICAgIDxzY29wZT4gaXMgd2hhdCdzIGJlaW5nIGxpbWl0ZWQgKG9yZywgcHJvamVjdCwgb3Iga2V5KSAtIGlnbm9yZWQgYnkgU0RLCiAgICAgKiAgICAgPHJlYXNvbl9jb2RlPiBpcyBhbiBhcmJpdHJhcnkgc3RyaW5nIGxpa2UgIm9yZ19xdW90YSIgLSBpZ25vcmVkIGJ5IFNESwogICAgICogICAgIDxuYW1lc3BhY2VzPiBTZW1pY29sb24tc2VwYXJhdGVkIGxpc3Qgb2YgbWV0cmljIG5hbWVzcGFjZSBpZGVudGlmaWVycy4gRGVmaW5lcyB3aGljaCBuYW1lc3BhY2Uocykgd2lsbCBiZSBhZmZlY3RlZC4KICAgICAqICAgICAgICAgT25seSBwcmVzZW50IGlmIHJhdGUgbGltaXQgYXBwbGllcyB0byB0aGUgbWV0cmljX2J1Y2tldCBkYXRhIGNhdGVnb3J5LgogICAgICovCiAgICBmb3IgKGNvbnN0IGxpbWl0IG9mIHJhdGVMaW1pdEhlYWRlci50cmltKCkuc3BsaXQoJywnKSkgewogICAgICBjb25zdCBbcmV0cnlBZnRlciwgY2F0ZWdvcmllcywgLCAsIG5hbWVzcGFjZXNdID0gbGltaXQuc3BsaXQoJzonLCA1KTsKICAgICAgY29uc3QgaGVhZGVyRGVsYXkgPSBwYXJzZUludChyZXRyeUFmdGVyLCAxMCk7CiAgICAgIGNvbnN0IGRlbGF5ID0gKCFpc05hTihoZWFkZXJEZWxheSkgPyBoZWFkZXJEZWxheSA6IDYwKSAqIDEwMDA7IC8vIDYwc2VjIGRlZmF1bHQKICAgICAgaWYgKCFjYXRlZ29yaWVzKSB7CiAgICAgICAgdXBkYXRlZFJhdGVMaW1pdHMuYWxsID0gbm93ICsgZGVsYXk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZm9yIChjb25zdCBjYXRlZ29yeSBvZiBjYXRlZ29yaWVzLnNwbGl0KCc7JykpIHsKICAgICAgICAgIGlmIChjYXRlZ29yeSA9PT0gJ21ldHJpY19idWNrZXQnKSB7CiAgICAgICAgICAgIC8vIG5hbWVzcGFjZXMgd2lsbCBiZSBwcmVzZW50IHdoZW4gY2F0ZWdvcnkgPT09ICdtZXRyaWNfYnVja2V0JwogICAgICAgICAgICBpZiAoIW5hbWVzcGFjZXMgfHwgbmFtZXNwYWNlcy5zcGxpdCgnOycpLmluY2x1ZGVzKCdjdXN0b20nKSkgewogICAgICAgICAgICAgIHVwZGF0ZWRSYXRlTGltaXRzW2NhdGVnb3J5XSA9IG5vdyArIGRlbGF5OwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB1cGRhdGVkUmF0ZUxpbWl0c1tjYXRlZ29yeV0gPSBub3cgKyBkZWxheTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9IGVsc2UgaWYgKHJldHJ5QWZ0ZXJIZWFkZXIpIHsKICAgIHVwZGF0ZWRSYXRlTGltaXRzLmFsbCA9IG5vdyArIHBhcnNlUmV0cnlBZnRlckhlYWRlcihyZXRyeUFmdGVySGVhZGVyLCBub3cpOwogIH0gZWxzZSBpZiAoc3RhdHVzQ29kZSA9PT0gNDI5KSB7CiAgICB1cGRhdGVkUmF0ZUxpbWl0cy5hbGwgPSBub3cgKyA2MCAqIDEwMDA7CiAgfQoKICByZXR1cm4gdXBkYXRlZFJhdGVMaW1pdHM7Cn0KCi8qKgogKiBBIG5vZGUuanMgd2F0Y2hkb2cgdGltZXIKICogQHBhcmFtIHBvbGxJbnRlcnZhbCBUaGUgaW50ZXJ2YWwgdGhhdCB3ZSBleHBlY3QgdG8gZ2V0IHBvbGxlZCBhdAogKiBAcGFyYW0gYW5yVGhyZXNob2xkIFRoZSB0aHJlc2hvbGQgZm9yIHdoZW4gd2UgY29uc2lkZXIgQU5SCiAqIEBwYXJhbSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gY2FsbCBmb3IgQU5SCiAqIEByZXR1cm5zIEFuIG9iamVjdCB3aXRoIGBwb2xsYCBhbmQgYGVuYWJsZWRgIGZ1bmN0aW9ucyB7QGxpbmsgV2F0Y2hkb2dSZXR1cm59CiAqLwpmdW5jdGlvbiB3YXRjaGRvZ1RpbWVyKAogIGNyZWF0ZVRpbWVyLAogIHBvbGxJbnRlcnZhbCwKICBhbnJUaHJlc2hvbGQsCiAgY2FsbGJhY2ssCikgewogIGNvbnN0IHRpbWVyID0gY3JlYXRlVGltZXIoKTsKICBsZXQgdHJpZ2dlcmVkID0gZmFsc2U7CiAgbGV0IGVuYWJsZWQgPSB0cnVlOwoKICBzZXRJbnRlcnZhbCgoKSA9PiB7CiAgICBjb25zdCBkaWZmTXMgPSB0aW1lci5nZXRUaW1lTXMoKTsKCiAgICBpZiAodHJpZ2dlcmVkID09PSBmYWxzZSAmJiBkaWZmTXMgPiBwb2xsSW50ZXJ2YWwgKyBhbnJUaHJlc2hvbGQpIHsKICAgICAgdHJpZ2dlcmVkID0gdHJ1ZTsKICAgICAgaWYgKGVuYWJsZWQpIHsKICAgICAgICBjYWxsYmFjaygpOwogICAgICB9CiAgICB9CgogICAgaWYgKGRpZmZNcyA8IHBvbGxJbnRlcnZhbCArIGFuclRocmVzaG9sZCkgewogICAgICB0cmlnZ2VyZWQgPSBmYWxzZTsKICAgIH0KICB9LCAyMCk7CgogIHJldHVybiB7CiAgICBwb2xsOiAoKSA9PiB7CiAgICAgIHRpbWVyLnJlc2V0KCk7CiAgICB9LAogICAgZW5hYmxlZDogKHN0YXRlKSA9PiB7CiAgICAgIGVuYWJsZWQgPSBzdGF0ZTsKICAgIH0sCiAgfTsKfQoKLy8gdHlwZXMgY29waWVkIGZyb20gaW5zcGVjdG9yLmQudHMKCi8qKgogKiBDb252ZXJ0cyBEZWJ1Z2dlci5DYWxsRnJhbWUgdG8gU2VudHJ5IFN0YWNrRnJhbWUKICovCmZ1bmN0aW9uIGNhbGxGcmFtZVRvU3RhY2tGcmFtZSgKICBmcmFtZSwKICB1cmwsCiAgZ2V0TW9kdWxlRnJvbUZpbGVuYW1lLAopIHsKICBjb25zdCBmaWxlbmFtZSA9IHVybCA/IHVybC5yZXBsYWNlKC9eZmlsZTpcL1wvLywgJycpIDogdW5kZWZpbmVkOwoKICAvLyBDYWxsRnJhbWUgcm93L2NvbCBhcmUgMCBiYXNlZCwgd2hlcmVhcyBTdGFja0ZyYW1lIGFyZSAxIGJhc2VkCiAgY29uc3QgY29sbm8gPSBmcmFtZS5sb2NhdGlvbi5jb2x1bW5OdW1iZXIgPyBmcmFtZS5sb2NhdGlvbi5jb2x1bW5OdW1iZXIgKyAxIDogdW5kZWZpbmVkOwogIGNvbnN0IGxpbmVubyA9IGZyYW1lLmxvY2F0aW9uLmxpbmVOdW1iZXIgPyBmcmFtZS5sb2NhdGlvbi5saW5lTnVtYmVyICsgMSA6IHVuZGVmaW5lZDsKCiAgcmV0dXJuIGRyb3BVbmRlZmluZWRLZXlzKHsKICAgIGZpbGVuYW1lLAogICAgbW9kdWxlOiBnZXRNb2R1bGVGcm9tRmlsZW5hbWUoZmlsZW5hbWUpLAogICAgZnVuY3Rpb246IGZyYW1lLmZ1bmN0aW9uTmFtZSB8fCAnPycsCiAgICBjb2xubywKICAgIGxpbmVubywKICAgIGluX2FwcDogZmlsZW5hbWUgPyBmaWxlbmFtZUlzSW5BcHAoZmlsZW5hbWUpIDogdW5kZWZpbmVkLAogIH0pOwp9CgovKioKICogVGhpcyBzZXJ2ZXMgYXMgYSBidWlsZCB0aW1lIGZsYWcgdGhhdCB3aWxsIGJlIHRydWUgYnkgZGVmYXVsdCwgYnV0IGZhbHNlIGluIG5vbi1kZWJ1ZyBidWlsZHMgb3IgaWYgdXNlcnMgcmVwbGFjZSBgX19TRU5UUllfREVCVUdfX2AgaW4gdGhlaXIgZ2VuZXJhdGVkIGNvZGUuCiAqCiAqIEFUVEVOVElPTjogVGhpcyBjb25zdGFudCBtdXN0IG5ldmVyIGNyb3NzIHBhY2thZ2UgYm91bmRhcmllcyAoaS5lLiBiZSBleHBvcnRlZCkgdG8gZ3VhcmFudGVlIHRoYXQgaXQgY2FuIGJlIHVzZWQgZm9yIHRyZWUgc2hha2luZy4KICovCmNvbnN0IERFQlVHX0JVSUxEID0gKHR5cGVvZiBfX1NFTlRSWV9ERUJVR19fID09PSAndW5kZWZpbmVkJyB8fCBfX1NFTlRSWV9ERUJVR19fKTsKCmNvbnN0IERFRkFVTFRfRU5WSVJPTk1FTlQgPSAncHJvZHVjdGlvbic7CgovKioKICogUmV0dXJucyB0aGUgZ2xvYmFsIGV2ZW50IHByb2Nlc3NvcnMuCiAqIEBkZXByZWNhdGVkIEdsb2JhbCBldmVudCBwcm9jZXNzb3JzIHdpbGwgYmUgcmVtb3ZlZCBpbiB2OC4KICovCmZ1bmN0aW9uIGdldEdsb2JhbEV2ZW50UHJvY2Vzc29ycygpIHsKICByZXR1cm4gZ2V0R2xvYmFsU2luZ2xldG9uKCdnbG9iYWxFdmVudFByb2Nlc3NvcnMnLCAoKSA9PiBbXSk7Cn0KCi8qKgogKiBQcm9jZXNzIGFuIGFycmF5IG9mIGV2ZW50IHByb2Nlc3NvcnMsIHJldHVybmluZyB0aGUgcHJvY2Vzc2VkIGV2ZW50IChvciBgbnVsbGAgaWYgdGhlIGV2ZW50IHdhcyBkcm9wcGVkKS4KICovCmZ1bmN0aW9uIG5vdGlmeUV2ZW50UHJvY2Vzc29ycygKICBwcm9jZXNzb3JzLAogIGV2ZW50LAogIGhpbnQsCiAgaW5kZXggPSAwLAopIHsKICByZXR1cm4gbmV3IFN5bmNQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHsKICAgIGNvbnN0IHByb2Nlc3NvciA9IHByb2Nlc3NvcnNbaW5kZXhdOwogICAgaWYgKGV2ZW50ID09PSBudWxsIHx8IHR5cGVvZiBwcm9jZXNzb3IgIT09ICdmdW5jdGlvbicpIHsKICAgICAgcmVzb2x2ZShldmVudCk7CiAgICB9IGVsc2UgewogICAgICBjb25zdCByZXN1bHQgPSBwcm9jZXNzb3IoeyAuLi5ldmVudCB9LCBoaW50KSA7CgogICAgICBERUJVR19CVUlMRCAmJiBwcm9jZXNzb3IuaWQgJiYgcmVzdWx0ID09PSBudWxsICYmIGxvZ2dlci5sb2coYEV2ZW50IHByb2Nlc3NvciAiJHtwcm9jZXNzb3IuaWR9IiBkcm9wcGVkIGV2ZW50YCk7CgogICAgICBpZiAoaXNUaGVuYWJsZShyZXN1bHQpKSB7CiAgICAgICAgdm9pZCByZXN1bHQKICAgICAgICAgIC50aGVuKGZpbmFsID0+IG5vdGlmeUV2ZW50UHJvY2Vzc29ycyhwcm9jZXNzb3JzLCBmaW5hbCwgaGludCwgaW5kZXggKyAxKS50aGVuKHJlc29sdmUpKQogICAgICAgICAgLnRoZW4obnVsbCwgcmVqZWN0KTsKICAgICAgfSBlbHNlIHsKICAgICAgICB2b2lkIG5vdGlmeUV2ZW50UHJvY2Vzc29ycyhwcm9jZXNzb3JzLCByZXN1bHQsIGhpbnQsIGluZGV4ICsgMSkKICAgICAgICAgIC50aGVuKHJlc29sdmUpCiAgICAgICAgICAudGhlbihudWxsLCByZWplY3QpOwogICAgICB9CiAgICB9CiAgfSk7Cn0KCi8qKgogKiBDcmVhdGVzIGEgbmV3IGBTZXNzaW9uYCBvYmplY3QgYnkgc2V0dGluZyBjZXJ0YWluIGRlZmF1bHQgcGFyYW1ldGVycy4gSWYgb3B0aW9uYWwgQHBhcmFtIGNvbnRleHQKICogaXMgcGFzc2VkLCB0aGUgcGFzc2VkIHByb3BlcnRpZXMgYXJlIGFwcGxpZWQgdG8gdGhlIHNlc3Npb24gb2JqZWN0LgogKgogKiBAcGFyYW0gY29udGV4dCAob3B0aW9uYWwpIGFkZGl0aW9uYWwgcHJvcGVydGllcyB0byBiZSBhcHBsaWVkIHRvIHRoZSByZXR1cm5lZCBzZXNzaW9uIG9iamVjdAogKgogKiBAcmV0dXJucyBhIG5ldyBgU2Vzc2lvbmAgb2JqZWN0CiAqLwpmdW5jdGlvbiBtYWtlU2Vzc2lvbihjb250ZXh0KSB7CiAgLy8gQm90aCB0aW1lc3RhbXAgYW5kIHN0YXJ0ZWQgYXJlIGluIHNlY29uZHMgc2luY2UgdGhlIFVOSVggZXBvY2guCiAgY29uc3Qgc3RhcnRpbmdUaW1lID0gdGltZXN0YW1wSW5TZWNvbmRzKCk7CgogIGNvbnN0IHNlc3Npb24gPSB7CiAgICBzaWQ6IHV1aWQ0KCksCiAgICBpbml0OiB0cnVlLAogICAgdGltZXN0YW1wOiBzdGFydGluZ1RpbWUsCiAgICBzdGFydGVkOiBzdGFydGluZ1RpbWUsCiAgICBkdXJhdGlvbjogMCwKICAgIHN0YXR1czogJ29rJywKICAgIGVycm9yczogMCwKICAgIGlnbm9yZUR1cmF0aW9uOiBmYWxzZSwKICAgIHRvSlNPTjogKCkgPT4gc2Vzc2lvblRvSlNPTihzZXNzaW9uKSwKICB9OwoKICBpZiAoY29udGV4dCkgewogICAgdXBkYXRlU2Vzc2lvbihzZXNzaW9uLCBjb250ZXh0KTsKICB9CgogIHJldHVybiBzZXNzaW9uOwp9CgovKioKICogVXBkYXRlcyBhIHNlc3Npb24gb2JqZWN0IHdpdGggdGhlIHByb3BlcnRpZXMgcGFzc2VkIGluIHRoZSBjb250ZXh0LgogKgogKiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBtdXRhdGVzIHRoZSBwYXNzZWQgb2JqZWN0IGFuZCByZXR1cm5zIHZvaWQuCiAqIChIYWQgdG8gZG8gdGhpcyBpbnN0ZWFkIG9mIHJldHVybmluZyBhIG5ldyBhbmQgdXBkYXRlZCBzZXNzaW9uIGJlY2F1c2UgY2xvc2luZyBhbmQgc2VuZGluZyBhIHNlc3Npb24KICogbWFrZXMgYW4gdXBkYXRlIHRvIHRoZSBzZXNzaW9uIGFmdGVyIGl0IHdhcyBwYXNzZWQgdG8gdGhlIHNlbmRpbmcgbG9naWMuCiAqIEBzZWUgQmFzZUNsaWVudC5jYXB0dXJlU2Vzc2lvbiApCiAqCiAqIEBwYXJhbSBzZXNzaW9uIHRoZSBgU2Vzc2lvbmAgdG8gdXBkYXRlCiAqIEBwYXJhbSBjb250ZXh0IHRoZSBgU2Vzc2lvbkNvbnRleHRgIGhvbGRpbmcgdGhlIHByb3BlcnRpZXMgdGhhdCBzaG91bGQgYmUgdXBkYXRlZCBpbiBAcGFyYW0gc2Vzc2lvbgogKi8KLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHkKZnVuY3Rpb24gdXBkYXRlU2Vzc2lvbihzZXNzaW9uLCBjb250ZXh0ID0ge30pIHsKICBpZiAoY29udGV4dC51c2VyKSB7CiAgICBpZiAoIXNlc3Npb24uaXBBZGRyZXNzICYmIGNvbnRleHQudXNlci5pcF9hZGRyZXNzKSB7CiAgICAgIHNlc3Npb24uaXBBZGRyZXNzID0gY29udGV4dC51c2VyLmlwX2FkZHJlc3M7CiAgICB9CgogICAgaWYgKCFzZXNzaW9uLmRpZCAmJiAhY29udGV4dC5kaWQpIHsKICAgICAgc2Vzc2lvbi5kaWQgPSBjb250ZXh0LnVzZXIuaWQgfHwgY29udGV4dC51c2VyLmVtYWlsIHx8IGNvbnRleHQudXNlci51c2VybmFtZTsKICAgIH0KICB9CgogIHNlc3Npb24udGltZXN0YW1wID0gY29udGV4dC50aW1lc3RhbXAgfHwgdGltZXN0YW1wSW5TZWNvbmRzKCk7CgogIGlmIChjb250ZXh0LmFibm9ybWFsX21lY2hhbmlzbSkgewogICAgc2Vzc2lvbi5hYm5vcm1hbF9tZWNoYW5pc20gPSBjb250ZXh0LmFibm9ybWFsX21lY2hhbmlzbTsKICB9CgogIGlmIChjb250ZXh0Lmlnbm9yZUR1cmF0aW9uKSB7CiAgICBzZXNzaW9uLmlnbm9yZUR1cmF0aW9uID0gY29udGV4dC5pZ25vcmVEdXJhdGlvbjsKICB9CiAgaWYgKGNvbnRleHQuc2lkKSB7CiAgICAvLyBHb29kIGVub3VnaCB1dWlkIHZhbGlkYXRpb24uIOKAlCBLYW1pbAogICAgc2Vzc2lvbi5zaWQgPSBjb250ZXh0LnNpZC5sZW5ndGggPT09IDMyID8gY29udGV4dC5zaWQgOiB1dWlkNCgpOwogIH0KICBpZiAoY29udGV4dC5pbml0ICE9PSB1bmRlZmluZWQpIHsKICAgIHNlc3Npb24uaW5pdCA9IGNvbnRleHQuaW5pdDsKICB9CiAgaWYgKCFzZXNzaW9uLmRpZCAmJiBjb250ZXh0LmRpZCkgewogICAgc2Vzc2lvbi5kaWQgPSBgJHtjb250ZXh0LmRpZH1gOwogIH0KICBpZiAodHlwZW9mIGNvbnRleHQuc3RhcnRlZCA9PT0gJ251bWJlcicpIHsKICAgIHNlc3Npb24uc3RhcnRlZCA9IGNvbnRleHQuc3RhcnRlZDsKICB9CiAgaWYgKHNlc3Npb24uaWdub3JlRHVyYXRpb24pIHsKICAgIHNlc3Npb24uZHVyYXRpb24gPSB1bmRlZmluZWQ7CiAgfSBlbHNlIGlmICh0eXBlb2YgY29udGV4dC5kdXJhdGlvbiA9PT0gJ251bWJlcicpIHsKICAgIHNlc3Npb24uZHVyYXRpb24gPSBjb250ZXh0LmR1cmF0aW9uOwogIH0gZWxzZSB7CiAgICBjb25zdCBkdXJhdGlvbiA9IHNlc3Npb24udGltZXN0YW1wIC0gc2Vzc2lvbi5zdGFydGVkOwogICAgc2Vzc2lvbi5kdXJhdGlvbiA9IGR1cmF0aW9uID49IDAgPyBkdXJhdGlvbiA6IDA7CiAgfQogIGlmIChjb250ZXh0LnJlbGVhc2UpIHsKICAgIHNlc3Npb24ucmVsZWFzZSA9IGNvbnRleHQucmVsZWFzZTsKICB9CiAgaWYgKGNvbnRleHQuZW52aXJvbm1lbnQpIHsKICAgIHNlc3Npb24uZW52aXJvbm1lbnQgPSBjb250ZXh0LmVudmlyb25tZW50OwogIH0KICBpZiAoIXNlc3Npb24uaXBBZGRyZXNzICYmIGNvbnRleHQuaXBBZGRyZXNzKSB7CiAgICBzZXNzaW9uLmlwQWRkcmVzcyA9IGNvbnRleHQuaXBBZGRyZXNzOwogIH0KICBpZiAoIXNlc3Npb24udXNlckFnZW50ICYmIGNvbnRleHQudXNlckFnZW50KSB7CiAgICBzZXNzaW9uLnVzZXJBZ2VudCA9IGNvbnRleHQudXNlckFnZW50OwogIH0KICBpZiAodHlwZW9mIGNvbnRleHQuZXJyb3JzID09PSAnbnVtYmVyJykgewogICAgc2Vzc2lvbi5lcnJvcnMgPSBjb250ZXh0LmVycm9yczsKICB9CiAgaWYgKGNvbnRleHQuc3RhdHVzKSB7CiAgICBzZXNzaW9uLnN0YXR1cyA9IGNvbnRleHQuc3RhdHVzOwogIH0KfQoKLyoqCiAqIENsb3NlcyBhIHNlc3Npb24gYnkgc2V0dGluZyBpdHMgc3RhdHVzIGFuZCB1cGRhdGluZyB0aGUgc2Vzc2lvbiBvYmplY3Qgd2l0aCBpdC4KICogSW50ZXJuYWxseSBjYWxscyBgdXBkYXRlU2Vzc2lvbmAgdG8gdXBkYXRlIHRoZSBwYXNzZWQgc2Vzc2lvbiBvYmplY3QuCiAqCiAqIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIG11dGF0ZXMgdGhlIHBhc3NlZCBzZXNzaW9uIChAc2VlIHVwZGF0ZVNlc3Npb24gZm9yIGV4cGxhbmF0aW9uKS4KICoKICogQHBhcmFtIHNlc3Npb24gdGhlIGBTZXNzaW9uYCBvYmplY3QgdG8gYmUgY2xvc2VkCiAqIEBwYXJhbSBzdGF0dXMgdGhlIGBTZXNzaW9uU3RhdHVzYCB3aXRoIHdoaWNoIHRoZSBzZXNzaW9uIHdhcyBjbG9zZWQuIElmIHlvdSBkb24ndCBwYXNzIGEgc3RhdHVzLAogKiAgICAgICAgICAgICAgIHRoaXMgZnVuY3Rpb24gd2lsbCBrZWVwIHRoZSBwcmV2aW91c2x5IHNldCBzdGF0dXMsIHVubGVzcyBpdCB3YXMgYCdvaydgIGluIHdoaWNoIGNhc2UKICogICAgICAgICAgICAgICBpdCBpcyBjaGFuZ2VkIHRvIGAnZXhpdGVkJ2AuCiAqLwpmdW5jdGlvbiBjbG9zZVNlc3Npb24oc2Vzc2lvbiwgc3RhdHVzKSB7CiAgbGV0IGNvbnRleHQgPSB7fTsKICBpZiAoc3RhdHVzKSB7CiAgICBjb250ZXh0ID0geyBzdGF0dXMgfTsKICB9IGVsc2UgaWYgKHNlc3Npb24uc3RhdHVzID09PSAnb2snKSB7CiAgICBjb250ZXh0ID0geyBzdGF0dXM6ICdleGl0ZWQnIH07CiAgfQoKICB1cGRhdGVTZXNzaW9uKHNlc3Npb24sIGNvbnRleHQpOwp9CgovKioKICogU2VyaWFsaXplcyBhIHBhc3NlZCBzZXNzaW9uIG9iamVjdCB0byBhIEpTT04gb2JqZWN0IHdpdGggYSBzbGlnaHRseSBkaWZmZXJlbnQgc3RydWN0dXJlLgogKiBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZSBTZW50cnkgYmFja2VuZCByZXF1aXJlcyBhIHNsaWdodGx5IGRpZmZlcmVudCBzY2hlbWEgb2YgYSBzZXNzaW9uCiAqIHRoYW4gdGhlIG9uZSB0aGUgSlMgU0RLcyB1c2UgaW50ZXJuYWxseS4KICoKICogQHBhcmFtIHNlc3Npb24gdGhlIHNlc3Npb24gdG8gYmUgY29udmVydGVkCiAqCiAqIEByZXR1cm5zIGEgSlNPTiBvYmplY3Qgb2YgdGhlIHBhc3NlZCBzZXNzaW9uCiAqLwpmdW5jdGlvbiBzZXNzaW9uVG9KU09OKHNlc3Npb24pIHsKICByZXR1cm4gZHJvcFVuZGVmaW5lZEtleXMoewogICAgc2lkOiBgJHtzZXNzaW9uLnNpZH1gLAogICAgaW5pdDogc2Vzc2lvbi5pbml0LAogICAgLy8gTWFrZSBzdXJlIHRoYXQgc2VjIGlzIGNvbnZlcnRlZCB0byBtcyBmb3IgZGF0ZSBjb25zdHJ1Y3RvcgogICAgc3RhcnRlZDogbmV3IERhdGUoc2Vzc2lvbi5zdGFydGVkICogMTAwMCkudG9JU09TdHJpbmcoKSwKICAgIHRpbWVzdGFtcDogbmV3IERhdGUoc2Vzc2lvbi50aW1lc3RhbXAgKiAxMDAwKS50b0lTT1N0cmluZygpLAogICAgc3RhdHVzOiBzZXNzaW9uLnN0YXR1cywKICAgIGVycm9yczogc2Vzc2lvbi5lcnJvcnMsCiAgICBkaWQ6IHR5cGVvZiBzZXNzaW9uLmRpZCA9PT0gJ251bWJlcicgfHwgdHlwZW9mIHNlc3Npb24uZGlkID09PSAnc3RyaW5nJyA/IGAke3Nlc3Npb24uZGlkfWAgOiB1bmRlZmluZWQsCiAgICBkdXJhdGlvbjogc2Vzc2lvbi5kdXJhdGlvbiwKICAgIGFibm9ybWFsX21lY2hhbmlzbTogc2Vzc2lvbi5hYm5vcm1hbF9tZWNoYW5pc20sCiAgICBhdHRyczogewogICAgICByZWxlYXNlOiBzZXNzaW9uLnJlbGVhc2UsCiAgICAgIGVudmlyb25tZW50OiBzZXNzaW9uLmVudmlyb25tZW50LAogICAgICBpcF9hZGRyZXNzOiBzZXNzaW9uLmlwQWRkcmVzcywKICAgICAgdXNlcl9hZ2VudDogc2Vzc2lvbi51c2VyQWdlbnQsCiAgICB9LAogIH0pOwp9Cgpjb25zdCBUUkFDRV9GTEFHX1NBTVBMRUQgPSAweDE7CgovKioKICogQ29udmVydCBhIHNwYW4gdG8gYSB0cmFjZSBjb250ZXh0LCB3aGljaCBjYW4gYmUgc2VudCBhcyB0aGUgYHRyYWNlYCBjb250ZXh0IGluIGFuIGV2ZW50LgogKi8KZnVuY3Rpb24gc3BhblRvVHJhY2VDb250ZXh0KHNwYW4pIHsKICBjb25zdCB7IHNwYW5JZDogc3Bhbl9pZCwgdHJhY2VJZDogdHJhY2VfaWQgfSA9IHNwYW4uc3BhbkNvbnRleHQoKTsKICBjb25zdCB7IGRhdGEsIG9wLCBwYXJlbnRfc3Bhbl9pZCwgc3RhdHVzLCB0YWdzLCBvcmlnaW4gfSA9IHNwYW5Ub0pTT04oc3Bhbik7CgogIHJldHVybiBkcm9wVW5kZWZpbmVkS2V5cyh7CiAgICBkYXRhLAogICAgb3AsCiAgICBwYXJlbnRfc3Bhbl9pZCwKICAgIHNwYW5faWQsCiAgICBzdGF0dXMsCiAgICB0YWdzLAogICAgdHJhY2VfaWQsCiAgICBvcmlnaW4sCiAgfSk7Cn0KCi8qKgogKiBDb252ZXJ0IGEgc3BhbiB0byBhIEpTT04gcmVwcmVzZW50YXRpb24uCiAqIE5vdGUgdGhhdCBhbGwgZmllbGRzIHJldHVybmVkIGhlcmUgYXJlIG9wdGlvbmFsIGFuZCBuZWVkIHRvIGJlIGd1YXJkZWQgYWdhaW5zdC4KICoKICogTm90ZTogQmVjYXVzZSBvZiB0aGlzLCB3ZSBjdXJyZW50bHkgaGF2ZSBhIGNpcmN1bGFyIHR5cGUgZGVwZW5kZW5jeSAod2hpY2ggd2Ugb3B0ZWQgb3V0IG9mIGluIHBhY2thZ2UuanNvbikuCiAqIFRoaXMgaXMgbm90IGF2b2lkYWJsZSBhcyB3ZSBuZWVkIGBzcGFuVG9KU09OYCBpbiBgc3BhblV0aWxzLnRzYCwgd2hpY2ggaW4gdHVybiBpcyBuZWVkZWQgYnkgYHNwYW4udHNgIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4KICogQW5kIGBzcGFuVG9KU09OYCBuZWVkcyB0aGUgU3BhbiBjbGFzcyBmcm9tIGBzcGFuLnRzYCB0byBjaGVjayBoZXJlLgogKiBUT0RPIHY4OiBXaGVuIHdlIHJlbW92ZSB0aGUgZGVwcmVjYXRlZCBzdHVmZiBmcm9tIGBzcGFuLnRzYCwgd2UgY2FuIHJlbW92ZSB0aGUgY2lyY3VsYXIgZGVwZW5kZW5jeSBhZ2Fpbi4KICovCmZ1bmN0aW9uIHNwYW5Ub0pTT04oc3BhbikgewogIGlmIChzcGFuSXNTcGFuQ2xhc3Moc3BhbikpIHsKICAgIHJldHVybiBzcGFuLmdldFNwYW5KU09OKCk7CiAgfQoKICAvLyBGYWxsYmFjazogV2UgYWxzbyBjaGVjayBmb3IgYC50b0pTT04oKWAgaGVyZS4uLgogIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogIGlmICh0eXBlb2Ygc3Bhbi50b0pTT04gPT09ICdmdW5jdGlvbicpIHsKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgcmV0dXJuIHNwYW4udG9KU09OKCk7CiAgfQoKICByZXR1cm4ge307Cn0KCi8qKgogKiBTYWRseSwgZHVlIHRvIGNpcmN1bGFyIGRlcGVuZGVuY3kgY2hlY2tzIHdlIGNhbm5vdCBhY3R1YWxseSBpbXBvcnQgdGhlIFNwYW4gY2xhc3MgaGVyZSBhbmQgY2hlY2sgZm9yIGluc3RhbmNlb2YuCiAqIDooIFNvIGluc3RlYWQgd2UgYXBwcm94aW1hdGUgdGhpcyBieSBjaGVja2luZyBpZiBpdCBoYXMgdGhlIGBnZXRTcGFuSlNPTmAgbWV0aG9kLgogKi8KZnVuY3Rpb24gc3BhbklzU3BhbkNsYXNzKHNwYW4pIHsKICByZXR1cm4gdHlwZW9mIChzcGFuICkuZ2V0U3BhbkpTT04gPT09ICdmdW5jdGlvbic7Cn0KCi8qKgogKiBSZXR1cm5zIHRydWUgaWYgYSBzcGFuIGlzIHNhbXBsZWQuCiAqIEluIG1vc3QgY2FzZXMsIHlvdSBzaG91bGQganVzdCB1c2UgYHNwYW4uaXNSZWNvcmRpbmcoKWAgaW5zdGVhZC4KICogSG93ZXZlciwgdGhpcyBoYXMgYSBzbGlnaHRseSBkaWZmZXJlbnQgc2VtYW50aWMsIGFzIGl0IGFsc28gcmV0dXJucyBmYWxzZSBpZiB0aGUgc3BhbiBpcyBmaW5pc2hlZC4KICogU28gaW4gdGhlIGNhc2Ugd2hlcmUgdGhpcyBkaXN0aW5jdGlvbiBpcyBpbXBvcnRhbnQsIHVzZSB0aGlzIG1ldGhvZC4KICovCmZ1bmN0aW9uIHNwYW5Jc1NhbXBsZWQoc3BhbikgewogIC8vIFdlIGFsaWduIG91ciB0cmFjZSBmbGFncyB3aXRoIHRoZSBvbmVzIE9wZW5UZWxlbWV0cnkgdXNlCiAgLy8gU28gd2UgYWxzbyBjaGVjayBmb3Igc2FtcGxlZCB0aGUgc2FtZSB3YXkgdGhleSBkby4KICBjb25zdCB7IHRyYWNlRmxhZ3MgfSA9IHNwYW4uc3BhbkNvbnRleHQoKTsKICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYml0d2lzZQogIHJldHVybiBCb29sZWFuKHRyYWNlRmxhZ3MgJiBUUkFDRV9GTEFHX1NBTVBMRUQpOwp9CgovKioKICogR2V0IHRoZSBjdXJyZW50bHkgYWN0aXZlIGNsaWVudC4KICovCmZ1bmN0aW9uIGdldENsaWVudCgpIHsKICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb24KICByZXR1cm4gZ2V0Q3VycmVudEh1YigpLmdldENsaWVudCgpOwp9CgovKioKICogR2V0IHRoZSBjdXJyZW50bHkgYWN0aXZlIHNjb3BlLgogKi8KZnVuY3Rpb24gZ2V0Q3VycmVudFNjb3BlKCkgewogIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogIHJldHVybiBnZXRDdXJyZW50SHViKCkuZ2V0U2NvcGUoKTsKfQoKLyoqCiAqIFJldHVybnMgdGhlIHJvb3Qgc3BhbiBvZiBhIGdpdmVuIHNwYW4uCiAqCiAqIEFzIGxvbmcgYXMgd2UgdXNlIGBUcmFuc2FjdGlvbmBzIGludGVybmFsbHksIHRoZSByZXR1cm5lZCByb290IHNwYW4KICogd2lsbCBiZSBhIGBUcmFuc2FjdGlvbmAgYnV0IGJlIGF3YXJlIHRoYXQgdGhpcyBtaWdodCBjaGFuZ2UgaW4gdGhlIGZ1dHVyZS4KICoKICogSWYgdGhlIGdpdmVuIHNwYW4gaGFzIG5vIHJvb3Qgc3BhbiBvciB0cmFuc2FjdGlvbiwgYHVuZGVmaW5lZGAgaXMgcmV0dXJuZWQuCiAqLwpmdW5jdGlvbiBnZXRSb290U3BhbihzcGFuKSB7CiAgLy8gVE9ETyAodjgpOiBSZW1vdmUgdGhpcyBjaGVjayBhbmQganVzdCByZXR1cm4gc3BhbgogIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogIHJldHVybiBzcGFuLnRyYW5zYWN0aW9uOwp9CgovKioKICogQ3JlYXRlcyBhIGR5bmFtaWMgc2FtcGxpbmcgY29udGV4dCBmcm9tIGEgY2xpZW50LgogKgogKiBEaXNwYXRjaGVzIHRoZSBgY3JlYXRlRHNjYCBsaWZlY3ljbGUgaG9vayBhcyBhIHNpZGUgZWZmZWN0LgogKi8KZnVuY3Rpb24gZ2V0RHluYW1pY1NhbXBsaW5nQ29udGV4dEZyb21DbGllbnQoCiAgdHJhY2VfaWQsCiAgY2xpZW50LAogIHNjb3BlLAopIHsKICBjb25zdCBvcHRpb25zID0gY2xpZW50LmdldE9wdGlvbnMoKTsKCiAgY29uc3QgeyBwdWJsaWNLZXk6IHB1YmxpY19rZXkgfSA9IGNsaWVudC5nZXREc24oKSB8fCB7fTsKICAvLyBUT0RPKHY4KTogUmVtb3ZlIHNlZ21lbnQgZnJvbSBVc2VyCiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgY29uc3QgeyBzZWdtZW50OiB1c2VyX3NlZ21lbnQgfSA9IChzY29wZSAmJiBzY29wZS5nZXRVc2VyKCkpIHx8IHt9OwoKICBjb25zdCBkc2MgPSBkcm9wVW5kZWZpbmVkS2V5cyh7CiAgICBlbnZpcm9ubWVudDogb3B0aW9ucy5lbnZpcm9ubWVudCB8fCBERUZBVUxUX0VOVklST05NRU5ULAogICAgcmVsZWFzZTogb3B0aW9ucy5yZWxlYXNlLAogICAgdXNlcl9zZWdtZW50LAogICAgcHVibGljX2tleSwKICAgIHRyYWNlX2lkLAogIH0pIDsKCiAgY2xpZW50LmVtaXQgJiYgY2xpZW50LmVtaXQoJ2NyZWF0ZURzYycsIGRzYyk7CgogIHJldHVybiBkc2M7Cn0KCi8qKgogKiBBIFNwYW4gd2l0aCBhIGZyb3plbiBkeW5hbWljIHNhbXBsaW5nIGNvbnRleHQuCiAqLwoKLyoqCiAqIENyZWF0ZXMgYSBkeW5hbWljIHNhbXBsaW5nIGNvbnRleHQgZnJvbSBhIHNwYW4gKGFuZCBjbGllbnQgYW5kIHNjb3BlKQogKgogKiBAcGFyYW0gc3BhbiB0aGUgc3BhbiBmcm9tIHdoaWNoIGEgZmV3IHZhbHVlcyBsaWtlIHRoZSByb290IHNwYW4gbmFtZSBhbmQgc2FtcGxlIHJhdGUgYXJlIGV4dHJhY3RlZC4KICoKICogQHJldHVybnMgYSBkeW5hbWljIHNhbXBsaW5nIGNvbnRleHQKICovCmZ1bmN0aW9uIGdldER5bmFtaWNTYW1wbGluZ0NvbnRleHRGcm9tU3BhbihzcGFuKSB7CiAgY29uc3QgY2xpZW50ID0gZ2V0Q2xpZW50KCk7CiAgaWYgKCFjbGllbnQpIHsKICAgIHJldHVybiB7fTsKICB9CgogIC8vIHBhc3NpbmcgZW1pdD1mYWxzZSBoZXJlIHRvIG9ubHkgZW1pdCBsYXRlciBvbmNlIHRoZSBEU0MgaXMgYWN0dWFsbHkgcG9wdWxhdGVkCiAgY29uc3QgZHNjID0gZ2V0RHluYW1pY1NhbXBsaW5nQ29udGV4dEZyb21DbGllbnQoc3BhblRvSlNPTihzcGFuKS50cmFjZV9pZCB8fCAnJywgY2xpZW50LCBnZXRDdXJyZW50U2NvcGUoKSk7CgogIC8vIFRPRE8gKHY4KTogUmVtb3ZlIHY3RnJvemVuRHNjIGFzIGEgVHJhbnNhY3Rpb24gd2lsbCBubyBsb25nZXIgaGF2ZSBfZnJvemVuRHluYW1pY1NhbXBsaW5nQ29udGV4dAogIGNvbnN0IHR4biA9IGdldFJvb3RTcGFuKHNwYW4pIDsKICBpZiAoIXR4bikgewogICAgcmV0dXJuIGRzYzsKICB9CgogIC8vIFRPRE8gKHY4KTogUmVtb3ZlIHY3RnJvemVuRHNjIGFzIGEgVHJhbnNhY3Rpb24gd2lsbCBubyBsb25nZXIgaGF2ZSBfZnJvemVuRHluYW1pY1NhbXBsaW5nQ29udGV4dAogIC8vIEZvciBub3cgd2UgbmVlZCB0byBhdm9pZCBicmVha2luZyB1c2VycyB3aG8gZGlyZWN0bHkgY3JlYXRlZCBhIHR4biB3aXRoIGEgRFNDLCB3aGVyZSB0aGlzIGZpZWxkIGlzIHN0aWxsIHNldC4KICAvLyBAc2VlIFRyYW5zYWN0aW9uIGNsYXNzIGNvbnN0cnVjdG9yCiAgY29uc3QgdjdGcm96ZW5Ec2MgPSB0eG4gJiYgdHhuLl9mcm96ZW5EeW5hbWljU2FtcGxpbmdDb250ZXh0OwogIGlmICh2N0Zyb3plbkRzYykgewogICAgcmV0dXJuIHY3RnJvemVuRHNjOwogIH0KCiAgLy8gVE9ETyAodjgpOiBSZXBsYWNlIHR4bi5tZXRhZGF0YSB3aXRoIHR4bi5hdHRyaWJ1dGVzW10KICAvLyBXZSBjYW4ndCBkbyB0aGlzIHlldCBiZWNhdXNlIGF0dHJpYnV0ZXMgYXJlbid0IGFsd2F5cyBzZXQgeWV0LgogIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogIGNvbnN0IHsgc2FtcGxlUmF0ZTogbWF5YmVTYW1wbGVSYXRlLCBzb3VyY2UgfSA9IHR4bi5tZXRhZGF0YTsKICBpZiAobWF5YmVTYW1wbGVSYXRlICE9IG51bGwpIHsKICAgIGRzYy5zYW1wbGVfcmF0ZSA9IGAke21heWJlU2FtcGxlUmF0ZX1gOwogIH0KCiAgLy8gV2UgZG9uJ3Qgd2FudCB0byBoYXZlIGEgdHJhbnNhY3Rpb24gbmFtZSBpbiB0aGUgRFNDIGlmIHRoZSBzb3VyY2UgaXMgInVybCIgYmVjYXVzZSBVUkxzIG1pZ2h0IGNvbnRhaW4gUElJCiAgY29uc3QganNvblNwYW4gPSBzcGFuVG9KU09OKHR4bik7CgogIC8vIGFmdGVyIEpTT04gY29udmVyc2lvbiwgdHhuLm5hbWUgYmVjb21lcyBqc29uU3Bhbi5kZXNjcmlwdGlvbgogIGlmIChzb3VyY2UgJiYgc291cmNlICE9PSAndXJsJykgewogICAgZHNjLnRyYW5zYWN0aW9uID0ganNvblNwYW4uZGVzY3JpcHRpb247CiAgfQoKICBkc2Muc2FtcGxlZCA9IFN0cmluZyhzcGFuSXNTYW1wbGVkKHR4bikpOwoKICBjbGllbnQuZW1pdCAmJiBjbGllbnQuZW1pdCgnY3JlYXRlRHNjJywgZHNjKTsKCiAgcmV0dXJuIGRzYzsKfQoKLyoqCiAqIEFwcGxpZXMgZGF0YSBmcm9tIHRoZSBzY29wZSB0byB0aGUgZXZlbnQgYW5kIHJ1bnMgYWxsIGV2ZW50IHByb2Nlc3NvcnMgb24gaXQuCiAqLwpmdW5jdGlvbiBhcHBseVNjb3BlRGF0YVRvRXZlbnQoZXZlbnQsIGRhdGEpIHsKICBjb25zdCB7IGZpbmdlcnByaW50LCBzcGFuLCBicmVhZGNydW1icywgc2RrUHJvY2Vzc2luZ01ldGFkYXRhIH0gPSBkYXRhOwoKICAvLyBBcHBseSBnZW5lcmFsIGRhdGEKICBhcHBseURhdGFUb0V2ZW50KGV2ZW50LCBkYXRhKTsKCiAgLy8gV2Ugd2FudCB0byBzZXQgdGhlIHRyYWNlIGNvbnRleHQgZm9yIG5vcm1hbCBldmVudHMgb25seSBpZiB0aGVyZSBpc24ndCBhbHJlYWR5CiAgLy8gYSB0cmFjZSBjb250ZXh0IG9uIHRoZSBldmVudC4gVGhlcmUgaXMgYSBwcm9kdWN0IGZlYXR1cmUgaW4gcGxhY2Ugd2hlcmUgd2UgbGluawogIC8vIGVycm9ycyB3aXRoIHRyYW5zYWN0aW9uIGFuZCBpdCByZWxpZXMgb24gdGhhdC4KICBpZiAoc3BhbikgewogICAgYXBwbHlTcGFuVG9FdmVudChldmVudCwgc3Bhbik7CiAgfQoKICBhcHBseUZpbmdlcnByaW50VG9FdmVudChldmVudCwgZmluZ2VycHJpbnQpOwogIGFwcGx5QnJlYWRjcnVtYnNUb0V2ZW50KGV2ZW50LCBicmVhZGNydW1icyk7CiAgYXBwbHlTZGtNZXRhZGF0YVRvRXZlbnQoZXZlbnQsIHNka1Byb2Nlc3NpbmdNZXRhZGF0YSk7Cn0KCmZ1bmN0aW9uIGFwcGx5RGF0YVRvRXZlbnQoZXZlbnQsIGRhdGEpIHsKICBjb25zdCB7CiAgICBleHRyYSwKICAgIHRhZ3MsCiAgICB1c2VyLAogICAgY29udGV4dHMsCiAgICBsZXZlbCwKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgdHJhbnNhY3Rpb25OYW1lLAogIH0gPSBkYXRhOwoKICBjb25zdCBjbGVhbmVkRXh0cmEgPSBkcm9wVW5kZWZpbmVkS2V5cyhleHRyYSk7CiAgaWYgKGNsZWFuZWRFeHRyYSAmJiBPYmplY3Qua2V5cyhjbGVhbmVkRXh0cmEpLmxlbmd0aCkgewogICAgZXZlbnQuZXh0cmEgPSB7IC4uLmNsZWFuZWRFeHRyYSwgLi4uZXZlbnQuZXh0cmEgfTsKICB9CgogIGNvbnN0IGNsZWFuZWRUYWdzID0gZHJvcFVuZGVmaW5lZEtleXModGFncyk7CiAgaWYgKGNsZWFuZWRUYWdzICYmIE9iamVjdC5rZXlzKGNsZWFuZWRUYWdzKS5sZW5ndGgpIHsKICAgIGV2ZW50LnRhZ3MgPSB7IC4uLmNsZWFuZWRUYWdzLCAuLi5ldmVudC50YWdzIH07CiAgfQoKICBjb25zdCBjbGVhbmVkVXNlciA9IGRyb3BVbmRlZmluZWRLZXlzKHVzZXIpOwogIGlmIChjbGVhbmVkVXNlciAmJiBPYmplY3Qua2V5cyhjbGVhbmVkVXNlcikubGVuZ3RoKSB7CiAgICBldmVudC51c2VyID0geyAuLi5jbGVhbmVkVXNlciwgLi4uZXZlbnQudXNlciB9OwogIH0KCiAgY29uc3QgY2xlYW5lZENvbnRleHRzID0gZHJvcFVuZGVmaW5lZEtleXMoY29udGV4dHMpOwogIGlmIChjbGVhbmVkQ29udGV4dHMgJiYgT2JqZWN0LmtleXMoY2xlYW5lZENvbnRleHRzKS5sZW5ndGgpIHsKICAgIGV2ZW50LmNvbnRleHRzID0geyAuLi5jbGVhbmVkQ29udGV4dHMsIC4uLmV2ZW50LmNvbnRleHRzIH07CiAgfQoKICBpZiAobGV2ZWwpIHsKICAgIGV2ZW50LmxldmVsID0gbGV2ZWw7CiAgfQoKICBpZiAodHJhbnNhY3Rpb25OYW1lKSB7CiAgICBldmVudC50cmFuc2FjdGlvbiA9IHRyYW5zYWN0aW9uTmFtZTsKICB9Cn0KCmZ1bmN0aW9uIGFwcGx5QnJlYWRjcnVtYnNUb0V2ZW50KGV2ZW50LCBicmVhZGNydW1icykgewogIGNvbnN0IG1lcmdlZEJyZWFkY3J1bWJzID0gWy4uLihldmVudC5icmVhZGNydW1icyB8fCBbXSksIC4uLmJyZWFkY3J1bWJzXTsKICBldmVudC5icmVhZGNydW1icyA9IG1lcmdlZEJyZWFkY3J1bWJzLmxlbmd0aCA/IG1lcmdlZEJyZWFkY3J1bWJzIDogdW5kZWZpbmVkOwp9CgpmdW5jdGlvbiBhcHBseVNka01ldGFkYXRhVG9FdmVudChldmVudCwgc2RrUHJvY2Vzc2luZ01ldGFkYXRhKSB7CiAgZXZlbnQuc2RrUHJvY2Vzc2luZ01ldGFkYXRhID0gewogICAgLi4uZXZlbnQuc2RrUHJvY2Vzc2luZ01ldGFkYXRhLAogICAgLi4uc2RrUHJvY2Vzc2luZ01ldGFkYXRhLAogIH07Cn0KCmZ1bmN0aW9uIGFwcGx5U3BhblRvRXZlbnQoZXZlbnQsIHNwYW4pIHsKICBldmVudC5jb250ZXh0cyA9IHsgdHJhY2U6IHNwYW5Ub1RyYWNlQ29udGV4dChzcGFuKSwgLi4uZXZlbnQuY29udGV4dHMgfTsKICBjb25zdCByb290U3BhbiA9IGdldFJvb3RTcGFuKHNwYW4pOwogIGlmIChyb290U3BhbikgewogICAgZXZlbnQuc2RrUHJvY2Vzc2luZ01ldGFkYXRhID0gewogICAgICBkeW5hbWljU2FtcGxpbmdDb250ZXh0OiBnZXREeW5hbWljU2FtcGxpbmdDb250ZXh0RnJvbVNwYW4oc3BhbiksCiAgICAgIC4uLmV2ZW50LnNka1Byb2Nlc3NpbmdNZXRhZGF0YSwKICAgIH07CiAgICBjb25zdCB0cmFuc2FjdGlvbk5hbWUgPSBzcGFuVG9KU09OKHJvb3RTcGFuKS5kZXNjcmlwdGlvbjsKICAgIGlmICh0cmFuc2FjdGlvbk5hbWUpIHsKICAgICAgZXZlbnQudGFncyA9IHsgdHJhbnNhY3Rpb246IHRyYW5zYWN0aW9uTmFtZSwgLi4uZXZlbnQudGFncyB9OwogICAgfQogIH0KfQoKLyoqCiAqIEFwcGxpZXMgZmluZ2VycHJpbnQgZnJvbSB0aGUgc2NvcGUgdG8gdGhlIGV2ZW50IGlmIHRoZXJlJ3Mgb25lLAogKiB1c2VzIG1lc3NhZ2UgaWYgdGhlcmUncyBvbmUgaW5zdGVhZCBvciBnZXQgcmlkIG9mIGVtcHR5IGZpbmdlcnByaW50CiAqLwpmdW5jdGlvbiBhcHBseUZpbmdlcnByaW50VG9FdmVudChldmVudCwgZmluZ2VycHJpbnQpIHsKICAvLyBNYWtlIHN1cmUgaXQncyBhbiBhcnJheSBmaXJzdCBhbmQgd2UgYWN0dWFsbHkgaGF2ZSBzb21ldGhpbmcgaW4gcGxhY2UKICBldmVudC5maW5nZXJwcmludCA9IGV2ZW50LmZpbmdlcnByaW50ID8gYXJyYXlpZnkoZXZlbnQuZmluZ2VycHJpbnQpIDogW107CgogIC8vIElmIHdlIGhhdmUgc29tZXRoaW5nIG9uIHRoZSBzY29wZSwgdGhlbiBtZXJnZSBpdCB3aXRoIGV2ZW50CiAgaWYgKGZpbmdlcnByaW50KSB7CiAgICBldmVudC5maW5nZXJwcmludCA9IGV2ZW50LmZpbmdlcnByaW50LmNvbmNhdChmaW5nZXJwcmludCk7CiAgfQoKICAvLyBJZiB3ZSBoYXZlIG5vIGRhdGEgYXQgYWxsLCByZW1vdmUgZW1wdHkgYXJyYXkgZGVmYXVsdAogIGlmIChldmVudC5maW5nZXJwcmludCAmJiAhZXZlbnQuZmluZ2VycHJpbnQubGVuZ3RoKSB7CiAgICBkZWxldGUgZXZlbnQuZmluZ2VycHJpbnQ7CiAgfQp9CgovKioKICogRGVmYXVsdCB2YWx1ZSBmb3IgbWF4aW11bSBudW1iZXIgb2YgYnJlYWRjcnVtYnMgYWRkZWQgdG8gYW4gZXZlbnQuCiAqLwpjb25zdCBERUZBVUxUX01BWF9CUkVBRENSVU1CUyA9IDEwMDsKCi8qKgogKiBIb2xkcyBhZGRpdGlvbmFsIGV2ZW50IGluZm9ybWF0aW9uLiB7QGxpbmsgU2NvcGUuYXBwbHlUb0V2ZW50fSB3aWxsIGJlCiAqIGNhbGxlZCBieSB0aGUgY2xpZW50IGJlZm9yZSBhbiBldmVudCB3aWxsIGJlIHNlbnQuCiAqLwpjbGFzcyBTY29wZSAgewogIC8qKiBGbGFnIGlmIG5vdGlmeWluZyBpcyBoYXBwZW5pbmcuICovCgogIC8qKiBDYWxsYmFjayBmb3IgY2xpZW50IHRvIHJlY2VpdmUgc2NvcGUgY2hhbmdlcy4gKi8KCiAgLyoqIENhbGxiYWNrIGxpc3QgdGhhdCB3aWxsIGJlIGNhbGxlZCBhZnRlciB7QGxpbmsgYXBwbHlUb0V2ZW50fS4gKi8KCiAgLyoqIEFycmF5IG9mIGJyZWFkY3J1bWJzLiAqLwoKICAvKiogVXNlciAqLwoKICAvKiogVGFncyAqLwoKICAvKiogRXh0cmEgKi8KCiAgLyoqIENvbnRleHRzICovCgogIC8qKiBBdHRhY2htZW50cyAqLwoKICAvKiogUHJvcGFnYXRpb24gQ29udGV4dCBmb3IgZGlzdHJpYnV0ZWQgdHJhY2luZyAqLwoKICAvKioKICAgKiBBIHBsYWNlIHRvIHN0YXNoIGRhdGEgd2hpY2ggaXMgbmVlZGVkIGF0IHNvbWUgcG9pbnQgaW4gdGhlIFNESydzIGV2ZW50IHByb2Nlc3NpbmcgcGlwZWxpbmUgYnV0IHdoaWNoIHNob3VsZG4ndCBnZXQKICAgKiBzZW50IHRvIFNlbnRyeQogICAqLwoKICAvKiogRmluZ2VycHJpbnQgKi8KCiAgLyoqIFNldmVyaXR5ICovCiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCgogIC8qKgogICAqIFRyYW5zYWN0aW9uIE5hbWUKICAgKi8KCiAgLyoqIFNwYW4gKi8KCiAgLyoqIFNlc3Npb24gKi8KCiAgLyoqIFJlcXVlc3QgTW9kZSBTZXNzaW9uIFN0YXR1cyAqLwoKICAvKiogVGhlIGNsaWVudCBvbiB0aGlzIHNjb3BlICovCgogIC8vIE5PVEU6IEFueSBmaWVsZCB3aGljaCBnZXRzIGFkZGVkIGhlcmUgc2hvdWxkIGdldCBhZGRlZCBub3Qgb25seSB0byB0aGUgY29uc3RydWN0b3IgYnV0IGFsc28gdG8gdGhlIGBjbG9uZWAgbWV0aG9kLgoKICAgY29uc3RydWN0b3IoKSB7CiAgICB0aGlzLl9ub3RpZnlpbmdMaXN0ZW5lcnMgPSBmYWxzZTsKICAgIHRoaXMuX3Njb3BlTGlzdGVuZXJzID0gW107CiAgICB0aGlzLl9ldmVudFByb2Nlc3NvcnMgPSBbXTsKICAgIHRoaXMuX2JyZWFkY3J1bWJzID0gW107CiAgICB0aGlzLl9hdHRhY2htZW50cyA9IFtdOwogICAgdGhpcy5fdXNlciA9IHt9OwogICAgdGhpcy5fdGFncyA9IHt9OwogICAgdGhpcy5fZXh0cmEgPSB7fTsKICAgIHRoaXMuX2NvbnRleHRzID0ge307CiAgICB0aGlzLl9zZGtQcm9jZXNzaW5nTWV0YWRhdGEgPSB7fTsKICAgIHRoaXMuX3Byb3BhZ2F0aW9uQ29udGV4dCA9IGdlbmVyYXRlUHJvcGFnYXRpb25Db250ZXh0KCk7CiAgfQoKICAvKioKICAgKiBJbmhlcml0IHZhbHVlcyBmcm9tIHRoZSBwYXJlbnQgc2NvcGUuCiAgICogQGRlcHJlY2F0ZWQgVXNlIGBzY29wZS5jbG9uZSgpYCBhbmQgYG5ldyBTY29wZSgpYCBpbnN0ZWFkLgogICAqLwogICBzdGF0aWMgY2xvbmUoc2NvcGUpIHsKICAgIHJldHVybiBzY29wZSA/IHNjb3BlLmNsb25lKCkgOiBuZXcgU2NvcGUoKTsKICB9CgogIC8qKgogICAqIENsb25lIHRoaXMgc2NvcGUgaW5zdGFuY2UuCiAgICovCiAgIGNsb25lKCkgewogICAgY29uc3QgbmV3U2NvcGUgPSBuZXcgU2NvcGUoKTsKICAgIG5ld1Njb3BlLl9icmVhZGNydW1icyA9IFsuLi50aGlzLl9icmVhZGNydW1ic107CiAgICBuZXdTY29wZS5fdGFncyA9IHsgLi4udGhpcy5fdGFncyB9OwogICAgbmV3U2NvcGUuX2V4dHJhID0geyAuLi50aGlzLl9leHRyYSB9OwogICAgbmV3U2NvcGUuX2NvbnRleHRzID0geyAuLi50aGlzLl9jb250ZXh0cyB9OwogICAgbmV3U2NvcGUuX3VzZXIgPSB0aGlzLl91c2VyOwogICAgbmV3U2NvcGUuX2xldmVsID0gdGhpcy5fbGV2ZWw7CiAgICBuZXdTY29wZS5fc3BhbiA9IHRoaXMuX3NwYW47CiAgICBuZXdTY29wZS5fc2Vzc2lvbiA9IHRoaXMuX3Nlc3Npb247CiAgICBuZXdTY29wZS5fdHJhbnNhY3Rpb25OYW1lID0gdGhpcy5fdHJhbnNhY3Rpb25OYW1lOwogICAgbmV3U2NvcGUuX2ZpbmdlcnByaW50ID0gdGhpcy5fZmluZ2VycHJpbnQ7CiAgICBuZXdTY29wZS5fZXZlbnRQcm9jZXNzb3JzID0gWy4uLnRoaXMuX2V2ZW50UHJvY2Vzc29yc107CiAgICBuZXdTY29wZS5fcmVxdWVzdFNlc3Npb24gPSB0aGlzLl9yZXF1ZXN0U2Vzc2lvbjsKICAgIG5ld1Njb3BlLl9hdHRhY2htZW50cyA9IFsuLi50aGlzLl9hdHRhY2htZW50c107CiAgICBuZXdTY29wZS5fc2RrUHJvY2Vzc2luZ01ldGFkYXRhID0geyAuLi50aGlzLl9zZGtQcm9jZXNzaW5nTWV0YWRhdGEgfTsKICAgIG5ld1Njb3BlLl9wcm9wYWdhdGlvbkNvbnRleHQgPSB7IC4uLnRoaXMuX3Byb3BhZ2F0aW9uQ29udGV4dCB9OwogICAgbmV3U2NvcGUuX2NsaWVudCA9IHRoaXMuX2NsaWVudDsKCiAgICByZXR1cm4gbmV3U2NvcGU7CiAgfQoKICAvKiogVXBkYXRlIHRoZSBjbGllbnQgb24gdGhlIHNjb3BlLiAqLwogICBzZXRDbGllbnQoY2xpZW50KSB7CiAgICB0aGlzLl9jbGllbnQgPSBjbGllbnQ7CiAgfQoKICAvKioKICAgKiBHZXQgdGhlIGNsaWVudCBhc3NpZ25lZCB0byB0aGlzIHNjb3BlLgogICAqCiAgICogSXQgaXMgZ2VuZXJhbGx5IHJlY29tbWVuZGVkIHRvIHVzZSB0aGUgZ2xvYmFsIGZ1bmN0aW9uIGBTZW50cnkuZ2V0Q2xpZW50KClgIGluc3RlYWQsIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuCiAgICovCiAgIGdldENsaWVudCgpIHsKICAgIHJldHVybiB0aGlzLl9jbGllbnQ7CiAgfQoKICAvKioKICAgKiBBZGQgaW50ZXJuYWwgb24gY2hhbmdlIGxpc3RlbmVyLiBVc2VkIGZvciBzdWIgU0RLcyB0aGF0IG5lZWQgdG8gc3RvcmUgdGhlIHNjb3BlLgogICAqIEBoaWRkZW4KICAgKi8KICAgYWRkU2NvcGVMaXN0ZW5lcihjYWxsYmFjaykgewogICAgdGhpcy5fc2NvcGVMaXN0ZW5lcnMucHVzaChjYWxsYmFjayk7CiAgfQoKICAvKioKICAgKiBAaW5oZXJpdERvYwogICAqLwogICBhZGRFdmVudFByb2Nlc3NvcihjYWxsYmFjaykgewogICAgdGhpcy5fZXZlbnRQcm9jZXNzb3JzLnB1c2goY2FsbGJhY2spOwogICAgcmV0dXJuIHRoaXM7CiAgfQoKICAvKioKICAgKiBAaW5oZXJpdERvYwogICAqLwogICBzZXRVc2VyKHVzZXIpIHsKICAgIC8vIElmIG51bGwgaXMgcGFzc2VkIHdlIHdhbnQgdG8gdW5zZXQgZXZlcnl0aGluZywgYnV0IHN0aWxsIGRlZmluZSBrZXlzLAogICAgLy8gc28gdGhhdCBsYXRlciBkb3duIGluIHRoZSBwaXBlbGluZSBhbnkgZXhpc3RpbmcgdmFsdWVzIGFyZSBjbGVhcmVkLgogICAgdGhpcy5fdXNlciA9IHVzZXIgfHwgewogICAgICBlbWFpbDogdW5kZWZpbmVkLAogICAgICBpZDogdW5kZWZpbmVkLAogICAgICBpcF9hZGRyZXNzOiB1bmRlZmluZWQsCiAgICAgIHNlZ21lbnQ6IHVuZGVmaW5lZCwKICAgICAgdXNlcm5hbWU6IHVuZGVmaW5lZCwKICAgIH07CgogICAgaWYgKHRoaXMuX3Nlc3Npb24pIHsKICAgICAgdXBkYXRlU2Vzc2lvbih0aGlzLl9zZXNzaW9uLCB7IHVzZXIgfSk7CiAgICB9CgogICAgdGhpcy5fbm90aWZ5U2NvcGVMaXN0ZW5lcnMoKTsKICAgIHJldHVybiB0aGlzOwogIH0KCiAgLyoqCiAgICogQGluaGVyaXREb2MKICAgKi8KICAgZ2V0VXNlcigpIHsKICAgIHJldHVybiB0aGlzLl91c2VyOwogIH0KCiAgLyoqCiAgICogQGluaGVyaXREb2MKICAgKi8KICAgZ2V0UmVxdWVzdFNlc3Npb24oKSB7CiAgICByZXR1cm4gdGhpcy5fcmVxdWVzdFNlc3Npb247CiAgfQoKICAvKioKICAgKiBAaW5oZXJpdERvYwogICAqLwogICBzZXRSZXF1ZXN0U2Vzc2lvbihyZXF1ZXN0U2Vzc2lvbikgewogICAgdGhpcy5fcmVxdWVzdFNlc3Npb24gPSByZXF1ZXN0U2Vzc2lvbjsKICAgIHJldHVybiB0aGlzOwogIH0KCiAgLyoqCiAgICogQGluaGVyaXREb2MKICAgKi8KICAgc2V0VGFncyh0YWdzKSB7CiAgICB0aGlzLl90YWdzID0gewogICAgICAuLi50aGlzLl90YWdzLAogICAgICAuLi50YWdzLAogICAgfTsKICAgIHRoaXMuX25vdGlmeVNjb3BlTGlzdGVuZXJzKCk7CiAgICByZXR1cm4gdGhpczsKICB9CgogIC8qKgogICAqIEBpbmhlcml0RG9jCiAgICovCiAgIHNldFRhZyhrZXksIHZhbHVlKSB7CiAgICB0aGlzLl90YWdzID0geyAuLi50aGlzLl90YWdzLCBba2V5XTogdmFsdWUgfTsKICAgIHRoaXMuX25vdGlmeVNjb3BlTGlzdGVuZXJzKCk7CiAgICByZXR1cm4gdGhpczsKICB9CgogIC8qKgogICAqIEBpbmhlcml0RG9jCiAgICovCiAgIHNldEV4dHJhcyhleHRyYXMpIHsKICAgIHRoaXMuX2V4dHJhID0gewogICAgICAuLi50aGlzLl9leHRyYSwKICAgICAgLi4uZXh0cmFzLAogICAgfTsKICAgIHRoaXMuX25vdGlmeVNjb3BlTGlzdGVuZXJzKCk7CiAgICByZXR1cm4gdGhpczsKICB9CgogIC8qKgogICAqIEBpbmhlcml0RG9jCiAgICovCiAgIHNldEV4dHJhKGtleSwgZXh0cmEpIHsKICAgIHRoaXMuX2V4dHJhID0geyAuLi50aGlzLl9leHRyYSwgW2tleV06IGV4dHJhIH07CiAgICB0aGlzLl9ub3RpZnlTY29wZUxpc3RlbmVycygpOwogICAgcmV0dXJuIHRoaXM7CiAgfQoKICAvKioKICAgKiBAaW5oZXJpdERvYwogICAqLwogICBzZXRGaW5nZXJwcmludChmaW5nZXJwcmludCkgewogICAgdGhpcy5fZmluZ2VycHJpbnQgPSBmaW5nZXJwcmludDsKICAgIHRoaXMuX25vdGlmeVNjb3BlTGlzdGVuZXJzKCk7CiAgICByZXR1cm4gdGhpczsKICB9CgogIC8qKgogICAqIEBpbmhlcml0RG9jCiAgICovCiAgIHNldExldmVsKAogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgICBsZXZlbCwKICApIHsKICAgIHRoaXMuX2xldmVsID0gbGV2ZWw7CiAgICB0aGlzLl9ub3RpZnlTY29wZUxpc3RlbmVycygpOwogICAgcmV0dXJuIHRoaXM7CiAgfQoKICAvKioKICAgKiBTZXRzIHRoZSB0cmFuc2FjdGlvbiBuYW1lIG9uIHRoZSBzY29wZSBmb3IgZnV0dXJlIGV2ZW50cy4KICAgKi8KICAgc2V0VHJhbnNhY3Rpb25OYW1lKG5hbWUpIHsKICAgIHRoaXMuX3RyYW5zYWN0aW9uTmFtZSA9IG5hbWU7CiAgICB0aGlzLl9ub3RpZnlTY29wZUxpc3RlbmVycygpOwogICAgcmV0dXJuIHRoaXM7CiAgfQoKICAvKioKICAgKiBAaW5oZXJpdERvYwogICAqLwogICBzZXRDb250ZXh0KGtleSwgY29udGV4dCkgewogICAgaWYgKGNvbnRleHQgPT09IG51bGwpIHsKICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1keW5hbWljLWRlbGV0ZQogICAgICBkZWxldGUgdGhpcy5fY29udGV4dHNba2V5XTsKICAgIH0gZWxzZSB7CiAgICAgIHRoaXMuX2NvbnRleHRzW2tleV0gPSBjb250ZXh0OwogICAgfQoKICAgIHRoaXMuX25vdGlmeVNjb3BlTGlzdGVuZXJzKCk7CiAgICByZXR1cm4gdGhpczsKICB9CgogIC8qKgogICAqIFNldHMgdGhlIFNwYW4gb24gdGhlIHNjb3BlLgogICAqIEBwYXJhbSBzcGFuIFNwYW4KICAgKiBAZGVwcmVjYXRlZCBJbnN0ZWFkIG9mIHNldHRpbmcgYSBzcGFuIG9uIGEgc2NvcGUsIHVzZSBgc3RhcnRTcGFuKClgL2BzdGFydFNwYW5NYW51YWwoKWAgaW5zdGVhZC4KICAgKi8KICAgc2V0U3BhbihzcGFuKSB7CiAgICB0aGlzLl9zcGFuID0gc3BhbjsKICAgIHRoaXMuX25vdGlmeVNjb3BlTGlzdGVuZXJzKCk7CiAgICByZXR1cm4gdGhpczsKICB9CgogIC8qKgogICAqIFJldHVybnMgdGhlIGBTcGFuYCBpZiB0aGVyZSBpcyBvbmUuCiAgICogQGRlcHJlY2F0ZWQgVXNlIGBnZXRBY3RpdmVTcGFuKClgIGluc3RlYWQuCiAgICovCiAgIGdldFNwYW4oKSB7CiAgICByZXR1cm4gdGhpcy5fc3BhbjsKICB9CgogIC8qKgogICAqIFJldHVybnMgdGhlIGBUcmFuc2FjdGlvbmAgYXR0YWNoZWQgdG8gdGhlIHNjb3BlIChpZiB0aGVyZSBpcyBvbmUpLgogICAqIEBkZXByZWNhdGVkIFlvdSBzaG91bGQgbm90IHJlbHkgb24gdGhlIHRyYW5zYWN0aW9uLCBidXQganVzdCB1c2UgYHN0YXJ0U3BhbigpYCBBUElzIGluc3RlYWQuCiAgICovCiAgIGdldFRyYW5zYWN0aW9uKCkgewogICAgLy8gT2Z0ZW4sIHRoaXMgc3BhbiAoaWYgaXQgZXhpc3RzIGF0IGFsbCkgd2lsbCBiZSBhIHRyYW5zYWN0aW9uLCBidXQgaXQncyBub3QgZ3VhcmFudGVlZCB0byBiZS4gUmVnYXJkbGVzcywgaXQgd2lsbAogICAgLy8gaGF2ZSBhIHBvaW50ZXIgdG8gdGhlIGN1cnJlbnRseS1hY3RpdmUgdHJhbnNhY3Rpb24uCiAgICBjb25zdCBzcGFuID0gdGhpcy5fc3BhbjsKICAgIC8vIENhbm5vdCByZXBsYWNlIHdpdGggZ2V0Um9vdFNwYW4gYmVjYXVzZSBnZXRSb290U3BhbiByZXR1cm5zIGEgc3Bhbiwgbm90IGEgdHJhbnNhY3Rpb24KICAgIC8vIEFsc28sIHRoaXMgbWV0aG9kIHdpbGwgYmUgcmVtb3ZlZCBhbnl3YXkuCiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb24KICAgIHJldHVybiBzcGFuICYmIHNwYW4udHJhbnNhY3Rpb247CiAgfQoKICAvKioKICAgKiBAaW5oZXJpdERvYwogICAqLwogICBzZXRTZXNzaW9uKHNlc3Npb24pIHsKICAgIGlmICghc2Vzc2lvbikgewogICAgICBkZWxldGUgdGhpcy5fc2Vzc2lvbjsKICAgIH0gZWxzZSB7CiAgICAgIHRoaXMuX3Nlc3Npb24gPSBzZXNzaW9uOwogICAgfQogICAgdGhpcy5fbm90aWZ5U2NvcGVMaXN0ZW5lcnMoKTsKICAgIHJldHVybiB0aGlzOwogIH0KCiAgLyoqCiAgICogQGluaGVyaXREb2MKICAgKi8KICAgZ2V0U2Vzc2lvbigpIHsKICAgIHJldHVybiB0aGlzLl9zZXNzaW9uOwogIH0KCiAgLyoqCiAgICogQGluaGVyaXREb2MKICAgKi8KICAgdXBkYXRlKGNhcHR1cmVDb250ZXh0KSB7CiAgICBpZiAoIWNhcHR1cmVDb250ZXh0KSB7CiAgICAgIHJldHVybiB0aGlzOwogICAgfQoKICAgIGNvbnN0IHNjb3BlVG9NZXJnZSA9IHR5cGVvZiBjYXB0dXJlQ29udGV4dCA9PT0gJ2Z1bmN0aW9uJyA/IGNhcHR1cmVDb250ZXh0KHRoaXMpIDogY2FwdHVyZUNvbnRleHQ7CgogICAgaWYgKHNjb3BlVG9NZXJnZSBpbnN0YW5jZW9mIFNjb3BlKSB7CiAgICAgIGNvbnN0IHNjb3BlRGF0YSA9IHNjb3BlVG9NZXJnZS5nZXRTY29wZURhdGEoKTsKCiAgICAgIHRoaXMuX3RhZ3MgPSB7IC4uLnRoaXMuX3RhZ3MsIC4uLnNjb3BlRGF0YS50YWdzIH07CiAgICAgIHRoaXMuX2V4dHJhID0geyAuLi50aGlzLl9leHRyYSwgLi4uc2NvcGVEYXRhLmV4dHJhIH07CiAgICAgIHRoaXMuX2NvbnRleHRzID0geyAuLi50aGlzLl9jb250ZXh0cywgLi4uc2NvcGVEYXRhLmNvbnRleHRzIH07CiAgICAgIGlmIChzY29wZURhdGEudXNlciAmJiBPYmplY3Qua2V5cyhzY29wZURhdGEudXNlcikubGVuZ3RoKSB7CiAgICAgICAgdGhpcy5fdXNlciA9IHNjb3BlRGF0YS51c2VyOwogICAgICB9CiAgICAgIGlmIChzY29wZURhdGEubGV2ZWwpIHsKICAgICAgICB0aGlzLl9sZXZlbCA9IHNjb3BlRGF0YS5sZXZlbDsKICAgICAgfQogICAgICBpZiAoc2NvcGVEYXRhLmZpbmdlcnByaW50Lmxlbmd0aCkgewogICAgICAgIHRoaXMuX2ZpbmdlcnByaW50ID0gc2NvcGVEYXRhLmZpbmdlcnByaW50OwogICAgICB9CiAgICAgIGlmIChzY29wZVRvTWVyZ2UuZ2V0UmVxdWVzdFNlc3Npb24oKSkgewogICAgICAgIHRoaXMuX3JlcXVlc3RTZXNzaW9uID0gc2NvcGVUb01lcmdlLmdldFJlcXVlc3RTZXNzaW9uKCk7CiAgICAgIH0KICAgICAgaWYgKHNjb3BlRGF0YS5wcm9wYWdhdGlvbkNvbnRleHQpIHsKICAgICAgICB0aGlzLl9wcm9wYWdhdGlvbkNvbnRleHQgPSBzY29wZURhdGEucHJvcGFnYXRpb25Db250ZXh0OwogICAgICB9CiAgICB9IGVsc2UgaWYgKGlzUGxhaW5PYmplY3Qoc2NvcGVUb01lcmdlKSkgewogICAgICBjb25zdCBzY29wZUNvbnRleHQgPSBjYXB0dXJlQ29udGV4dCA7CiAgICAgIHRoaXMuX3RhZ3MgPSB7IC4uLnRoaXMuX3RhZ3MsIC4uLnNjb3BlQ29udGV4dC50YWdzIH07CiAgICAgIHRoaXMuX2V4dHJhID0geyAuLi50aGlzLl9leHRyYSwgLi4uc2NvcGVDb250ZXh0LmV4dHJhIH07CiAgICAgIHRoaXMuX2NvbnRleHRzID0geyAuLi50aGlzLl9jb250ZXh0cywgLi4uc2NvcGVDb250ZXh0LmNvbnRleHRzIH07CiAgICAgIGlmIChzY29wZUNvbnRleHQudXNlcikgewogICAgICAgIHRoaXMuX3VzZXIgPSBzY29wZUNvbnRleHQudXNlcjsKICAgICAgfQogICAgICBpZiAoc2NvcGVDb250ZXh0LmxldmVsKSB7CiAgICAgICAgdGhpcy5fbGV2ZWwgPSBzY29wZUNvbnRleHQubGV2ZWw7CiAgICAgIH0KICAgICAgaWYgKHNjb3BlQ29udGV4dC5maW5nZXJwcmludCkgewogICAgICAgIHRoaXMuX2ZpbmdlcnByaW50ID0gc2NvcGVDb250ZXh0LmZpbmdlcnByaW50OwogICAgICB9CiAgICAgIGlmIChzY29wZUNvbnRleHQucmVxdWVzdFNlc3Npb24pIHsKICAgICAgICB0aGlzLl9yZXF1ZXN0U2Vzc2lvbiA9IHNjb3BlQ29udGV4dC5yZXF1ZXN0U2Vzc2lvbjsKICAgICAgfQogICAgICBpZiAoc2NvcGVDb250ZXh0LnByb3BhZ2F0aW9uQ29udGV4dCkgewogICAgICAgIHRoaXMuX3Byb3BhZ2F0aW9uQ29udGV4dCA9IHNjb3BlQ29udGV4dC5wcm9wYWdhdGlvbkNvbnRleHQ7CiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gdGhpczsKICB9CgogIC8qKgogICAqIEBpbmhlcml0RG9jCiAgICovCiAgIGNsZWFyKCkgewogICAgdGhpcy5fYnJlYWRjcnVtYnMgPSBbXTsKICAgIHRoaXMuX3RhZ3MgPSB7fTsKICAgIHRoaXMuX2V4dHJhID0ge307CiAgICB0aGlzLl91c2VyID0ge307CiAgICB0aGlzLl9jb250ZXh0cyA9IHt9OwogICAgdGhpcy5fbGV2ZWwgPSB1bmRlZmluZWQ7CiAgICB0aGlzLl90cmFuc2FjdGlvbk5hbWUgPSB1bmRlZmluZWQ7CiAgICB0aGlzLl9maW5nZXJwcmludCA9IHVuZGVmaW5lZDsKICAgIHRoaXMuX3JlcXVlc3RTZXNzaW9uID0gdW5kZWZpbmVkOwogICAgdGhpcy5fc3BhbiA9IHVuZGVmaW5lZDsKICAgIHRoaXMuX3Nlc3Npb24gPSB1bmRlZmluZWQ7CiAgICB0aGlzLl9ub3RpZnlTY29wZUxpc3RlbmVycygpOwogICAgdGhpcy5fYXR0YWNobWVudHMgPSBbXTsKICAgIHRoaXMuX3Byb3BhZ2F0aW9uQ29udGV4dCA9IGdlbmVyYXRlUHJvcGFnYXRpb25Db250ZXh0KCk7CiAgICByZXR1cm4gdGhpczsKICB9CgogIC8qKgogICAqIEBpbmhlcml0RG9jCiAgICovCiAgIGFkZEJyZWFkY3J1bWIoYnJlYWRjcnVtYiwgbWF4QnJlYWRjcnVtYnMpIHsKICAgIGNvbnN0IG1heENydW1icyA9IHR5cGVvZiBtYXhCcmVhZGNydW1icyA9PT0gJ251bWJlcicgPyBtYXhCcmVhZGNydW1icyA6IERFRkFVTFRfTUFYX0JSRUFEQ1JVTUJTOwoKICAgIC8vIE5vIGRhdGEgaGFzIGJlZW4gY2hhbmdlZCwgc28gZG9uJ3Qgbm90aWZ5IHNjb3BlIGxpc3RlbmVycwogICAgaWYgKG1heENydW1icyA8PSAwKSB7CiAgICAgIHJldHVybiB0aGlzOwogICAgfQoKICAgIGNvbnN0IG1lcmdlZEJyZWFkY3J1bWIgPSB7CiAgICAgIHRpbWVzdGFtcDogZGF0ZVRpbWVzdGFtcEluU2Vjb25kcygpLAogICAgICAuLi5icmVhZGNydW1iLAogICAgfTsKCiAgICBjb25zdCBicmVhZGNydW1icyA9IHRoaXMuX2JyZWFkY3J1bWJzOwogICAgYnJlYWRjcnVtYnMucHVzaChtZXJnZWRCcmVhZGNydW1iKTsKICAgIHRoaXMuX2JyZWFkY3J1bWJzID0gYnJlYWRjcnVtYnMubGVuZ3RoID4gbWF4Q3J1bWJzID8gYnJlYWRjcnVtYnMuc2xpY2UoLW1heENydW1icykgOiBicmVhZGNydW1iczsKCiAgICB0aGlzLl9ub3RpZnlTY29wZUxpc3RlbmVycygpOwoKICAgIHJldHVybiB0aGlzOwogIH0KCiAgLyoqCiAgICogQGluaGVyaXREb2MKICAgKi8KICAgZ2V0TGFzdEJyZWFkY3J1bWIoKSB7CiAgICByZXR1cm4gdGhpcy5fYnJlYWRjcnVtYnNbdGhpcy5fYnJlYWRjcnVtYnMubGVuZ3RoIC0gMV07CiAgfQoKICAvKioKICAgKiBAaW5oZXJpdERvYwogICAqLwogICBjbGVhckJyZWFkY3J1bWJzKCkgewogICAgdGhpcy5fYnJlYWRjcnVtYnMgPSBbXTsKICAgIHRoaXMuX25vdGlmeVNjb3BlTGlzdGVuZXJzKCk7CiAgICByZXR1cm4gdGhpczsKICB9CgogIC8qKgogICAqIEBpbmhlcml0RG9jCiAgICovCiAgIGFkZEF0dGFjaG1lbnQoYXR0YWNobWVudCkgewogICAgdGhpcy5fYXR0YWNobWVudHMucHVzaChhdHRhY2htZW50KTsKICAgIHJldHVybiB0aGlzOwogIH0KCiAgLyoqCiAgICogQGluaGVyaXREb2MKICAgKiBAZGVwcmVjYXRlZCBVc2UgYGdldFNjb3BlRGF0YSgpYCBpbnN0ZWFkLgogICAqLwogICBnZXRBdHRhY2htZW50cygpIHsKICAgIGNvbnN0IGRhdGEgPSB0aGlzLmdldFNjb3BlRGF0YSgpOwoKICAgIHJldHVybiBkYXRhLmF0dGFjaG1lbnRzOwogIH0KCiAgLyoqCiAgICogQGluaGVyaXREb2MKICAgKi8KICAgY2xlYXJBdHRhY2htZW50cygpIHsKICAgIHRoaXMuX2F0dGFjaG1lbnRzID0gW107CiAgICByZXR1cm4gdGhpczsKICB9CgogIC8qKiBAaW5oZXJpdERvYyAqLwogICBnZXRTY29wZURhdGEoKSB7CiAgICBjb25zdCB7CiAgICAgIF9icmVhZGNydW1icywKICAgICAgX2F0dGFjaG1lbnRzLAogICAgICBfY29udGV4dHMsCiAgICAgIF90YWdzLAogICAgICBfZXh0cmEsCiAgICAgIF91c2VyLAogICAgICBfbGV2ZWwsCiAgICAgIF9maW5nZXJwcmludCwKICAgICAgX2V2ZW50UHJvY2Vzc29ycywKICAgICAgX3Byb3BhZ2F0aW9uQ29udGV4dCwKICAgICAgX3Nka1Byb2Nlc3NpbmdNZXRhZGF0YSwKICAgICAgX3RyYW5zYWN0aW9uTmFtZSwKICAgICAgX3NwYW4sCiAgICB9ID0gdGhpczsKCiAgICByZXR1cm4gewogICAgICBicmVhZGNydW1iczogX2JyZWFkY3J1bWJzLAogICAgICBhdHRhY2htZW50czogX2F0dGFjaG1lbnRzLAogICAgICBjb250ZXh0czogX2NvbnRleHRzLAogICAgICB0YWdzOiBfdGFncywKICAgICAgZXh0cmE6IF9leHRyYSwKICAgICAgdXNlcjogX3VzZXIsCiAgICAgIGxldmVsOiBfbGV2ZWwsCiAgICAgIGZpbmdlcnByaW50OiBfZmluZ2VycHJpbnQgfHwgW10sCiAgICAgIGV2ZW50UHJvY2Vzc29yczogX2V2ZW50UHJvY2Vzc29ycywKICAgICAgcHJvcGFnYXRpb25Db250ZXh0OiBfcHJvcGFnYXRpb25Db250ZXh0LAogICAgICBzZGtQcm9jZXNzaW5nTWV0YWRhdGE6IF9zZGtQcm9jZXNzaW5nTWV0YWRhdGEsCiAgICAgIHRyYW5zYWN0aW9uTmFtZTogX3RyYW5zYWN0aW9uTmFtZSwKICAgICAgc3BhbjogX3NwYW4sCiAgICB9OwogIH0KCiAgLyoqCiAgICogQXBwbGllcyBkYXRhIGZyb20gdGhlIHNjb3BlIHRvIHRoZSBldmVudCBhbmQgcnVucyBhbGwgZXZlbnQgcHJvY2Vzc29ycyBvbiBpdC4KICAgKgogICAqIEBwYXJhbSBldmVudCBFdmVudAogICAqIEBwYXJhbSBoaW50IE9iamVjdCBjb250YWluaW5nIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG9yaWdpbmFsIGV4Y2VwdGlvbiwgZm9yIHVzZSBieSB0aGUgZXZlbnQgcHJvY2Vzc29ycy4KICAgKiBAaGlkZGVuCiAgICogQGRlcHJlY2F0ZWQgVXNlIGBhcHBseVNjb3BlRGF0YVRvRXZlbnQoKWAgZGlyZWN0bHkKICAgKi8KICAgYXBwbHlUb0V2ZW50KAogICAgZXZlbnQsCiAgICBoaW50ID0ge30sCiAgICBhZGRpdGlvbmFsRXZlbnRQcm9jZXNzb3JzID0gW10sCiAgKSB7CiAgICBhcHBseVNjb3BlRGF0YVRvRXZlbnQoZXZlbnQsIHRoaXMuZ2V0U2NvcGVEYXRhKCkpOwoKICAgIC8vIFRPRE8gKHY4KTogVXBkYXRlIHRoaXMgb3JkZXIgdG8gYmU6IEdsb2JhbCA+IENsaWVudCA+IFNjb3BlCiAgICBjb25zdCBldmVudFByb2Nlc3NvcnMgPSBbCiAgICAgIC4uLmFkZGl0aW9uYWxFdmVudFByb2Nlc3NvcnMsCiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgICAuLi5nZXRHbG9iYWxFdmVudFByb2Nlc3NvcnMoKSwKICAgICAgLi4udGhpcy5fZXZlbnRQcm9jZXNzb3JzLAogICAgXTsKCiAgICByZXR1cm4gbm90aWZ5RXZlbnRQcm9jZXNzb3JzKGV2ZW50UHJvY2Vzc29ycywgZXZlbnQsIGhpbnQpOwogIH0KCiAgLyoqCiAgICogQWRkIGRhdGEgd2hpY2ggd2lsbCBiZSBhY2Nlc3NpYmxlIGR1cmluZyBldmVudCBwcm9jZXNzaW5nIGJ1dCB3b24ndCBnZXQgc2VudCB0byBTZW50cnkKICAgKi8KICAgc2V0U0RLUHJvY2Vzc2luZ01ldGFkYXRhKG5ld0RhdGEpIHsKICAgIHRoaXMuX3Nka1Byb2Nlc3NpbmdNZXRhZGF0YSA9IHsgLi4udGhpcy5fc2RrUHJvY2Vzc2luZ01ldGFkYXRhLCAuLi5uZXdEYXRhIH07CgogICAgcmV0dXJuIHRoaXM7CiAgfQoKICAvKioKICAgKiBAaW5oZXJpdERvYwogICAqLwogICBzZXRQcm9wYWdhdGlvbkNvbnRleHQoY29udGV4dCkgewogICAgdGhpcy5fcHJvcGFnYXRpb25Db250ZXh0ID0gY29udGV4dDsKICAgIHJldHVybiB0aGlzOwogIH0KCiAgLyoqCiAgICogQGluaGVyaXREb2MKICAgKi8KICAgZ2V0UHJvcGFnYXRpb25Db250ZXh0KCkgewogICAgcmV0dXJuIHRoaXMuX3Byb3BhZ2F0aW9uQ29udGV4dDsKICB9CgogIC8qKgogICAqIENhcHR1cmUgYW4gZXhjZXB0aW9uIGZvciB0aGlzIHNjb3BlLgogICAqCiAgICogQHBhcmFtIGV4Y2VwdGlvbiBUaGUgZXhjZXB0aW9uIHRvIGNhcHR1cmUuCiAgICogQHBhcmFtIGhpbnQgT3B0aW5hbCBhZGRpdGlvbmFsIGRhdGEgdG8gYXR0YWNoIHRvIHRoZSBTZW50cnkgZXZlbnQuCiAgICogQHJldHVybnMgdGhlIGlkIG9mIHRoZSBjYXB0dXJlZCBTZW50cnkgZXZlbnQuCiAgICovCiAgIGNhcHR1cmVFeGNlcHRpb24oZXhjZXB0aW9uLCBoaW50KSB7CiAgICBjb25zdCBldmVudElkID0gaGludCAmJiBoaW50LmV2ZW50X2lkID8gaGludC5ldmVudF9pZCA6IHV1aWQ0KCk7CgogICAgaWYgKCF0aGlzLl9jbGllbnQpIHsKICAgICAgbG9nZ2VyLndhcm4oJ05vIGNsaWVudCBjb25maWd1cmVkIG9uIHNjb3BlIC0gd2lsbCBub3QgY2FwdHVyZSBleGNlcHRpb24hJyk7CiAgICAgIHJldHVybiBldmVudElkOwogICAgfQoKICAgIGNvbnN0IHN5bnRoZXRpY0V4Y2VwdGlvbiA9IG5ldyBFcnJvcignU2VudHJ5IHN5bnRoZXRpY0V4Y2VwdGlvbicpOwoKICAgIHRoaXMuX2NsaWVudC5jYXB0dXJlRXhjZXB0aW9uKAogICAgICBleGNlcHRpb24sCiAgICAgIHsKICAgICAgICBvcmlnaW5hbEV4Y2VwdGlvbjogZXhjZXB0aW9uLAogICAgICAgIHN5bnRoZXRpY0V4Y2VwdGlvbiwKICAgICAgICAuLi5oaW50LAogICAgICAgIGV2ZW50X2lkOiBldmVudElkLAogICAgICB9LAogICAgICB0aGlzLAogICAgKTsKCiAgICByZXR1cm4gZXZlbnRJZDsKICB9CgogIC8qKgogICAqIENhcHR1cmUgYSBtZXNzYWdlIGZvciB0aGlzIHNjb3BlLgogICAqCiAgICogQHBhcmFtIG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gY2FwdHVyZS4KICAgKiBAcGFyYW0gbGV2ZWwgQW4gb3B0aW9uYWwgc2V2ZXJpdHkgbGV2ZWwgdG8gcmVwb3J0IHRoZSBtZXNzYWdlIHdpdGguCiAgICogQHBhcmFtIGhpbnQgT3B0aW9uYWwgYWRkaXRpb25hbCBkYXRhIHRvIGF0dGFjaCB0byB0aGUgU2VudHJ5IGV2ZW50LgogICAqIEByZXR1cm5zIHRoZSBpZCBvZiB0aGUgY2FwdHVyZWQgbWVzc2FnZS4KICAgKi8KICAgY2FwdHVyZU1lc3NhZ2UobWVzc2FnZSwgbGV2ZWwsIGhpbnQpIHsKICAgIGNvbnN0IGV2ZW50SWQgPSBoaW50ICYmIGhpbnQuZXZlbnRfaWQgPyBoaW50LmV2ZW50X2lkIDogdXVpZDQoKTsKCiAgICBpZiAoIXRoaXMuX2NsaWVudCkgewogICAgICBsb2dnZXIud2FybignTm8gY2xpZW50IGNvbmZpZ3VyZWQgb24gc2NvcGUgLSB3aWxsIG5vdCBjYXB0dXJlIG1lc3NhZ2UhJyk7CiAgICAgIHJldHVybiBldmVudElkOwogICAgfQoKICAgIGNvbnN0IHN5bnRoZXRpY0V4Y2VwdGlvbiA9IG5ldyBFcnJvcihtZXNzYWdlKTsKCiAgICB0aGlzLl9jbGllbnQuY2FwdHVyZU1lc3NhZ2UoCiAgICAgIG1lc3NhZ2UsCiAgICAgIGxldmVsLAogICAgICB7CiAgICAgICAgb3JpZ2luYWxFeGNlcHRpb246IG1lc3NhZ2UsCiAgICAgICAgc3ludGhldGljRXhjZXB0aW9uLAogICAgICAgIC4uLmhpbnQsCiAgICAgICAgZXZlbnRfaWQ6IGV2ZW50SWQsCiAgICAgIH0sCiAgICAgIHRoaXMsCiAgICApOwoKICAgIHJldHVybiBldmVudElkOwogIH0KCiAgLyoqCiAgICogQ2FwdHVyZXMgYSBtYW51YWxseSBjcmVhdGVkIGV2ZW50IGZvciB0aGlzIHNjb3BlIGFuZCBzZW5kcyBpdCB0byBTZW50cnkuCiAgICoKICAgKiBAcGFyYW0gZXhjZXB0aW9uIFRoZSBldmVudCB0byBjYXB0dXJlLgogICAqIEBwYXJhbSBoaW50IE9wdGlvbmFsIGFkZGl0aW9uYWwgZGF0YSB0byBhdHRhY2ggdG8gdGhlIFNlbnRyeSBldmVudC4KICAgKiBAcmV0dXJucyB0aGUgaWQgb2YgdGhlIGNhcHR1cmVkIGV2ZW50LgogICAqLwogICBjYXB0dXJlRXZlbnQoZXZlbnQsIGhpbnQpIHsKICAgIGNvbnN0IGV2ZW50SWQgPSBoaW50ICYmIGhpbnQuZXZlbnRfaWQgPyBoaW50LmV2ZW50X2lkIDogdXVpZDQoKTsKCiAgICBpZiAoIXRoaXMuX2NsaWVudCkgewogICAgICBsb2dnZXIud2FybignTm8gY2xpZW50IGNvbmZpZ3VyZWQgb24gc2NvcGUgLSB3aWxsIG5vdCBjYXB0dXJlIGV2ZW50IScpOwogICAgICByZXR1cm4gZXZlbnRJZDsKICAgIH0KCiAgICB0aGlzLl9jbGllbnQuY2FwdHVyZUV2ZW50KGV2ZW50LCB7IC4uLmhpbnQsIGV2ZW50X2lkOiBldmVudElkIH0sIHRoaXMpOwoKICAgIHJldHVybiBldmVudElkOwogIH0KCiAgLyoqCiAgICogVGhpcyB3aWxsIGJlIGNhbGxlZCBvbiBldmVyeSBzZXQgY2FsbC4KICAgKi8KICAgX25vdGlmeVNjb3BlTGlzdGVuZXJzKCkgewogICAgLy8gV2UgbmVlZCB0aGlzIGNoZWNrIGZvciB0aGlzLl9ub3RpZnlpbmdMaXN0ZW5lcnMgdG8gYmUgYWJsZSB0byB3b3JrIG9uIHNjb3BlIGR1cmluZyB1cGRhdGVzCiAgICAvLyBJZiB0aGlzIGNoZWNrIGlzIG5vdCBoZXJlIHdlJ2xsIHByb2R1Y2UgZW5kbGVzcyByZWN1cnNpb24gd2hlbiBzb21ldGhpbmcgaXMgZG9uZSB3aXRoIHRoZSBzY29wZQogICAgLy8gZHVyaW5nIHRoZSBjYWxsYmFjay4KICAgIGlmICghdGhpcy5fbm90aWZ5aW5nTGlzdGVuZXJzKSB7CiAgICAgIHRoaXMuX25vdGlmeWluZ0xpc3RlbmVycyA9IHRydWU7CiAgICAgIHRoaXMuX3Njb3BlTGlzdGVuZXJzLmZvckVhY2goY2FsbGJhY2sgPT4gewogICAgICAgIGNhbGxiYWNrKHRoaXMpOwogICAgICB9KTsKICAgICAgdGhpcy5fbm90aWZ5aW5nTGlzdGVuZXJzID0gZmFsc2U7CiAgICB9CiAgfQp9CgpmdW5jdGlvbiBnZW5lcmF0ZVByb3BhZ2F0aW9uQ29udGV4dCgpIHsKICByZXR1cm4gewogICAgdHJhY2VJZDogdXVpZDQoKSwKICAgIHNwYW5JZDogdXVpZDQoKS5zdWJzdHJpbmcoMTYpLAogIH07Cn0KCmNvbnN0IFNES19WRVJTSU9OID0gJzcuMTIwLjQnOwoKLyoqCiAqIEFQSSBjb21wYXRpYmlsaXR5IHZlcnNpb24gb2YgdGhpcyBodWIuCiAqCiAqIFdBUk5JTkc6IFRoaXMgbnVtYmVyIHNob3VsZCBvbmx5IGJlIGluY3JlYXNlZCB3aGVuIHRoZSBnbG9iYWwgaW50ZXJmYWNlCiAqIGNoYW5nZXMgYW5kIG5ldyBtZXRob2RzIGFyZSBpbnRyb2R1Y2VkLgogKgogKiBAaGlkZGVuCiAqLwpjb25zdCBBUElfVkVSU0lPTiA9IHBhcnNlRmxvYXQoU0RLX1ZFUlNJT04pOwoKLyoqCiAqIERlZmF1bHQgbWF4aW11bSBudW1iZXIgb2YgYnJlYWRjcnVtYnMgYWRkZWQgdG8gYW4gZXZlbnQuIENhbiBiZSBvdmVyd3JpdHRlbgogKiB3aXRoIHtAbGluayBPcHRpb25zLm1heEJyZWFkY3J1bWJzfS4KICovCmNvbnN0IERFRkFVTFRfQlJFQURDUlVNQlMgPSAxMDA7CgovKioKICogQGRlcHJlY2F0ZWQgVGhlIGBIdWJgIGNsYXNzIHdpbGwgYmUgcmVtb3ZlZCBpbiB2ZXJzaW9uIDggb2YgdGhlIFNESyBpbiBmYXZvdXIgb2YgYFNjb3BlYCBhbmQgYENsaWVudGAgb2JqZWN0cy4KICoKICogSWYgeW91IHByZXZpb3VzbHkgdXNlZCB0aGUgYEh1YmAgY2xhc3MgZGlyZWN0bHksIHJlcGxhY2UgaXQgd2l0aCBgU2NvcGVgIGFuZCBgQ2xpZW50YCBvYmplY3RzLiBNb3JlIGluZm9ybWF0aW9uOgogKiAtIFtNdWx0aXBsZSBTZW50cnkgSW5zdGFuY2VzXShodHRwczovL2RvY3Muc2VudHJ5LmlvL3BsYXRmb3Jtcy9qYXZhc2NyaXB0L2Jlc3QtcHJhY3RpY2VzL211bHRpcGxlLXNlbnRyeS1pbnN0YW5jZXMvKQogKiAtIFtCcm93c2VyIEV4dGVuc2lvbnNdKGh0dHBzOi8vZG9jcy5zZW50cnkuaW8vcGxhdGZvcm1zL2phdmFzY3JpcHQvYmVzdC1wcmFjdGljZXMvYnJvd3Nlci1leHRlbnNpb25zLykKICoKICogU29tZSBvZiBvdXIgQVBJcyBhcmUgdHlwZWQgd2l0aCB0aGUgSHViIGNsYXNzIGluc3RlYWQgb2YgdGhlIGludGVyZmFjZSAoZS5nLiBgZ2V0Q3VycmVudEh1YmApLiBNb3N0IG9mIHRoZW0gYXJlIGRlcHJlY2F0ZWQKICogdGhlbXNlbHZlcyBhbmQgd2lsbCBhbHNvIGJlIHJlbW92ZWQgaW4gdmVyc2lvbiA4LiBNb3JlIGluZm9ybWF0aW9uOgogKiAtIFtNaWdyYXRpb24gR3VpZGVdKGh0dHBzOi8vZ2l0aHViLmNvbS9nZXRzZW50cnkvc2VudHJ5LWphdmFzY3JpcHQvYmxvYi9kZXZlbG9wL01JR1JBVElPTi5tZCNkZXByZWNhdGUtaHViKQogKi8KLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCmNsYXNzIEh1YiAgewogIC8qKiBJcyBhIHtAbGluayBMYXllcn1bXSBjb250YWluaW5nIHRoZSBjbGllbnQgYW5kIHNjb3BlICovCgogIC8qKiBDb250YWlucyB0aGUgbGFzdCBldmVudCBpZCBvZiBhIGNhcHR1cmVkIGV2ZW50LiAgKi8KCiAgLyoqCiAgICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgaHViLCB3aWxsIHB1c2ggb25lIHtAbGluayBMYXllcn0gaW50byB0aGUKICAgKiBpbnRlcm5hbCBzdGFjayBvbiBjcmVhdGlvbi4KICAgKgogICAqIEBwYXJhbSBjbGllbnQgYm91bmQgdG8gdGhlIGh1Yi4KICAgKiBAcGFyYW0gc2NvcGUgYm91bmQgdG8gdGhlIGh1Yi4KICAgKiBAcGFyYW0gdmVyc2lvbiBudW1iZXIsIGhpZ2hlciBudW1iZXIgbWVhbnMgaGlnaGVyIHByaW9yaXR5LgogICAqCiAgICogQGRlcHJlY2F0ZWQgSW5zdGFudGlhdGlvbiBvZiBIdWIgb2JqZWN0cyBpcyBkZXByZWNhdGVkIGFuZCB0aGUgY29uc3RydWN0b3Igd2lsbCBiZSByZW1vdmVkIGluIHZlcnNpb24gOCBvZiB0aGUgU0RLLgogICAqCiAgICogSWYgeW91IGFyZSBjdXJyZW50bHkgdXNpbmcgdGhlIEh1YiBmb3IgbXVsdGktY2xpZW50IHVzZSBsaWtlIHNvOgogICAqCiAgICogYGBgCiAgICogLy8gT0xECiAgICogY29uc3QgaHViID0gbmV3IEh1YigpOwogICAqIGh1Yi5iaW5kQ2xpZW50KGNsaWVudCk7CiAgICogbWFrZU1haW4oaHViKQogICAqIGBgYAogICAqCiAgICogaW5zdGVhZCBpbml0aWFsaXplIHRoZSBjbGllbnQgYXMgZm9sbG93czoKICAgKgogICAqIGBgYAogICAqIC8vIE5FVwogICAqIFNlbnRyeS53aXRoSXNvbGF0aW9uU2NvcGUoKCkgPT4gewogICAqICAgIFNlbnRyeS5zZXRDdXJyZW50Q2xpZW50KGNsaWVudCk7CiAgICogICAgY2xpZW50LmluaXQoKTsKICAgKiB9KTsKICAgKiBgYGAKICAgKgogICAqIElmIHlvdSBhcmUgdXNpbmcgdGhlIEh1YiB0byBjYXB0dXJlIGV2ZW50cyBsaWtlIHNvOgogICAqCiAgICogYGBgCiAgICogLy8gT0xECiAgICogY29uc3QgY2xpZW50ID0gbmV3IENsaWVudCgpOwogICAqIGNvbnN0IGh1YiA9IG5ldyBIdWIoY2xpZW50KTsKICAgKiBodWIuY2FwdHVyZUV4Y2VwdGlvbigpCiAgICogYGBgCiAgICoKICAgKiBpbnN0ZWFkIGNhcHR1cmUgaXNvbGF0ZWQgZXZlbnRzIGFzIGZvbGxvd3M6CiAgICoKICAgKiBgYGAKICAgKiAvLyBORVcKICAgKiBjb25zdCBjbGllbnQgPSBuZXcgQ2xpZW50KCk7CiAgICogY29uc3Qgc2NvcGUgPSBuZXcgU2NvcGUoKTsKICAgKiBzY29wZS5zZXRDbGllbnQoY2xpZW50KTsKICAgKiBzY29wZS5jYXB0dXJlRXhjZXB0aW9uKCk7CiAgICogYGBgCiAgICovCiAgIGNvbnN0cnVjdG9yKAogICAgY2xpZW50LAogICAgc2NvcGUsCiAgICBpc29sYXRpb25TY29wZSwKICAgICAgX3ZlcnNpb24gPSBBUElfVkVSU0lPTiwKICApIHt0aGlzLl92ZXJzaW9uID0gX3ZlcnNpb247CiAgICBsZXQgYXNzaWduZWRTY29wZTsKICAgIGlmICghc2NvcGUpIHsKICAgICAgYXNzaWduZWRTY29wZSA9IG5ldyBTY29wZSgpOwogICAgICBhc3NpZ25lZFNjb3BlLnNldENsaWVudChjbGllbnQpOwogICAgfSBlbHNlIHsKICAgICAgYXNzaWduZWRTY29wZSA9IHNjb3BlOwogICAgfQoKICAgIGxldCBhc3NpZ25lZElzb2xhdGlvblNjb3BlOwogICAgaWYgKCFpc29sYXRpb25TY29wZSkgewogICAgICBhc3NpZ25lZElzb2xhdGlvblNjb3BlID0gbmV3IFNjb3BlKCk7CiAgICAgIGFzc2lnbmVkSXNvbGF0aW9uU2NvcGUuc2V0Q2xpZW50KGNsaWVudCk7CiAgICB9IGVsc2UgewogICAgICBhc3NpZ25lZElzb2xhdGlvblNjb3BlID0gaXNvbGF0aW9uU2NvcGU7CiAgICB9CgogICAgdGhpcy5fc3RhY2sgPSBbeyBzY29wZTogYXNzaWduZWRTY29wZSB9XTsKCiAgICBpZiAoY2xpZW50KSB7CiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgICB0aGlzLmJpbmRDbGllbnQoY2xpZW50KTsKICAgIH0KCiAgICB0aGlzLl9pc29sYXRpb25TY29wZSA9IGFzc2lnbmVkSXNvbGF0aW9uU2NvcGU7CiAgfQoKICAvKioKICAgKiBDaGVja3MgaWYgdGhpcyBodWIncyB2ZXJzaW9uIGlzIG9sZGVyIHRoYW4gdGhlIGdpdmVuIHZlcnNpb24uCiAgICoKICAgKiBAcGFyYW0gdmVyc2lvbiBBIHZlcnNpb24gbnVtYmVyIHRvIGNvbXBhcmUgdG8uCiAgICogQHJldHVybiBUcnVlIGlmIHRoZSBnaXZlbiB2ZXJzaW9uIGlzIG5ld2VyOyBvdGhlcndpc2UgZmFsc2UuCiAgICoKICAgKiBAZGVwcmVjYXRlZCBUaGlzIHdpbGwgYmUgcmVtb3ZlZCBpbiB2OC4KICAgKi8KICAgaXNPbGRlclRoYW4odmVyc2lvbikgewogICAgcmV0dXJuIHRoaXMuX3ZlcnNpb24gPCB2ZXJzaW9uOwogIH0KCiAgLyoqCiAgICogVGhpcyBiaW5kcyB0aGUgZ2l2ZW4gY2xpZW50IHRvIHRoZSBjdXJyZW50IHNjb3BlLgogICAqIEBwYXJhbSBjbGllbnQgQW4gU0RLIGNsaWVudCAoY2xpZW50KSBpbnN0YW5jZS4KICAgKgogICAqIEBkZXByZWNhdGVkIFVzZSBgaW5pdEFuZEJpbmQoKWAgZGlyZWN0bHksIG9yIGBzZXRDdXJyZW50Q2xpZW50KClgIGFuZC9vciBgY2xpZW50LmluaXQoKWAgaW5zdGVhZC4KICAgKi8KICAgYmluZENsaWVudChjbGllbnQpIHsKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgY29uc3QgdG9wID0gdGhpcy5nZXRTdGFja1RvcCgpOwogICAgdG9wLmNsaWVudCA9IGNsaWVudDsKICAgIHRvcC5zY29wZS5zZXRDbGllbnQoY2xpZW50KTsKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgaWYgKGNsaWVudCAmJiBjbGllbnQuc2V0dXBJbnRlZ3JhdGlvbnMpIHsKICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgICAgIGNsaWVudC5zZXR1cEludGVncmF0aW9ucygpOwogICAgfQogIH0KCiAgLyoqCiAgICogQGluaGVyaXREb2MKICAgKgogICAqIEBkZXByZWNhdGVkIFVzZSBgd2l0aFNjb3BlYCBpbnN0ZWFkLgogICAqLwogICBwdXNoU2NvcGUoKSB7CiAgICAvLyBXZSB3YW50IHRvIGNsb25lIHRoZSBjb250ZW50IG9mIHByZXYgc2NvcGUKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgY29uc3Qgc2NvcGUgPSB0aGlzLmdldFNjb3BlKCkuY2xvbmUoKTsKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgdGhpcy5nZXRTdGFjaygpLnB1c2goewogICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb24KICAgICAgY2xpZW50OiB0aGlzLmdldENsaWVudCgpLAogICAgICBzY29wZSwKICAgIH0pOwogICAgcmV0dXJuIHNjb3BlOwogIH0KCiAgLyoqCiAgICogQGluaGVyaXREb2MKICAgKgogICAqIEBkZXByZWNhdGVkIFVzZSBgd2l0aFNjb3BlYCBpbnN0ZWFkLgogICAqLwogICBwb3BTY29wZSgpIHsKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgaWYgKHRoaXMuZ2V0U3RhY2soKS5sZW5ndGggPD0gMSkgcmV0dXJuIGZhbHNlOwogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgICByZXR1cm4gISF0aGlzLmdldFN0YWNrKCkucG9wKCk7CiAgfQoKICAvKioKICAgKiBAaW5oZXJpdERvYwogICAqCiAgICogQGRlcHJlY2F0ZWQgVXNlIGBTZW50cnkud2l0aFNjb3BlKClgIGluc3RlYWQuCiAgICovCiAgIHdpdGhTY29wZShjYWxsYmFjaykgewogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgICBjb25zdCBzY29wZSA9IHRoaXMucHVzaFNjb3BlKCk7CgogICAgbGV0IG1heWJlUHJvbWlzZVJlc3VsdDsKICAgIHRyeSB7CiAgICAgIG1heWJlUHJvbWlzZVJlc3VsdCA9IGNhbGxiYWNrKHNjb3BlKTsKICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgICAgIHRoaXMucG9wU2NvcGUoKTsKICAgICAgdGhyb3cgZTsKICAgIH0KCiAgICBpZiAoaXNUaGVuYWJsZShtYXliZVByb21pc2VSZXN1bHQpKSB7CiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBpc1RoZW5hYmxlIHJldHVybnMgdGhlIHdyb25nIHR5cGUKICAgICAgcmV0dXJuIG1heWJlUHJvbWlzZVJlc3VsdC50aGVuKAogICAgICAgIHJlcyA9PiB7CiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb24KICAgICAgICAgIHRoaXMucG9wU2NvcGUoKTsKICAgICAgICAgIHJldHVybiByZXM7CiAgICAgICAgfSwKICAgICAgICBlID0+IHsKICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgICAgICAgdGhpcy5wb3BTY29wZSgpOwogICAgICAgICAgdGhyb3cgZTsKICAgICAgICB9LAogICAgICApOwogICAgfQoKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgdGhpcy5wb3BTY29wZSgpOwogICAgcmV0dXJuIG1heWJlUHJvbWlzZVJlc3VsdDsKICB9CgogIC8qKgogICAqIEBpbmhlcml0RG9jCiAgICoKICAgKiBAZGVwcmVjYXRlZCBVc2UgYFNlbnRyeS5nZXRDbGllbnQoKWAgaW5zdGVhZC4KICAgKi8KICAgZ2V0Q2xpZW50KCkgewogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgICByZXR1cm4gdGhpcy5nZXRTdGFja1RvcCgpLmNsaWVudCA7CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBzY29wZSBvZiB0aGUgdG9wIHN0YWNrLgogICAqCiAgICogQGRlcHJlY2F0ZWQgVXNlIGBTZW50cnkuZ2V0Q3VycmVudFNjb3BlKClgIGluc3RlYWQuCiAgICovCiAgIGdldFNjb3BlKCkgewogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgICByZXR1cm4gdGhpcy5nZXRTdGFja1RvcCgpLnNjb3BlOwogIH0KCiAgLyoqCiAgICogQGRlcHJlY2F0ZWQgVXNlIGBTZW50cnkuZ2V0SXNvbGF0aW9uU2NvcGUoKWAgaW5zdGVhZC4KICAgKi8KICAgZ2V0SXNvbGF0aW9uU2NvcGUoKSB7CiAgICByZXR1cm4gdGhpcy5faXNvbGF0aW9uU2NvcGU7CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBzY29wZSBzdGFjayBmb3IgZG9tYWlucyBvciB0aGUgcHJvY2Vzcy4KICAgKiBAZGVwcmVjYXRlZCBUaGlzIHdpbGwgYmUgcmVtb3ZlZCBpbiB2OC4KICAgKi8KICAgZ2V0U3RhY2soKSB7CiAgICByZXR1cm4gdGhpcy5fc3RhY2s7CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIHRoZSB0b3Btb3N0IHNjb3BlIGxheWVyIGluIHRoZSBvcmRlciBkb21haW4gPiBsb2NhbCA+IHByb2Nlc3MuCiAgICogQGRlcHJlY2F0ZWQgVGhpcyB3aWxsIGJlIHJlbW92ZWQgaW4gdjguCiAgICovCiAgIGdldFN0YWNrVG9wKCkgewogICAgcmV0dXJuIHRoaXMuX3N0YWNrW3RoaXMuX3N0YWNrLmxlbmd0aCAtIDFdOwogIH0KCiAgLyoqCiAgICogQGluaGVyaXREb2MKICAgKgogICAqIEBkZXByZWNhdGVkIFVzZSBgU2VudHJ5LmNhcHR1cmVFeGNlcHRpb24oKWAgaW5zdGVhZC4KICAgKi8KICAgY2FwdHVyZUV4Y2VwdGlvbihleGNlcHRpb24sIGhpbnQpIHsKICAgIGNvbnN0IGV2ZW50SWQgPSAodGhpcy5fbGFzdEV2ZW50SWQgPSBoaW50ICYmIGhpbnQuZXZlbnRfaWQgPyBoaW50LmV2ZW50X2lkIDogdXVpZDQoKSk7CiAgICBjb25zdCBzeW50aGV0aWNFeGNlcHRpb24gPSBuZXcgRXJyb3IoJ1NlbnRyeSBzeW50aGV0aWNFeGNlcHRpb24nKTsKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgdGhpcy5nZXRTY29wZSgpLmNhcHR1cmVFeGNlcHRpb24oZXhjZXB0aW9uLCB7CiAgICAgIG9yaWdpbmFsRXhjZXB0aW9uOiBleGNlcHRpb24sCiAgICAgIHN5bnRoZXRpY0V4Y2VwdGlvbiwKICAgICAgLi4uaGludCwKICAgICAgZXZlbnRfaWQ6IGV2ZW50SWQsCiAgICB9KTsKCiAgICByZXR1cm4gZXZlbnRJZDsKICB9CgogIC8qKgogICAqIEBpbmhlcml0RG9jCiAgICoKICAgKiBAZGVwcmVjYXRlZCBVc2UgIGBTZW50cnkuY2FwdHVyZU1lc3NhZ2UoKWAgaW5zdGVhZC4KICAgKi8KICAgY2FwdHVyZU1lc3NhZ2UoCiAgICBtZXNzYWdlLAogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgICBsZXZlbCwKICAgIGhpbnQsCiAgKSB7CiAgICBjb25zdCBldmVudElkID0gKHRoaXMuX2xhc3RFdmVudElkID0gaGludCAmJiBoaW50LmV2ZW50X2lkID8gaGludC5ldmVudF9pZCA6IHV1aWQ0KCkpOwogICAgY29uc3Qgc3ludGhldGljRXhjZXB0aW9uID0gbmV3IEVycm9yKG1lc3NhZ2UpOwogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgICB0aGlzLmdldFNjb3BlKCkuY2FwdHVyZU1lc3NhZ2UobWVzc2FnZSwgbGV2ZWwsIHsKICAgICAgb3JpZ2luYWxFeGNlcHRpb246IG1lc3NhZ2UsCiAgICAgIHN5bnRoZXRpY0V4Y2VwdGlvbiwKICAgICAgLi4uaGludCwKICAgICAgZXZlbnRfaWQ6IGV2ZW50SWQsCiAgICB9KTsKCiAgICByZXR1cm4gZXZlbnRJZDsKICB9CgogIC8qKgogICAqIEBpbmhlcml0RG9jCiAgICoKICAgKiBAZGVwcmVjYXRlZCBVc2UgYFNlbnRyeS5jYXB0dXJlRXZlbnQoKWAgaW5zdGVhZC4KICAgKi8KICAgY2FwdHVyZUV2ZW50KGV2ZW50LCBoaW50KSB7CiAgICBjb25zdCBldmVudElkID0gaGludCAmJiBoaW50LmV2ZW50X2lkID8gaGludC5ldmVudF9pZCA6IHV1aWQ0KCk7CiAgICBpZiAoIWV2ZW50LnR5cGUpIHsKICAgICAgdGhpcy5fbGFzdEV2ZW50SWQgPSBldmVudElkOwogICAgfQogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgICB0aGlzLmdldFNjb3BlKCkuY2FwdHVyZUV2ZW50KGV2ZW50LCB7IC4uLmhpbnQsIGV2ZW50X2lkOiBldmVudElkIH0pOwogICAgcmV0dXJuIGV2ZW50SWQ7CiAgfQoKICAvKioKICAgKiBAaW5oZXJpdERvYwogICAqCiAgICogQGRlcHJlY2F0ZWQgVGhpcyB3aWxsIGJlIHJlbW92ZWQgaW4gdjguCiAgICovCiAgIGxhc3RFdmVudElkKCkgewogICAgcmV0dXJuIHRoaXMuX2xhc3RFdmVudElkOwogIH0KCiAgLyoqCiAgICogQGluaGVyaXREb2MKICAgKgogICAqIEBkZXByZWNhdGVkIFVzZSBgU2VudHJ5LmFkZEJyZWFkY3J1bWIoKWAgaW5zdGVhZC4KICAgKi8KICAgYWRkQnJlYWRjcnVtYihicmVhZGNydW1iLCBoaW50KSB7CiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb24KICAgIGNvbnN0IHsgc2NvcGUsIGNsaWVudCB9ID0gdGhpcy5nZXRTdGFja1RvcCgpOwoKICAgIGlmICghY2xpZW50KSByZXR1cm47CgogICAgY29uc3QgeyBiZWZvcmVCcmVhZGNydW1iID0gbnVsbCwgbWF4QnJlYWRjcnVtYnMgPSBERUZBVUxUX0JSRUFEQ1JVTUJTIH0gPQogICAgICAoY2xpZW50LmdldE9wdGlvbnMgJiYgY2xpZW50LmdldE9wdGlvbnMoKSkgfHwge307CgogICAgaWYgKG1heEJyZWFkY3J1bWJzIDw9IDApIHJldHVybjsKCiAgICBjb25zdCB0aW1lc3RhbXAgPSBkYXRlVGltZXN0YW1wSW5TZWNvbmRzKCk7CiAgICBjb25zdCBtZXJnZWRCcmVhZGNydW1iID0geyB0aW1lc3RhbXAsIC4uLmJyZWFkY3J1bWIgfTsKICAgIGNvbnN0IGZpbmFsQnJlYWRjcnVtYiA9IGJlZm9yZUJyZWFkY3J1bWIKICAgICAgPyAoY29uc29sZVNhbmRib3goKCkgPT4gYmVmb3JlQnJlYWRjcnVtYihtZXJnZWRCcmVhZGNydW1iLCBoaW50KSkgKQogICAgICA6IG1lcmdlZEJyZWFkY3J1bWI7CgogICAgaWYgKGZpbmFsQnJlYWRjcnVtYiA9PT0gbnVsbCkgcmV0dXJuOwoKICAgIGlmIChjbGllbnQuZW1pdCkgewogICAgICBjbGllbnQuZW1pdCgnYmVmb3JlQWRkQnJlYWRjcnVtYicsIGZpbmFsQnJlYWRjcnVtYiwgaGludCk7CiAgICB9CgogICAgLy8gVE9ETyh2OCk6IEkga25vdyB0aGlzIGNvbW1lbnQgZG9lc24ndCBtYWtlIG11Y2ggc2Vuc2UgYmVjYXVzZSB0aGUgaHViIHdpbGwgYmUgZGVwcmVjYXRlZCBidXQgSSBzdGlsbCB3YW50ZWQgdG8KICAgIC8vIHdyaXRlIGl0IGRvd24uIEluIHRoZW9yeSwgd2Ugd291bGQgaGF2ZSB0byBhZGQgdGhlIGJyZWFkY3J1bWJzIHRvIHRoZSBpc29sYXRpb24gc2NvcGUgaGVyZSwgaG93ZXZlciwgdGhhdCB3b3VsZAogICAgLy8gZHVwbGljYXRlIGFsbCBvZiB0aGUgYnJlYWRjcnVtYnMuIFRoZXJlIHdhcyB0aGUgcG9zc2liaWxpdHkgb2YgYWRkaW5nIGJyZWFkY3J1bWJzIHRvIGJvdGgsIHRoZSBpc29sYXRpb24gc2NvcGUKICAgIC8vIGFuZCB0aGUgbm9ybWFsIHNjb3BlLCBhbmQgZGVkdXBsaWNhdGluZyBpdCBkb3duIHRoZSBsaW5lIGluIHRoZSBldmVudCBwcm9jZXNzaW5nIHBpcGVsaW5lLiBIb3dldmVyLCB0aGF0IHdvdWxkCiAgICAvLyBoYXZlIGJlZW4gdmVyeSBmcmFnaWxlLCBiZWNhdXNlIHRoZSBicmVhZGNydW1iIG9iamVjdHMgd291bGQgaGF2ZSBuZWVkZWQgdG8ga2VlcCB0aGVpciBpZGVudGl0eSBhbGwgdGhyb3VnaG91dAogICAgLy8gdGhlIGV2ZW50IHByb2Nlc3NpbmcgcGlwZWxpbmUuCiAgICAvLyBJbiB0aGUgbmV3IGltcGxlbWVudGF0aW9uLCB0aGUgdG9wIGxldmVsIGBTZW50cnkuYWRkQnJlYWRjcnVtYigpYCBzaG91bGQgT05MWSB3cml0ZSB0byB0aGUgaXNvbGF0aW9uIHNjb3BlLgoKICAgIHNjb3BlLmFkZEJyZWFkY3J1bWIoZmluYWxCcmVhZGNydW1iLCBtYXhCcmVhZGNydW1icyk7CiAgfQoKICAvKioKICAgKiBAaW5oZXJpdERvYwogICAqIEBkZXByZWNhdGVkIFVzZSBgU2VudHJ5LnNldFVzZXIoKWAgaW5zdGVhZC4KICAgKi8KICAgc2V0VXNlcih1c2VyKSB7CiAgICAvLyBUT0RPKHY4KTogVGhlIHRvcCBsZXZlbCBgU2VudHJ5LnNldFVzZXIoKWAgZnVuY3Rpb24gc2hvdWxkIHdyaXRlIE9OTFkgdG8gdGhlIGlzb2xhdGlvbiBzY29wZS4KICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgdGhpcy5nZXRTY29wZSgpLnNldFVzZXIodXNlcik7CiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb24KICAgIHRoaXMuZ2V0SXNvbGF0aW9uU2NvcGUoKS5zZXRVc2VyKHVzZXIpOwogIH0KCiAgLyoqCiAgICogQGluaGVyaXREb2MKICAgKiBAZGVwcmVjYXRlZCBVc2UgYFNlbnRyeS5zZXRUYWdzKClgIGluc3RlYWQuCiAgICovCiAgIHNldFRhZ3ModGFncykgewogICAgLy8gVE9ETyh2OCk6IFRoZSB0b3AgbGV2ZWwgYFNlbnRyeS5zZXRUYWdzKClgIGZ1bmN0aW9uIHNob3VsZCB3cml0ZSBPTkxZIHRvIHRoZSBpc29sYXRpb24gc2NvcGUuCiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb24KICAgIHRoaXMuZ2V0U2NvcGUoKS5zZXRUYWdzKHRhZ3MpOwogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgICB0aGlzLmdldElzb2xhdGlvblNjb3BlKCkuc2V0VGFncyh0YWdzKTsKICB9CgogIC8qKgogICAqIEBpbmhlcml0RG9jCiAgICogQGRlcHJlY2F0ZWQgVXNlIGBTZW50cnkuc2V0RXh0cmFzKClgIGluc3RlYWQuCiAgICovCiAgIHNldEV4dHJhcyhleHRyYXMpIHsKICAgIC8vIFRPRE8odjgpOiBUaGUgdG9wIGxldmVsIGBTZW50cnkuc2V0RXh0cmFzKClgIGZ1bmN0aW9uIHNob3VsZCB3cml0ZSBPTkxZIHRvIHRoZSBpc29sYXRpb24gc2NvcGUuCiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb24KICAgIHRoaXMuZ2V0U2NvcGUoKS5zZXRFeHRyYXMoZXh0cmFzKTsKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgdGhpcy5nZXRJc29sYXRpb25TY29wZSgpLnNldEV4dHJhcyhleHRyYXMpOwogIH0KCiAgLyoqCiAgICogQGluaGVyaXREb2MKICAgKiBAZGVwcmVjYXRlZCBVc2UgYFNlbnRyeS5zZXRUYWcoKWAgaW5zdGVhZC4KICAgKi8KICAgc2V0VGFnKGtleSwgdmFsdWUpIHsKICAgIC8vIFRPRE8odjgpOiBUaGUgdG9wIGxldmVsIGBTZW50cnkuc2V0VGFnKClgIGZ1bmN0aW9uIHNob3VsZCB3cml0ZSBPTkxZIHRvIHRoZSBpc29sYXRpb24gc2NvcGUuCiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb24KICAgIHRoaXMuZ2V0U2NvcGUoKS5zZXRUYWcoa2V5LCB2YWx1ZSk7CiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb24KICAgIHRoaXMuZ2V0SXNvbGF0aW9uU2NvcGUoKS5zZXRUYWcoa2V5LCB2YWx1ZSk7CiAgfQoKICAvKioKICAgKiBAaW5oZXJpdERvYwogICAqIEBkZXByZWNhdGVkIFVzZSBgU2VudHJ5LnNldEV4dHJhKClgIGluc3RlYWQuCiAgICovCiAgIHNldEV4dHJhKGtleSwgZXh0cmEpIHsKICAgIC8vIFRPRE8odjgpOiBUaGUgdG9wIGxldmVsIGBTZW50cnkuc2V0RXh0cmEoKWAgZnVuY3Rpb24gc2hvdWxkIHdyaXRlIE9OTFkgdG8gdGhlIGlzb2xhdGlvbiBzY29wZS4KICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgdGhpcy5nZXRTY29wZSgpLnNldEV4dHJhKGtleSwgZXh0cmEpOwogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgICB0aGlzLmdldElzb2xhdGlvblNjb3BlKCkuc2V0RXh0cmEoa2V5LCBleHRyYSk7CiAgfQoKICAvKioKICAgKiBAaW5oZXJpdERvYwogICAqIEBkZXByZWNhdGVkIFVzZSBgU2VudHJ5LnNldENvbnRleHQoKWAgaW5zdGVhZC4KICAgKi8KICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueQogICBzZXRDb250ZXh0KG5hbWUsIGNvbnRleHQpIHsKICAgIC8vIFRPRE8odjgpOiBUaGUgdG9wIGxldmVsIGBTZW50cnkuc2V0Q29udGV4dCgpYCBmdW5jdGlvbiBzaG91bGQgd3JpdGUgT05MWSB0byB0aGUgaXNvbGF0aW9uIHNjb3BlLgogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgICB0aGlzLmdldFNjb3BlKCkuc2V0Q29udGV4dChuYW1lLCBjb250ZXh0KTsKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgdGhpcy5nZXRJc29sYXRpb25TY29wZSgpLnNldENvbnRleHQobmFtZSwgY29udGV4dCk7CiAgfQoKICAvKioKICAgKiBAaW5oZXJpdERvYwogICAqCiAgICogQGRlcHJlY2F0ZWQgVXNlIGBnZXRTY29wZSgpYCBkaXJlY3RseS4KICAgKi8KICAgY29uZmlndXJlU2NvcGUoY2FsbGJhY2spIHsKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgY29uc3QgeyBzY29wZSwgY2xpZW50IH0gPSB0aGlzLmdldFN0YWNrVG9wKCk7CiAgICBpZiAoY2xpZW50KSB7CiAgICAgIGNhbGxiYWNrKHNjb3BlKTsKICAgIH0KICB9CgogIC8qKgogICAqIEBpbmhlcml0RG9jCiAgICovCiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgIHJ1bihjYWxsYmFjaykgewogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgICBjb25zdCBvbGRIdWIgPSBtYWtlTWFpbih0aGlzKTsKICAgIHRyeSB7CiAgICAgIGNhbGxiYWNrKHRoaXMpOwogICAgfSBmaW5hbGx5IHsKICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgICAgIG1ha2VNYWluKG9sZEh1Yik7CiAgICB9CiAgfQoKICAvKioKICAgKiBAaW5oZXJpdERvYwogICAqIEBkZXByZWNhdGVkIFVzZSBgU2VudHJ5LmdldENsaWVudCgpLmdldEludGVncmF0aW9uQnlOYW1lKClgIGluc3RlYWQuCiAgICovCiAgIGdldEludGVncmF0aW9uKGludGVncmF0aW9uKSB7CiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb24KICAgIGNvbnN0IGNsaWVudCA9IHRoaXMuZ2V0Q2xpZW50KCk7CiAgICBpZiAoIWNsaWVudCkgcmV0dXJuIG51bGw7CiAgICB0cnkgewogICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb24KICAgICAgcmV0dXJuIGNsaWVudC5nZXRJbnRlZ3JhdGlvbihpbnRlZ3JhdGlvbik7CiAgICB9IGNhdGNoIChfb08pIHsKICAgICAgREVCVUdfQlVJTEQgJiYgbG9nZ2VyLndhcm4oYENhbm5vdCByZXRyaWV2ZSBpbnRlZ3JhdGlvbiAke2ludGVncmF0aW9uLmlkfSBmcm9tIHRoZSBjdXJyZW50IEh1YmApOwogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICB9CgogIC8qKgogICAqIFN0YXJ0cyBhIG5ldyBgVHJhbnNhY3Rpb25gIGFuZCByZXR1cm5zIGl0LiBUaGlzIGlzIHRoZSBlbnRyeSBwb2ludCB0byBtYW51YWwgdHJhY2luZyBpbnN0cnVtZW50YXRpb24uCiAgICoKICAgKiBBIHRyZWUgc3RydWN0dXJlIGNhbiBiZSBidWlsdCBieSBhZGRpbmcgY2hpbGQgc3BhbnMgdG8gdGhlIHRyYW5zYWN0aW9uLCBhbmQgY2hpbGQgc3BhbnMgdG8gb3RoZXIgc3BhbnMuIFRvIHN0YXJ0IGEKICAgKiBuZXcgY2hpbGQgc3BhbiB3aXRoaW4gdGhlIHRyYW5zYWN0aW9uIG9yIGFueSBzcGFuLCBjYWxsIHRoZSByZXNwZWN0aXZlIGAuc3RhcnRDaGlsZCgpYCBtZXRob2QuCiAgICoKICAgKiBFdmVyeSBjaGlsZCBzcGFuIG11c3QgYmUgZmluaXNoZWQgYmVmb3JlIHRoZSB0cmFuc2FjdGlvbiBpcyBmaW5pc2hlZCwgb3RoZXJ3aXNlIHRoZSB1bmZpbmlzaGVkIHNwYW5zIGFyZSBkaXNjYXJkZWQuCiAgICoKICAgKiBUaGUgdHJhbnNhY3Rpb24gbXVzdCBiZSBmaW5pc2hlZCB3aXRoIGEgY2FsbCB0byBpdHMgYC5lbmQoKWAgbWV0aG9kLCBhdCB3aGljaCBwb2ludCB0aGUgdHJhbnNhY3Rpb24gd2l0aCBhbGwgaXRzCiAgICogZmluaXNoZWQgY2hpbGQgc3BhbnMgd2lsbCBiZSBzZW50IHRvIFNlbnRyeS4KICAgKgogICAqIEBwYXJhbSBjb250ZXh0IFByb3BlcnRpZXMgb2YgdGhlIG5ldyBgVHJhbnNhY3Rpb25gLgogICAqIEBwYXJhbSBjdXN0b21TYW1wbGluZ0NvbnRleHQgSW5mb3JtYXRpb24gZ2l2ZW4gdG8gdGhlIHRyYW5zYWN0aW9uIHNhbXBsaW5nIGZ1bmN0aW9uIChhbG9uZyB3aXRoIGNvbnRleHQtZGVwZW5kZW50CiAgICogZGVmYXVsdCB2YWx1ZXMpLiBTZWUge0BsaW5rIE9wdGlvbnMudHJhY2VzU2FtcGxlcn0uCiAgICoKICAgKiBAcmV0dXJucyBUaGUgdHJhbnNhY3Rpb24gd2hpY2ggd2FzIGp1c3Qgc3RhcnRlZAogICAqCiAgICogQGRlcHJlY2F0ZWQgVXNlIGBzdGFydFNwYW4oKWAsIGBzdGFydFNwYW5NYW51YWwoKWAgb3IgYHN0YXJ0SW5hY3RpdmVTcGFuKClgIGluc3RlYWQuCiAgICovCiAgIHN0YXJ0VHJhbnNhY3Rpb24oY29udGV4dCwgY3VzdG9tU2FtcGxpbmdDb250ZXh0KSB7CiAgICBjb25zdCByZXN1bHQgPSB0aGlzLl9jYWxsRXh0ZW5zaW9uTWV0aG9kKCdzdGFydFRyYW5zYWN0aW9uJywgY29udGV4dCwgY3VzdG9tU2FtcGxpbmdDb250ZXh0KTsKCiAgICBpZiAoREVCVUdfQlVJTEQgJiYgIXJlc3VsdCkgewogICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb24KICAgICAgY29uc3QgY2xpZW50ID0gdGhpcy5nZXRDbGllbnQoKTsKICAgICAgaWYgKCFjbGllbnQpIHsKICAgICAgICBsb2dnZXIud2FybigKICAgICAgICAgICJUcmFjaW5nIGV4dGVuc2lvbiAnc3RhcnRUcmFuc2FjdGlvbicgaXMgbWlzc2luZy4gWW91IHNob3VsZCAnaW5pdCcgdGhlIFNESyBiZWZvcmUgY2FsbGluZyAnc3RhcnRUcmFuc2FjdGlvbiciLAogICAgICAgICk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbG9nZ2VyLndhcm4oYFRyYWNpbmcgZXh0ZW5zaW9uICdzdGFydFRyYW5zYWN0aW9uJyBoYXMgbm90IGJlZW4gYWRkZWQuIENhbGwgJ2FkZFRyYWNpbmdFeHRlbnNpb25zJyBiZWZvcmUgY2FsbGluZyAnaW5pdCc6ClNlbnRyeS5hZGRUcmFjaW5nRXh0ZW5zaW9ucygpOwpTZW50cnkuaW5pdCh7Li4ufSk7CmApOwogICAgICB9CiAgICB9CgogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8qKgogICAqIEBpbmhlcml0RG9jCiAgICogQGRlcHJlY2F0ZWQgVXNlIGBzcGFuVG9UcmFjZUhlYWRlcigpYCBpbnN0ZWFkLgogICAqLwogICB0cmFjZUhlYWRlcnMoKSB7CiAgICByZXR1cm4gdGhpcy5fY2FsbEV4dGVuc2lvbk1ldGhvZCgndHJhY2VIZWFkZXJzJyk7CiAgfQoKICAvKioKICAgKiBAaW5oZXJpdERvYwogICAqCiAgICogQGRlcHJlY2F0ZWQgVXNlIHRvcCBsZXZlbCBgY2FwdHVyZVNlc3Npb25gIGluc3RlYWQuCiAgICovCiAgIGNhcHR1cmVTZXNzaW9uKGVuZFNlc3Npb24gPSBmYWxzZSkgewogICAgLy8gYm90aCBzZW5kIHRoZSB1cGRhdGUgYW5kIHB1bGwgdGhlIHNlc3Npb24gZnJvbSB0aGUgc2NvcGUKICAgIGlmIChlbmRTZXNzaW9uKSB7CiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgICByZXR1cm4gdGhpcy5lbmRTZXNzaW9uKCk7CiAgICB9CgogICAgLy8gb25seSBzZW5kIHRoZSB1cGRhdGUKICAgIHRoaXMuX3NlbmRTZXNzaW9uVXBkYXRlKCk7CiAgfQoKICAvKioKICAgKiBAaW5oZXJpdERvYwogICAqIEBkZXByZWNhdGVkIFVzZSB0b3AgbGV2ZWwgYGVuZFNlc3Npb25gIGluc3RlYWQuCiAgICovCiAgIGVuZFNlc3Npb24oKSB7CiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb24KICAgIGNvbnN0IGxheWVyID0gdGhpcy5nZXRTdGFja1RvcCgpOwogICAgY29uc3Qgc2NvcGUgPSBsYXllci5zY29wZTsKICAgIGNvbnN0IHNlc3Npb24gPSBzY29wZS5nZXRTZXNzaW9uKCk7CiAgICBpZiAoc2Vzc2lvbikgewogICAgICBjbG9zZVNlc3Npb24oc2Vzc2lvbik7CiAgICB9CiAgICB0aGlzLl9zZW5kU2Vzc2lvblVwZGF0ZSgpOwoKICAgIC8vIHRoZSBzZXNzaW9uIGlzIG92ZXI7IHRha2UgaXQgb2ZmIG9mIHRoZSBzY29wZQogICAgc2NvcGUuc2V0U2Vzc2lvbigpOwogIH0KCiAgLyoqCiAgICogQGluaGVyaXREb2MKICAgKiBAZGVwcmVjYXRlZCBVc2UgdG9wIGxldmVsIGBzdGFydFNlc3Npb25gIGluc3RlYWQuCiAgICovCiAgIHN0YXJ0U2Vzc2lvbihjb250ZXh0KSB7CiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb24KICAgIGNvbnN0IHsgc2NvcGUsIGNsaWVudCB9ID0gdGhpcy5nZXRTdGFja1RvcCgpOwogICAgY29uc3QgeyByZWxlYXNlLCBlbnZpcm9ubWVudCA9IERFRkFVTFRfRU5WSVJPTk1FTlQgfSA9IChjbGllbnQgJiYgY2xpZW50LmdldE9wdGlvbnMoKSkgfHwge307CgogICAgLy8gV2lsbCBmZXRjaCB1c2VyQWdlbnQgaWYgY2FsbGVkIGZyb20gYnJvd3NlciBzZGsKICAgIGNvbnN0IHsgdXNlckFnZW50IH0gPSBHTE9CQUxfT0JKLm5hdmlnYXRvciB8fCB7fTsKCiAgICBjb25zdCBzZXNzaW9uID0gbWFrZVNlc3Npb24oewogICAgICByZWxlYXNlLAogICAgICBlbnZpcm9ubWVudCwKICAgICAgdXNlcjogc2NvcGUuZ2V0VXNlcigpLAogICAgICAuLi4odXNlckFnZW50ICYmIHsgdXNlckFnZW50IH0pLAogICAgICAuLi5jb250ZXh0LAogICAgfSk7CgogICAgLy8gRW5kIGV4aXN0aW5nIHNlc3Npb24gaWYgdGhlcmUncyBvbmUKICAgIGNvbnN0IGN1cnJlbnRTZXNzaW9uID0gc2NvcGUuZ2V0U2Vzc2lvbiAmJiBzY29wZS5nZXRTZXNzaW9uKCk7CiAgICBpZiAoY3VycmVudFNlc3Npb24gJiYgY3VycmVudFNlc3Npb24uc3RhdHVzID09PSAnb2snKSB7CiAgICAgIHVwZGF0ZVNlc3Npb24oY3VycmVudFNlc3Npb24sIHsgc3RhdHVzOiAnZXhpdGVkJyB9KTsKICAgIH0KICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgdGhpcy5lbmRTZXNzaW9uKCk7CgogICAgLy8gQWZ0ZXJ3YXJkcyB3ZSBzZXQgdGhlIG5ldyBzZXNzaW9uIG9uIHRoZSBzY29wZQogICAgc2NvcGUuc2V0U2Vzc2lvbihzZXNzaW9uKTsKCiAgICByZXR1cm4gc2Vzc2lvbjsKICB9CgogIC8qKgogICAqIFJldHVybnMgaWYgZGVmYXVsdCBQSUkgc2hvdWxkIGJlIHNlbnQgdG8gU2VudHJ5IGFuZCBwcm9wYWdhdGVkIGluIG91cmdvaW5nIHJlcXVlc3RzCiAgICogd2hlbiBUcmFjaW5nIGlzIHVzZWQuCiAgICoKICAgKiBAZGVwcmVjYXRlZCBVc2UgdG9wLWxldmVsIGBnZXRDbGllbnQoKS5nZXRPcHRpb25zKCkuc2VuZERlZmF1bHRQaWlgIGluc3RlYWQuIFRoaXMgZnVuY3Rpb24KICAgKiBvbmx5IHVubmVjZXNzYXJpbHkgaW5jcmVhc2VkIEFQSSBzdXJmYWNlIGJ1dCBvbmx5IHdyYXBwZWQgYWNjZXNzaW5nIHRoZSBvcHRpb24uCiAgICovCiAgIHNob3VsZFNlbmREZWZhdWx0UGlpKCkgewogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgICBjb25zdCBjbGllbnQgPSB0aGlzLmdldENsaWVudCgpOwogICAgY29uc3Qgb3B0aW9ucyA9IGNsaWVudCAmJiBjbGllbnQuZ2V0T3B0aW9ucygpOwogICAgcmV0dXJuIEJvb2xlYW4ob3B0aW9ucyAmJiBvcHRpb25zLnNlbmREZWZhdWx0UGlpKTsKICB9CgogIC8qKgogICAqIFNlbmRzIHRoZSBjdXJyZW50IFNlc3Npb24gb24gdGhlIHNjb3BlCiAgICovCiAgIF9zZW5kU2Vzc2lvblVwZGF0ZSgpIHsKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgY29uc3QgeyBzY29wZSwgY2xpZW50IH0gPSB0aGlzLmdldFN0YWNrVG9wKCk7CgogICAgY29uc3Qgc2Vzc2lvbiA9IHNjb3BlLmdldFNlc3Npb24oKTsKICAgIGlmIChzZXNzaW9uICYmIGNsaWVudCAmJiBjbGllbnQuY2FwdHVyZVNlc3Npb24pIHsKICAgICAgY2xpZW50LmNhcHR1cmVTZXNzaW9uKHNlc3Npb24pOwogICAgfQogIH0KCiAgLyoqCiAgICogQ2FsbHMgZ2xvYmFsIGV4dGVuc2lvbiBtZXRob2QgYW5kIGJpbmRpbmcgY3VycmVudCBpbnN0YW5jZSB0byB0aGUgZnVuY3Rpb24gY2FsbAogICAqLwogIC8vIEB0cy1leHBlY3QtZXJyb3IgRnVuY3Rpb24gbGFja3MgZW5kaW5nIHJldHVybiBzdGF0ZW1lbnQgYW5kIHJldHVybiB0eXBlIGRvZXMgbm90IGluY2x1ZGUgJ3VuZGVmaW5lZCcuIHRzKDIzNjYpCiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkKICAgX2NhbGxFeHRlbnNpb25NZXRob2QobWV0aG9kLCAuLi5hcmdzKSB7CiAgICBjb25zdCBjYXJyaWVyID0gZ2V0TWFpbkNhcnJpZXIoKTsKICAgIGNvbnN0IHNlbnRyeSA9IGNhcnJpZXIuX19TRU5UUllfXzsKICAgIGlmIChzZW50cnkgJiYgc2VudHJ5LmV4dGVuc2lvbnMgJiYgdHlwZW9mIHNlbnRyeS5leHRlbnNpb25zW21ldGhvZF0gPT09ICdmdW5jdGlvbicpIHsKICAgICAgcmV0dXJuIHNlbnRyeS5leHRlbnNpb25zW21ldGhvZF0uYXBwbHkodGhpcywgYXJncyk7CiAgICB9CiAgICBERUJVR19CVUlMRCAmJiBsb2dnZXIud2FybihgRXh0ZW5zaW9uIG1ldGhvZCAke21ldGhvZH0gY291bGRuJ3QgYmUgZm91bmQsIGRvaW5nIG5vdGhpbmcuYCk7CiAgfQp9CgovKioKICogUmV0dXJucyB0aGUgZ2xvYmFsIHNoaW0gcmVnaXN0cnkuCiAqCiAqIEZJWE1FOiBUaGlzIGZ1bmN0aW9uIGlzIHByb2JsZW1hdGljLCBiZWNhdXNlIGRlc3BpdGUgYWx3YXlzIHJldHVybmluZyBhIHZhbGlkIENhcnJpZXIsCiAqIGl0IGhhcyBhbiBvcHRpb25hbCBgX19TRU5UUllfX2AgcHJvcGVydHksIHdoaWNoIHRoZW4gaW4gdHVybiByZXF1aXJlcyB1cyB0byBhbHdheXMgcGVyZm9ybSBhbiB1bm5lY2Vzc2FyeSBjaGVjawogKiBhdCB0aGUgY2FsbC1zaXRlLiBXZSBhbHdheXMgYWNjZXNzIHRoZSBjYXJyaWVyIHRocm91Z2ggdGhpcyBmdW5jdGlvbiwgc28gd2UgY2FuIGd1YXJhbnRlZSB0aGF0IGBfX1NFTlRSWV9fYCBpcyB0aGVyZS4KICoqLwpmdW5jdGlvbiBnZXRNYWluQ2FycmllcigpIHsKICBHTE9CQUxfT0JKLl9fU0VOVFJZX18gPSBHTE9CQUxfT0JKLl9fU0VOVFJZX18gfHwgewogICAgZXh0ZW5zaW9uczoge30sCiAgICBodWI6IHVuZGVmaW5lZCwKICB9OwogIHJldHVybiBHTE9CQUxfT0JKOwp9CgovKioKICogUmVwbGFjZXMgdGhlIGN1cnJlbnQgbWFpbiBodWIgd2l0aCB0aGUgcGFzc2VkIG9uZSBvbiB0aGUgZ2xvYmFsIG9iamVjdAogKgogKiBAcmV0dXJucyBUaGUgb2xkIHJlcGxhY2VkIGh1YgogKgogKiBAZGVwcmVjYXRlZCBVc2UgYHNldEN1cnJlbnRDbGllbnQoKWAgaW5zdGVhZC4KICovCi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgpmdW5jdGlvbiBtYWtlTWFpbihodWIpIHsKICBjb25zdCByZWdpc3RyeSA9IGdldE1haW5DYXJyaWVyKCk7CiAgY29uc3Qgb2xkSHViID0gZ2V0SHViRnJvbUNhcnJpZXIocmVnaXN0cnkpOwogIHNldEh1Yk9uQ2FycmllcihyZWdpc3RyeSwgaHViKTsKICByZXR1cm4gb2xkSHViOwp9CgovKioKICogUmV0dXJucyB0aGUgZGVmYXVsdCBodWIgaW5zdGFuY2UuCiAqCiAqIElmIGEgaHViIGlzIGFscmVhZHkgcmVnaXN0ZXJlZCBpbiB0aGUgZ2xvYmFsIGNhcnJpZXIgYnV0IHRoaXMgbW9kdWxlCiAqIGNvbnRhaW5zIGEgbW9yZSByZWNlbnQgdmVyc2lvbiwgaXQgcmVwbGFjZXMgdGhlIHJlZ2lzdGVyZWQgdmVyc2lvbi4KICogT3RoZXJ3aXNlLCB0aGUgY3VycmVudGx5IHJlZ2lzdGVyZWQgaHViIHdpbGwgYmUgcmV0dXJuZWQuCiAqCiAqIEBkZXByZWNhdGVkIFVzZSB0aGUgcmVzcGVjdGl2ZSByZXBsYWNlbWVudCBtZXRob2QgZGlyZWN0bHkgaW5zdGVhZC4KICovCi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgpmdW5jdGlvbiBnZXRDdXJyZW50SHViKCkgewogIC8vIEdldCBtYWluIGNhcnJpZXIgKGdsb2JhbCBmb3IgZXZlcnkgZW52aXJvbm1lbnQpCiAgY29uc3QgcmVnaXN0cnkgPSBnZXRNYWluQ2FycmllcigpOwoKICBpZiAocmVnaXN0cnkuX19TRU5UUllfXyAmJiByZWdpc3RyeS5fX1NFTlRSWV9fLmFjcykgewogICAgY29uc3QgaHViID0gcmVnaXN0cnkuX19TRU5UUllfXy5hY3MuZ2V0Q3VycmVudEh1YigpOwoKICAgIGlmIChodWIpIHsKICAgICAgcmV0dXJuIGh1YjsKICAgIH0KICB9CgogIC8vIFJldHVybiBodWIgdGhhdCBsaXZlcyBvbiBhIGdsb2JhbCBvYmplY3QKICByZXR1cm4gZ2V0R2xvYmFsSHViKHJlZ2lzdHJ5KTsKfQoKLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCmZ1bmN0aW9uIGdldEdsb2JhbEh1YihyZWdpc3RyeSA9IGdldE1haW5DYXJyaWVyKCkpIHsKICAvLyBJZiB0aGVyZSdzIG5vIGh1Yiwgb3IgaXRzIGFuIG9sZCBBUEksIGFzc2lnbiBhIG5ldyBvbmUKCiAgaWYgKAogICAgIWhhc0h1Yk9uQ2FycmllcihyZWdpc3RyeSkgfHwKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgZ2V0SHViRnJvbUNhcnJpZXIocmVnaXN0cnkpLmlzT2xkZXJUaGFuKEFQSV9WRVJTSU9OKQogICkgewogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgICBzZXRIdWJPbkNhcnJpZXIocmVnaXN0cnksIG5ldyBIdWIoKSk7CiAgfQoKICAvLyBSZXR1cm4gaHViIHRoYXQgbGl2ZXMgb24gYSBnbG9iYWwgb2JqZWN0CiAgcmV0dXJuIGdldEh1YkZyb21DYXJyaWVyKHJlZ2lzdHJ5KTsKfQoKLyoqCiAqIFRoaXMgd2lsbCB0ZWxsIHdoZXRoZXIgYSBjYXJyaWVyIGhhcyBhIGh1YiBvbiBpdCBvciBub3QKICogQHBhcmFtIGNhcnJpZXIgb2JqZWN0CiAqLwpmdW5jdGlvbiBoYXNIdWJPbkNhcnJpZXIoY2FycmllcikgewogIHJldHVybiAhIShjYXJyaWVyICYmIGNhcnJpZXIuX19TRU5UUllfXyAmJiBjYXJyaWVyLl9fU0VOVFJZX18uaHViKTsKfQoKLyoqCiAqIFRoaXMgd2lsbCBjcmVhdGUgYSBuZXcge0BsaW5rIEh1Yn0gYW5kIGFkZCB0byB0aGUgcGFzc2VkIG9iamVjdCBvbgogKiBfX1NFTlRSWV9fLmh1Yi4KICogQHBhcmFtIGNhcnJpZXIgb2JqZWN0CiAqIEBoaWRkZW4KICovCi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgpmdW5jdGlvbiBnZXRIdWJGcm9tQ2FycmllcihjYXJyaWVyKSB7CiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgcmV0dXJuIGdldEdsb2JhbFNpbmdsZXRvbignaHViJywgKCkgPT4gbmV3IEh1YigpLCBjYXJyaWVyKTsKfQoKLyoqCiAqIFRoaXMgd2lsbCBzZXQgcGFzc2VkIHtAbGluayBIdWJ9IG9uIHRoZSBwYXNzZWQgb2JqZWN0J3MgX19TRU5UUllfXy5odWIgYXR0cmlidXRlCiAqIEBwYXJhbSBjYXJyaWVyIG9iamVjdAogKiBAcGFyYW0gaHViIEh1YgogKiBAcmV0dXJucyBBIGJvb2xlYW4gaW5kaWNhdGluZyBzdWNjZXNzIG9yIGZhaWx1cmUKICovCi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgpmdW5jdGlvbiBzZXRIdWJPbkNhcnJpZXIoY2FycmllciwgaHViKSB7CiAgaWYgKCFjYXJyaWVyKSByZXR1cm4gZmFsc2U7CiAgY29uc3QgX19TRU5UUllfXyA9IChjYXJyaWVyLl9fU0VOVFJZX18gPSBjYXJyaWVyLl9fU0VOVFJZX18gfHwge30pOwogIF9fU0VOVFJZX18uaHViID0gaHViOwogIHJldHVybiB0cnVlOwp9CgovKioKICogQXBwbHkgU2RrSW5mbyAobmFtZSwgdmVyc2lvbiwgcGFja2FnZXMsIGludGVncmF0aW9ucykgdG8gdGhlIGNvcnJlc3BvbmRpbmcgZXZlbnQga2V5LgogKiBNZXJnZSB3aXRoIGV4aXN0aW5nIGRhdGEgaWYgYW55LgogKiovCmZ1bmN0aW9uIGVuaGFuY2VFdmVudFdpdGhTZGtJbmZvKGV2ZW50LCBzZGtJbmZvKSB7CiAgaWYgKCFzZGtJbmZvKSB7CiAgICByZXR1cm4gZXZlbnQ7CiAgfQogIGV2ZW50LnNkayA9IGV2ZW50LnNkayB8fCB7fTsKICBldmVudC5zZGsubmFtZSA9IGV2ZW50LnNkay5uYW1lIHx8IHNka0luZm8ubmFtZTsKICBldmVudC5zZGsudmVyc2lvbiA9IGV2ZW50LnNkay52ZXJzaW9uIHx8IHNka0luZm8udmVyc2lvbjsKICBldmVudC5zZGsuaW50ZWdyYXRpb25zID0gWy4uLihldmVudC5zZGsuaW50ZWdyYXRpb25zIHx8IFtdKSwgLi4uKHNka0luZm8uaW50ZWdyYXRpb25zIHx8IFtdKV07CiAgZXZlbnQuc2RrLnBhY2thZ2VzID0gWy4uLihldmVudC5zZGsucGFja2FnZXMgfHwgW10pLCAuLi4oc2RrSW5mby5wYWNrYWdlcyB8fCBbXSldOwogIHJldHVybiBldmVudDsKfQoKLyoqIENyZWF0ZXMgYW4gZW52ZWxvcGUgZnJvbSBhIFNlc3Npb24gKi8KZnVuY3Rpb24gY3JlYXRlU2Vzc2lvbkVudmVsb3BlKAogIHNlc3Npb24sCiAgZHNuLAogIG1ldGFkYXRhLAogIHR1bm5lbCwKKSB7CiAgY29uc3Qgc2RrSW5mbyA9IGdldFNka01ldGFkYXRhRm9yRW52ZWxvcGVIZWFkZXIobWV0YWRhdGEpOwogIGNvbnN0IGVudmVsb3BlSGVhZGVycyA9IHsKICAgIHNlbnRfYXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSwKICAgIC4uLihzZGtJbmZvICYmIHsgc2RrOiBzZGtJbmZvIH0pLAogICAgLi4uKCEhdHVubmVsICYmIGRzbiAmJiB7IGRzbjogZHNuVG9TdHJpbmcoZHNuKSB9KSwKICB9OwoKICBjb25zdCBlbnZlbG9wZUl0ZW0gPQogICAgJ2FnZ3JlZ2F0ZXMnIGluIHNlc3Npb24gPyBbeyB0eXBlOiAnc2Vzc2lvbnMnIH0sIHNlc3Npb25dIDogW3sgdHlwZTogJ3Nlc3Npb24nIH0sIHNlc3Npb24udG9KU09OKCldOwoKICByZXR1cm4gY3JlYXRlRW52ZWxvcGUoZW52ZWxvcGVIZWFkZXJzLCBbZW52ZWxvcGVJdGVtXSk7Cn0KCi8qKgogKiBDcmVhdGUgYW4gRW52ZWxvcGUgZnJvbSBhbiBldmVudC4KICovCmZ1bmN0aW9uIGNyZWF0ZUV2ZW50RW52ZWxvcGUoCiAgZXZlbnQsCiAgZHNuLAogIG1ldGFkYXRhLAogIHR1bm5lbCwKKSB7CiAgY29uc3Qgc2RrSW5mbyA9IGdldFNka01ldGFkYXRhRm9yRW52ZWxvcGVIZWFkZXIobWV0YWRhdGEpOwoKICAvKgogICAgTm90ZTogRHVlIHRvIFRTLCBldmVudC50eXBlIG1heSBiZSBgcmVwbGF5X2V2ZW50YCwgdGhlb3JldGljYWxseS4KICAgIEluIHByYWN0aWNlLCB3ZSBuZXZlciBjYWxsIGBjcmVhdGVFdmVudEVudmVsb3BlYCB3aXRoIGByZXBsYXlfZXZlbnRgIHR5cGUsCiAgICBhbmQgd2UnZCBoYXZlIHRvIGFkanV0IGEgbG9vb3Qgb2YgdHlwZXMgdG8gbWFrZSB0aGlzIHdvcmsgcHJvcGVybHkuCiAgICBXZSB3YW50IHRvIGF2b2lkIGNhc3RpbmcgdGhpcyBhcm91bmQsIGFzIHRoYXQgY291bGQgbGVhZCB0byBidWdzIChlLmcuIHdoZW4gd2UgYWRkIGFub3RoZXIgdHlwZSkKICAgIFNvIHRoZSBzYWZlIGNob2ljZSBpcyB0byByZWFsbHkgZ3VhcmQgYWdhaW5zdCB0aGUgcmVwbGF5X2V2ZW50IHR5cGUgaGVyZS4KICAqLwogIGNvbnN0IGV2ZW50VHlwZSA9IGV2ZW50LnR5cGUgJiYgZXZlbnQudHlwZSAhPT0gJ3JlcGxheV9ldmVudCcgPyBldmVudC50eXBlIDogJ2V2ZW50JzsKCiAgZW5oYW5jZUV2ZW50V2l0aFNka0luZm8oZXZlbnQsIG1ldGFkYXRhICYmIG1ldGFkYXRhLnNkayk7CgogIGNvbnN0IGVudmVsb3BlSGVhZGVycyA9IGNyZWF0ZUV2ZW50RW52ZWxvcGVIZWFkZXJzKGV2ZW50LCBzZGtJbmZvLCB0dW5uZWwsIGRzbik7CgogIC8vIFByZXZlbnQgdGhpcyBkYXRhICh3aGljaCwgaWYgaXQgZXhpc3RzLCB3YXMgdXNlZCBpbiBlYXJsaWVyIHN0ZXBzIGluIHRoZSBwcm9jZXNzaW5nIHBpcGVsaW5lKSBmcm9tIGJlaW5nIHNlbnQgdG8KICAvLyBzZW50cnkuIChOb3RlOiBPdXIgdXNlIG9mIHRoaXMgcHJvcGVydHkgY29tZXMgYW5kIGdvZXMgd2l0aCB3aGF0ZXZlciB3ZSBtaWdodCBiZSBkZWJ1Z2dpbmcsIHdoYXRldmVyIGhhY2tzIHdlIG1heQogIC8vIGhhdmUgdGVtcG9yYXJpbHkgYWRkZWQsIGV0Yy4gRXZlbiBpZiB3ZSBkb24ndCBoYXBwZW4gdG8gYmUgdXNpbmcgaXQgYXQgc29tZSBwb2ludCBpbiB0aGUgZnV0dXJlLCBsZXQncyBub3QgZ2V0IHJpZAogIC8vIG9mIHRoaXMgYGRlbGV0ZWAsIGxlc3Qgd2UgbWlzcyBwdXR0aW5nIGl0IGJhY2sgaW4gdGhlIG5leHQgdGltZSB0aGUgcHJvcGVydHkgaXMgaW4gdXNlLikKICBkZWxldGUgZXZlbnQuc2RrUHJvY2Vzc2luZ01ldGFkYXRhOwoKICBjb25zdCBldmVudEl0ZW0gPSBbeyB0eXBlOiBldmVudFR5cGUgfSwgZXZlbnRdOwogIHJldHVybiBjcmVhdGVFbnZlbG9wZShlbnZlbG9wZUhlYWRlcnMsIFtldmVudEl0ZW1dKTsKfQoKY29uc3QgU0VOVFJZX0FQSV9WRVJTSU9OID0gJzcnOwoKLyoqIFJldHVybnMgdGhlIHByZWZpeCB0byBjb25zdHJ1Y3QgU2VudHJ5IGluZ2VzdGlvbiBBUEkgZW5kcG9pbnRzLiAqLwpmdW5jdGlvbiBnZXRCYXNlQXBpRW5kcG9pbnQoZHNuKSB7CiAgY29uc3QgcHJvdG9jb2wgPSBkc24ucHJvdG9jb2wgPyBgJHtkc24ucHJvdG9jb2x9OmAgOiAnJzsKICBjb25zdCBwb3J0ID0gZHNuLnBvcnQgPyBgOiR7ZHNuLnBvcnR9YCA6ICcnOwogIHJldHVybiBgJHtwcm90b2NvbH0vLyR7ZHNuLmhvc3R9JHtwb3J0fSR7ZHNuLnBhdGggPyBgLyR7ZHNuLnBhdGh9YCA6ICcnfS9hcGkvYDsKfQoKLyoqIFJldHVybnMgdGhlIGluZ2VzdCBBUEkgZW5kcG9pbnQgZm9yIHRhcmdldC4gKi8KZnVuY3Rpb24gX2dldEluZ2VzdEVuZHBvaW50KGRzbikgewogIHJldHVybiBgJHtnZXRCYXNlQXBpRW5kcG9pbnQoZHNuKX0ke2Rzbi5wcm9qZWN0SWR9L2VudmVsb3BlL2A7Cn0KCi8qKiBSZXR1cm5zIGEgVVJMLWVuY29kZWQgc3RyaW5nIHdpdGggYXV0aCBjb25maWcgc3VpdGFibGUgZm9yIGEgcXVlcnkgc3RyaW5nLiAqLwpmdW5jdGlvbiBfZW5jb2RlZEF1dGgoZHNuLCBzZGtJbmZvKSB7CiAgcmV0dXJuIHVybEVuY29kZSh7CiAgICAvLyBXZSBzZW5kIG9ubHkgdGhlIG1pbmltdW0gc2V0IG9mIHJlcXVpcmVkIGluZm9ybWF0aW9uLiBTZWUKICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nZXRzZW50cnkvc2VudHJ5LWphdmFzY3JpcHQvaXNzdWVzLzI1NzIuCiAgICBzZW50cnlfa2V5OiBkc24ucHVibGljS2V5LAogICAgc2VudHJ5X3ZlcnNpb246IFNFTlRSWV9BUElfVkVSU0lPTiwKICAgIC4uLihzZGtJbmZvICYmIHsgc2VudHJ5X2NsaWVudDogYCR7c2RrSW5mby5uYW1lfS8ke3Nka0luZm8udmVyc2lvbn1gIH0pLAogIH0pOwp9CgovKioKICogUmV0dXJucyB0aGUgZW52ZWxvcGUgZW5kcG9pbnQgVVJMIHdpdGggYXV0aCBpbiB0aGUgcXVlcnkgc3RyaW5nLgogKgogKiBTZW5kaW5nIGF1dGggYXMgcGFydCBvZiB0aGUgcXVlcnkgc3RyaW5nIGFuZCBub3QgYXMgY3VzdG9tIEhUVFAgaGVhZGVycyBhdm9pZHMgQ09SUyBwcmVmbGlnaHQgcmVxdWVzdHMuCiAqLwpmdW5jdGlvbiBnZXRFbnZlbG9wZUVuZHBvaW50V2l0aFVybEVuY29kZWRBdXRoKAogIGRzbiwKICAvLyBUT0RPICh2OCk6IFJlbW92ZSBgdHVubmVsT3JPcHRpb25zYCBpbiBmYXZvciBvZiBgb3B0aW9uc2AsIGFuZCB1c2UgdGhlIHN1YnN0aXR1dGUgY29kZSBiZWxvdwogIC8vIG9wdGlvbnM6IENsaWVudE9wdGlvbnMgPSB7fSBhcyBDbGllbnRPcHRpb25zLAogIHR1bm5lbE9yT3B0aW9ucyA9IHt9ICwKKSB7CiAgLy8gVE9ETyAodjgpOiBVc2UgdGhpcyBjb2RlIGluc3RlYWQKICAvLyBjb25zdCB7IHR1bm5lbCwgX21ldGFkYXRhID0ge30gfSA9IG9wdGlvbnM7CiAgLy8gcmV0dXJuIHR1bm5lbCA/IHR1bm5lbCA6IGAke19nZXRJbmdlc3RFbmRwb2ludChkc24pfT8ke19lbmNvZGVkQXV0aChkc24sIF9tZXRhZGF0YS5zZGspfWA7CgogIGNvbnN0IHR1bm5lbCA9IHR5cGVvZiB0dW5uZWxPck9wdGlvbnMgPT09ICdzdHJpbmcnID8gdHVubmVsT3JPcHRpb25zIDogdHVubmVsT3JPcHRpb25zLnR1bm5lbDsKICBjb25zdCBzZGtJbmZvID0KICAgIHR5cGVvZiB0dW5uZWxPck9wdGlvbnMgPT09ICdzdHJpbmcnIHx8ICF0dW5uZWxPck9wdGlvbnMuX21ldGFkYXRhID8gdW5kZWZpbmVkIDogdHVubmVsT3JPcHRpb25zLl9tZXRhZGF0YS5zZGs7CgogIHJldHVybiB0dW5uZWwgPyB0dW5uZWwgOiBgJHtfZ2V0SW5nZXN0RW5kcG9pbnQoZHNuKX0/JHtfZW5jb2RlZEF1dGgoZHNuLCBzZGtJbmZvKX1gOwp9Cgpjb25zdCBERUZBVUxUX1RSQU5TUE9SVF9CVUZGRVJfU0laRSA9IDMwOwoKLyoqCiAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgYSBTZW50cnkgYFRyYW5zcG9ydGAKICoKICogQHBhcmFtIG9wdGlvbnMKICogQHBhcmFtIG1ha2VSZXF1ZXN0CiAqLwpmdW5jdGlvbiBjcmVhdGVUcmFuc3BvcnQoCiAgb3B0aW9ucywKICBtYWtlUmVxdWVzdCwKICBidWZmZXIgPSBtYWtlUHJvbWlzZUJ1ZmZlcigKICAgIG9wdGlvbnMuYnVmZmVyU2l6ZSB8fCBERUZBVUxUX1RSQU5TUE9SVF9CVUZGRVJfU0laRSwKICApLAopIHsKICBsZXQgcmF0ZUxpbWl0cyA9IHt9OwogIGNvbnN0IGZsdXNoID0gKHRpbWVvdXQpID0+IGJ1ZmZlci5kcmFpbih0aW1lb3V0KTsKCiAgZnVuY3Rpb24gc2VuZChlbnZlbG9wZSkgewogICAgY29uc3QgZmlsdGVyZWRFbnZlbG9wZUl0ZW1zID0gW107CgogICAgLy8gRHJvcCByYXRlIGxpbWl0ZWQgaXRlbXMgZnJvbSBlbnZlbG9wZQogICAgZm9yRWFjaEVudmVsb3BlSXRlbShlbnZlbG9wZSwgKGl0ZW0sIHR5cGUpID0+IHsKICAgICAgY29uc3QgZGF0YUNhdGVnb3J5ID0gZW52ZWxvcGVJdGVtVHlwZVRvRGF0YUNhdGVnb3J5KHR5cGUpOwogICAgICBpZiAoaXNSYXRlTGltaXRlZChyYXRlTGltaXRzLCBkYXRhQ2F0ZWdvcnkpKSB7CiAgICAgICAgY29uc3QgZXZlbnQgPSBnZXRFdmVudEZvckVudmVsb3BlSXRlbShpdGVtLCB0eXBlKTsKICAgICAgICBvcHRpb25zLnJlY29yZERyb3BwZWRFdmVudCgncmF0ZWxpbWl0X2JhY2tvZmYnLCBkYXRhQ2F0ZWdvcnksIGV2ZW50KTsKICAgICAgfSBlbHNlIHsKICAgICAgICBmaWx0ZXJlZEVudmVsb3BlSXRlbXMucHVzaChpdGVtKTsKICAgICAgfQogICAgfSk7CgogICAgLy8gU2tpcCBzZW5kaW5nIGlmIGVudmVsb3BlIGlzIGVtcHR5IGFmdGVyIGZpbHRlcmluZyBvdXQgcmF0ZSBsaW1pdGVkIGV2ZW50cwogICAgaWYgKGZpbHRlcmVkRW52ZWxvcGVJdGVtcy5sZW5ndGggPT09IDApIHsKICAgICAgcmV0dXJuIHJlc29sdmVkU3luY1Byb21pc2UoKTsKICAgIH0KCiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueQogICAgY29uc3QgZmlsdGVyZWRFbnZlbG9wZSA9IGNyZWF0ZUVudmVsb3BlKGVudmVsb3BlWzBdLCBmaWx0ZXJlZEVudmVsb3BlSXRlbXMgKTsKCiAgICAvLyBDcmVhdGVzIGNsaWVudCByZXBvcnQgZm9yIGVhY2ggaXRlbSBpbiBhbiBlbnZlbG9wZQogICAgY29uc3QgcmVjb3JkRW52ZWxvcGVMb3NzID0gKHJlYXNvbikgPT4gewogICAgICBmb3JFYWNoRW52ZWxvcGVJdGVtKGZpbHRlcmVkRW52ZWxvcGUsIChpdGVtLCB0eXBlKSA9PiB7CiAgICAgICAgY29uc3QgZXZlbnQgPSBnZXRFdmVudEZvckVudmVsb3BlSXRlbShpdGVtLCB0eXBlKTsKICAgICAgICBvcHRpb25zLnJlY29yZERyb3BwZWRFdmVudChyZWFzb24sIGVudmVsb3BlSXRlbVR5cGVUb0RhdGFDYXRlZ29yeSh0eXBlKSwgZXZlbnQpOwogICAgICB9KTsKICAgIH07CgogICAgY29uc3QgcmVxdWVzdFRhc2sgPSAoKSA9PgogICAgICBtYWtlUmVxdWVzdCh7IGJvZHk6IHNlcmlhbGl6ZUVudmVsb3BlKGZpbHRlcmVkRW52ZWxvcGUsIG9wdGlvbnMudGV4dEVuY29kZXIpIH0pLnRoZW4oCiAgICAgICAgcmVzcG9uc2UgPT4gewogICAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byB0aHJvdyBvbiBOT0sgcmVzcG9uc2VzLCBidXQgd2Ugd2FudCB0byBhdCBsZWFzdCBsb2cgdGhlbQogICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1c0NvZGUgIT09IHVuZGVmaW5lZCAmJiAocmVzcG9uc2Uuc3RhdHVzQ29kZSA8IDIwMCB8fCByZXNwb25zZS5zdGF0dXNDb2RlID49IDMwMCkpIHsKICAgICAgICAgICAgREVCVUdfQlVJTEQgJiYgbG9nZ2VyLndhcm4oYFNlbnRyeSByZXNwb25kZWQgd2l0aCBzdGF0dXMgY29kZSAke3Jlc3BvbnNlLnN0YXR1c0NvZGV9IHRvIHNlbnQgZXZlbnQuYCk7CiAgICAgICAgICB9CgogICAgICAgICAgcmF0ZUxpbWl0cyA9IHVwZGF0ZVJhdGVMaW1pdHMocmF0ZUxpbWl0cywgcmVzcG9uc2UpOwogICAgICAgICAgcmV0dXJuIHJlc3BvbnNlOwogICAgICAgIH0sCiAgICAgICAgZXJyb3IgPT4gewogICAgICAgICAgcmVjb3JkRW52ZWxvcGVMb3NzKCduZXR3b3JrX2Vycm9yJyk7CiAgICAgICAgICB0aHJvdyBlcnJvcjsKICAgICAgICB9LAogICAgICApOwoKICAgIHJldHVybiBidWZmZXIuYWRkKHJlcXVlc3RUYXNrKS50aGVuKAogICAgICByZXN1bHQgPT4gcmVzdWx0LAogICAgICBlcnJvciA9PiB7CiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgU2VudHJ5RXJyb3IpIHsKICAgICAgICAgIERFQlVHX0JVSUxEICYmIGxvZ2dlci5lcnJvcignU2tpcHBlZCBzZW5kaW5nIGV2ZW50IGJlY2F1c2UgYnVmZmVyIGlzIGZ1bGwuJyk7CiAgICAgICAgICByZWNvcmRFbnZlbG9wZUxvc3MoJ3F1ZXVlX292ZXJmbG93Jyk7CiAgICAgICAgICByZXR1cm4gcmVzb2x2ZWRTeW5jUHJvbWlzZSgpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aHJvdyBlcnJvcjsKICAgICAgICB9CiAgICAgIH0sCiAgICApOwogIH0KCiAgLy8gV2UgdXNlIHRoaXMgdG8gaWRlbnRpZmlmeSBpZiB0aGUgdHJhbnNwb3J0IGlzIHRoZSBiYXNlIHRyYW5zcG9ydAogIC8vIFRPRE8gKHY4KTogUmVtb3ZlIHRoaXMgYWdhaW4gYXMgd2UnbGwgbm8gbG9uZ2VyIG5lZWQgaXQKICBzZW5kLl9fc2VudHJ5X19iYXNlVHJhbnNwb3J0X18gPSB0cnVlOwoKICByZXR1cm4gewogICAgc2VuZCwKICAgIGZsdXNoLAogIH07Cn0KCmZ1bmN0aW9uIGdldEV2ZW50Rm9yRW52ZWxvcGVJdGVtKGl0ZW0sIHR5cGUpIHsKICBpZiAodHlwZSAhPT0gJ2V2ZW50JyAmJiB0eXBlICE9PSAndHJhbnNhY3Rpb24nKSB7CiAgICByZXR1cm4gdW5kZWZpbmVkOwogIH0KCiAgcmV0dXJuIEFycmF5LmlzQXJyYXkoaXRlbSkgPyAoaXRlbSApWzFdIDogdW5kZWZpbmVkOwp9CgovKiogbm9ybWFsaXplcyBXaW5kb3dzIHBhdGhzICovCmZ1bmN0aW9uIG5vcm1hbGl6ZVdpbmRvd3NQYXRoKHBhdGgpIHsKICByZXR1cm4gcGF0aAogICAgLnJlcGxhY2UoL15bQS1aXTovLCAnJykgLy8gcmVtb3ZlIFdpbmRvd3Mtc3R5bGUgcHJlZml4CiAgICAucmVwbGFjZSgvXFwvZywgJy8nKTsgLy8gcmVwbGFjZSBhbGwgYFxgIGluc3RhbmNlcyB3aXRoIGAvYAp9CgovKiogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgZ2V0cyB0aGUgbW9kdWxlIG5hbWUgZnJvbSBhIGZpbGVuYW1lICovCmZ1bmN0aW9uIGNyZWF0ZUdldE1vZHVsZUZyb21GaWxlbmFtZSgKICBiYXNlUGF0aCA9IHByb2Nlc3MuYXJndlsxXSA/IGRpcm5hbWUocHJvY2Vzcy5hcmd2WzFdKSA6IHByb2Nlc3MuY3dkKCksCiAgaXNXaW5kb3dzID0gc2VwID09PSAnXFwnLAopIHsKICBjb25zdCBub3JtYWxpemVkQmFzZSA9IGlzV2luZG93cyA/IG5vcm1hbGl6ZVdpbmRvd3NQYXRoKGJhc2VQYXRoKSA6IGJhc2VQYXRoOwoKICByZXR1cm4gKGZpbGVuYW1lKSA9PiB7CiAgICBpZiAoIWZpbGVuYW1lKSB7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBjb25zdCBub3JtYWxpemVkRmlsZW5hbWUgPSBpc1dpbmRvd3MgPyBub3JtYWxpemVXaW5kb3dzUGF0aChmaWxlbmFtZSkgOiBmaWxlbmFtZTsKCiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWNvbnN0CiAgICBsZXQgeyBkaXIsIGJhc2U6IGZpbGUsIGV4dCB9ID0gcG9zaXgucGFyc2Uobm9ybWFsaXplZEZpbGVuYW1lKTsKCiAgICBpZiAoZXh0ID09PSAnLmpzJyB8fCBleHQgPT09ICcubWpzJyB8fCBleHQgPT09ICcuY2pzJykgewogICAgICBmaWxlID0gZmlsZS5zbGljZSgwLCBleHQubGVuZ3RoICogLTEpOwogICAgfQoKICAgIGlmICghZGlyKSB7CiAgICAgIC8vIE5vIGRpcm5hbWUgd2hhdHNvZXZlcgogICAgICBkaXIgPSAnLic7CiAgICB9CgogICAgY29uc3QgbiA9IGRpci5sYXN0SW5kZXhPZignL25vZGVfbW9kdWxlcycpOwogICAgaWYgKG4gPiAtMSkgewogICAgICByZXR1cm4gYCR7ZGlyLnNsaWNlKG4gKyAxNCkucmVwbGFjZSgvXC8vZywgJy4nKX06JHtmaWxlfWA7CiAgICB9CgogICAgLy8gTGV0J3Mgc2VlIGlmIGl0J3MgYSBwYXJ0IG9mIHRoZSBtYWluIG1vZHVsZQogICAgLy8gVG8gYmUgYSBwYXJ0IG9mIG1haW4gbW9kdWxlLCBpdCBoYXMgdG8gc2hhcmUgdGhlIHNhbWUgYmFzZQogICAgaWYgKGRpci5zdGFydHNXaXRoKG5vcm1hbGl6ZWRCYXNlKSkgewogICAgICBsZXQgbW9kdWxlTmFtZSA9IGRpci5zbGljZShub3JtYWxpemVkQmFzZS5sZW5ndGggKyAxKS5yZXBsYWNlKC9cLy9nLCAnLicpOwoKICAgICAgaWYgKG1vZHVsZU5hbWUpIHsKICAgICAgICBtb2R1bGVOYW1lICs9ICc6JzsKICAgICAgfQogICAgICBtb2R1bGVOYW1lICs9IGZpbGU7CgogICAgICByZXR1cm4gbW9kdWxlTmFtZTsKICAgIH0KCiAgICByZXR1cm4gZmlsZTsKICB9Owp9CgpmdW5jdGlvbiBfbnVsbGlzaENvYWxlc2NlJDIobGhzLCByaHNGbikgeyBpZiAobGhzICE9IG51bGwpIHsgcmV0dXJuIGxoczsgfSBlbHNlIHsgcmV0dXJuIHJoc0ZuKCk7IH0gfS8qKgogKiBUaGlzIGNvZGUgd2FzIG9yaWdpbmFsbHkgZm9ya2VkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL1Rvb1RhbGxOYXRlL3Byb3h5LWFnZW50cy90cmVlL2IxMzMyOTVmZDE2ZjY0NzU1NzhiNmIxNWJkOWI0ZTMzZWNiMGQwYjcKICogV2l0aCB0aGUgZm9sbG93aW5nIGxpY2VuY2U6CiAqCiAqIChUaGUgTUlUIExpY2Vuc2UpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxMyBOYXRoYW4gUmFqbGljaCA8bmF0aGFuQHRvb3RhbGxuYXRlLm5ldD4qCiAqCiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZwogKiBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKICogJ1NvZnR3YXJlJyksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZwogKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCiAqIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bwogKiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOioKICoKICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKICogaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuKgogKgogKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgJ0FTIElTJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCiAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4KICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkKICogQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwKICogVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUKICogU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCiAqLwoKY29uc3QgSU5URVJOQUwgPSBTeW1ib2woJ0FnZW50QmFzZUludGVybmFsU3RhdGUnKTsKCmNsYXNzIEFnZW50IGV4dGVuZHMgaHR0cC5BZ2VudCB7CgogIC8vIFNldCBieSBgaHR0cC5BZ2VudGAgLSBtaXNzaW5nIGZyb20gYEB0eXBlcy9ub2RlYAoKICBjb25zdHJ1Y3RvcihvcHRzKSB7CiAgICBzdXBlcihvcHRzKTsKICAgIHRoaXNbSU5URVJOQUxdID0ge307CiAgfQoKICAvKioKICAgKiBEZXRlcm1pbmUgd2hldGhlciB0aGlzIGlzIGFuIGBodHRwYCBvciBgaHR0cHNgIHJlcXVlc3QuCiAgICovCiAgaXNTZWN1cmVFbmRwb2ludChvcHRpb25zKSB7CiAgICBpZiAob3B0aW9ucykgewogICAgICAvLyBGaXJzdCBjaGVjayB0aGUgYHNlY3VyZUVuZHBvaW50YCBwcm9wZXJ0eSBleHBsaWNpdGx5LCBzaW5jZSB0aGlzCiAgICAgIC8vIG1lYW5zIHRoYXQgYSBwYXJlbnQgYEFnZW50YCBpcyAicGFzc2luZyB0aHJvdWdoIiB0byB0aGlzIGluc3RhbmNlLgogICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSwgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1tZW1iZXItYWNjZXNzCiAgICAgIGlmICh0eXBlb2YgKG9wdGlvbnMgKS5zZWN1cmVFbmRwb2ludCA9PT0gJ2Jvb2xlYW4nKSB7CiAgICAgICAgcmV0dXJuIG9wdGlvbnMuc2VjdXJlRW5kcG9pbnQ7CiAgICAgIH0KCiAgICAgIC8vIElmIG5vIGV4cGxpY2l0IGBzZWN1cmVgIGVuZHBvaW50LCBjaGVjayBpZiBgcHJvdG9jb2xgIHByb3BlcnR5IGlzCiAgICAgIC8vIHNldC4gVGhpcyB3aWxsIHVzdWFsbHkgYmUgdGhlIGNhc2Ugc2luY2UgdXNpbmcgYSBmdWxsIHN0cmluZyBVUkwKICAgICAgLy8gb3IgYFVSTGAgaW5zdGFuY2Ugc2hvdWxkIGJlIHRoZSBtb3N0IGNvbW1vbiB1c2FnZS4KICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLnByb3RvY29sID09PSAnc3RyaW5nJykgewogICAgICAgIHJldHVybiBvcHRpb25zLnByb3RvY29sID09PSAnaHR0cHM6JzsKICAgICAgfQogICAgfQoKICAgIC8vIEZpbmFsbHksIGlmIG5vIGBwcm90b2NvbGAgcHJvcGVydHkgd2FzIHNldCwgdGhlbiBmYWxsIGJhY2sgdG8KICAgIC8vIGNoZWNraW5nIHRoZSBzdGFjayB0cmFjZSBvZiB0aGUgY3VycmVudCBjYWxsIHN0YWNrLCBhbmQgdHJ5IHRvCiAgICAvLyBkZXRlY3QgdGhlICJodHRwcyIgbW9kdWxlLgogICAgY29uc3QgeyBzdGFjayB9ID0gbmV3IEVycm9yKCk7CiAgICBpZiAodHlwZW9mIHN0YWNrICE9PSAnc3RyaW5nJykgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIHN0YWNrLnNwbGl0KCdcbicpLnNvbWUobCA9PiBsLmluZGV4T2YoJyhodHRwcy5qczonKSAhPT0gLTEgfHwgbC5pbmRleE9mKCdub2RlOmh0dHBzOicpICE9PSAtMSk7CiAgfQoKICBjcmVhdGVTb2NrZXQocmVxLCBvcHRpb25zLCBjYikgewogICAgY29uc3QgY29ubmVjdE9wdHMgPSB7CiAgICAgIC4uLm9wdGlvbnMsCiAgICAgIHNlY3VyZUVuZHBvaW50OiB0aGlzLmlzU2VjdXJlRW5kcG9pbnQob3B0aW9ucyksCiAgICB9OwogICAgUHJvbWlzZS5yZXNvbHZlKCkKICAgICAgLnRoZW4oKCkgPT4gdGhpcy5jb25uZWN0KHJlcSwgY29ubmVjdE9wdHMpKQogICAgICAudGhlbihzb2NrZXQgPT4gewogICAgICAgIGlmIChzb2NrZXQgaW5zdGFuY2VvZiBodHRwLkFnZW50KSB7CiAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGBhZGRSZXF1ZXN0KClgIGlzbid0IGRlZmluZWQgaW4gYEB0eXBlcy9ub2RlYAogICAgICAgICAgcmV0dXJuIHNvY2tldC5hZGRSZXF1ZXN0KHJlcSwgY29ubmVjdE9wdHMpOwogICAgICAgIH0KICAgICAgICB0aGlzW0lOVEVSTkFMXS5jdXJyZW50U29ja2V0ID0gc29ja2V0OwogICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgYGNyZWF0ZVNvY2tldCgpYCBpc24ndCBkZWZpbmVkIGluIGBAdHlwZXMvbm9kZWAKICAgICAgICBzdXBlci5jcmVhdGVTb2NrZXQocmVxLCBvcHRpb25zLCBjYik7CiAgICAgIH0sIGNiKTsKICB9CgogIGNyZWF0ZUNvbm5lY3Rpb24oKSB7CiAgICBjb25zdCBzb2NrZXQgPSB0aGlzW0lOVEVSTkFMXS5jdXJyZW50U29ja2V0OwogICAgdGhpc1tJTlRFUk5BTF0uY3VycmVudFNvY2tldCA9IHVuZGVmaW5lZDsKICAgIGlmICghc29ja2V0KSB7CiAgICAgIHRocm93IG5ldyBFcnJvcignTm8gc29ja2V0IHdhcyByZXR1cm5lZCBpbiB0aGUgYGNvbm5lY3QoKWAgZnVuY3Rpb24nKTsKICAgIH0KICAgIHJldHVybiBzb2NrZXQ7CiAgfQoKICBnZXQgZGVmYXVsdFBvcnQoKSB7CiAgICByZXR1cm4gX251bGxpc2hDb2FsZXNjZSQyKHRoaXNbSU5URVJOQUxdLmRlZmF1bHRQb3J0LCAoKSA9PiAoICh0aGlzLnByb3RvY29sID09PSAnaHR0cHM6JyA/IDQ0MyA6IDgwKSkpOwogIH0KCiAgc2V0IGRlZmF1bHRQb3J0KHYpIHsKICAgIGlmICh0aGlzW0lOVEVSTkFMXSkgewogICAgICB0aGlzW0lOVEVSTkFMXS5kZWZhdWx0UG9ydCA9IHY7CiAgICB9CiAgfQoKICBnZXQgcHJvdG9jb2woKSB7CiAgICByZXR1cm4gX251bGxpc2hDb2FsZXNjZSQyKHRoaXNbSU5URVJOQUxdLnByb3RvY29sLCAoKSA9PiAoICh0aGlzLmlzU2VjdXJlRW5kcG9pbnQoKSA/ICdodHRwczonIDogJ2h0dHA6JykpKTsKICB9CgogIHNldCBwcm90b2NvbCh2KSB7CiAgICBpZiAodGhpc1tJTlRFUk5BTF0pIHsKICAgICAgdGhpc1tJTlRFUk5BTF0ucHJvdG9jb2wgPSB2OwogICAgfQogIH0KfQoKZnVuY3Rpb24gZGVidWckMSguLi5hcmdzKSB7CiAgbG9nZ2VyLmxvZygnW2h0dHBzLXByb3h5LWFnZW50OnBhcnNlLXByb3h5LXJlc3BvbnNlXScsIC4uLmFyZ3MpOwp9CgpmdW5jdGlvbiBwYXJzZVByb3h5UmVzcG9uc2Uoc29ja2V0KSB7CiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHsKICAgIC8vIHdlIG5lZWQgdG8gYnVmZmVyIGFueSBIVFRQIHRyYWZmaWMgdGhhdCBoYXBwZW5zIHdpdGggdGhlIHByb3h5IGJlZm9yZSB3ZSBnZXQKICAgIC8vIHRoZSBDT05ORUNUIHJlc3BvbnNlLCBzbyB0aGF0IGlmIHRoZSByZXNwb25zZSBpcyBhbnl0aGluZyBvdGhlciB0aGFuIGFuICIyMDAiCiAgICAvLyByZXNwb25zZSBjb2RlLCB0aGVuIHdlIGNhbiByZS1wbGF5IHRoZSAiZGF0YSIgZXZlbnRzIG9uIHRoZSBzb2NrZXQgb25jZSB0aGUKICAgIC8vIEhUVFAgcGFyc2VyIGlzIGhvb2tlZCB1cC4uLgogICAgbGV0IGJ1ZmZlcnNMZW5ndGggPSAwOwogICAgY29uc3QgYnVmZmVycyA9IFtdOwoKICAgIGZ1bmN0aW9uIHJlYWQoKSB7CiAgICAgIGNvbnN0IGIgPSBzb2NrZXQucmVhZCgpOwogICAgICBpZiAoYikgb25kYXRhKGIpOwogICAgICBlbHNlIHNvY2tldC5vbmNlKCdyZWFkYWJsZScsIHJlYWQpOwogICAgfQoKICAgIGZ1bmN0aW9uIGNsZWFudXAoKSB7CiAgICAgIHNvY2tldC5yZW1vdmVMaXN0ZW5lcignZW5kJywgb25lbmQpOwogICAgICBzb2NrZXQucmVtb3ZlTGlzdGVuZXIoJ2Vycm9yJywgb25lcnJvcik7CiAgICAgIHNvY2tldC5yZW1vdmVMaXN0ZW5lcigncmVhZGFibGUnLCByZWFkKTsKICAgIH0KCiAgICBmdW5jdGlvbiBvbmVuZCgpIHsKICAgICAgY2xlYW51cCgpOwogICAgICBkZWJ1ZyQxKCdvbmVuZCcpOwogICAgICByZWplY3QobmV3IEVycm9yKCdQcm94eSBjb25uZWN0aW9uIGVuZGVkIGJlZm9yZSByZWNlaXZpbmcgQ09OTkVDVCByZXNwb25zZScpKTsKICAgIH0KCiAgICBmdW5jdGlvbiBvbmVycm9yKGVycikgewogICAgICBjbGVhbnVwKCk7CiAgICAgIGRlYnVnJDEoJ29uZXJyb3IgJW8nLCBlcnIpOwogICAgICByZWplY3QoZXJyKTsKICAgIH0KCiAgICBmdW5jdGlvbiBvbmRhdGEoYikgewogICAgICBidWZmZXJzLnB1c2goYik7CiAgICAgIGJ1ZmZlcnNMZW5ndGggKz0gYi5sZW5ndGg7CgogICAgICBjb25zdCBidWZmZXJlZCA9IEJ1ZmZlci5jb25jYXQoYnVmZmVycywgYnVmZmVyc0xlbmd0aCk7CiAgICAgIGNvbnN0IGVuZE9mSGVhZGVycyA9IGJ1ZmZlcmVkLmluZGV4T2YoJ1xyXG5cclxuJyk7CgogICAgICBpZiAoZW5kT2ZIZWFkZXJzID09PSAtMSkgewogICAgICAgIC8vIGtlZXAgYnVmZmVyaW5nCiAgICAgICAgZGVidWckMSgnaGF2ZSBub3QgcmVjZWl2ZWQgZW5kIG9mIEhUVFAgaGVhZGVycyB5ZXQuLi4nKTsKICAgICAgICByZWFkKCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CgogICAgICBjb25zdCBoZWFkZXJQYXJ0cyA9IGJ1ZmZlcmVkLnNsaWNlKDAsIGVuZE9mSGVhZGVycykudG9TdHJpbmcoJ2FzY2lpJykuc3BsaXQoJ1xyXG4nKTsKICAgICAgY29uc3QgZmlyc3RMaW5lID0gaGVhZGVyUGFydHMuc2hpZnQoKTsKICAgICAgaWYgKCFmaXJzdExpbmUpIHsKICAgICAgICBzb2NrZXQuZGVzdHJveSgpOwogICAgICAgIHJldHVybiByZWplY3QobmV3IEVycm9yKCdObyBoZWFkZXIgcmVjZWl2ZWQgZnJvbSBwcm94eSBDT05ORUNUIHJlc3BvbnNlJykpOwogICAgICB9CiAgICAgIGNvbnN0IGZpcnN0TGluZVBhcnRzID0gZmlyc3RMaW5lLnNwbGl0KCcgJyk7CiAgICAgIGNvbnN0IHN0YXR1c0NvZGUgPSArZmlyc3RMaW5lUGFydHNbMV07CiAgICAgIGNvbnN0IHN0YXR1c1RleHQgPSBmaXJzdExpbmVQYXJ0cy5zbGljZSgyKS5qb2luKCcgJyk7CiAgICAgIGNvbnN0IGhlYWRlcnMgPSB7fTsKICAgICAgZm9yIChjb25zdCBoZWFkZXIgb2YgaGVhZGVyUGFydHMpIHsKICAgICAgICBpZiAoIWhlYWRlcikgY29udGludWU7CiAgICAgICAgY29uc3QgZmlyc3RDb2xvbiA9IGhlYWRlci5pbmRleE9mKCc6Jyk7CiAgICAgICAgaWYgKGZpcnN0Q29sb24gPT09IC0xKSB7CiAgICAgICAgICBzb2NrZXQuZGVzdHJveSgpOwogICAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRXJyb3IoYEludmFsaWQgaGVhZGVyIGZyb20gcHJveHkgQ09OTkVDVCByZXNwb25zZTogIiR7aGVhZGVyfSJgKSk7CiAgICAgICAgfQogICAgICAgIGNvbnN0IGtleSA9IGhlYWRlci5zbGljZSgwLCBmaXJzdENvbG9uKS50b0xvd2VyQ2FzZSgpOwogICAgICAgIGNvbnN0IHZhbHVlID0gaGVhZGVyLnNsaWNlKGZpcnN0Q29sb24gKyAxKS50cmltU3RhcnQoKTsKICAgICAgICBjb25zdCBjdXJyZW50ID0gaGVhZGVyc1trZXldOwogICAgICAgIGlmICh0eXBlb2YgY3VycmVudCA9PT0gJ3N0cmluZycpIHsKICAgICAgICAgIGhlYWRlcnNba2V5XSA9IFtjdXJyZW50LCB2YWx1ZV07CiAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGN1cnJlbnQpKSB7CiAgICAgICAgICBjdXJyZW50LnB1c2godmFsdWUpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBoZWFkZXJzW2tleV0gPSB2YWx1ZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZGVidWckMSgnZ290IHByb3h5IHNlcnZlciByZXNwb25zZTogJW8gJW8nLCBmaXJzdExpbmUsIGhlYWRlcnMpOwogICAgICBjbGVhbnVwKCk7CiAgICAgIHJlc29sdmUoewogICAgICAgIGNvbm5lY3Q6IHsKICAgICAgICAgIHN0YXR1c0NvZGUsCiAgICAgICAgICBzdGF0dXNUZXh0LAogICAgICAgICAgaGVhZGVycywKICAgICAgICB9LAogICAgICAgIGJ1ZmZlcmVkLAogICAgICB9KTsKICAgIH0KCiAgICBzb2NrZXQub24oJ2Vycm9yJywgb25lcnJvcik7CiAgICBzb2NrZXQub24oJ2VuZCcsIG9uZW5kKTsKCiAgICByZWFkKCk7CiAgfSk7Cn0KCmZ1bmN0aW9uIF9udWxsaXNoQ29hbGVzY2UkMShsaHMsIHJoc0ZuKSB7IGlmIChsaHMgIT0gbnVsbCkgeyByZXR1cm4gbGhzOyB9IGVsc2UgeyByZXR1cm4gcmhzRm4oKTsgfSB9IGZ1bmN0aW9uIF9vcHRpb25hbENoYWluJDEob3BzKSB7IGxldCBsYXN0QWNjZXNzTEhTID0gdW5kZWZpbmVkOyBsZXQgdmFsdWUgPSBvcHNbMF07IGxldCBpID0gMTsgd2hpbGUgKGkgPCBvcHMubGVuZ3RoKSB7IGNvbnN0IG9wID0gb3BzW2ldOyBjb25zdCBmbiA9IG9wc1tpICsgMV07IGkgKz0gMjsgaWYgKChvcCA9PT0gJ29wdGlvbmFsQWNjZXNzJyB8fCBvcCA9PT0gJ29wdGlvbmFsQ2FsbCcpICYmIHZhbHVlID09IG51bGwpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfSBpZiAob3AgPT09ICdhY2Nlc3MnIHx8IG9wID09PSAnb3B0aW9uYWxBY2Nlc3MnKSB7IGxhc3RBY2Nlc3NMSFMgPSB2YWx1ZTsgdmFsdWUgPSBmbih2YWx1ZSk7IH0gZWxzZSBpZiAob3AgPT09ICdjYWxsJyB8fCBvcCA9PT0gJ29wdGlvbmFsQ2FsbCcpIHsgdmFsdWUgPSBmbigoLi4uYXJncykgPT4gdmFsdWUuY2FsbChsYXN0QWNjZXNzTEhTLCAuLi5hcmdzKSk7IGxhc3RBY2Nlc3NMSFMgPSB1bmRlZmluZWQ7IH0gfSByZXR1cm4gdmFsdWU7IH0KCmZ1bmN0aW9uIGRlYnVnKC4uLmFyZ3MpIHsKICBsb2dnZXIubG9nKCdbaHR0cHMtcHJveHktYWdlbnRdJywgLi4uYXJncyk7Cn0KCi8qKgogKiBUaGUgYEh0dHBzUHJveHlBZ2VudGAgaW1wbGVtZW50cyBhbiBIVFRQIEFnZW50IHN1YmNsYXNzIHRoYXQgY29ubmVjdHMgdG8KICogdGhlIHNwZWNpZmllZCAiSFRUUChzKSBwcm94eSBzZXJ2ZXIiIGluIG9yZGVyIHRvIHByb3h5IEhUVFBTIHJlcXVlc3RzLgogKgogKiBPdXRnb2luZyBIVFRQIHJlcXVlc3RzIGFyZSBmaXJzdCB0dW5uZWxlZCB0aHJvdWdoIHRoZSBwcm94eSBzZXJ2ZXIgdXNpbmcgdGhlCiAqIGBDT05ORUNUYCBIVFRQIHJlcXVlc3QgbWV0aG9kIHRvIGVzdGFibGlzaCBhIGNvbm5lY3Rpb24gdG8gdGhlIHByb3h5IHNlcnZlciwKICogYW5kIHRoZW4gdGhlIHByb3h5IHNlcnZlciBjb25uZWN0cyB0byB0aGUgZGVzdGluYXRpb24gdGFyZ2V0IGFuZCBpc3N1ZXMgdGhlCiAqIEhUVFAgcmVxdWVzdCBmcm9tIHRoZSBwcm94eSBzZXJ2ZXIuCiAqCiAqIGBodHRwczpgIHJlcXVlc3RzIGhhdmUgdGhlaXIgc29ja2V0IGNvbm5lY3Rpb24gdXBncmFkZWQgdG8gVExTIG9uY2UKICogdGhlIGNvbm5lY3Rpb24gdG8gdGhlIHByb3h5IHNlcnZlciBoYXMgYmVlbiBlc3RhYmxpc2hlZC4KICovCmNsYXNzIEh0dHBzUHJveHlBZ2VudCBleHRlbmRzIEFnZW50IHsKICBzdGF0aWMgX19pbml0U3RhdGljKCkge3RoaXMucHJvdG9jb2xzID0gWydodHRwJywgJ2h0dHBzJ107IH0KCiAgY29uc3RydWN0b3IocHJveHksIG9wdHMpIHsKICAgIHN1cGVyKG9wdHMpOwogICAgdGhpcy5vcHRpb25zID0ge307CiAgICB0aGlzLnByb3h5ID0gdHlwZW9mIHByb3h5ID09PSAnc3RyaW5nJyA/IG5ldyBVUkwocHJveHkpIDogcHJveHk7CiAgICB0aGlzLnByb3h5SGVhZGVycyA9IF9udWxsaXNoQ29hbGVzY2UkMShfb3B0aW9uYWxDaGFpbiQxKFtvcHRzLCAnb3B0aW9uYWxBY2Nlc3MnLCBfMiA9PiBfMi5oZWFkZXJzXSksICgpID0+ICgge30pKTsKICAgIGRlYnVnKCdDcmVhdGluZyBuZXcgSHR0cHNQcm94eUFnZW50IGluc3RhbmNlOiAlbycsIHRoaXMucHJveHkuaHJlZik7CgogICAgLy8gVHJpbSBvZmYgdGhlIGJyYWNrZXRzIGZyb20gSVB2NiBhZGRyZXNzZXMKICAgIGNvbnN0IGhvc3QgPSAodGhpcy5wcm94eS5ob3N0bmFtZSB8fCB0aGlzLnByb3h5Lmhvc3QpLnJlcGxhY2UoL15cW3xcXSQvZywgJycpOwogICAgY29uc3QgcG9ydCA9IHRoaXMucHJveHkucG9ydCA/IHBhcnNlSW50KHRoaXMucHJveHkucG9ydCwgMTApIDogdGhpcy5wcm94eS5wcm90b2NvbCA9PT0gJ2h0dHBzOicgPyA0NDMgOiA4MDsKICAgIHRoaXMuY29ubmVjdE9wdHMgPSB7CiAgICAgIC8vIEF0dGVtcHQgdG8gbmVnb3RpYXRlIGh0dHAvMS4xIGZvciBwcm94eSBzZXJ2ZXJzIHRoYXQgc3VwcG9ydCBodHRwLzIKICAgICAgQUxQTlByb3RvY29sczogWydodHRwLzEuMSddLAogICAgICAuLi4ob3B0cyA/IG9taXQob3B0cywgJ2hlYWRlcnMnKSA6IG51bGwpLAogICAgICBob3N0LAogICAgICBwb3J0LAogICAgfTsKICB9CgogIC8qKgogICAqIENhbGxlZCB3aGVuIHRoZSBub2RlLWNvcmUgSFRUUCBjbGllbnQgbGlicmFyeSBpcyBjcmVhdGluZyBhCiAgICogbmV3IEhUVFAgcmVxdWVzdC4KICAgKi8KICBhc3luYyBjb25uZWN0KHJlcSwgb3B0cykgewogICAgY29uc3QgeyBwcm94eSB9ID0gdGhpczsKCiAgICBpZiAoIW9wdHMuaG9zdCkgewogICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdObyAiaG9zdCIgcHJvdmlkZWQnKTsKICAgIH0KCiAgICAvLyBDcmVhdGUgYSBzb2NrZXQgY29ubmVjdGlvbiB0byB0aGUgcHJveHkgc2VydmVyLgogICAgbGV0IHNvY2tldDsKICAgIGlmIChwcm94eS5wcm90b2NvbCA9PT0gJ2h0dHBzOicpIHsKICAgICAgZGVidWcoJ0NyZWF0aW5nIGB0bHMuU29ja2V0YDogJW8nLCB0aGlzLmNvbm5lY3RPcHRzKTsKICAgICAgY29uc3Qgc2VydmVybmFtZSA9IHRoaXMuY29ubmVjdE9wdHMuc2VydmVybmFtZSB8fCB0aGlzLmNvbm5lY3RPcHRzLmhvc3Q7CiAgICAgIHNvY2tldCA9IHRscy5jb25uZWN0KHsKICAgICAgICAuLi50aGlzLmNvbm5lY3RPcHRzLAogICAgICAgIHNlcnZlcm5hbWU6IHNlcnZlcm5hbWUgJiYgbmV0LmlzSVAoc2VydmVybmFtZSkgPyB1bmRlZmluZWQgOiBzZXJ2ZXJuYW1lLAogICAgICB9KTsKICAgIH0gZWxzZSB7CiAgICAgIGRlYnVnKCdDcmVhdGluZyBgbmV0LlNvY2tldGA6ICVvJywgdGhpcy5jb25uZWN0T3B0cyk7CiAgICAgIHNvY2tldCA9IG5ldC5jb25uZWN0KHRoaXMuY29ubmVjdE9wdHMpOwogICAgfQoKICAgIGNvbnN0IGhlYWRlcnMgPQogICAgICB0eXBlb2YgdGhpcy5wcm94eUhlYWRlcnMgPT09ICdmdW5jdGlvbicgPyB0aGlzLnByb3h5SGVhZGVycygpIDogeyAuLi50aGlzLnByb3h5SGVhZGVycyB9OwogICAgY29uc3QgaG9zdCA9IG5ldC5pc0lQdjYob3B0cy5ob3N0KSA/IGBbJHtvcHRzLmhvc3R9XWAgOiBvcHRzLmhvc3Q7CiAgICBsZXQgcGF5bG9hZCA9IGBDT05ORUNUICR7aG9zdH06JHtvcHRzLnBvcnR9IEhUVFAvMS4xXHJcbmA7CgogICAgLy8gSW5qZWN0IHRoZSBgUHJveHktQXV0aG9yaXphdGlvbmAgaGVhZGVyIGlmIG5lY2Vzc2FyeS4KICAgIGlmIChwcm94eS51c2VybmFtZSB8fCBwcm94eS5wYXNzd29yZCkgewogICAgICBjb25zdCBhdXRoID0gYCR7ZGVjb2RlVVJJQ29tcG9uZW50KHByb3h5LnVzZXJuYW1lKX06JHtkZWNvZGVVUklDb21wb25lbnQocHJveHkucGFzc3dvcmQpfWA7CiAgICAgIGhlYWRlcnNbJ1Byb3h5LUF1dGhvcml6YXRpb24nXSA9IGBCYXNpYyAke0J1ZmZlci5mcm9tKGF1dGgpLnRvU3RyaW5nKCdiYXNlNjQnKX1gOwogICAgfQoKICAgIGhlYWRlcnMuSG9zdCA9IGAke2hvc3R9OiR7b3B0cy5wb3J0fWA7CgogICAgaWYgKCFoZWFkZXJzWydQcm94eS1Db25uZWN0aW9uJ10pIHsKICAgICAgaGVhZGVyc1snUHJveHktQ29ubmVjdGlvbiddID0gdGhpcy5rZWVwQWxpdmUgPyAnS2VlcC1BbGl2ZScgOiAnY2xvc2UnOwogICAgfQogICAgZm9yIChjb25zdCBuYW1lIG9mIE9iamVjdC5rZXlzKGhlYWRlcnMpKSB7CiAgICAgIHBheWxvYWQgKz0gYCR7bmFtZX06ICR7aGVhZGVyc1tuYW1lXX1cclxuYDsKICAgIH0KCiAgICBjb25zdCBwcm94eVJlc3BvbnNlUHJvbWlzZSA9IHBhcnNlUHJveHlSZXNwb25zZShzb2NrZXQpOwoKICAgIHNvY2tldC53cml0ZShgJHtwYXlsb2FkfVxyXG5gKTsKCiAgICBjb25zdCB7IGNvbm5lY3QsIGJ1ZmZlcmVkIH0gPSBhd2FpdCBwcm94eVJlc3BvbnNlUHJvbWlzZTsKICAgIHJlcS5lbWl0KCdwcm94eUNvbm5lY3QnLCBjb25uZWN0KTsKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnQKICAgIC8vIEB0cy1pZ25vcmUgTm90IEV2ZW50RW1pdHRlciBpbiBOb2RlIHR5cGVzCiAgICB0aGlzLmVtaXQoJ3Byb3h5Q29ubmVjdCcsIGNvbm5lY3QsIHJlcSk7CgogICAgaWYgKGNvbm5lY3Quc3RhdHVzQ29kZSA9PT0gMjAwKSB7CiAgICAgIHJlcS5vbmNlKCdzb2NrZXQnLCByZXN1bWUpOwoKICAgICAgaWYgKG9wdHMuc2VjdXJlRW5kcG9pbnQpIHsKICAgICAgICAvLyBUaGUgcHJveHkgaXMgY29ubmVjdGluZyB0byBhIFRMUyBzZXJ2ZXIsIHNvIHVwZ3JhZGUKICAgICAgICAvLyB0aGlzIHNvY2tldCBjb25uZWN0aW9uIHRvIGEgVExTIGNvbm5lY3Rpb24uCiAgICAgICAgZGVidWcoJ1VwZ3JhZGluZyBzb2NrZXQgY29ubmVjdGlvbiB0byBUTFMnKTsKICAgICAgICBjb25zdCBzZXJ2ZXJuYW1lID0gb3B0cy5zZXJ2ZXJuYW1lIHx8IG9wdHMuaG9zdDsKICAgICAgICByZXR1cm4gdGxzLmNvbm5lY3QoewogICAgICAgICAgLi4ub21pdChvcHRzLCAnaG9zdCcsICdwYXRoJywgJ3BvcnQnKSwKICAgICAgICAgIHNvY2tldCwKICAgICAgICAgIHNlcnZlcm5hbWU6IG5ldC5pc0lQKHNlcnZlcm5hbWUpID8gdW5kZWZpbmVkIDogc2VydmVybmFtZSwKICAgICAgICB9KTsKICAgICAgfQoKICAgICAgcmV0dXJuIHNvY2tldDsKICAgIH0KCiAgICAvLyBTb21lIG90aGVyIHN0YXR1cyBjb2RlIHRoYXQncyBub3QgMjAwLi4uIG5lZWQgdG8gcmUtcGxheSB0aGUgSFRUUAogICAgLy8gaGVhZGVyICJkYXRhIiBldmVudHMgb250byB0aGUgc29ja2V0IG9uY2UgdGhlIEhUVFAgbWFjaGluZXJ5IGlzCiAgICAvLyBhdHRhY2hlZCBzbyB0aGF0IHRoZSBub2RlIGNvcmUgYGh0dHBgIGNhbiBwYXJzZSBhbmQgaGFuZGxlIHRoZQogICAgLy8gZXJyb3Igc3RhdHVzIGNvZGUuCgogICAgLy8gQ2xvc2UgdGhlIG9yaWdpbmFsIHNvY2tldCwgYW5kIGEgbmV3ICJmYWtlIiBzb2NrZXQgaXMgcmV0dXJuZWQKICAgIC8vIGluc3RlYWQsIHNvIHRoYXQgdGhlIHByb3h5IGRvZXNuJ3QgZ2V0IHRoZSBIVFRQIHJlcXVlc3QKICAgIC8vIHdyaXR0ZW4gdG8gaXQgKHdoaWNoIG1heSBjb250YWluIGBBdXRob3JpemF0aW9uYCBoZWFkZXJzIG9yIG90aGVyCiAgICAvLyBzZW5zaXRpdmUgZGF0YSkuCiAgICAvLwogICAgLy8gU2VlOiBodHRwczovL2hhY2tlcm9uZS5jb20vcmVwb3J0cy81NDE1MDIKICAgIHNvY2tldC5kZXN0cm95KCk7CgogICAgY29uc3QgZmFrZVNvY2tldCA9IG5ldyBuZXQuU29ja2V0KHsgd3JpdGFibGU6IGZhbHNlIH0pOwogICAgZmFrZVNvY2tldC5yZWFkYWJsZSA9IHRydWU7CgogICAgLy8gTmVlZCB0byB3YWl0IGZvciB0aGUgInNvY2tldCIgZXZlbnQgdG8gcmUtcGxheSB0aGUgImRhdGEiIGV2ZW50cy4KICAgIHJlcS5vbmNlKCdzb2NrZXQnLCAocykgPT4gewogICAgICBkZWJ1ZygnUmVwbGF5aW5nIHByb3h5IGJ1ZmZlciBmb3IgZmFpbGVkIHJlcXVlc3QnKTsKICAgICAgLy8gUmVwbGF5IHRoZSAiYnVmZmVyZWQiIEJ1ZmZlciBvbnRvIHRoZSBmYWtlIGBzb2NrZXRgLCBzaW5jZSBhdAogICAgICAvLyB0aGlzIHBvaW50IHRoZSBIVFRQIG1vZHVsZSBtYWNoaW5lcnkgaGFzIGJlZW4gaG9va2VkIHVwIGZvcgogICAgICAvLyB0aGUgdXNlci4KICAgICAgcy5wdXNoKGJ1ZmZlcmVkKTsKICAgICAgcy5wdXNoKG51bGwpOwogICAgfSk7CgogICAgcmV0dXJuIGZha2VTb2NrZXQ7CiAgfQp9IEh0dHBzUHJveHlBZ2VudC5fX2luaXRTdGF0aWMoKTsKCmZ1bmN0aW9uIHJlc3VtZShzb2NrZXQpIHsKICBzb2NrZXQucmVzdW1lKCk7Cn0KCmZ1bmN0aW9uIG9taXQoCiAgb2JqLAogIC4uLmtleXMKKQoKIHsKICBjb25zdCByZXQgPSB7fQoKOwogIGxldCBrZXk7CiAgZm9yIChrZXkgaW4gb2JqKSB7CiAgICBpZiAoIWtleXMuaW5jbHVkZXMoa2V5KSkgewogICAgICByZXRba2V5XSA9IG9ialtrZXldOwogICAgfQogIH0KICByZXR1cm4gcmV0Owp9CgpmdW5jdGlvbiBfbnVsbGlzaENvYWxlc2NlKGxocywgcmhzRm4pIHsgaWYgKGxocyAhPSBudWxsKSB7IHJldHVybiBsaHM7IH0gZWxzZSB7IHJldHVybiByaHNGbigpOyB9IH0KLy8gRXN0aW1hdGVkIG1heGltdW0gc2l6ZSBmb3IgcmVhc29uYWJsZSBzdGFuZGFsb25lIGV2ZW50CmNvbnN0IEdaSVBfVEhSRVNIT0xEID0gMTAyNCAqIDMyOwoKLyoqCiAqIEdldHMgYSBzdHJlYW0gZnJvbSBhIFVpbnQ4QXJyYXkgb3Igc3RyaW5nCiAqIFJlYWRhYmxlLmZyb20gaXMgaWRlYWwgYnV0IHdhcyBhZGRlZCBpbiBub2RlLmpzIHYxMi4zLjAgYW5kIHYxMC4xNy4wCiAqLwpmdW5jdGlvbiBzdHJlYW1Gcm9tQm9keShib2R5KSB7CiAgcmV0dXJuIG5ldyBSZWFkYWJsZSh7CiAgICByZWFkKCkgewogICAgICB0aGlzLnB1c2goYm9keSk7CiAgICAgIHRoaXMucHVzaChudWxsKTsKICAgIH0sCiAgfSk7Cn0KCi8qKgogKiBDcmVhdGVzIGEgVHJhbnNwb3J0IHRoYXQgdXNlcyBuYXRpdmUgdGhlIG5hdGl2ZSAnaHR0cCcgYW5kICdodHRwcycgbW9kdWxlcyB0byBzZW5kIGV2ZW50cyB0byBTZW50cnkuCiAqLwpmdW5jdGlvbiBtYWtlTm9kZVRyYW5zcG9ydChvcHRpb25zKSB7CiAgbGV0IHVybFNlZ21lbnRzOwoKICB0cnkgewogICAgdXJsU2VnbWVudHMgPSBuZXcgVVJMKG9wdGlvbnMudXJsKTsKICB9IGNhdGNoIChlKSB7CiAgICBjb25zb2xlU2FuZGJveCgoKSA9PiB7CiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlCiAgICAgIGNvbnNvbGUud2FybigKICAgICAgICAnW0BzZW50cnkvbm9kZV06IEludmFsaWQgZHNuIG9yIHR1bm5lbCBvcHRpb24sIHdpbGwgbm90IHNlbmQgYW55IGV2ZW50cy4gVGhlIHR1bm5lbCBvcHRpb24gbXVzdCBiZSBhIGZ1bGwgVVJMIHdoZW4gdXNlZC4nLAogICAgICApOwogICAgfSk7CiAgICByZXR1cm4gY3JlYXRlVHJhbnNwb3J0KG9wdGlvbnMsICgpID0+IFByb21pc2UucmVzb2x2ZSh7fSkpOwogIH0KCiAgY29uc3QgaXNIdHRwcyA9IHVybFNlZ21lbnRzLnByb3RvY29sID09PSAnaHR0cHM6JzsKCiAgLy8gUHJveHkgcHJpb3JpdGl6YXRpb246IGh0dHAgPT4gYG9wdGlvbnMucHJveHlgIHwgYHByb2Nlc3MuZW52Lmh0dHBfcHJveHlgCiAgLy8gUHJveHkgcHJpb3JpdGl6YXRpb246IGh0dHBzID0+IGBvcHRpb25zLnByb3h5YCB8IGBwcm9jZXNzLmVudi5odHRwc19wcm94eWAgfCBgcHJvY2Vzcy5lbnYuaHR0cF9wcm94eWAKICBjb25zdCBwcm94eSA9IGFwcGx5Tm9Qcm94eU9wdGlvbigKICAgIHVybFNlZ21lbnRzLAogICAgb3B0aW9ucy5wcm94eSB8fCAoaXNIdHRwcyA/IHByb2Nlc3MuZW52Lmh0dHBzX3Byb3h5IDogdW5kZWZpbmVkKSB8fCBwcm9jZXNzLmVudi5odHRwX3Byb3h5LAogICk7CgogIGNvbnN0IG5hdGl2ZUh0dHBNb2R1bGUgPSBpc0h0dHBzID8gaHR0cHMgOiBodHRwOwogIGNvbnN0IGtlZXBBbGl2ZSA9IG9wdGlvbnMua2VlcEFsaXZlID09PSB1bmRlZmluZWQgPyBmYWxzZSA6IG9wdGlvbnMua2VlcEFsaXZlOwoKICAvLyBUT0RPKHY3KTogRXZhbHVhdGUgaWYgd2UgY2FuIHNldCBrZWVwQWxpdmUgdG8gdHJ1ZS4gVGhpcyB3b3VsZCBpbnZvbHZlIHRlc3RpbmcgZm9yIG1lbW9yeSBsZWFrcyBpbiBvbGRlciBub2RlCiAgLy8gdmVyc2lvbnMoPj0gOCkgYXMgdGhleSBoYWQgbWVtb3J5IGxlYWtzIHdoZW4gdXNpbmcgaXQ6ICMyNTU1CiAgY29uc3QgYWdlbnQgPSBwcm94eQogICAgPyAobmV3IEh0dHBzUHJveHlBZ2VudChwcm94eSkgKQogICAgOiBuZXcgbmF0aXZlSHR0cE1vZHVsZS5BZ2VudCh7IGtlZXBBbGl2ZSwgbWF4U29ja2V0czogMzAsIHRpbWVvdXQ6IDIwMDAgfSk7CgogIGNvbnN0IHJlcXVlc3RFeGVjdXRvciA9IGNyZWF0ZVJlcXVlc3RFeGVjdXRvcihvcHRpb25zLCBfbnVsbGlzaENvYWxlc2NlKG9wdGlvbnMuaHR0cE1vZHVsZSwgKCkgPT4gKCBuYXRpdmVIdHRwTW9kdWxlKSksIGFnZW50KTsKICByZXR1cm4gY3JlYXRlVHJhbnNwb3J0KG9wdGlvbnMsIHJlcXVlc3RFeGVjdXRvcik7Cn0KCi8qKgogKiBIb25vcnMgdGhlIGBub19wcm94eWAgZW52IHZhcmlhYmxlIHdpdGggdGhlIGhpZ2hlc3QgcHJpb3JpdHkgdG8gYWxsb3cgZm9yIGhvc3RzIGV4Y2x1c2lvbi4KICoKICogQHBhcmFtIHRyYW5zcG9ydFVybCBUaGUgVVJMIHRoZSB0cmFuc3BvcnQgaW50ZW5kcyB0byBzZW5kIGV2ZW50cyB0by4KICogQHBhcmFtIHByb3h5IFRoZSBjbGllbnQgY29uZmlndXJlZCBwcm94eS4KICogQHJldHVybnMgQSBwcm94eSB0aGUgdHJhbnNwb3J0IHNob3VsZCB1c2UuCiAqLwpmdW5jdGlvbiBhcHBseU5vUHJveHlPcHRpb24odHJhbnNwb3J0VXJsU2VnbWVudHMsIHByb3h5KSB7CiAgY29uc3QgeyBub19wcm94eSB9ID0gcHJvY2Vzcy5lbnY7CgogIGNvbnN0IHVybElzRXhlbXB0RnJvbVByb3h5ID0KICAgIG5vX3Byb3h5ICYmCiAgICBub19wcm94eQogICAgICAuc3BsaXQoJywnKQogICAgICAuc29tZSgKICAgICAgICBleGVtcHRpb24gPT4gdHJhbnNwb3J0VXJsU2VnbWVudHMuaG9zdC5lbmRzV2l0aChleGVtcHRpb24pIHx8IHRyYW5zcG9ydFVybFNlZ21lbnRzLmhvc3RuYW1lLmVuZHNXaXRoKGV4ZW1wdGlvbiksCiAgICAgICk7CgogIGlmICh1cmxJc0V4ZW1wdEZyb21Qcm94eSkgewogICAgcmV0dXJuIHVuZGVmaW5lZDsKICB9IGVsc2UgewogICAgcmV0dXJuIHByb3h5OwogIH0KfQoKLyoqCiAqIENyZWF0ZXMgYSBSZXF1ZXN0RXhlY3V0b3IgdG8gYmUgdXNlZCB3aXRoIGBjcmVhdGVUcmFuc3BvcnRgLgogKi8KZnVuY3Rpb24gY3JlYXRlUmVxdWVzdEV4ZWN1dG9yKAogIG9wdGlvbnMsCiAgaHR0cE1vZHVsZSwKICBhZ2VudCwKKSB7CiAgY29uc3QgeyBob3N0bmFtZSwgcGF0aG5hbWUsIHBvcnQsIHByb3RvY29sLCBzZWFyY2ggfSA9IG5ldyBVUkwob3B0aW9ucy51cmwpOwogIHJldHVybiBmdW5jdGlvbiBtYWtlUmVxdWVzdChyZXF1ZXN0KSB7CiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gewogICAgICBsZXQgYm9keSA9IHN0cmVhbUZyb21Cb2R5KHJlcXVlc3QuYm9keSk7CgogICAgICBjb25zdCBoZWFkZXJzID0geyAuLi5vcHRpb25zLmhlYWRlcnMgfTsKCiAgICAgIGlmIChyZXF1ZXN0LmJvZHkubGVuZ3RoID4gR1pJUF9USFJFU0hPTEQpIHsKICAgICAgICBoZWFkZXJzWydjb250ZW50LWVuY29kaW5nJ10gPSAnZ3ppcCc7CiAgICAgICAgYm9keSA9IGJvZHkucGlwZShjcmVhdGVHemlwKCkpOwogICAgICB9CgogICAgICBjb25zdCByZXEgPSBodHRwTW9kdWxlLnJlcXVlc3QoCiAgICAgICAgewogICAgICAgICAgbWV0aG9kOiAnUE9TVCcsCiAgICAgICAgICBhZ2VudCwKICAgICAgICAgIGhlYWRlcnMsCiAgICAgICAgICBob3N0bmFtZSwKICAgICAgICAgIHBhdGg6IGAke3BhdGhuYW1lfSR7c2VhcmNofWAsCiAgICAgICAgICBwb3J0LAogICAgICAgICAgcHJvdG9jb2wsCiAgICAgICAgICBjYTogb3B0aW9ucy5jYUNlcnRzLAogICAgICAgIH0sCiAgICAgICAgcmVzID0+IHsKICAgICAgICAgIHJlcy5vbignZGF0YScsICgpID0+IHsKICAgICAgICAgICAgLy8gRHJhaW4gc29ja2V0CiAgICAgICAgICB9KTsKCiAgICAgICAgICByZXMub24oJ2VuZCcsICgpID0+IHsKICAgICAgICAgICAgLy8gRHJhaW4gc29ja2V0CiAgICAgICAgICB9KTsKCiAgICAgICAgICByZXMuc2V0RW5jb2RpbmcoJ3V0ZjgnKTsKCiAgICAgICAgICAvLyAiS2V5LXZhbHVlIHBhaXJzIG9mIGhlYWRlciBuYW1lcyBhbmQgdmFsdWVzLiBIZWFkZXIgbmFtZXMgYXJlIGxvd2VyLWNhc2VkLiIKICAgICAgICAgIC8vIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvaHR0cC5odG1sI2h0dHBfbWVzc2FnZV9oZWFkZXJzCiAgICAgICAgICBjb25zdCByZXRyeUFmdGVySGVhZGVyID0gX251bGxpc2hDb2FsZXNjZShyZXMuaGVhZGVyc1sncmV0cnktYWZ0ZXInXSwgKCkgPT4gKCBudWxsKSk7CiAgICAgICAgICBjb25zdCByYXRlTGltaXRzSGVhZGVyID0gX251bGxpc2hDb2FsZXNjZShyZXMuaGVhZGVyc1sneC1zZW50cnktcmF0ZS1saW1pdHMnXSwgKCkgPT4gKCBudWxsKSk7CgogICAgICAgICAgcmVzb2x2ZSh7CiAgICAgICAgICAgIHN0YXR1c0NvZGU6IHJlcy5zdGF0dXNDb2RlLAogICAgICAgICAgICBoZWFkZXJzOiB7CiAgICAgICAgICAgICAgJ3JldHJ5LWFmdGVyJzogcmV0cnlBZnRlckhlYWRlciwKICAgICAgICAgICAgICAneC1zZW50cnktcmF0ZS1saW1pdHMnOiBBcnJheS5pc0FycmF5KHJhdGVMaW1pdHNIZWFkZXIpID8gcmF0ZUxpbWl0c0hlYWRlclswXSA6IHJhdGVMaW1pdHNIZWFkZXIsCiAgICAgICAgICAgIH0sCiAgICAgICAgICB9KTsKICAgICAgICB9LAogICAgICApOwoKICAgICAgcmVxLm9uKCdlcnJvcicsIHJlamVjdCk7CiAgICAgIGJvZHkucGlwZShyZXEpOwogICAgfSk7CiAgfTsKfQoKZnVuY3Rpb24gX29wdGlvbmFsQ2hhaW4ob3BzKSB7IGxldCBsYXN0QWNjZXNzTEhTID0gdW5kZWZpbmVkOyBsZXQgdmFsdWUgPSBvcHNbMF07IGxldCBpID0gMTsgd2hpbGUgKGkgPCBvcHMubGVuZ3RoKSB7IGNvbnN0IG9wID0gb3BzW2ldOyBjb25zdCBmbiA9IG9wc1tpICsgMV07IGkgKz0gMjsgaWYgKChvcCA9PT0gJ29wdGlvbmFsQWNjZXNzJyB8fCBvcCA9PT0gJ29wdGlvbmFsQ2FsbCcpICYmIHZhbHVlID09IG51bGwpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfSBpZiAob3AgPT09ICdhY2Nlc3MnIHx8IG9wID09PSAnb3B0aW9uYWxBY2Nlc3MnKSB7IGxhc3RBY2Nlc3NMSFMgPSB2YWx1ZTsgdmFsdWUgPSBmbih2YWx1ZSk7IH0gZWxzZSBpZiAob3AgPT09ICdjYWxsJyB8fCBvcCA9PT0gJ29wdGlvbmFsQ2FsbCcpIHsgdmFsdWUgPSBmbigoLi4uYXJncykgPT4gdmFsdWUuY2FsbChsYXN0QWNjZXNzTEhTLCAuLi5hcmdzKSk7IGxhc3RBY2Nlc3NMSFMgPSB1bmRlZmluZWQ7IH0gfSByZXR1cm4gdmFsdWU7IH0KY29uc3Qgb3B0aW9ucyA9IHdvcmtlckRhdGE7CmxldCBzZXNzaW9uOwpsZXQgaGFzU2VudEFuckV2ZW50ID0gZmFsc2U7CgpmdW5jdGlvbiBsb2cobXNnKSB7CiAgaWYgKG9wdGlvbnMuZGVidWcpIHsKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlCiAgICBjb25zb2xlLmxvZyhgW0FOUiBXb3JrZXJdICR7bXNnfWApOwogIH0KfQoKY29uc3QgdXJsID0gZ2V0RW52ZWxvcGVFbmRwb2ludFdpdGhVcmxFbmNvZGVkQXV0aChvcHRpb25zLmRzbik7CmNvbnN0IHRyYW5zcG9ydCA9IG1ha2VOb2RlVHJhbnNwb3J0KHsKICB1cmwsCiAgcmVjb3JkRHJvcHBlZEV2ZW50OiAoKSA9PiB7CiAgICAvLwogIH0sCn0pOwoKYXN5bmMgZnVuY3Rpb24gc2VuZEFibm9ybWFsU2Vzc2lvbigpIHsKICAvLyBvZiB3ZSBoYXZlIGFuIGV4aXN0aW5nIHNlc3Npb24gcGFzc2VkIGZyb20gdGhlIG1haW4gdGhyZWFkLCBzZW5kIGl0IGFzIGFibm9ybWFsCiAgaWYgKHNlc3Npb24pIHsKICAgIGxvZygnU2VuZGluZyBhYm5vcm1hbCBzZXNzaW9uJyk7CiAgICB1cGRhdGVTZXNzaW9uKHNlc3Npb24sIHsgc3RhdHVzOiAnYWJub3JtYWwnLCBhYm5vcm1hbF9tZWNoYW5pc206ICdhbnJfZm9yZWdyb3VuZCcgfSk7CgogICAgY29uc3QgZW52ZWxvcGUgPSBjcmVhdGVTZXNzaW9uRW52ZWxvcGUoc2Vzc2lvbiwgb3B0aW9ucy5kc24sIG9wdGlvbnMuc2RrTWV0YWRhdGEpOwogICAgLy8gTG9nIHRoZSBlbnZlbG9wZSBzbyB0byBhaWQgaW4gdGVzdGluZwogICAgbG9nKEpTT04uc3RyaW5naWZ5KGVudmVsb3BlKSk7CgogICAgYXdhaXQgdHJhbnNwb3J0LnNlbmQoZW52ZWxvcGUpOwoKICAgIHRyeSB7CiAgICAgIC8vIE5vdGlmeSB0aGUgbWFpbiBwcm9jZXNzIHRoYXQgdGhlIHNlc3Npb24gaGFzIGVuZGVkIHNvIHRoZSBzZXNzaW9uIGNhbiBiZSBjbGVhcmVkIGZyb20gdGhlIHNjb3BlCiAgICAgIF9vcHRpb25hbENoYWluKFtwYXJlbnRQb3J0LCAnb3B0aW9uYWxBY2Nlc3MnLCBfMiA9PiBfMi5wb3N0TWVzc2FnZSwgJ2NhbGwnLCBfMyA9PiBfMygnc2Vzc2lvbi1lbmRlZCcpXSk7CiAgICB9IGNhdGNoIChfKSB7CiAgICAgIC8vIGlnbm9yZQogICAgfQogIH0KfQoKbG9nKCdTdGFydGVkJyk7CgpmdW5jdGlvbiBwcmVwYXJlU3RhY2tGcmFtZXMoc3RhY2tGcmFtZXMpIHsKICBpZiAoIXN0YWNrRnJhbWVzKSB7CiAgICByZXR1cm4gdW5kZWZpbmVkOwogIH0KCiAgLy8gU3RyaXAgU2VudHJ5IGZyYW1lcyBhbmQgcmV2ZXJzZSB0aGUgc3RhY2sgZnJhbWVzIHNvIHRoZXkgYXJlIGluIHRoZSBjb3JyZWN0IG9yZGVyCiAgY29uc3Qgc3RyaXBwZWRGcmFtZXMgPSBzdHJpcFNlbnRyeUZyYW1lc0FuZFJldmVyc2Uoc3RhY2tGcmFtZXMpOwoKICAvLyBJZiB3ZSBoYXZlIGFuIGFwcCByb290IHBhdGgsIHJld3JpdGUgdGhlIGZpbGVuYW1lcyB0byBiZSByZWxhdGl2ZSB0byB0aGUgYXBwIHJvb3QKICBpZiAob3B0aW9ucy5hcHBSb290UGF0aCkgewogICAgZm9yIChjb25zdCBmcmFtZSBvZiBzdHJpcHBlZEZyYW1lcykgewogICAgICBpZiAoIWZyYW1lLmZpbGVuYW1lKSB7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KCiAgICAgIGZyYW1lLmZpbGVuYW1lID0gbm9ybWFsaXplVXJsVG9CYXNlKGZyYW1lLmZpbGVuYW1lLCBvcHRpb25zLmFwcFJvb3RQYXRoKTsKICAgIH0KICB9CgogIHJldHVybiBzdHJpcHBlZEZyYW1lczsKfQoKZnVuY3Rpb24gYXBwbHlTY29wZVRvRXZlbnQoZXZlbnQsIHNjb3BlKSB7CiAgYXBwbHlTY29wZURhdGFUb0V2ZW50KGV2ZW50LCBzY29wZSk7CgogIGlmICghX29wdGlvbmFsQ2hhaW4oW2V2ZW50LCAnYWNjZXNzJywgXzQgPT4gXzQuY29udGV4dHMsICdvcHRpb25hbEFjY2VzcycsIF81ID0+IF81LnRyYWNlXSkpIHsKICAgIGNvbnN0IHsgdHJhY2VJZCwgc3BhbklkLCBwYXJlbnRTcGFuSWQgfSA9IHNjb3BlLnByb3BhZ2F0aW9uQ29udGV4dDsKICAgIGV2ZW50LmNvbnRleHRzID0gewogICAgICB0cmFjZTogewogICAgICAgIHRyYWNlX2lkOiB0cmFjZUlkLAogICAgICAgIHNwYW5faWQ6IHNwYW5JZCwKICAgICAgICBwYXJlbnRfc3Bhbl9pZDogcGFyZW50U3BhbklkLAogICAgICB9LAogICAgICAuLi5ldmVudC5jb250ZXh0cywKICAgIH07CiAgfQp9Cgphc3luYyBmdW5jdGlvbiBzZW5kQW5yRXZlbnQoZnJhbWVzLCBzY29wZSkgewogIGlmIChoYXNTZW50QW5yRXZlbnQpIHsKICAgIHJldHVybjsKICB9CgogIGhhc1NlbnRBbnJFdmVudCA9IHRydWU7CgogIGF3YWl0IHNlbmRBYm5vcm1hbFNlc3Npb24oKTsKCiAgbG9nKCdTZW5kaW5nIGV2ZW50Jyk7CgogIGNvbnN0IGV2ZW50ID0gewogICAgZXZlbnRfaWQ6IHV1aWQ0KCksCiAgICBjb250ZXh0czogb3B0aW9ucy5jb250ZXh0cywKICAgIHJlbGVhc2U6IG9wdGlvbnMucmVsZWFzZSwKICAgIGVudmlyb25tZW50OiBvcHRpb25zLmVudmlyb25tZW50LAogICAgZGlzdDogb3B0aW9ucy5kaXN0LAogICAgcGxhdGZvcm06ICdub2RlJywKICAgIGxldmVsOiAnZXJyb3InLAogICAgZXhjZXB0aW9uOiB7CiAgICAgIHZhbHVlczogWwogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICdBcHBsaWNhdGlvbk5vdFJlc3BvbmRpbmcnLAogICAgICAgICAgdmFsdWU6IGBBcHBsaWNhdGlvbiBOb3QgUmVzcG9uZGluZyBmb3IgYXQgbGVhc3QgJHtvcHRpb25zLmFuclRocmVzaG9sZH0gbXNgLAogICAgICAgICAgc3RhY2t0cmFjZTogeyBmcmFtZXM6IHByZXBhcmVTdGFja0ZyYW1lcyhmcmFtZXMpIH0sCiAgICAgICAgICAvLyBUaGlzIGVuc3VyZXMgdGhlIFVJIGRvZXNuJ3Qgc2F5ICdDcmFzaGVkIGluJyBmb3IgdGhlIHN0YWNrIHRyYWNlCiAgICAgICAgICBtZWNoYW5pc206IHsgdHlwZTogJ0FOUicgfSwKICAgICAgICB9LAogICAgICBdLAogICAgfSwKICAgIHRhZ3M6IG9wdGlvbnMuc3RhdGljVGFncywKICB9OwoKICBpZiAoc2NvcGUpIHsKICAgIGFwcGx5U2NvcGVUb0V2ZW50KGV2ZW50LCBzY29wZSk7CiAgfQoKICBjb25zdCBlbnZlbG9wZSA9IGNyZWF0ZUV2ZW50RW52ZWxvcGUoZXZlbnQsIG9wdGlvbnMuZHNuLCBvcHRpb25zLnNka01ldGFkYXRhKTsKICAvLyBMb2cgdGhlIGVudmVsb3BlIHRvIGFpZCBpbiB0ZXN0aW5nCiAgbG9nKEpTT04uc3RyaW5naWZ5KGVudmVsb3BlKSk7CgogIGF3YWl0IHRyYW5zcG9ydC5zZW5kKGVudmVsb3BlKTsKICBhd2FpdCB0cmFuc3BvcnQuZmx1c2goMjAwMCk7CgogIC8vIERlbGF5IGZvciA1IHNlY29uZHMgc28gdGhhdCBzdGRpbyBjYW4gZmx1c2ggaW4gdGhlIG1haW4gZXZlbnQgbG9vcCBldmVyIHJlc3RhcnRzLgogIC8vIFRoaXMgaXMgbWFpbmx5IGZvciB0aGUgYmVuZWZpdCBvZiBsb2dnaW5nL2RlYnVnZ2luZyBpc3N1ZXMuCiAgc2V0VGltZW91dCgoKSA9PiB7CiAgICBwcm9jZXNzLmV4aXQoMCk7CiAgfSwgNTAwMCk7Cn0KCmxldCBkZWJ1Z2dlclBhdXNlOwoKaWYgKG9wdGlvbnMuY2FwdHVyZVN0YWNrVHJhY2UpIHsKICBsb2coJ0Nvbm5lY3RpbmcgdG8gZGVidWdnZXInKTsKCiAgY29uc3Qgc2Vzc2lvbiA9IG5ldyBTZXNzaW9uKCkgOwogIHNlc3Npb24uY29ubmVjdFRvTWFpblRocmVhZCgpOwoKICBsb2coJ0Nvbm5lY3RlZCB0byBkZWJ1Z2dlcicpOwoKICAvLyBDb2xsZWN0IHNjcmlwdElkIC0+IHVybCBtYXAgc28gd2UgY2FuIGxvb2sgdXAgdGhlIGZpbGVuYW1lcyBsYXRlcgogIGNvbnN0IHNjcmlwdHMgPSBuZXcgTWFwKCk7CgogIHNlc3Npb24ub24oJ0RlYnVnZ2VyLnNjcmlwdFBhcnNlZCcsIGV2ZW50ID0+IHsKICAgIHNjcmlwdHMuc2V0KGV2ZW50LnBhcmFtcy5zY3JpcHRJZCwgZXZlbnQucGFyYW1zLnVybCk7CiAgfSk7CgogIHNlc3Npb24ub24oJ0RlYnVnZ2VyLnBhdXNlZCcsIGV2ZW50ID0+IHsKICAgIGlmIChldmVudC5wYXJhbXMucmVhc29uICE9PSAnb3RoZXInKSB7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICB0cnkgewogICAgICBsb2coJ0RlYnVnZ2VyIHBhdXNlZCcpOwoKICAgICAgLy8gY29weSB0aGUgZnJhbWVzCiAgICAgIGNvbnN0IGNhbGxGcmFtZXMgPSBbLi4uZXZlbnQucGFyYW1zLmNhbGxGcmFtZXNdOwoKICAgICAgY29uc3QgZ2V0TW9kdWxlTmFtZSA9IG9wdGlvbnMuYXBwUm9vdFBhdGggPyBjcmVhdGVHZXRNb2R1bGVGcm9tRmlsZW5hbWUob3B0aW9ucy5hcHBSb290UGF0aCkgOiAoKSA9PiB1bmRlZmluZWQ7CiAgICAgIGNvbnN0IHN0YWNrRnJhbWVzID0gY2FsbEZyYW1lcy5tYXAoZnJhbWUgPT4KICAgICAgICBjYWxsRnJhbWVUb1N0YWNrRnJhbWUoZnJhbWUsIHNjcmlwdHMuZ2V0KGZyYW1lLmxvY2F0aW9uLnNjcmlwdElkKSwgZ2V0TW9kdWxlTmFtZSksCiAgICAgICk7CgogICAgICAvLyBFdmFsdWF0ZSBhIHNjcmlwdCBpbiB0aGUgY3VycmVudGx5IHBhdXNlZCBjb250ZXh0CiAgICAgIHNlc3Npb24ucG9zdCgKICAgICAgICAnUnVudGltZS5ldmFsdWF0ZScsCiAgICAgICAgewogICAgICAgICAgLy8gR3JhYiB0aGUgdHJhY2UgY29udGV4dCBmcm9tIHRoZSBjdXJyZW50IHNjb3BlCiAgICAgICAgICBleHByZXNzaW9uOiAnZ2xvYmFsLl9fU0VOVFJZX0dFVF9TQ09QRVNfXygpOycsCiAgICAgICAgICAvLyBEb24ndCByZS10cmlnZ2VyIHRoZSBkZWJ1Z2dlciBpZiB0aGlzIGNhdXNlcyBhbiBlcnJvcgogICAgICAgICAgc2lsZW50OiB0cnVlLAogICAgICAgICAgLy8gU2VyaWFsaXplIHRoZSByZXN1bHQgdG8ganNvbiBvdGhlcndpc2Ugb25seSBwcmltaXRpdmVzIGFyZSBzdXBwb3J0ZWQKICAgICAgICAgIHJldHVybkJ5VmFsdWU6IHRydWUsCiAgICAgICAgfSwKICAgICAgICAoZXJyLCBwYXJhbSkgPT4gewogICAgICAgICAgaWYgKGVycikgewogICAgICAgICAgICBsb2coYEVycm9yIGV4ZWN1dGluZyBzY3JpcHQ6ICcke2Vyci5tZXNzYWdlfSdgKTsKICAgICAgICAgIH0KCiAgICAgICAgICBjb25zdCBzY29wZXMgPSBwYXJhbSAmJiBwYXJhbS5yZXN1bHQgPyAocGFyYW0ucmVzdWx0LnZhbHVlICkgOiB1bmRlZmluZWQ7CgogICAgICAgICAgc2Vzc2lvbi5wb3N0KCdEZWJ1Z2dlci5yZXN1bWUnKTsKICAgICAgICAgIHNlc3Npb24ucG9zdCgnRGVidWdnZXIuZGlzYWJsZScpOwoKICAgICAgICAgIHNlbmRBbnJFdmVudChzdGFja0ZyYW1lcywgc2NvcGVzKS50aGVuKG51bGwsICgpID0+IHsKICAgICAgICAgICAgbG9nKCdTZW5kaW5nIEFOUiBldmVudCBmYWlsZWQuJyk7CiAgICAgICAgICB9KTsKICAgICAgICB9LAogICAgICApOwogICAgfSBjYXRjaCAoZSkgewogICAgICBzZXNzaW9uLnBvc3QoJ0RlYnVnZ2VyLnJlc3VtZScpOwogICAgICBzZXNzaW9uLnBvc3QoJ0RlYnVnZ2VyLmRpc2FibGUnKTsKICAgICAgdGhyb3cgZTsKICAgIH0KICB9KTsKCiAgZGVidWdnZXJQYXVzZSA9ICgpID0+IHsKICAgIHRyeSB7CiAgICAgIHNlc3Npb24ucG9zdCgnRGVidWdnZXIuZW5hYmxlJywgKCkgPT4gewogICAgICAgIHNlc3Npb24ucG9zdCgnRGVidWdnZXIucGF1c2UnKTsKICAgICAgfSk7CiAgICB9IGNhdGNoIChfKSB7CiAgICAgIC8vCiAgICB9CiAgfTsKfQoKZnVuY3Rpb24gY3JlYXRlSHJUaW1lcigpIHsKICAvLyBUT0RPICh2OCk6IFdlIGNhbiB1c2UgcHJvY2Vzcy5ocnRpbWUuYmlnaW50KCkgYWZ0ZXIgd2UgZHJvcCBub2RlIHY4CiAgbGV0IGxhc3RQb2xsID0gcHJvY2Vzcy5ocnRpbWUoKTsKCiAgcmV0dXJuIHsKICAgIGdldFRpbWVNczogKCkgPT4gewogICAgICBjb25zdCBbc2Vjb25kcywgbmFub1NlY29uZHNdID0gcHJvY2Vzcy5ocnRpbWUobGFzdFBvbGwpOwogICAgICByZXR1cm4gTWF0aC5mbG9vcihzZWNvbmRzICogMWUzICsgbmFub1NlY29uZHMgLyAxZTYpOwogICAgfSwKICAgIHJlc2V0OiAoKSA9PiB7CiAgICAgIGxhc3RQb2xsID0gcHJvY2Vzcy5ocnRpbWUoKTsKICAgIH0sCiAgfTsKfQoKZnVuY3Rpb24gd2F0Y2hkb2dUaW1lb3V0KCkgewogIGxvZygnV2F0Y2hkb2cgdGltZW91dCcpOwoKICBpZiAoZGVidWdnZXJQYXVzZSkgewogICAgbG9nKCdQYXVzaW5nIGRlYnVnZ2VyIHRvIGNhcHR1cmUgc3RhY2sgdHJhY2UnKTsKICAgIGRlYnVnZ2VyUGF1c2UoKTsKICB9IGVsc2UgewogICAgbG9nKCdDYXB0dXJpbmcgZXZlbnQgd2l0aG91dCBhIHN0YWNrIHRyYWNlJyk7CiAgICBzZW5kQW5yRXZlbnQoKS50aGVuKG51bGwsICgpID0+IHsKICAgICAgbG9nKCdTZW5kaW5nIEFOUiBldmVudCBmYWlsZWQgb24gd2F0Y2hkb2cgdGltZW91dC4nKTsKICAgIH0pOwogIH0KfQoKY29uc3QgeyBwb2xsIH0gPSB3YXRjaGRvZ1RpbWVyKGNyZWF0ZUhyVGltZXIsIG9wdGlvbnMucG9sbEludGVydmFsLCBvcHRpb25zLmFuclRocmVzaG9sZCwgd2F0Y2hkb2dUaW1lb3V0KTsKCl9vcHRpb25hbENoYWluKFtwYXJlbnRQb3J0LCAnb3B0aW9uYWxBY2Nlc3MnLCBfNiA9PiBfNi5vbiwgJ2NhbGwnLCBfNyA9PiBfNygnbWVzc2FnZScsIChtc2cpID0+IHsKICBpZiAobXNnLnNlc3Npb24pIHsKICAgIHNlc3Npb24gPSBtYWtlU2Vzc2lvbihtc2cuc2Vzc2lvbik7CiAgfQoKICBwb2xsKCk7Cn0pXSk7\";\n", "// TODO (v8): This import can be removed once we only support Node with global URL\nimport { URL } from 'url';\nimport {\n  convertIntegrationFnToClass,\n  defineIntegration,\n  getCurrentScope,\n  getGlobalScope,\n  getIsolationScope,\n  mergeScopeData,\n} from '@sentry/core';\nimport type {\n  Client,\n  Contexts,\n  Event,\n  EventHint,\n  Integration,\n  IntegrationClass,\n  IntegrationFn,\n  IntegrationFnResult,\n  ScopeData,\n} from '@sentry/types';\nimport { GLOBAL_OBJ, dynamicRequire, logger } from '@sentry/utils';\nimport type { Worker, WorkerOptions } from 'worker_threads';\nimport type { NodeClient } from '../../client';\nimport { NODE_VERSION } from '../../nodeVersion';\nimport type { AnrIntegrationOptions, WorkerStartData } from './common';\nimport { base64WorkerScript } from './worker-script';\n\nconst DEFAULT_INTERVAL = 50;\nconst DEFAULT_HANG_THRESHOLD = 5000;\n\ntype WorkerNodeV14 = Worker & { new (filename: string | URL, options?: WorkerOptions): Worker };\n\ntype WorkerThreads = {\n  Worker: WorkerNodeV14;\n};\n\nfunction log(message: string, ...args: unknown[]): void {\n  logger.log(`[ANR] ${message}`, ...args);\n}\n\nfunction globalWithScopeFetchFn(): typeof GLOBAL_OBJ & { __SENTRY_GET_SCOPES__?: () => ScopeData } {\n  return GLOBAL_OBJ;\n}\n\n/** Fetches merged scope data */\nfunction getScopeData(): ScopeData {\n  const scope = getGlobalScope().getScopeData();\n  mergeScopeData(scope, getIsolationScope().getScopeData());\n  mergeScopeData(scope, getCurrentScope().getScopeData());\n\n  // We remove attachments because they likely won't serialize well as json\n  scope.attachments = [];\n  // We can't serialize event processor functions\n  scope.eventProcessors = [];\n\n  return scope;\n}\n\n/**\n * We need to use dynamicRequire because worker_threads is not available in node < v12 and webpack error will when\n * targeting those versions\n */\nfunction getWorkerThreads(): WorkerThreads {\n  return dynamicRequire(module, 'worker_threads');\n}\n\n/**\n * Gets contexts by calling all event processors. This relies on being called after all integrations are setup\n */\nasync function getContexts(client: NodeClient): Promise<Contexts> {\n  let event: Event | null = { message: 'ANR' };\n  const eventHint: EventHint = {};\n\n  for (const processor of client.getEventProcessors()) {\n    if (event === null) break;\n    event = await processor(event, eventHint);\n  }\n\n  return event?.contexts || {};\n}\n\ninterface InspectorApi {\n  open: (port: number) => void;\n  url: () => string | undefined;\n}\n\nconst INTEGRATION_NAME = 'Anr';\n\ntype AnrInternal = { startWorker: () => void; stopWorker: () => void };\n\nconst _anrIntegration = ((options: Partial<AnrIntegrationOptions> = {}) => {\n  if (NODE_VERSION.major < 16 || (NODE_VERSION.major === 16 && NODE_VERSION.minor < 17)) {\n    throw new Error('ANR detection requires Node 16.17.0 or later');\n  }\n\n  let worker: Promise<() => void> | undefined;\n  let client: NodeClient | undefined;\n\n  // Hookup the scope fetch function to the global object so that it can be called from the worker thread via the\n  // debugger when it pauses\n  const gbl = globalWithScopeFetchFn();\n  gbl.__SENTRY_GET_SCOPES__ = getScopeData;\n\n  return {\n    name: INTEGRATION_NAME,\n    // TODO v8: Remove this\n    setupOnce() {}, // eslint-disable-line @typescript-eslint/no-empty-function\n    startWorker: () => {\n      if (worker) {\n        return;\n      }\n\n      if (client) {\n        worker = _startWorker(client, options);\n      }\n    },\n    stopWorker: () => {\n      if (worker) {\n        // eslint-disable-next-line @typescript-eslint/no-floating-promises\n        worker.then(stop => {\n          stop();\n          worker = undefined;\n        });\n      }\n    },\n    setup(initClient: NodeClient) {\n      client = initClient;\n\n      // setImmediate is used to ensure that all other integrations have had their setup called first.\n      // This allows us to call into all integrations to fetch the full context\n      setImmediate(() => this.startWorker());\n    },\n  } as IntegrationFnResult & AnrInternal;\n}) satisfies IntegrationFn;\n\ntype AnrReturn = (options?: Partial<AnrIntegrationOptions>) => IntegrationFnResult & AnrInternal;\n\nexport const anrIntegration = defineIntegration(_anrIntegration) as AnrReturn;\n\n/**\n * Starts a thread to detect App Not Responding (ANR) events\n *\n * ANR detection requires Node 16.17.0 or later\n *\n * @deprecated Use `anrIntegration()` instead.\n */\n// eslint-disable-next-line deprecation/deprecation\nexport const Anr = convertIntegrationFnToClass(INTEGRATION_NAME, anrIntegration) as IntegrationClass<\n  Integration & { setup: (client: NodeClient) => void }\n> & {\n  new (options?: Partial<AnrIntegrationOptions>): Integration & { setup(client: Client): void };\n};\n\n// eslint-disable-next-line deprecation/deprecation\nexport type Anr = typeof Anr;\n\n/**\n * Starts the ANR worker thread\n */\nasync function _startWorker(\n  client: NodeClient,\n  integrationOptions: Partial<AnrIntegrationOptions>,\n): Promise<() => void> {\n  const dsn = client.getDsn();\n\n  if (!dsn) {\n    return () => {\n      //\n    };\n  }\n\n  const contexts = await getContexts(client);\n\n  // These will not be accurate if sent later from the worker thread\n  delete contexts.app?.app_memory;\n  delete contexts.device?.free_memory;\n\n  const initOptions = client.getOptions();\n\n  const sdkMetadata = client.getSdkMetadata() || {};\n  if (sdkMetadata.sdk) {\n    sdkMetadata.sdk.integrations = initOptions.integrations.map(i => i.name);\n  }\n\n  const options: WorkerStartData = {\n    debug: logger.isEnabled(),\n    dsn,\n    environment: initOptions.environment || 'production',\n    release: initOptions.release,\n    dist: initOptions.dist,\n    sdkMetadata,\n    appRootPath: integrationOptions.appRootPath,\n    pollInterval: integrationOptions.pollInterval || DEFAULT_INTERVAL,\n    anrThreshold: integrationOptions.anrThreshold || DEFAULT_HANG_THRESHOLD,\n    captureStackTrace: !!integrationOptions.captureStackTrace,\n    staticTags: integrationOptions.staticTags || {},\n    contexts,\n  };\n\n  if (options.captureStackTrace) {\n    // eslint-disable-next-line @typescript-eslint/no-var-requires\n    const inspector: InspectorApi = require('inspector');\n    if (!inspector.url()) {\n      inspector.open(0);\n    }\n  }\n\n  const { Worker } = getWorkerThreads();\n\n  const worker = new Worker(new URL(`data:application/javascript;base64,${base64WorkerScript}`), {\n    workerData: options,\n  });\n\n  process.on('exit', () => {\n    // eslint-disable-next-line @typescript-eslint/no-floating-promises\n    worker.terminate();\n  });\n\n  const timer = setInterval(() => {\n    try {\n      const currentSession = getCurrentScope().getSession();\n      // We need to copy the session object and remove the toJSON method so it can be sent to the worker\n      // serialized without making it a SerializedSession\n      const session = currentSession ? { ...currentSession, toJSON: undefined } : undefined;\n      // message the worker to tell it the main event loop is still running\n      worker.postMessage({ session });\n    } catch (_) {\n      //\n    }\n  }, options.pollInterval);\n  // Timer should not block exit\n  timer.unref();\n\n  worker.on('message', (msg: string) => {\n    if (msg === 'session-ended') {\n      log('ANR event sent from ANR worker. Clearing session in this thread.');\n      getCurrentScope().setSession(undefined);\n    }\n  });\n\n  worker.once('error', (err: Error) => {\n    clearInterval(timer);\n    log('ANR worker error', err);\n  });\n\n  worker.once('exit', (code: number) => {\n    clearInterval(timer);\n    log('ANR worker exit', code);\n  });\n\n  // Ensure this thread can't block app exit\n  worker.unref();\n\n  return () => {\n    // eslint-disable-next-line @typescript-eslint/no-floating-promises\n    worker.terminate();\n    clearInterval(timer);\n  };\n}\n", "import { getClient } from '@sentry/core';\nimport { Anr } from '.';\nimport type { NodeClient } from '../../client';\n\n// TODO (v8): Remove this entire file and the `enableAnrDetection` export\n\ninterface LegacyOptions {\n  entryScript: string;\n  pollInterval: number;\n  anrThreshold: number;\n  captureStackTrace: boolean;\n  debug: boolean;\n}\n\n/**\n * @deprecated Use the `Anr` integration instead.\n *\n * ```ts\n * import * as Sentry from '@sentry/node';\n *\n * Sentry.init({\n *   dsn: '__DSN__',\n *   integrations: [new Sentry.Integrations.Anr({ captureStackTrace: true })],\n * });\n * ```\n */\nexport function enableAnrDetection(options: Partial<LegacyOptions>): Promise<void> {\n  const client = getClient() as NodeClient;\n  // eslint-disable-next-line deprecation/deprecation\n  const integration = new Anr(options);\n  integration.setup(client);\n  return Promise.resolve();\n}\n", "import { SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, captureException, getClient, getCurrentScope } from '@sentry/core';\nimport { isThenable, normalize } from '@sentry/utils';\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: string;\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 clientOptions = getClient()?.getOptions();\n    // eslint-disable-next-line deprecation/deprecation\n    const sentryTransaction = getCurrentScope().getTransaction();\n\n    if (sentryTransaction) {\n      sentryTransaction.updateName(`trpc/${path}`);\n      sentryTransaction.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, '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      // TODO: Can we rewrite this to an attribute? Or set this on the scope?\n      // eslint-disable-next-line deprecation/deprecation\n      sentryTransaction.setContext('trpc', trpcContext);\n    }\n\n    function captureIfError(nextResult: { ok: false; error?: Error } | { ok: true }): void {\n      if (!nextResult.ok) {\n        captureException(nextResult.error, { mechanism: { handled: false, data: { function: 'trpcMiddleware' } } });\n      }\n    }\n\n    let maybePromiseResult;\n    try {\n      maybePromiseResult = next();\n    } catch (e) {\n      captureException(e, { mechanism: { handled: false, data: { function: 'trpcMiddleware' } } });\n      throw e;\n    }\n\n    if (isThenable(maybePromiseResult)) {\n      // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n      Promise.resolve(maybePromiseResult).then(\n        nextResult => {\n          captureIfError(nextResult as any);\n        },\n        e => {\n          captureException(e, { mechanism: { handled: false, data: { function: 'trpcMiddleware' } } });\n        },\n      );\n    } else {\n      captureIfError(maybePromiseResult as any);\n    }\n\n    // We return the original promise just to be safe.\n    return maybePromiseResult;\n  };\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';\nimport type { AddRequestDataToEventOptions } from '@sentry/utils';\nimport { addRequestDataToEvent, extractRequestData as _extractRequestData } from '@sentry/utils';\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", "import type * as http from 'http';\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {\n  SEMANTIC_ATTRIBUTE_SENTRY_SOURCE,\n  captureException,\n  continueTrace,\n  flush,\n  getActiveSpan,\n  getClient,\n  getCurrentScope,\n  hasTracingEnabled,\n  runWithAsyncContext,\n  setHttpStatus,\n  startTransaction,\n  withScope,\n} from '@sentry/core';\nimport type { Span } from '@sentry/types';\nimport type { AddRequestDataToEventOptions } from '@sentry/utils';\nimport {\n  addRequestDataToTransaction,\n  dropUndefinedKeys,\n  extractPathForTransaction,\n  extractRequestData,\n  isString,\n  logger,\n} from '@sentry/utils';\n\nimport type { NodeClient } from './client';\nimport { DEBUG_BUILD } from './debug-build';\n// TODO (v8 / XXX) Remove this import\nimport type { ParseRequestOptions } from './requestDataDeprecated';\nimport { isAutoSessionTrackingEnabled } from './sdk';\nimport { trpcMiddleware as newTrpcMiddleware } from './trpc';\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 options = 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    if (!hasTracingEnabled(options)) {\n      return next();\n    }\n\n    const [name, source] = extractPathForTransaction(req, { path: true, method: true });\n    const transaction = continueTrace({ sentryTrace, baggage }, ctx =>\n      // TODO: Refactor this to use `startSpan()`\n      // eslint-disable-next-line deprecation/deprecation\n      startTransaction(\n        {\n          name,\n          op: 'http.server',\n          origin: 'auto.http.node.tracingHandler',\n          ...ctx,\n          data: {\n            [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: source,\n          },\n          metadata: {\n            // eslint-disable-next-line deprecation/deprecation\n            ...ctx.metadata,\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          },\n        },\n        // extra context passed to the tracesSampler\n        { request: extractRequestData(req) },\n      ),\n    );\n\n    // We put the transaction on the scope so users can attach children to it\n    // eslint-disable-next-line deprecation/deprecation\n    getCurrentScope().setSpan(transaction);\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        // eslint-disable-next-line deprecation/deprecation\n        addRequestDataToTransaction(transaction, req);\n        setHttpStatus(transaction, res.statusCode);\n        transaction.end();\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 client = 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 = getCurrentScope();\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 scope = getCurrentScope();\n      scope.setSDKProcessingMetadata({\n        request: req,\n        // TODO (v8): Stop passing this\n        requestDataOptionsFromExpressHandler: requestDataOptions,\n      });\n\n      const client = getClient<NodeClient>();\n      if (isAutoSessionTrackingEnabled(client)) {\n        // Set `status` of `RequestSession` to Ok, at the beginning of the request\n        scope.setRequestSession({ status: 'ok' });\n      }\n\n      res.once('finish', () => {\n        const client = 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 && !getActiveSpan()) {\n          // eslint-disable-next-line deprecation/deprecation\n          _scope.setSpan(transaction);\n        }\n\n        const client = 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        const eventId = captureException(error, { mechanism: { type: 'middleware', handled: false } });\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n        (res as any).sentry = eventId;\n        next(error);\n      });\n\n      return;\n    }\n\n    next(error);\n  };\n}\n\n/**\n * 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 *\n * @deprecated Please use the top level export instead:\n * ```\n * // OLD\n * import * as Sentry from '@sentry/node';\n * Sentry.Handlers.trpcMiddleware();\n *\n * // NEW\n * import * as Sentry from '@sentry/node';\n * Sentry.trpcMiddleware();\n * ```\n */\n// eslint-disable-next-line deprecation/deprecation\nexport const trpcMiddleware = newTrpcMiddleware;\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", "import {\n  SDK_VERSION,\n  captureException,\n  continueTrace,\n  convertIntegrationFnToClass,\n  defineIntegration,\n  getActiveTransaction,\n  getCurrentScope,\n  getDynamicSamplingContextFromSpan,\n  setHttpStatus,\n  spanToTraceHeader,\n  startTransaction,\n} from '@sentry/core';\nimport type { IntegrationFn } from '@sentry/types';\nimport { dynamicSamplingContextToSentryBaggageHeader, fill } from '@sentry/utils';\n\nimport type { Boom, RequestEvent, ResponseObject, Server } from './types';\n\nfunction isResponseObject(response: ResponseObject | Boom): response is ResponseObject {\n  return response && (response as ResponseObject).statusCode !== undefined;\n}\n\nfunction isErrorEvent(event: RequestEvent): event is RequestEvent {\n  return event && (event as RequestEvent).error !== undefined;\n}\n\nfunction sendErrorToSentry(errorData: object): void {\n  captureException(errorData, {\n    mechanism: {\n      type: 'hapi',\n      handled: false,\n      data: {\n        function: 'hapiErrorPlugin',\n      },\n    },\n  });\n}\n\nexport const hapiErrorPlugin = {\n  name: 'SentryHapiErrorPlugin',\n  version: SDK_VERSION,\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  register: async function (serverArg: Record<any, any>) {\n    const server = serverArg as unknown as Server;\n\n    server.events.on('request', (request, event) => {\n      // eslint-disable-next-line deprecation/deprecation\n      const transaction = getActiveTransaction();\n\n      if (isErrorEvent(event)) {\n        sendErrorToSentry(event.error);\n      }\n\n      if (transaction) {\n        transaction.setStatus('internal_error');\n        transaction.end();\n      }\n    });\n  },\n};\n\nexport const hapiTracingPlugin = {\n  name: 'SentryHapiTracingPlugin',\n  version: SDK_VERSION,\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  register: async function (serverArg: Record<any, any>) {\n    const server = serverArg as unknown as Server;\n\n    server.ext('onPreHandler', (request, h) => {\n      const transaction = continueTrace(\n        {\n          sentryTrace: request.headers['sentry-trace'] || undefined,\n          baggage: request.headers['baggage'] || undefined,\n        },\n        transactionContext => {\n          // eslint-disable-next-line deprecation/deprecation\n          return startTransaction({\n            ...transactionContext,\n            op: 'hapi.request',\n            name: request.route.path,\n            description: `${request.route.method} ${request.path}`,\n          });\n        },\n      );\n\n      // eslint-disable-next-line deprecation/deprecation\n      getCurrentScope().setSpan(transaction);\n\n      return h.continue;\n    });\n\n    server.ext('onPreResponse', (request, h) => {\n      // eslint-disable-next-line deprecation/deprecation\n      const transaction = getActiveTransaction();\n\n      if (request.response && isResponseObject(request.response) && transaction) {\n        const response = request.response as ResponseObject;\n        response.header('sentry-trace', spanToTraceHeader(transaction));\n\n        const dynamicSamplingContext = dynamicSamplingContextToSentryBaggageHeader(\n          getDynamicSamplingContextFromSpan(transaction),\n        );\n\n        if (dynamicSamplingContext) {\n          response.header('baggage', dynamicSamplingContext);\n        }\n      }\n\n      return h.continue;\n    });\n\n    server.ext('onPostHandler', (request, h) => {\n      // eslint-disable-next-line deprecation/deprecation\n      const transaction = getActiveTransaction();\n\n      if (transaction) {\n        if (request.response && isResponseObject(request.response)) {\n          setHttpStatus(transaction, request.response.statusCode);\n        }\n\n        transaction.end();\n      }\n\n      return h.continue;\n    });\n  },\n};\n\nexport type HapiOptions = {\n  /** Hapi server instance */\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  server?: Record<any, any>;\n};\n\nconst INTEGRATION_NAME = 'Hapi';\n\nconst _hapiIntegration = ((options: HapiOptions = {}) => {\n  const server = options.server as undefined | Server;\n\n  return {\n    name: INTEGRATION_NAME,\n    setupOnce() {\n      if (!server) {\n        return;\n      }\n\n      fill(server, 'start', (originalStart: () => void) => {\n        return async function (this: Server) {\n          await this.register(hapiTracingPlugin);\n          await this.register(hapiErrorPlugin);\n          const result = originalStart.apply(this);\n          return result;\n        };\n      });\n    },\n  };\n}) satisfies IntegrationFn;\n\nexport const hapiIntegration = defineIntegration(_hapiIntegration);\n\n/**\n * Hapi Framework Integration.\n * @deprecated Use `hapiIntegration()` instead.\n */\n// eslint-disable-next-line deprecation/deprecation\nexport const Hapi = convertIntegrationFnToClass(INTEGRATION_NAME, hapiIntegration);\n\n// eslint-disable-next-line deprecation/deprecation\nexport type Hapi = typeof Hapi;\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", "import {\n  captureException,\n  captureMessage,\n  convertIntegrationFnToClass,\n  defineIntegration,\n  getClient,\n  withScope,\n} from '@sentry/core';\nimport type { CaptureContext, Client, Integration, IntegrationClass, IntegrationFn } from '@sentry/types';\nimport {\n  CONSOLE_LEVELS,\n  GLOBAL_OBJ,\n  addConsoleInstrumentationHandler,\n  addExceptionMechanism,\n  safeJoin,\n  severityLevelFromString,\n} from '@sentry/utils';\n\ninterface CaptureConsoleOptions {\n  levels?: string[];\n}\n\nconst INTEGRATION_NAME = 'CaptureConsole';\n\nconst _captureConsoleIntegration = ((options: CaptureConsoleOptions = {}) => {\n  const levels = options.levels || CONSOLE_LEVELS;\n\n  return {\n    name: INTEGRATION_NAME,\n    // TODO v8: Remove this\n    setupOnce() {}, // eslint-disable-line @typescript-eslint/no-empty-function\n    setup(client) {\n      if (!('console' in GLOBAL_OBJ)) {\n        return;\n      }\n\n      addConsoleInstrumentationHandler(({ args, level }) => {\n        if (getClient() !== client || !levels.includes(level)) {\n          return;\n        }\n\n        consoleHandler(args, level);\n      });\n    },\n  };\n}) satisfies IntegrationFn;\n\nexport const captureConsoleIntegration = defineIntegration(_captureConsoleIntegration);\n\n/**\n * Send Console API calls as Sentry Events.\n * @deprecated Use `captureConsoleIntegration()` instead.\n */\n// eslint-disable-next-line deprecation/deprecation\nexport const CaptureConsole = convertIntegrationFnToClass(\n  INTEGRATION_NAME,\n  captureConsoleIntegration,\n) as IntegrationClass<Integration & { setup: (client: Client) => void }> & {\n  new (options?: { levels?: string[] }): Integration;\n};\n\nfunction consoleHandler(args: unknown[], level: string): void {\n  const captureContext: CaptureContext = {\n    level: severityLevelFromString(level),\n    extra: {\n      arguments: args,\n    },\n  };\n\n  withScope(scope => {\n    scope.addEventProcessor(event => {\n      event.logger = 'console';\n\n      addExceptionMechanism(event, {\n        handled: false,\n        type: 'console',\n      });\n\n      return event;\n    });\n\n    if (level === 'assert' && args[0] === false) {\n      const message = `Assertion failed: ${safeJoin(args.slice(1), ' ') || 'console.assert'}`;\n      scope.setExtra('arguments', args.slice(1));\n      captureMessage(message, captureContext);\n      return;\n    }\n\n    const error = args.find(arg => arg instanceof Error);\n    if (level === 'error' && error) {\n      captureException(error, captureContext);\n      return;\n    }\n\n    const message = safeJoin(args, ' ');\n    captureMessage(message, captureContext);\n  });\n}\n", "import { convertIntegrationFnToClass, defineIntegration } from '@sentry/core';\nimport type { Client, Event, EventHint, Integration, IntegrationClass, IntegrationFn } from '@sentry/types';\nimport { consoleSandbox } from '@sentry/utils';\n\nconst INTEGRATION_NAME = 'Debug';\n\ninterface DebugOptions {\n  /** Controls whether console output created by this integration should be stringified. Default: `false` */\n  stringify?: boolean;\n  /** Controls whether a debugger should be launched before an event is sent. Default: `false` */\n  debugger?: boolean;\n}\n\nconst _debugIntegration = ((options: DebugOptions = {}) => {\n  const _options = {\n    debugger: false,\n    stringify: false,\n    ...options,\n  };\n\n  return {\n    name: INTEGRATION_NAME,\n    // TODO v8: Remove this\n    setupOnce() {}, // eslint-disable-line @typescript-eslint/no-empty-function\n    setup(client) {\n      if (!client.on) {\n        return;\n      }\n\n      client.on('beforeSendEvent', (event: Event, hint?: EventHint) => {\n        if (_options.debugger) {\n          // eslint-disable-next-line no-debugger\n          debugger;\n        }\n\n        /* eslint-disable no-console */\n        consoleSandbox(() => {\n          if (_options.stringify) {\n            console.log(JSON.stringify(event, null, 2));\n            if (hint && Object.keys(hint).length) {\n              console.log(JSON.stringify(hint, null, 2));\n            }\n          } else {\n            console.log(event);\n            if (hint && Object.keys(hint).length) {\n              console.log(hint);\n            }\n          }\n        });\n        /* eslint-enable no-console */\n      });\n    },\n  };\n}) satisfies IntegrationFn;\n\nexport const debugIntegration = defineIntegration(_debugIntegration);\n\n/**\n * Integration to debug sent Sentry events.\n * This integration should not be used in production.\n *\n * @deprecated Use `debugIntegration()` instead.\n */\n// eslint-disable-next-line deprecation/deprecation\nexport const Debug = convertIntegrationFnToClass(INTEGRATION_NAME, debugIntegration) as IntegrationClass<\n  Integration & { setup: (client: Client) => void }\n> & {\n  new (options?: {\n    stringify?: boolean;\n    debugger?: boolean;\n  }): Integration;\n};\n", "declare const __DEBUG_BUILD__: boolean;\n\n/**\n * This serves as a build time flag that will be true by default, but false in non-debug builds or if users replace `__SENTRY_DEBUG__` in their generated code.\n *\n * ATTENTION: This constant must never cross package boundaries (i.e. be exported) to guarantee that it can be used for tree shaking.\n */\nexport const DEBUG_BUILD = __DEBUG_BUILD__;\n", "import { convertIntegrationFnToClass, defineIntegration } from '@sentry/core';\nimport type { Event, Exception, Integration, IntegrationClass, IntegrationFn, StackFrame } from '@sentry/types';\nimport { logger } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from './debug-build';\n\nconst INTEGRATION_NAME = 'Dedupe';\n\nconst _dedupeIntegration = (() => {\n  let previousEvent: Event | undefined;\n\n  return {\n    name: INTEGRATION_NAME,\n    // TODO v8: Remove this\n    setupOnce() {}, // eslint-disable-line @typescript-eslint/no-empty-function\n    processEvent(currentEvent) {\n      // We want to ignore any non-error type events, e.g. transactions or replays\n      // These should never be deduped, and also not be compared against as _previousEvent.\n      if (currentEvent.type) {\n        return currentEvent;\n      }\n\n      // Juuust in case something goes wrong\n      try {\n        if (_shouldDropEvent(currentEvent, previousEvent)) {\n          DEBUG_BUILD && logger.warn('Event dropped due to being a duplicate of previously captured event.');\n          return null;\n        }\n      } catch (_oO) {} // eslint-disable-line no-empty\n\n      return (previousEvent = currentEvent);\n    },\n  };\n}) satisfies IntegrationFn;\n\nexport const dedupeIntegration = defineIntegration(_dedupeIntegration);\n\n/**\n * Deduplication filter.\n * @deprecated Use `dedupeIntegration()` instead.\n */\n// eslint-disable-next-line deprecation/deprecation\nexport const Dedupe = convertIntegrationFnToClass(INTEGRATION_NAME, dedupeIntegration) as IntegrationClass<\n  Integration & { processEvent: (event: Event) => Event }\n>;\n\n/** only exported for tests. */\nexport function _shouldDropEvent(currentEvent: Event, previousEvent?: Event): boolean {\n  if (!previousEvent) {\n    return false;\n  }\n\n  if (_isSameMessageEvent(currentEvent, previousEvent)) {\n    return true;\n  }\n\n  if (_isSameExceptionEvent(currentEvent, previousEvent)) {\n    return true;\n  }\n\n  return false;\n}\n\nfunction _isSameMessageEvent(currentEvent: Event, previousEvent: Event): boolean {\n  const currentMessage = currentEvent.message;\n  const previousMessage = previousEvent.message;\n\n  // If neither event has a message property, they were both exceptions, so bail out\n  if (!currentMessage && !previousMessage) {\n    return false;\n  }\n\n  // If only one event has a stacktrace, but not the other one, they are not the same\n  if ((currentMessage && !previousMessage) || (!currentMessage && previousMessage)) {\n    return false;\n  }\n\n  if (currentMessage !== previousMessage) {\n    return false;\n  }\n\n  if (!_isSameFingerprint(currentEvent, previousEvent)) {\n    return false;\n  }\n\n  if (!_isSameStacktrace(currentEvent, previousEvent)) {\n    return false;\n  }\n\n  return true;\n}\n\nfunction _isSameExceptionEvent(currentEvent: Event, previousEvent: Event): boolean {\n  const previousException = _getExceptionFromEvent(previousEvent);\n  const currentException = _getExceptionFromEvent(currentEvent);\n\n  if (!previousException || !currentException) {\n    return false;\n  }\n\n  if (previousException.type !== currentException.type || previousException.value !== currentException.value) {\n    return false;\n  }\n\n  if (!_isSameFingerprint(currentEvent, previousEvent)) {\n    return false;\n  }\n\n  if (!_isSameStacktrace(currentEvent, previousEvent)) {\n    return false;\n  }\n\n  return true;\n}\n\nfunction _isSameStacktrace(currentEvent: Event, previousEvent: Event): boolean {\n  let currentFrames = _getFramesFromEvent(currentEvent);\n  let previousFrames = _getFramesFromEvent(previousEvent);\n\n  // If neither event has a stacktrace, they are assumed to be the same\n  if (!currentFrames && !previousFrames) {\n    return true;\n  }\n\n  // If only one event has a stacktrace, but not the other one, they are not the same\n  if ((currentFrames && !previousFrames) || (!currentFrames && previousFrames)) {\n    return false;\n  }\n\n  currentFrames = currentFrames as StackFrame[];\n  previousFrames = previousFrames as StackFrame[];\n\n  // If number of frames differ, they are not the same\n  if (previousFrames.length !== currentFrames.length) {\n    return false;\n  }\n\n  // Otherwise, compare the two\n  for (let i = 0; i < previousFrames.length; i++) {\n    const frameA = previousFrames[i];\n    const frameB = currentFrames[i];\n\n    if (\n      frameA.filename !== frameB.filename ||\n      frameA.lineno !== frameB.lineno ||\n      frameA.colno !== frameB.colno ||\n      frameA.function !== frameB.function\n    ) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\nfunction _isSameFingerprint(currentEvent: Event, previousEvent: Event): boolean {\n  let currentFingerprint = currentEvent.fingerprint;\n  let previousFingerprint = previousEvent.fingerprint;\n\n  // If neither event has a fingerprint, they are assumed to be the same\n  if (!currentFingerprint && !previousFingerprint) {\n    return true;\n  }\n\n  // If only one event has a fingerprint, but not the other one, they are not the same\n  if ((currentFingerprint && !previousFingerprint) || (!currentFingerprint && previousFingerprint)) {\n    return false;\n  }\n\n  currentFingerprint = currentFingerprint as string[];\n  previousFingerprint = previousFingerprint as string[];\n\n  // Otherwise, compare the two\n  try {\n    return !!(currentFingerprint.join('') === previousFingerprint.join(''));\n  } catch (_oO) {\n    return false;\n  }\n}\n\nfunction _getExceptionFromEvent(event: Event): Exception | undefined {\n  return event.exception && event.exception.values && event.exception.values[0];\n}\n\nfunction _getFramesFromEvent(event: Event): StackFrame[] | undefined {\n  const exception = event.exception;\n\n  if (exception) {\n    try {\n      // @ts-expect-error Object could be undefined\n      return exception.values[0].stacktrace.frames;\n    } catch (_oO) {\n      return undefined;\n    }\n  }\n  return undefined;\n}\n", "import { convertIntegrationFnToClass, defineIntegration } from '@sentry/core';\nimport type {\n  Contexts,\n  Event,\n  EventHint,\n  ExtendedError,\n  Integration,\n  IntegrationClass,\n  IntegrationFn,\n} from '@sentry/types';\nimport { addNonEnumerableProperty, isError, isPlainObject, logger, normalize } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from './debug-build';\n\nconst INTEGRATION_NAME = 'ExtraErrorData';\n\ninterface ExtraErrorDataOptions {\n  /**\n   * The object depth up to which to capture data on error objects.\n   */\n  depth: number;\n\n  /**\n   * Whether to capture error causes.\n   *\n   * More information: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/cause\n   */\n  captureErrorCause: boolean;\n}\n\nconst _extraErrorDataIntegration = ((options: Partial<ExtraErrorDataOptions> = {}) => {\n  const depth = options.depth || 3;\n\n  // TODO(v8): Flip the default for this option to true\n  const captureErrorCause = options.captureErrorCause || false;\n\n  return {\n    name: INTEGRATION_NAME,\n    // TODO v8: Remove this\n    setupOnce() {}, // eslint-disable-line @typescript-eslint/no-empty-function\n    processEvent(event, hint) {\n      return _enhanceEventWithErrorData(event, hint, depth, captureErrorCause);\n    },\n  };\n}) satisfies IntegrationFn;\n\nexport const extraErrorDataIntegration = defineIntegration(_extraErrorDataIntegration);\n\n/**\n * Extract additional data for from original exceptions.\n * @deprecated Use `extraErrorDataIntegration()` instead.\n */\n// eslint-disable-next-line deprecation/deprecation\nexport const ExtraErrorData = convertIntegrationFnToClass(\n  INTEGRATION_NAME,\n  extraErrorDataIntegration,\n) as IntegrationClass<Integration & { processEvent: (event: Event, hint: EventHint) => Event }> & {\n  new (\n    options?: Partial<{\n      depth: number;\n      captureErrorCause: boolean;\n    }>,\n  ): Integration;\n};\n\nfunction _enhanceEventWithErrorData(\n  event: Event,\n  hint: EventHint = {},\n  depth: number,\n  captureErrorCause: boolean,\n): Event {\n  if (!hint.originalException || !isError(hint.originalException)) {\n    return event;\n  }\n  const exceptionName = (hint.originalException as ExtendedError).name || hint.originalException.constructor.name;\n\n  const errorData = _extractErrorData(hint.originalException as ExtendedError, captureErrorCause);\n\n  if (errorData) {\n    const contexts: Contexts = {\n      ...event.contexts,\n    };\n\n    const normalizedErrorData = normalize(errorData, depth);\n\n    if (isPlainObject(normalizedErrorData)) {\n      // We mark the error data as \"already normalized\" here, because we don't want other normalization procedures to\n      // potentially truncate the data we just already normalized, with a certain depth setting.\n      addNonEnumerableProperty(normalizedErrorData, '__sentry_skip_normalization__', true);\n      contexts[exceptionName] = normalizedErrorData;\n    }\n\n    return {\n      ...event,\n      contexts,\n    };\n  }\n\n  return event;\n}\n\n/**\n * Extract extra information from the Error object\n */\nfunction _extractErrorData(error: ExtendedError, captureErrorCause: boolean): Record<string, unknown> | null {\n  // We are trying to enhance already existing event, so no harm done if it won't succeed\n  try {\n    const nativeKeys = [\n      'name',\n      'message',\n      'stack',\n      'line',\n      'column',\n      'fileName',\n      'lineNumber',\n      'columnNumber',\n      'toJSON',\n    ];\n\n    const extraErrorInfo: Record<string, unknown> = {};\n\n    // We want only enumerable properties, thus `getOwnPropertyNames` is redundant here, as we filter keys anyway.\n    for (const key of Object.keys(error)) {\n      if (nativeKeys.indexOf(key) !== -1) {\n        continue;\n      }\n      const value = error[key];\n      extraErrorInfo[key] = isError(value) ? value.toString() : value;\n    }\n\n    // Error.cause is a standard property that is non enumerable, we therefore need to access it separately.\n    // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/cause\n    if (captureErrorCause && error.cause !== undefined) {\n      extraErrorInfo.cause = isError(error.cause) ? error.cause.toString() : error.cause;\n    }\n\n    // Check if someone attached `toJSON` method to grab even more properties (eg. axios is doing that)\n    if (typeof error.toJSON === 'function') {\n      const serializedError = error.toJSON() as Record<string, unknown>;\n\n      for (const key of Object.keys(serializedError)) {\n        const value = serializedError[key];\n        extraErrorInfo[key] = isError(value) ? value.toString() : value;\n      }\n    }\n\n    return extraErrorInfo;\n  } catch (oO) {\n    DEBUG_BUILD && logger.error('Unable to extract extra data from the Error object:', oO);\n  }\n\n  return null;\n}\n", "/*!\n    localForage -- Offline Storage, Improved\n    Version 1.10.0\n    https://localforage.github.io/localForage\n    (c) 2013-2017 Mozilla, Apache License 2.0\n*/\n(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.localforage = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw (f.code=\"MODULE_NOT_FOUND\", f)}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(_dereq_,module,exports){\n(function (global){\n'use strict';\nvar Mutation = global.MutationObserver || global.WebKitMutationObserver;\n\nvar scheduleDrain;\n\n{\n  if (Mutation) {\n    var called = 0;\n    var observer = new Mutation(nextTick);\n    var element = global.document.createTextNode('');\n    observer.observe(element, {\n      characterData: true\n    });\n    scheduleDrain = function () {\n      element.data = (called = ++called % 2);\n    };\n  } else if (!global.setImmediate && typeof global.MessageChannel !== 'undefined') {\n    var channel = new global.MessageChannel();\n    channel.port1.onmessage = nextTick;\n    scheduleDrain = function () {\n      channel.port2.postMessage(0);\n    };\n  } else if ('document' in global && 'onreadystatechange' in global.document.createElement('script')) {\n    scheduleDrain = function () {\n\n      // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted\n      // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.\n      var scriptEl = global.document.createElement('script');\n      scriptEl.onreadystatechange = function () {\n        nextTick();\n\n        scriptEl.onreadystatechange = null;\n        scriptEl.parentNode.removeChild(scriptEl);\n        scriptEl = null;\n      };\n      global.document.documentElement.appendChild(scriptEl);\n    };\n  } else {\n    scheduleDrain = function () {\n      setTimeout(nextTick, 0);\n    };\n  }\n}\n\nvar draining;\nvar queue = [];\n//named nextTick for less confusing stack traces\nfunction nextTick() {\n  draining = true;\n  var i, oldQueue;\n  var len = queue.length;\n  while (len) {\n    oldQueue = queue;\n    queue = [];\n    i = -1;\n    while (++i < len) {\n      oldQueue[i]();\n    }\n    len = queue.length;\n  }\n  draining = false;\n}\n\nmodule.exports = immediate;\nfunction immediate(task) {\n  if (queue.push(task) === 1 && !draining) {\n    scheduleDrain();\n  }\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{}],2:[function(_dereq_,module,exports){\n'use strict';\nvar immediate = _dereq_(1);\n\n/* istanbul ignore next */\nfunction INTERNAL() {}\n\nvar handlers = {};\n\nvar REJECTED = ['REJECTED'];\nvar FULFILLED = ['FULFILLED'];\nvar PENDING = ['PENDING'];\n\nmodule.exports = Promise;\n\nfunction Promise(resolver) {\n  if (typeof resolver !== 'function') {\n    throw new TypeError('resolver must be a function');\n  }\n  this.state = PENDING;\n  this.queue = [];\n  this.outcome = void 0;\n  if (resolver !== INTERNAL) {\n    safelyResolveThenable(this, resolver);\n  }\n}\n\nPromise.prototype[\"catch\"] = function (onRejected) {\n  return this.then(null, onRejected);\n};\nPromise.prototype.then = function (onFulfilled, onRejected) {\n  if (typeof onFulfilled !== 'function' && this.state === FULFILLED ||\n    typeof onRejected !== 'function' && this.state === REJECTED) {\n    return this;\n  }\n  var promise = new this.constructor(INTERNAL);\n  if (this.state !== PENDING) {\n    var resolver = this.state === FULFILLED ? onFulfilled : onRejected;\n    unwrap(promise, resolver, this.outcome);\n  } else {\n    this.queue.push(new QueueItem(promise, onFulfilled, onRejected));\n  }\n\n  return promise;\n};\nfunction QueueItem(promise, onFulfilled, onRejected) {\n  this.promise = promise;\n  if (typeof onFulfilled === 'function') {\n    this.onFulfilled = onFulfilled;\n    this.callFulfilled = this.otherCallFulfilled;\n  }\n  if (typeof onRejected === 'function') {\n    this.onRejected = onRejected;\n    this.callRejected = this.otherCallRejected;\n  }\n}\nQueueItem.prototype.callFulfilled = function (value) {\n  handlers.resolve(this.promise, value);\n};\nQueueItem.prototype.otherCallFulfilled = function (value) {\n  unwrap(this.promise, this.onFulfilled, value);\n};\nQueueItem.prototype.callRejected = function (value) {\n  handlers.reject(this.promise, value);\n};\nQueueItem.prototype.otherCallRejected = function (value) {\n  unwrap(this.promise, this.onRejected, value);\n};\n\nfunction unwrap(promise, func, value) {\n  immediate(function () {\n    var returnValue;\n    try {\n      returnValue = func(value);\n    } catch (e) {\n      return handlers.reject(promise, e);\n    }\n    if (returnValue === promise) {\n      handlers.reject(promise, new TypeError('Cannot resolve promise with itself'));\n    } else {\n      handlers.resolve(promise, returnValue);\n    }\n  });\n}\n\nhandlers.resolve = function (self, value) {\n  var result = tryCatch(getThen, value);\n  if (result.status === 'error') {\n    return handlers.reject(self, result.value);\n  }\n  var thenable = result.value;\n\n  if (thenable) {\n    safelyResolveThenable(self, thenable);\n  } else {\n    self.state = FULFILLED;\n    self.outcome = value;\n    var i = -1;\n    var len = self.queue.length;\n    while (++i < len) {\n      self.queue[i].callFulfilled(value);\n    }\n  }\n  return self;\n};\nhandlers.reject = function (self, error) {\n  self.state = REJECTED;\n  self.outcome = error;\n  var i = -1;\n  var len = self.queue.length;\n  while (++i < len) {\n    self.queue[i].callRejected(error);\n  }\n  return self;\n};\n\nfunction getThen(obj) {\n  // Make sure we only access the accessor once as required by the spec\n  var then = obj && obj.then;\n  if (obj && (typeof obj === 'object' || typeof obj === 'function') && typeof then === 'function') {\n    return function appyThen() {\n      then.apply(obj, arguments);\n    };\n  }\n}\n\nfunction safelyResolveThenable(self, thenable) {\n  // Either fulfill, reject or reject with error\n  var called = false;\n  function onError(value) {\n    if (called) {\n      return;\n    }\n    called = true;\n    handlers.reject(self, value);\n  }\n\n  function onSuccess(value) {\n    if (called) {\n      return;\n    }\n    called = true;\n    handlers.resolve(self, value);\n  }\n\n  function tryToUnwrap() {\n    thenable(onSuccess, onError);\n  }\n\n  var result = tryCatch(tryToUnwrap);\n  if (result.status === 'error') {\n    onError(result.value);\n  }\n}\n\nfunction tryCatch(func, value) {\n  var out = {};\n  try {\n    out.value = func(value);\n    out.status = 'success';\n  } catch (e) {\n    out.status = 'error';\n    out.value = e;\n  }\n  return out;\n}\n\nPromise.resolve = resolve;\nfunction resolve(value) {\n  if (value instanceof this) {\n    return value;\n  }\n  return handlers.resolve(new this(INTERNAL), value);\n}\n\nPromise.reject = reject;\nfunction reject(reason) {\n  var promise = new this(INTERNAL);\n  return handlers.reject(promise, reason);\n}\n\nPromise.all = all;\nfunction all(iterable) {\n  var self = this;\n  if (Object.prototype.toString.call(iterable) !== '[object Array]') {\n    return this.reject(new TypeError('must be an array'));\n  }\n\n  var len = iterable.length;\n  var called = false;\n  if (!len) {\n    return this.resolve([]);\n  }\n\n  var values = new Array(len);\n  var resolved = 0;\n  var i = -1;\n  var promise = new this(INTERNAL);\n\n  while (++i < len) {\n    allResolver(iterable[i], i);\n  }\n  return promise;\n  function allResolver(value, i) {\n    self.resolve(value).then(resolveFromAll, function (error) {\n      if (!called) {\n        called = true;\n        handlers.reject(promise, error);\n      }\n    });\n    function resolveFromAll(outValue) {\n      values[i] = outValue;\n      if (++resolved === len && !called) {\n        called = true;\n        handlers.resolve(promise, values);\n      }\n    }\n  }\n}\n\nPromise.race = race;\nfunction race(iterable) {\n  var self = this;\n  if (Object.prototype.toString.call(iterable) !== '[object Array]') {\n    return this.reject(new TypeError('must be an array'));\n  }\n\n  var len = iterable.length;\n  var called = false;\n  if (!len) {\n    return this.resolve([]);\n  }\n\n  var i = -1;\n  var promise = new this(INTERNAL);\n\n  while (++i < len) {\n    resolver(iterable[i]);\n  }\n  return promise;\n  function resolver(value) {\n    self.resolve(value).then(function (response) {\n      if (!called) {\n        called = true;\n        handlers.resolve(promise, response);\n      }\n    }, function (error) {\n      if (!called) {\n        called = true;\n        handlers.reject(promise, error);\n      }\n    });\n  }\n}\n\n},{\"1\":1}],3:[function(_dereq_,module,exports){\n(function (global){\n'use strict';\nif (typeof global.Promise !== 'function') {\n  global.Promise = _dereq_(2);\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"2\":2}],4:[function(_dereq_,module,exports){\n'use strict';\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction getIDB() {\n    /* global indexedDB,webkitIndexedDB,mozIndexedDB,OIndexedDB,msIndexedDB */\n    try {\n        if (typeof indexedDB !== 'undefined') {\n            return indexedDB;\n        }\n        if (typeof webkitIndexedDB !== 'undefined') {\n            return webkitIndexedDB;\n        }\n        if (typeof mozIndexedDB !== 'undefined') {\n            return mozIndexedDB;\n        }\n        if (typeof OIndexedDB !== 'undefined') {\n            return OIndexedDB;\n        }\n        if (typeof msIndexedDB !== 'undefined') {\n            return msIndexedDB;\n        }\n    } catch (e) {\n        return;\n    }\n}\n\nvar idb = getIDB();\n\nfunction isIndexedDBValid() {\n    try {\n        // Initialize IndexedDB; fall back to vendor-prefixed versions\n        // if needed.\n        if (!idb || !idb.open) {\n            return false;\n        }\n        // We mimic PouchDB here;\n        //\n        // We test for openDatabase because IE Mobile identifies itself\n        // as Safari. Oh the lulz...\n        var isSafari = typeof openDatabase !== 'undefined' && /(Safari|iPhone|iPad|iPod)/.test(navigator.userAgent) && !/Chrome/.test(navigator.userAgent) && !/BlackBerry/.test(navigator.platform);\n\n        var hasFetch = typeof fetch === 'function' && fetch.toString().indexOf('[native code') !== -1;\n\n        // Safari <10.1 does not meet our requirements for IDB support\n        // (see: https://github.com/pouchdb/pouchdb/issues/5572).\n        // Safari 10.1 shipped with fetch, we can use that to detect it.\n        // Note: this creates issues with `window.fetch` polyfills and\n        // overrides; see:\n        // https://github.com/localForage/localForage/issues/856\n        return (!isSafari || hasFetch) && typeof indexedDB !== 'undefined' &&\n        // some outdated implementations of IDB that appear on Samsung\n        // and HTC Android devices <4.4 are missing IDBKeyRange\n        // See: https://github.com/mozilla/localForage/issues/128\n        // See: https://github.com/mozilla/localForage/issues/272\n        typeof IDBKeyRange !== 'undefined';\n    } catch (e) {\n        return false;\n    }\n}\n\n// Abstracts constructing a Blob object, so it also works in older\n// browsers that don't support the native Blob constructor. (i.e.\n// old QtWebKit versions, at least).\n// Abstracts constructing a Blob object, so it also works in older\n// browsers that don't support the native Blob constructor. (i.e.\n// old QtWebKit versions, at least).\nfunction createBlob(parts, properties) {\n    /* global BlobBuilder,MSBlobBuilder,MozBlobBuilder,WebKitBlobBuilder */\n    parts = parts || [];\n    properties = properties || {};\n    try {\n        return new Blob(parts, properties);\n    } catch (e) {\n        if (e.name !== 'TypeError') {\n            throw e;\n        }\n        var Builder = typeof BlobBuilder !== 'undefined' ? BlobBuilder : typeof MSBlobBuilder !== 'undefined' ? MSBlobBuilder : typeof MozBlobBuilder !== 'undefined' ? MozBlobBuilder : WebKitBlobBuilder;\n        var builder = new Builder();\n        for (var i = 0; i < parts.length; i += 1) {\n            builder.append(parts[i]);\n        }\n        return builder.getBlob(properties.type);\n    }\n}\n\n// This is CommonJS because lie is an external dependency, so Rollup\n// can just ignore it.\nif (typeof Promise === 'undefined') {\n    // In the \"nopromises\" build this will just throw if you don't have\n    // a global promise object, but it would throw anyway later.\n    _dereq_(3);\n}\nvar Promise$1 = Promise;\n\nfunction executeCallback(promise, callback) {\n    if (callback) {\n        promise.then(function (result) {\n            callback(null, result);\n        }, function (error) {\n            callback(error);\n        });\n    }\n}\n\nfunction executeTwoCallbacks(promise, callback, errorCallback) {\n    if (typeof callback === 'function') {\n        promise.then(callback);\n    }\n\n    if (typeof errorCallback === 'function') {\n        promise[\"catch\"](errorCallback);\n    }\n}\n\nfunction normalizeKey(key) {\n    // Cast the key to a string, as that's all we can set as a key.\n    if (typeof key !== 'string') {\n        console.warn(key + ' used as a key, but it is not a string.');\n        key = String(key);\n    }\n\n    return key;\n}\n\nfunction getCallback() {\n    if (arguments.length && typeof arguments[arguments.length - 1] === 'function') {\n        return arguments[arguments.length - 1];\n    }\n}\n\n// Some code originally from async_storage.js in\n// [Gaia](https://github.com/mozilla-b2g/gaia).\n\nvar DETECT_BLOB_SUPPORT_STORE = 'local-forage-detect-blob-support';\nvar supportsBlobs = void 0;\nvar dbContexts = {};\nvar toString = Object.prototype.toString;\n\n// Transaction Modes\nvar READ_ONLY = 'readonly';\nvar READ_WRITE = 'readwrite';\n\n// Transform a binary string to an array buffer, because otherwise\n// weird stuff happens when you try to work with the binary string directly.\n// It is known.\n// From http://stackoverflow.com/questions/14967647/ (continues on next line)\n// encode-decode-image-with-base64-breaks-image (2013-04-21)\nfunction _binStringToArrayBuffer(bin) {\n    var length = bin.length;\n    var buf = new ArrayBuffer(length);\n    var arr = new Uint8Array(buf);\n    for (var i = 0; i < length; i++) {\n        arr[i] = bin.charCodeAt(i);\n    }\n    return buf;\n}\n\n//\n// Blobs are not supported in all versions of IndexedDB, notably\n// Chrome <37 and Android <5. In those versions, storing a blob will throw.\n//\n// Various other blob bugs exist in Chrome v37-42 (inclusive).\n// Detecting them is expensive and confusing to users, and Chrome 37-42\n// is at very low usage worldwide, so we do a hacky userAgent check instead.\n//\n// content-type bug: https://code.google.com/p/chromium/issues/detail?id=408120\n// 404 bug: https://code.google.com/p/chromium/issues/detail?id=447916\n// FileReader bug: https://code.google.com/p/chromium/issues/detail?id=447836\n//\n// Code borrowed from PouchDB. See:\n// https://github.com/pouchdb/pouchdb/blob/master/packages/node_modules/pouchdb-adapter-idb/src/blobSupport.js\n//\nfunction _checkBlobSupportWithoutCaching(idb) {\n    return new Promise$1(function (resolve) {\n        var txn = idb.transaction(DETECT_BLOB_SUPPORT_STORE, READ_WRITE);\n        var blob = createBlob(['']);\n        txn.objectStore(DETECT_BLOB_SUPPORT_STORE).put(blob, 'key');\n\n        txn.onabort = function (e) {\n            // If the transaction aborts now its due to not being able to\n            // write to the database, likely due to the disk being full\n            e.preventDefault();\n            e.stopPropagation();\n            resolve(false);\n        };\n\n        txn.oncomplete = function () {\n            var matchedChrome = navigator.userAgent.match(/Chrome\\/(\\d+)/);\n            var matchedEdge = navigator.userAgent.match(/Edge\\//);\n            // MS Edge pretends to be Chrome 42:\n            // https://msdn.microsoft.com/en-us/library/hh869301%28v=vs.85%29.aspx\n            resolve(matchedEdge || !matchedChrome || parseInt(matchedChrome[1], 10) >= 43);\n        };\n    })[\"catch\"](function () {\n        return false; // error, so assume unsupported\n    });\n}\n\nfunction _checkBlobSupport(idb) {\n    if (typeof supportsBlobs === 'boolean') {\n        return Promise$1.resolve(supportsBlobs);\n    }\n    return _checkBlobSupportWithoutCaching(idb).then(function (value) {\n        supportsBlobs = value;\n        return supportsBlobs;\n    });\n}\n\nfunction _deferReadiness(dbInfo) {\n    var dbContext = dbContexts[dbInfo.name];\n\n    // Create a deferred object representing the current database operation.\n    var deferredOperation = {};\n\n    deferredOperation.promise = new Promise$1(function (resolve, reject) {\n        deferredOperation.resolve = resolve;\n        deferredOperation.reject = reject;\n    });\n\n    // Enqueue the deferred operation.\n    dbContext.deferredOperations.push(deferredOperation);\n\n    // Chain its promise to the database readiness.\n    if (!dbContext.dbReady) {\n        dbContext.dbReady = deferredOperation.promise;\n    } else {\n        dbContext.dbReady = dbContext.dbReady.then(function () {\n            return deferredOperation.promise;\n        });\n    }\n}\n\nfunction _advanceReadiness(dbInfo) {\n    var dbContext = dbContexts[dbInfo.name];\n\n    // Dequeue a deferred operation.\n    var deferredOperation = dbContext.deferredOperations.pop();\n\n    // Resolve its promise (which is part of the database readiness\n    // chain of promises).\n    if (deferredOperation) {\n        deferredOperation.resolve();\n        return deferredOperation.promise;\n    }\n}\n\nfunction _rejectReadiness(dbInfo, err) {\n    var dbContext = dbContexts[dbInfo.name];\n\n    // Dequeue a deferred operation.\n    var deferredOperation = dbContext.deferredOperations.pop();\n\n    // Reject its promise (which is part of the database readiness\n    // chain of promises).\n    if (deferredOperation) {\n        deferredOperation.reject(err);\n        return deferredOperation.promise;\n    }\n}\n\nfunction _getConnection(dbInfo, upgradeNeeded) {\n    return new Promise$1(function (resolve, reject) {\n        dbContexts[dbInfo.name] = dbContexts[dbInfo.name] || createDbContext();\n\n        if (dbInfo.db) {\n            if (upgradeNeeded) {\n                _deferReadiness(dbInfo);\n                dbInfo.db.close();\n            } else {\n                return resolve(dbInfo.db);\n            }\n        }\n\n        var dbArgs = [dbInfo.name];\n\n        if (upgradeNeeded) {\n            dbArgs.push(dbInfo.version);\n        }\n\n        var openreq = idb.open.apply(idb, dbArgs);\n\n        if (upgradeNeeded) {\n            openreq.onupgradeneeded = function (e) {\n                var db = openreq.result;\n                try {\n                    db.createObjectStore(dbInfo.storeName);\n                    if (e.oldVersion <= 1) {\n                        // Added when support for blob shims was added\n                        db.createObjectStore(DETECT_BLOB_SUPPORT_STORE);\n                    }\n                } catch (ex) {\n                    if (ex.name === 'ConstraintError') {\n                        console.warn('The database \"' + dbInfo.name + '\"' + ' has been upgraded from version ' + e.oldVersion + ' to version ' + e.newVersion + ', but the storage \"' + dbInfo.storeName + '\" already exists.');\n                    } else {\n                        throw ex;\n                    }\n                }\n            };\n        }\n\n        openreq.onerror = function (e) {\n            e.preventDefault();\n            reject(openreq.error);\n        };\n\n        openreq.onsuccess = function () {\n            var db = openreq.result;\n            db.onversionchange = function (e) {\n                // Triggered when the database is modified (e.g. adding an objectStore) or\n                // deleted (even when initiated by other sessions in different tabs).\n                // Closing the connection here prevents those operations from being blocked.\n                // If the database is accessed again later by this instance, the connection\n                // will be reopened or the database recreated as needed.\n                e.target.close();\n            };\n            resolve(db);\n            _advanceReadiness(dbInfo);\n        };\n    });\n}\n\nfunction _getOriginalConnection(dbInfo) {\n    return _getConnection(dbInfo, false);\n}\n\nfunction _getUpgradedConnection(dbInfo) {\n    return _getConnection(dbInfo, true);\n}\n\nfunction _isUpgradeNeeded(dbInfo, defaultVersion) {\n    if (!dbInfo.db) {\n        return true;\n    }\n\n    var isNewStore = !dbInfo.db.objectStoreNames.contains(dbInfo.storeName);\n    var isDowngrade = dbInfo.version < dbInfo.db.version;\n    var isUpgrade = dbInfo.version > dbInfo.db.version;\n\n    if (isDowngrade) {\n        // If the version is not the default one\n        // then warn for impossible downgrade.\n        if (dbInfo.version !== defaultVersion) {\n            console.warn('The database \"' + dbInfo.name + '\"' + \" can't be downgraded from version \" + dbInfo.db.version + ' to version ' + dbInfo.version + '.');\n        }\n        // Align the versions to prevent errors.\n        dbInfo.version = dbInfo.db.version;\n    }\n\n    if (isUpgrade || isNewStore) {\n        // If the store is new then increment the version (if needed).\n        // This will trigger an \"upgradeneeded\" event which is required\n        // for creating a store.\n        if (isNewStore) {\n            var incVersion = dbInfo.db.version + 1;\n            if (incVersion > dbInfo.version) {\n                dbInfo.version = incVersion;\n            }\n        }\n\n        return true;\n    }\n\n    return false;\n}\n\n// encode a blob for indexeddb engines that don't support blobs\nfunction _encodeBlob(blob) {\n    return new Promise$1(function (resolve, reject) {\n        var reader = new FileReader();\n        reader.onerror = reject;\n        reader.onloadend = function (e) {\n            var base64 = btoa(e.target.result || '');\n            resolve({\n                __local_forage_encoded_blob: true,\n                data: base64,\n                type: blob.type\n            });\n        };\n        reader.readAsBinaryString(blob);\n    });\n}\n\n// decode an encoded blob\nfunction _decodeBlob(encodedBlob) {\n    var arrayBuff = _binStringToArrayBuffer(atob(encodedBlob.data));\n    return createBlob([arrayBuff], { type: encodedBlob.type });\n}\n\n// is this one of our fancy encoded blobs?\nfunction _isEncodedBlob(value) {\n    return value && value.__local_forage_encoded_blob;\n}\n\n// Specialize the default `ready()` function by making it dependent\n// on the current database operations. Thus, the driver will be actually\n// ready when it's been initialized (default) *and* there are no pending\n// operations on the database (initiated by some other instances).\nfunction _fullyReady(callback) {\n    var self = this;\n\n    var promise = self._initReady().then(function () {\n        var dbContext = dbContexts[self._dbInfo.name];\n\n        if (dbContext && dbContext.dbReady) {\n            return dbContext.dbReady;\n        }\n    });\n\n    executeTwoCallbacks(promise, callback, callback);\n    return promise;\n}\n\n// Try to establish a new db connection to replace the\n// current one which is broken (i.e. experiencing\n// InvalidStateError while creating a transaction).\nfunction _tryReconnect(dbInfo) {\n    _deferReadiness(dbInfo);\n\n    var dbContext = dbContexts[dbInfo.name];\n    var forages = dbContext.forages;\n\n    for (var i = 0; i < forages.length; i++) {\n        var forage = forages[i];\n        if (forage._dbInfo.db) {\n            forage._dbInfo.db.close();\n            forage._dbInfo.db = null;\n        }\n    }\n    dbInfo.db = null;\n\n    return _getOriginalConnection(dbInfo).then(function (db) {\n        dbInfo.db = db;\n        if (_isUpgradeNeeded(dbInfo)) {\n            // Reopen the database for upgrading.\n            return _getUpgradedConnection(dbInfo);\n        }\n        return db;\n    }).then(function (db) {\n        // store the latest db reference\n        // in case the db was upgraded\n        dbInfo.db = dbContext.db = db;\n        for (var i = 0; i < forages.length; i++) {\n            forages[i]._dbInfo.db = db;\n        }\n    })[\"catch\"](function (err) {\n        _rejectReadiness(dbInfo, err);\n        throw err;\n    });\n}\n\n// FF doesn't like Promises (micro-tasks) and IDDB store operations,\n// so we have to do it with callbacks\nfunction createTransaction(dbInfo, mode, callback, retries) {\n    if (retries === undefined) {\n        retries = 1;\n    }\n\n    try {\n        var tx = dbInfo.db.transaction(dbInfo.storeName, mode);\n        callback(null, tx);\n    } catch (err) {\n        if (retries > 0 && (!dbInfo.db || err.name === 'InvalidStateError' || err.name === 'NotFoundError')) {\n            return Promise$1.resolve().then(function () {\n                if (!dbInfo.db || err.name === 'NotFoundError' && !dbInfo.db.objectStoreNames.contains(dbInfo.storeName) && dbInfo.version <= dbInfo.db.version) {\n                    // increase the db version, to create the new ObjectStore\n                    if (dbInfo.db) {\n                        dbInfo.version = dbInfo.db.version + 1;\n                    }\n                    // Reopen the database for upgrading.\n                    return _getUpgradedConnection(dbInfo);\n                }\n            }).then(function () {\n                return _tryReconnect(dbInfo).then(function () {\n                    createTransaction(dbInfo, mode, callback, retries - 1);\n                });\n            })[\"catch\"](callback);\n        }\n\n        callback(err);\n    }\n}\n\nfunction createDbContext() {\n    return {\n        // Running localForages sharing a database.\n        forages: [],\n        // Shared database.\n        db: null,\n        // Database readiness (promise).\n        dbReady: null,\n        // Deferred operations on the database.\n        deferredOperations: []\n    };\n}\n\n// Open the IndexedDB database (automatically creates one if one didn't\n// previously exist), using any options set in the config.\nfunction _initStorage(options) {\n    var self = this;\n    var dbInfo = {\n        db: null\n    };\n\n    if (options) {\n        for (var i in options) {\n            dbInfo[i] = options[i];\n        }\n    }\n\n    // Get the current context of the database;\n    var dbContext = dbContexts[dbInfo.name];\n\n    // ...or create a new context.\n    if (!dbContext) {\n        dbContext = createDbContext();\n        // Register the new context in the global container.\n        dbContexts[dbInfo.name] = dbContext;\n    }\n\n    // Register itself as a running localForage in the current context.\n    dbContext.forages.push(self);\n\n    // Replace the default `ready()` function with the specialized one.\n    if (!self._initReady) {\n        self._initReady = self.ready;\n        self.ready = _fullyReady;\n    }\n\n    // Create an array of initialization states of the related localForages.\n    var initPromises = [];\n\n    function ignoreErrors() {\n        // Don't handle errors here,\n        // just makes sure related localForages aren't pending.\n        return Promise$1.resolve();\n    }\n\n    for (var j = 0; j < dbContext.forages.length; j++) {\n        var forage = dbContext.forages[j];\n        if (forage !== self) {\n            // Don't wait for itself...\n            initPromises.push(forage._initReady()[\"catch\"](ignoreErrors));\n        }\n    }\n\n    // Take a snapshot of the related localForages.\n    var forages = dbContext.forages.slice(0);\n\n    // Initialize the connection process only when\n    // all the related localForages aren't pending.\n    return Promise$1.all(initPromises).then(function () {\n        dbInfo.db = dbContext.db;\n        // Get the connection or open a new one without upgrade.\n        return _getOriginalConnection(dbInfo);\n    }).then(function (db) {\n        dbInfo.db = db;\n        if (_isUpgradeNeeded(dbInfo, self._defaultConfig.version)) {\n            // Reopen the database for upgrading.\n            return _getUpgradedConnection(dbInfo);\n        }\n        return db;\n    }).then(function (db) {\n        dbInfo.db = dbContext.db = db;\n        self._dbInfo = dbInfo;\n        // Share the final connection amongst related localForages.\n        for (var k = 0; k < forages.length; k++) {\n            var forage = forages[k];\n            if (forage !== self) {\n                // Self is already up-to-date.\n                forage._dbInfo.db = dbInfo.db;\n                forage._dbInfo.version = dbInfo.version;\n            }\n        }\n    });\n}\n\nfunction getItem(key, callback) {\n    var self = this;\n\n    key = normalizeKey(key);\n\n    var promise = new Promise$1(function (resolve, reject) {\n        self.ready().then(function () {\n            createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n                if (err) {\n                    return reject(err);\n                }\n\n                try {\n                    var store = transaction.objectStore(self._dbInfo.storeName);\n                    var req = store.get(key);\n\n                    req.onsuccess = function () {\n                        var value = req.result;\n                        if (value === undefined) {\n                            value = null;\n                        }\n                        if (_isEncodedBlob(value)) {\n                            value = _decodeBlob(value);\n                        }\n                        resolve(value);\n                    };\n\n                    req.onerror = function () {\n                        reject(req.error);\n                    };\n                } catch (e) {\n                    reject(e);\n                }\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\n// Iterate over all items stored in database.\nfunction iterate(iterator, callback) {\n    var self = this;\n\n    var promise = new Promise$1(function (resolve, reject) {\n        self.ready().then(function () {\n            createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n                if (err) {\n                    return reject(err);\n                }\n\n                try {\n                    var store = transaction.objectStore(self._dbInfo.storeName);\n                    var req = store.openCursor();\n                    var iterationNumber = 1;\n\n                    req.onsuccess = function () {\n                        var cursor = req.result;\n\n                        if (cursor) {\n                            var value = cursor.value;\n                            if (_isEncodedBlob(value)) {\n                                value = _decodeBlob(value);\n                            }\n                            var result = iterator(value, cursor.key, iterationNumber++);\n\n                            // when the iterator callback returns any\n                            // (non-`undefined`) value, then we stop\n                            // the iteration immediately\n                            if (result !== void 0) {\n                                resolve(result);\n                            } else {\n                                cursor[\"continue\"]();\n                            }\n                        } else {\n                            resolve();\n                        }\n                    };\n\n                    req.onerror = function () {\n                        reject(req.error);\n                    };\n                } catch (e) {\n                    reject(e);\n                }\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n\n    return promise;\n}\n\nfunction setItem(key, value, callback) {\n    var self = this;\n\n    key = normalizeKey(key);\n\n    var promise = new Promise$1(function (resolve, reject) {\n        var dbInfo;\n        self.ready().then(function () {\n            dbInfo = self._dbInfo;\n            if (toString.call(value) === '[object Blob]') {\n                return _checkBlobSupport(dbInfo.db).then(function (blobSupport) {\n                    if (blobSupport) {\n                        return value;\n                    }\n                    return _encodeBlob(value);\n                });\n            }\n            return value;\n        }).then(function (value) {\n            createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) {\n                if (err) {\n                    return reject(err);\n                }\n\n                try {\n                    var store = transaction.objectStore(self._dbInfo.storeName);\n\n                    // The reason we don't _save_ null is because IE 10 does\n                    // not support saving the `null` type in IndexedDB. How\n                    // ironic, given the bug below!\n                    // See: https://github.com/mozilla/localForage/issues/161\n                    if (value === null) {\n                        value = undefined;\n                    }\n\n                    var req = store.put(value, key);\n\n                    transaction.oncomplete = function () {\n                        // Cast to undefined so the value passed to\n                        // callback/promise is the same as what one would get out\n                        // of `getItem()` later. This leads to some weirdness\n                        // (setItem('foo', undefined) will return `null`), but\n                        // it's not my fault localStorage is our baseline and that\n                        // it's weird.\n                        if (value === undefined) {\n                            value = null;\n                        }\n\n                        resolve(value);\n                    };\n                    transaction.onabort = transaction.onerror = function () {\n                        var err = req.error ? req.error : req.transaction.error;\n                        reject(err);\n                    };\n                } catch (e) {\n                    reject(e);\n                }\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\nfunction removeItem(key, callback) {\n    var self = this;\n\n    key = normalizeKey(key);\n\n    var promise = new Promise$1(function (resolve, reject) {\n        self.ready().then(function () {\n            createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) {\n                if (err) {\n                    return reject(err);\n                }\n\n                try {\n                    var store = transaction.objectStore(self._dbInfo.storeName);\n                    // We use a Grunt task to make this safe for IE and some\n                    // versions of Android (including those used by Cordova).\n                    // Normally IE won't like `.delete()` and will insist on\n                    // using `['delete']()`, but we have a build step that\n                    // fixes this for us now.\n                    var req = store[\"delete\"](key);\n                    transaction.oncomplete = function () {\n                        resolve();\n                    };\n\n                    transaction.onerror = function () {\n                        reject(req.error);\n                    };\n\n                    // The request will be also be aborted if we've exceeded our storage\n                    // space.\n                    transaction.onabort = function () {\n                        var err = req.error ? req.error : req.transaction.error;\n                        reject(err);\n                    };\n                } catch (e) {\n                    reject(e);\n                }\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\nfunction clear(callback) {\n    var self = this;\n\n    var promise = new Promise$1(function (resolve, reject) {\n        self.ready().then(function () {\n            createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) {\n                if (err) {\n                    return reject(err);\n                }\n\n                try {\n                    var store = transaction.objectStore(self._dbInfo.storeName);\n                    var req = store.clear();\n\n                    transaction.oncomplete = function () {\n                        resolve();\n                    };\n\n                    transaction.onabort = transaction.onerror = function () {\n                        var err = req.error ? req.error : req.transaction.error;\n                        reject(err);\n                    };\n                } catch (e) {\n                    reject(e);\n                }\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\nfunction length(callback) {\n    var self = this;\n\n    var promise = new Promise$1(function (resolve, reject) {\n        self.ready().then(function () {\n            createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n                if (err) {\n                    return reject(err);\n                }\n\n                try {\n                    var store = transaction.objectStore(self._dbInfo.storeName);\n                    var req = store.count();\n\n                    req.onsuccess = function () {\n                        resolve(req.result);\n                    };\n\n                    req.onerror = function () {\n                        reject(req.error);\n                    };\n                } catch (e) {\n                    reject(e);\n                }\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\nfunction key(n, callback) {\n    var self = this;\n\n    var promise = new Promise$1(function (resolve, reject) {\n        if (n < 0) {\n            resolve(null);\n\n            return;\n        }\n\n        self.ready().then(function () {\n            createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n                if (err) {\n                    return reject(err);\n                }\n\n                try {\n                    var store = transaction.objectStore(self._dbInfo.storeName);\n                    var advanced = false;\n                    var req = store.openKeyCursor();\n\n                    req.onsuccess = function () {\n                        var cursor = req.result;\n                        if (!cursor) {\n                            // this means there weren't enough keys\n                            resolve(null);\n\n                            return;\n                        }\n\n                        if (n === 0) {\n                            // We have the first key, return it if that's what they\n                            // wanted.\n                            resolve(cursor.key);\n                        } else {\n                            if (!advanced) {\n                                // Otherwise, ask the cursor to skip ahead n\n                                // records.\n                                advanced = true;\n                                cursor.advance(n);\n                            } else {\n                                // When we get here, we've got the nth key.\n                                resolve(cursor.key);\n                            }\n                        }\n                    };\n\n                    req.onerror = function () {\n                        reject(req.error);\n                    };\n                } catch (e) {\n                    reject(e);\n                }\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\nfunction keys(callback) {\n    var self = this;\n\n    var promise = new Promise$1(function (resolve, reject) {\n        self.ready().then(function () {\n            createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n                if (err) {\n                    return reject(err);\n                }\n\n                try {\n                    var store = transaction.objectStore(self._dbInfo.storeName);\n                    var req = store.openKeyCursor();\n                    var keys = [];\n\n                    req.onsuccess = function () {\n                        var cursor = req.result;\n\n                        if (!cursor) {\n                            resolve(keys);\n                            return;\n                        }\n\n                        keys.push(cursor.key);\n                        cursor[\"continue\"]();\n                    };\n\n                    req.onerror = function () {\n                        reject(req.error);\n                    };\n                } catch (e) {\n                    reject(e);\n                }\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\nfunction dropInstance(options, callback) {\n    callback = getCallback.apply(this, arguments);\n\n    var currentConfig = this.config();\n    options = typeof options !== 'function' && options || {};\n    if (!options.name) {\n        options.name = options.name || currentConfig.name;\n        options.storeName = options.storeName || currentConfig.storeName;\n    }\n\n    var self = this;\n    var promise;\n    if (!options.name) {\n        promise = Promise$1.reject('Invalid arguments');\n    } else {\n        var isCurrentDb = options.name === currentConfig.name && self._dbInfo.db;\n\n        var dbPromise = isCurrentDb ? Promise$1.resolve(self._dbInfo.db) : _getOriginalConnection(options).then(function (db) {\n            var dbContext = dbContexts[options.name];\n            var forages = dbContext.forages;\n            dbContext.db = db;\n            for (var i = 0; i < forages.length; i++) {\n                forages[i]._dbInfo.db = db;\n            }\n            return db;\n        });\n\n        if (!options.storeName) {\n            promise = dbPromise.then(function (db) {\n                _deferReadiness(options);\n\n                var dbContext = dbContexts[options.name];\n                var forages = dbContext.forages;\n\n                db.close();\n                for (var i = 0; i < forages.length; i++) {\n                    var forage = forages[i];\n                    forage._dbInfo.db = null;\n                }\n\n                var dropDBPromise = new Promise$1(function (resolve, reject) {\n                    var req = idb.deleteDatabase(options.name);\n\n                    req.onerror = function () {\n                        var db = req.result;\n                        if (db) {\n                            db.close();\n                        }\n                        reject(req.error);\n                    };\n\n                    req.onblocked = function () {\n                        // Closing all open connections in onversionchange handler should prevent this situation, but if\n                        // we do get here, it just means the request remains pending - eventually it will succeed or error\n                        console.warn('dropInstance blocked for database \"' + options.name + '\" until all open connections are closed');\n                    };\n\n                    req.onsuccess = function () {\n                        var db = req.result;\n                        if (db) {\n                            db.close();\n                        }\n                        resolve(db);\n                    };\n                });\n\n                return dropDBPromise.then(function (db) {\n                    dbContext.db = db;\n                    for (var i = 0; i < forages.length; i++) {\n                        var _forage = forages[i];\n                        _advanceReadiness(_forage._dbInfo);\n                    }\n                })[\"catch\"](function (err) {\n                    (_rejectReadiness(options, err) || Promise$1.resolve())[\"catch\"](function () {});\n                    throw err;\n                });\n            });\n        } else {\n            promise = dbPromise.then(function (db) {\n                if (!db.objectStoreNames.contains(options.storeName)) {\n                    return;\n                }\n\n                var newVersion = db.version + 1;\n\n                _deferReadiness(options);\n\n                var dbContext = dbContexts[options.name];\n                var forages = dbContext.forages;\n\n                db.close();\n                for (var i = 0; i < forages.length; i++) {\n                    var forage = forages[i];\n                    forage._dbInfo.db = null;\n                    forage._dbInfo.version = newVersion;\n                }\n\n                var dropObjectPromise = new Promise$1(function (resolve, reject) {\n                    var req = idb.open(options.name, newVersion);\n\n                    req.onerror = function (err) {\n                        var db = req.result;\n                        db.close();\n                        reject(err);\n                    };\n\n                    req.onupgradeneeded = function () {\n                        var db = req.result;\n                        db.deleteObjectStore(options.storeName);\n                    };\n\n                    req.onsuccess = function () {\n                        var db = req.result;\n                        db.close();\n                        resolve(db);\n                    };\n                });\n\n                return dropObjectPromise.then(function (db) {\n                    dbContext.db = db;\n                    for (var j = 0; j < forages.length; j++) {\n                        var _forage2 = forages[j];\n                        _forage2._dbInfo.db = db;\n                        _advanceReadiness(_forage2._dbInfo);\n                    }\n                })[\"catch\"](function (err) {\n                    (_rejectReadiness(options, err) || Promise$1.resolve())[\"catch\"](function () {});\n                    throw err;\n                });\n            });\n        }\n    }\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\nvar asyncStorage = {\n    _driver: 'asyncStorage',\n    _initStorage: _initStorage,\n    _support: isIndexedDBValid(),\n    iterate: iterate,\n    getItem: getItem,\n    setItem: setItem,\n    removeItem: removeItem,\n    clear: clear,\n    length: length,\n    key: key,\n    keys: keys,\n    dropInstance: dropInstance\n};\n\nfunction isWebSQLValid() {\n    return typeof openDatabase === 'function';\n}\n\n// Sadly, the best way to save binary data in WebSQL/localStorage is serializing\n// it to Base64, so this is how we store it to prevent very strange errors with less\n// verbose ways of binary <-> string data storage.\nvar BASE_CHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\nvar BLOB_TYPE_PREFIX = '~~local_forage_type~';\nvar BLOB_TYPE_PREFIX_REGEX = /^~~local_forage_type~([^~]+)~/;\n\nvar SERIALIZED_MARKER = '__lfsc__:';\nvar SERIALIZED_MARKER_LENGTH = SERIALIZED_MARKER.length;\n\n// OMG the serializations!\nvar TYPE_ARRAYBUFFER = 'arbf';\nvar TYPE_BLOB = 'blob';\nvar TYPE_INT8ARRAY = 'si08';\nvar TYPE_UINT8ARRAY = 'ui08';\nvar TYPE_UINT8CLAMPEDARRAY = 'uic8';\nvar TYPE_INT16ARRAY = 'si16';\nvar TYPE_INT32ARRAY = 'si32';\nvar TYPE_UINT16ARRAY = 'ur16';\nvar TYPE_UINT32ARRAY = 'ui32';\nvar TYPE_FLOAT32ARRAY = 'fl32';\nvar TYPE_FLOAT64ARRAY = 'fl64';\nvar TYPE_SERIALIZED_MARKER_LENGTH = SERIALIZED_MARKER_LENGTH + TYPE_ARRAYBUFFER.length;\n\nvar toString$1 = Object.prototype.toString;\n\nfunction stringToBuffer(serializedString) {\n    // Fill the string into a ArrayBuffer.\n    var bufferLength = serializedString.length * 0.75;\n    var len = serializedString.length;\n    var i;\n    var p = 0;\n    var encoded1, encoded2, encoded3, encoded4;\n\n    if (serializedString[serializedString.length - 1] === '=') {\n        bufferLength--;\n        if (serializedString[serializedString.length - 2] === '=') {\n            bufferLength--;\n        }\n    }\n\n    var buffer = new ArrayBuffer(bufferLength);\n    var bytes = new Uint8Array(buffer);\n\n    for (i = 0; i < len; i += 4) {\n        encoded1 = BASE_CHARS.indexOf(serializedString[i]);\n        encoded2 = BASE_CHARS.indexOf(serializedString[i + 1]);\n        encoded3 = BASE_CHARS.indexOf(serializedString[i + 2]);\n        encoded4 = BASE_CHARS.indexOf(serializedString[i + 3]);\n\n        /*jslint bitwise: true */\n        bytes[p++] = encoded1 << 2 | encoded2 >> 4;\n        bytes[p++] = (encoded2 & 15) << 4 | encoded3 >> 2;\n        bytes[p++] = (encoded3 & 3) << 6 | encoded4 & 63;\n    }\n    return buffer;\n}\n\n// Converts a buffer to a string to store, serialized, in the backend\n// storage library.\nfunction bufferToString(buffer) {\n    // base64-arraybuffer\n    var bytes = new Uint8Array(buffer);\n    var base64String = '';\n    var i;\n\n    for (i = 0; i < bytes.length; i += 3) {\n        /*jslint bitwise: true */\n        base64String += BASE_CHARS[bytes[i] >> 2];\n        base64String += BASE_CHARS[(bytes[i] & 3) << 4 | bytes[i + 1] >> 4];\n        base64String += BASE_CHARS[(bytes[i + 1] & 15) << 2 | bytes[i + 2] >> 6];\n        base64String += BASE_CHARS[bytes[i + 2] & 63];\n    }\n\n    if (bytes.length % 3 === 2) {\n        base64String = base64String.substring(0, base64String.length - 1) + '=';\n    } else if (bytes.length % 3 === 1) {\n        base64String = base64String.substring(0, base64String.length - 2) + '==';\n    }\n\n    return base64String;\n}\n\n// Serialize a value, afterwards executing a callback (which usually\n// instructs the `setItem()` callback/promise to be executed). This is how\n// we store binary data with localStorage.\nfunction serialize(value, callback) {\n    var valueType = '';\n    if (value) {\n        valueType = toString$1.call(value);\n    }\n\n    // Cannot use `value instanceof ArrayBuffer` or such here, as these\n    // checks fail when running the tests using casper.js...\n    //\n    // TODO: See why those tests fail and use a better solution.\n    if (value && (valueType === '[object ArrayBuffer]' || value.buffer && toString$1.call(value.buffer) === '[object ArrayBuffer]')) {\n        // Convert binary arrays to a string and prefix the string with\n        // a special marker.\n        var buffer;\n        var marker = SERIALIZED_MARKER;\n\n        if (value instanceof ArrayBuffer) {\n            buffer = value;\n            marker += TYPE_ARRAYBUFFER;\n        } else {\n            buffer = value.buffer;\n\n            if (valueType === '[object Int8Array]') {\n                marker += TYPE_INT8ARRAY;\n            } else if (valueType === '[object Uint8Array]') {\n                marker += TYPE_UINT8ARRAY;\n            } else if (valueType === '[object Uint8ClampedArray]') {\n                marker += TYPE_UINT8CLAMPEDARRAY;\n            } else if (valueType === '[object Int16Array]') {\n                marker += TYPE_INT16ARRAY;\n            } else if (valueType === '[object Uint16Array]') {\n                marker += TYPE_UINT16ARRAY;\n            } else if (valueType === '[object Int32Array]') {\n                marker += TYPE_INT32ARRAY;\n            } else if (valueType === '[object Uint32Array]') {\n                marker += TYPE_UINT32ARRAY;\n            } else if (valueType === '[object Float32Array]') {\n                marker += TYPE_FLOAT32ARRAY;\n            } else if (valueType === '[object Float64Array]') {\n                marker += TYPE_FLOAT64ARRAY;\n            } else {\n                callback(new Error('Failed to get type for BinaryArray'));\n            }\n        }\n\n        callback(marker + bufferToString(buffer));\n    } else if (valueType === '[object Blob]') {\n        // Conver the blob to a binaryArray and then to a string.\n        var fileReader = new FileReader();\n\n        fileReader.onload = function () {\n            // Backwards-compatible prefix for the blob type.\n            var str = BLOB_TYPE_PREFIX + value.type + '~' + bufferToString(this.result);\n\n            callback(SERIALIZED_MARKER + TYPE_BLOB + str);\n        };\n\n        fileReader.readAsArrayBuffer(value);\n    } else {\n        try {\n            callback(JSON.stringify(value));\n        } catch (e) {\n            console.error(\"Couldn't convert value into a JSON string: \", value);\n\n            callback(null, e);\n        }\n    }\n}\n\n// Deserialize data we've inserted into a value column/field. We place\n// special markers into our strings to mark them as encoded; this isn't\n// as nice as a meta field, but it's the only sane thing we can do whilst\n// keeping localStorage support intact.\n//\n// Oftentimes this will just deserialize JSON content, but if we have a\n// special marker (SERIALIZED_MARKER, defined above), we will extract\n// some kind of arraybuffer/binary data/typed array out of the string.\nfunction deserialize(value) {\n    // If we haven't marked this string as being specially serialized (i.e.\n    // something other than serialized JSON), we can just return it and be\n    // done with it.\n    if (value.substring(0, SERIALIZED_MARKER_LENGTH) !== SERIALIZED_MARKER) {\n        return JSON.parse(value);\n    }\n\n    // The following code deals with deserializing some kind of Blob or\n    // TypedArray. First we separate out the type of data we're dealing\n    // with from the data itself.\n    var serializedString = value.substring(TYPE_SERIALIZED_MARKER_LENGTH);\n    var type = value.substring(SERIALIZED_MARKER_LENGTH, TYPE_SERIALIZED_MARKER_LENGTH);\n\n    var blobType;\n    // Backwards-compatible blob type serialization strategy.\n    // DBs created with older versions of localForage will simply not have the blob type.\n    if (type === TYPE_BLOB && BLOB_TYPE_PREFIX_REGEX.test(serializedString)) {\n        var matcher = serializedString.match(BLOB_TYPE_PREFIX_REGEX);\n        blobType = matcher[1];\n        serializedString = serializedString.substring(matcher[0].length);\n    }\n    var buffer = stringToBuffer(serializedString);\n\n    // Return the right type based on the code/type set during\n    // serialization.\n    switch (type) {\n        case TYPE_ARRAYBUFFER:\n            return buffer;\n        case TYPE_BLOB:\n            return createBlob([buffer], { type: blobType });\n        case TYPE_INT8ARRAY:\n            return new Int8Array(buffer);\n        case TYPE_UINT8ARRAY:\n            return new Uint8Array(buffer);\n        case TYPE_UINT8CLAMPEDARRAY:\n            return new Uint8ClampedArray(buffer);\n        case TYPE_INT16ARRAY:\n            return new Int16Array(buffer);\n        case TYPE_UINT16ARRAY:\n            return new Uint16Array(buffer);\n        case TYPE_INT32ARRAY:\n            return new Int32Array(buffer);\n        case TYPE_UINT32ARRAY:\n            return new Uint32Array(buffer);\n        case TYPE_FLOAT32ARRAY:\n            return new Float32Array(buffer);\n        case TYPE_FLOAT64ARRAY:\n            return new Float64Array(buffer);\n        default:\n            throw new Error('Unkown type: ' + type);\n    }\n}\n\nvar localforageSerializer = {\n    serialize: serialize,\n    deserialize: deserialize,\n    stringToBuffer: stringToBuffer,\n    bufferToString: bufferToString\n};\n\n/*\n * Includes code from:\n *\n * base64-arraybuffer\n * https://github.com/niklasvh/base64-arraybuffer\n *\n * Copyright (c) 2012 Niklas von Hertzen\n * Licensed under the MIT license.\n */\n\nfunction createDbTable(t, dbInfo, callback, errorCallback) {\n    t.executeSql('CREATE TABLE IF NOT EXISTS ' + dbInfo.storeName + ' ' + '(id INTEGER PRIMARY KEY, key unique, value)', [], callback, errorCallback);\n}\n\n// Open the WebSQL database (automatically creates one if one didn't\n// previously exist), using any options set in the config.\nfunction _initStorage$1(options) {\n    var self = this;\n    var dbInfo = {\n        db: null\n    };\n\n    if (options) {\n        for (var i in options) {\n            dbInfo[i] = typeof options[i] !== 'string' ? options[i].toString() : options[i];\n        }\n    }\n\n    var dbInfoPromise = new Promise$1(function (resolve, reject) {\n        // Open the database; the openDatabase API will automatically\n        // create it for us if it doesn't exist.\n        try {\n            dbInfo.db = openDatabase(dbInfo.name, String(dbInfo.version), dbInfo.description, dbInfo.size);\n        } catch (e) {\n            return reject(e);\n        }\n\n        // Create our key/value table if it doesn't exist.\n        dbInfo.db.transaction(function (t) {\n            createDbTable(t, dbInfo, function () {\n                self._dbInfo = dbInfo;\n                resolve();\n            }, function (t, error) {\n                reject(error);\n            });\n        }, reject);\n    });\n\n    dbInfo.serializer = localforageSerializer;\n    return dbInfoPromise;\n}\n\nfunction tryExecuteSql(t, dbInfo, sqlStatement, args, callback, errorCallback) {\n    t.executeSql(sqlStatement, args, callback, function (t, error) {\n        if (error.code === error.SYNTAX_ERR) {\n            t.executeSql('SELECT name FROM sqlite_master ' + \"WHERE type='table' AND name = ?\", [dbInfo.storeName], function (t, results) {\n                if (!results.rows.length) {\n                    // if the table is missing (was deleted)\n                    // re-create it table and retry\n                    createDbTable(t, dbInfo, function () {\n                        t.executeSql(sqlStatement, args, callback, errorCallback);\n                    }, errorCallback);\n                } else {\n                    errorCallback(t, error);\n                }\n            }, errorCallback);\n        } else {\n            errorCallback(t, error);\n        }\n    }, errorCallback);\n}\n\nfunction getItem$1(key, callback) {\n    var self = this;\n\n    key = normalizeKey(key);\n\n    var promise = new Promise$1(function (resolve, reject) {\n        self.ready().then(function () {\n            var dbInfo = self._dbInfo;\n            dbInfo.db.transaction(function (t) {\n                tryExecuteSql(t, dbInfo, 'SELECT * FROM ' + dbInfo.storeName + ' WHERE key = ? LIMIT 1', [key], function (t, results) {\n                    var result = results.rows.length ? results.rows.item(0).value : null;\n\n                    // Check to see if this is serialized content we need to\n                    // unpack.\n                    if (result) {\n                        result = dbInfo.serializer.deserialize(result);\n                    }\n\n                    resolve(result);\n                }, function (t, error) {\n                    reject(error);\n                });\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\nfunction iterate$1(iterator, callback) {\n    var self = this;\n\n    var promise = new Promise$1(function (resolve, reject) {\n        self.ready().then(function () {\n            var dbInfo = self._dbInfo;\n\n            dbInfo.db.transaction(function (t) {\n                tryExecuteSql(t, dbInfo, 'SELECT * FROM ' + dbInfo.storeName, [], function (t, results) {\n                    var rows = results.rows;\n                    var length = rows.length;\n\n                    for (var i = 0; i < length; i++) {\n                        var item = rows.item(i);\n                        var result = item.value;\n\n                        // Check to see if this is serialized content\n                        // we need to unpack.\n                        if (result) {\n                            result = dbInfo.serializer.deserialize(result);\n                        }\n\n                        result = iterator(result, item.key, i + 1);\n\n                        // void(0) prevents problems with redefinition\n                        // of `undefined`.\n                        if (result !== void 0) {\n                            resolve(result);\n                            return;\n                        }\n                    }\n\n                    resolve();\n                }, function (t, error) {\n                    reject(error);\n                });\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\nfunction _setItem(key, value, callback, retriesLeft) {\n    var self = this;\n\n    key = normalizeKey(key);\n\n    var promise = new Promise$1(function (resolve, reject) {\n        self.ready().then(function () {\n            // The localStorage API doesn't return undefined values in an\n            // \"expected\" way, so undefined is always cast to null in all\n            // drivers. See: https://github.com/mozilla/localForage/pull/42\n            if (value === undefined) {\n                value = null;\n            }\n\n            // Save the original value to pass to the callback.\n            var originalValue = value;\n\n            var dbInfo = self._dbInfo;\n            dbInfo.serializer.serialize(value, function (value, error) {\n                if (error) {\n                    reject(error);\n                } else {\n                    dbInfo.db.transaction(function (t) {\n                        tryExecuteSql(t, dbInfo, 'INSERT OR REPLACE INTO ' + dbInfo.storeName + ' ' + '(key, value) VALUES (?, ?)', [key, value], function () {\n                            resolve(originalValue);\n                        }, function (t, error) {\n                            reject(error);\n                        });\n                    }, function (sqlError) {\n                        // The transaction failed; check\n                        // to see if it's a quota error.\n                        if (sqlError.code === sqlError.QUOTA_ERR) {\n                            // We reject the callback outright for now, but\n                            // it's worth trying to re-run the transaction.\n                            // Even if the user accepts the prompt to use\n                            // more storage on Safari, this error will\n                            // be called.\n                            //\n                            // Try to re-run the transaction.\n                            if (retriesLeft > 0) {\n                                resolve(_setItem.apply(self, [key, originalValue, callback, retriesLeft - 1]));\n                                return;\n                            }\n                            reject(sqlError);\n                        }\n                    });\n                }\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\nfunction setItem$1(key, value, callback) {\n    return _setItem.apply(this, [key, value, callback, 1]);\n}\n\nfunction removeItem$1(key, callback) {\n    var self = this;\n\n    key = normalizeKey(key);\n\n    var promise = new Promise$1(function (resolve, reject) {\n        self.ready().then(function () {\n            var dbInfo = self._dbInfo;\n            dbInfo.db.transaction(function (t) {\n                tryExecuteSql(t, dbInfo, 'DELETE FROM ' + dbInfo.storeName + ' WHERE key = ?', [key], function () {\n                    resolve();\n                }, function (t, error) {\n                    reject(error);\n                });\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\n// Deletes every item in the table.\n// TODO: Find out if this resets the AUTO_INCREMENT number.\nfunction clear$1(callback) {\n    var self = this;\n\n    var promise = new Promise$1(function (resolve, reject) {\n        self.ready().then(function () {\n            var dbInfo = self._dbInfo;\n            dbInfo.db.transaction(function (t) {\n                tryExecuteSql(t, dbInfo, 'DELETE FROM ' + dbInfo.storeName, [], function () {\n                    resolve();\n                }, function (t, error) {\n                    reject(error);\n                });\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\n// Does a simple `COUNT(key)` to get the number of items stored in\n// localForage.\nfunction length$1(callback) {\n    var self = this;\n\n    var promise = new Promise$1(function (resolve, reject) {\n        self.ready().then(function () {\n            var dbInfo = self._dbInfo;\n            dbInfo.db.transaction(function (t) {\n                // Ahhh, SQL makes this one soooooo easy.\n                tryExecuteSql(t, dbInfo, 'SELECT COUNT(key) as c FROM ' + dbInfo.storeName, [], function (t, results) {\n                    var result = results.rows.item(0).c;\n                    resolve(result);\n                }, function (t, error) {\n                    reject(error);\n                });\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\n// Return the key located at key index X; essentially gets the key from a\n// `WHERE id = ?`. This is the most efficient way I can think to implement\n// this rarely-used (in my experience) part of the API, but it can seem\n// inconsistent, because we do `INSERT OR REPLACE INTO` on `setItem()`, so\n// the ID of each key will change every time it's updated. Perhaps a stored\n// procedure for the `setItem()` SQL would solve this problem?\n// TODO: Don't change ID on `setItem()`.\nfunction key$1(n, callback) {\n    var self = this;\n\n    var promise = new Promise$1(function (resolve, reject) {\n        self.ready().then(function () {\n            var dbInfo = self._dbInfo;\n            dbInfo.db.transaction(function (t) {\n                tryExecuteSql(t, dbInfo, 'SELECT key FROM ' + dbInfo.storeName + ' WHERE id = ? LIMIT 1', [n + 1], function (t, results) {\n                    var result = results.rows.length ? results.rows.item(0).key : null;\n                    resolve(result);\n                }, function (t, error) {\n                    reject(error);\n                });\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\nfunction keys$1(callback) {\n    var self = this;\n\n    var promise = new Promise$1(function (resolve, reject) {\n        self.ready().then(function () {\n            var dbInfo = self._dbInfo;\n            dbInfo.db.transaction(function (t) {\n                tryExecuteSql(t, dbInfo, 'SELECT key FROM ' + dbInfo.storeName, [], function (t, results) {\n                    var keys = [];\n\n                    for (var i = 0; i < results.rows.length; i++) {\n                        keys.push(results.rows.item(i).key);\n                    }\n\n                    resolve(keys);\n                }, function (t, error) {\n                    reject(error);\n                });\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\n// https://www.w3.org/TR/webdatabase/#databases\n// > There is no way to enumerate or delete the databases available for an origin from this API.\nfunction getAllStoreNames(db) {\n    return new Promise$1(function (resolve, reject) {\n        db.transaction(function (t) {\n            t.executeSql('SELECT name FROM sqlite_master ' + \"WHERE type='table' AND name <> '__WebKitDatabaseInfoTable__'\", [], function (t, results) {\n                var storeNames = [];\n\n                for (var i = 0; i < results.rows.length; i++) {\n                    storeNames.push(results.rows.item(i).name);\n                }\n\n                resolve({\n                    db: db,\n                    storeNames: storeNames\n                });\n            }, function (t, error) {\n                reject(error);\n            });\n        }, function (sqlError) {\n            reject(sqlError);\n        });\n    });\n}\n\nfunction dropInstance$1(options, callback) {\n    callback = getCallback.apply(this, arguments);\n\n    var currentConfig = this.config();\n    options = typeof options !== 'function' && options || {};\n    if (!options.name) {\n        options.name = options.name || currentConfig.name;\n        options.storeName = options.storeName || currentConfig.storeName;\n    }\n\n    var self = this;\n    var promise;\n    if (!options.name) {\n        promise = Promise$1.reject('Invalid arguments');\n    } else {\n        promise = new Promise$1(function (resolve) {\n            var db;\n            if (options.name === currentConfig.name) {\n                // use the db reference of the current instance\n                db = self._dbInfo.db;\n            } else {\n                db = openDatabase(options.name, '', '', 0);\n            }\n\n            if (!options.storeName) {\n                // drop all database tables\n                resolve(getAllStoreNames(db));\n            } else {\n                resolve({\n                    db: db,\n                    storeNames: [options.storeName]\n                });\n            }\n        }).then(function (operationInfo) {\n            return new Promise$1(function (resolve, reject) {\n                operationInfo.db.transaction(function (t) {\n                    function dropTable(storeName) {\n                        return new Promise$1(function (resolve, reject) {\n                            t.executeSql('DROP TABLE IF EXISTS ' + storeName, [], function () {\n                                resolve();\n                            }, function (t, error) {\n                                reject(error);\n                            });\n                        });\n                    }\n\n                    var operations = [];\n                    for (var i = 0, len = operationInfo.storeNames.length; i < len; i++) {\n                        operations.push(dropTable(operationInfo.storeNames[i]));\n                    }\n\n                    Promise$1.all(operations).then(function () {\n                        resolve();\n                    })[\"catch\"](function (e) {\n                        reject(e);\n                    });\n                }, function (sqlError) {\n                    reject(sqlError);\n                });\n            });\n        });\n    }\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\nvar webSQLStorage = {\n    _driver: 'webSQLStorage',\n    _initStorage: _initStorage$1,\n    _support: isWebSQLValid(),\n    iterate: iterate$1,\n    getItem: getItem$1,\n    setItem: setItem$1,\n    removeItem: removeItem$1,\n    clear: clear$1,\n    length: length$1,\n    key: key$1,\n    keys: keys$1,\n    dropInstance: dropInstance$1\n};\n\nfunction isLocalStorageValid() {\n    try {\n        return typeof localStorage !== 'undefined' && 'setItem' in localStorage &&\n        // in IE8 typeof localStorage.setItem === 'object'\n        !!localStorage.setItem;\n    } catch (e) {\n        return false;\n    }\n}\n\nfunction _getKeyPrefix(options, defaultConfig) {\n    var keyPrefix = options.name + '/';\n\n    if (options.storeName !== defaultConfig.storeName) {\n        keyPrefix += options.storeName + '/';\n    }\n    return keyPrefix;\n}\n\n// Check if localStorage throws when saving an item\nfunction checkIfLocalStorageThrows() {\n    var localStorageTestKey = '_localforage_support_test';\n\n    try {\n        localStorage.setItem(localStorageTestKey, true);\n        localStorage.removeItem(localStorageTestKey);\n\n        return false;\n    } catch (e) {\n        return true;\n    }\n}\n\n// Check if localStorage is usable and allows to save an item\n// This method checks if localStorage is usable in Safari Private Browsing\n// mode, or in any other case where the available quota for localStorage\n// is 0 and there wasn't any saved items yet.\nfunction _isLocalStorageUsable() {\n    return !checkIfLocalStorageThrows() || localStorage.length > 0;\n}\n\n// Config the localStorage backend, using options set in the config.\nfunction _initStorage$2(options) {\n    var self = this;\n    var dbInfo = {};\n    if (options) {\n        for (var i in options) {\n            dbInfo[i] = options[i];\n        }\n    }\n\n    dbInfo.keyPrefix = _getKeyPrefix(options, self._defaultConfig);\n\n    if (!_isLocalStorageUsable()) {\n        return Promise$1.reject();\n    }\n\n    self._dbInfo = dbInfo;\n    dbInfo.serializer = localforageSerializer;\n\n    return Promise$1.resolve();\n}\n\n// Remove all keys from the datastore, effectively destroying all data in\n// the app's key/value store!\nfunction clear$2(callback) {\n    var self = this;\n    var promise = self.ready().then(function () {\n        var keyPrefix = self._dbInfo.keyPrefix;\n\n        for (var i = localStorage.length - 1; i >= 0; i--) {\n            var key = localStorage.key(i);\n\n            if (key.indexOf(keyPrefix) === 0) {\n                localStorage.removeItem(key);\n            }\n        }\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\n// Retrieve an item from the store. Unlike the original async_storage\n// library in Gaia, we don't modify return values at all. If a key's value\n// is `undefined`, we pass that value to the callback function.\nfunction getItem$2(key, callback) {\n    var self = this;\n\n    key = normalizeKey(key);\n\n    var promise = self.ready().then(function () {\n        var dbInfo = self._dbInfo;\n        var result = localStorage.getItem(dbInfo.keyPrefix + key);\n\n        // If a result was found, parse it from the serialized\n        // string into a JS object. If result isn't truthy, the key\n        // is likely undefined and we'll pass it straight to the\n        // callback.\n        if (result) {\n            result = dbInfo.serializer.deserialize(result);\n        }\n\n        return result;\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\n// Iterate over all items in the store.\nfunction iterate$2(iterator, callback) {\n    var self = this;\n\n    var promise = self.ready().then(function () {\n        var dbInfo = self._dbInfo;\n        var keyPrefix = dbInfo.keyPrefix;\n        var keyPrefixLength = keyPrefix.length;\n        var length = localStorage.length;\n\n        // We use a dedicated iterator instead of the `i` variable below\n        // so other keys we fetch in localStorage aren't counted in\n        // the `iterationNumber` argument passed to the `iterate()`\n        // callback.\n        //\n        // See: github.com/mozilla/localForage/pull/435#discussion_r38061530\n        var iterationNumber = 1;\n\n        for (var i = 0; i < length; i++) {\n            var key = localStorage.key(i);\n            if (key.indexOf(keyPrefix) !== 0) {\n                continue;\n            }\n            var value = localStorage.getItem(key);\n\n            // If a result was found, parse it from the serialized\n            // string into a JS object. If result isn't truthy, the\n            // key is likely undefined and we'll pass it straight\n            // to the iterator.\n            if (value) {\n                value = dbInfo.serializer.deserialize(value);\n            }\n\n            value = iterator(value, key.substring(keyPrefixLength), iterationNumber++);\n\n            if (value !== void 0) {\n                return value;\n            }\n        }\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\n// Same as localStorage's key() method, except takes a callback.\nfunction key$2(n, callback) {\n    var self = this;\n    var promise = self.ready().then(function () {\n        var dbInfo = self._dbInfo;\n        var result;\n        try {\n            result = localStorage.key(n);\n        } catch (error) {\n            result = null;\n        }\n\n        // Remove the prefix from the key, if a key is found.\n        if (result) {\n            result = result.substring(dbInfo.keyPrefix.length);\n        }\n\n        return result;\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\nfunction keys$2(callback) {\n    var self = this;\n    var promise = self.ready().then(function () {\n        var dbInfo = self._dbInfo;\n        var length = localStorage.length;\n        var keys = [];\n\n        for (var i = 0; i < length; i++) {\n            var itemKey = localStorage.key(i);\n            if (itemKey.indexOf(dbInfo.keyPrefix) === 0) {\n                keys.push(itemKey.substring(dbInfo.keyPrefix.length));\n            }\n        }\n\n        return keys;\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\n// Supply the number of keys in the datastore to the callback function.\nfunction length$2(callback) {\n    var self = this;\n    var promise = self.keys().then(function (keys) {\n        return keys.length;\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\n// Remove an item from the store, nice and simple.\nfunction removeItem$2(key, callback) {\n    var self = this;\n\n    key = normalizeKey(key);\n\n    var promise = self.ready().then(function () {\n        var dbInfo = self._dbInfo;\n        localStorage.removeItem(dbInfo.keyPrefix + key);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\n// Set a key's value and run an optional callback once the value is set.\n// Unlike Gaia's implementation, the callback function is passed the value,\n// in case you want to operate on that value only after you're sure it\n// saved, or something like that.\nfunction setItem$2(key, value, callback) {\n    var self = this;\n\n    key = normalizeKey(key);\n\n    var promise = self.ready().then(function () {\n        // Convert undefined values to null.\n        // https://github.com/mozilla/localForage/pull/42\n        if (value === undefined) {\n            value = null;\n        }\n\n        // Save the original value to pass to the callback.\n        var originalValue = value;\n\n        return new Promise$1(function (resolve, reject) {\n            var dbInfo = self._dbInfo;\n            dbInfo.serializer.serialize(value, function (value, error) {\n                if (error) {\n                    reject(error);\n                } else {\n                    try {\n                        localStorage.setItem(dbInfo.keyPrefix + key, value);\n                        resolve(originalValue);\n                    } catch (e) {\n                        // localStorage capacity exceeded.\n                        // TODO: Make this a specific error/event.\n                        if (e.name === 'QuotaExceededError' || e.name === 'NS_ERROR_DOM_QUOTA_REACHED') {\n                            reject(e);\n                        }\n                        reject(e);\n                    }\n                }\n            });\n        });\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\nfunction dropInstance$2(options, callback) {\n    callback = getCallback.apply(this, arguments);\n\n    options = typeof options !== 'function' && options || {};\n    if (!options.name) {\n        var currentConfig = this.config();\n        options.name = options.name || currentConfig.name;\n        options.storeName = options.storeName || currentConfig.storeName;\n    }\n\n    var self = this;\n    var promise;\n    if (!options.name) {\n        promise = Promise$1.reject('Invalid arguments');\n    } else {\n        promise = new Promise$1(function (resolve) {\n            if (!options.storeName) {\n                resolve(options.name + '/');\n            } else {\n                resolve(_getKeyPrefix(options, self._defaultConfig));\n            }\n        }).then(function (keyPrefix) {\n            for (var i = localStorage.length - 1; i >= 0; i--) {\n                var key = localStorage.key(i);\n\n                if (key.indexOf(keyPrefix) === 0) {\n                    localStorage.removeItem(key);\n                }\n            }\n        });\n    }\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\nvar localStorageWrapper = {\n    _driver: 'localStorageWrapper',\n    _initStorage: _initStorage$2,\n    _support: isLocalStorageValid(),\n    iterate: iterate$2,\n    getItem: getItem$2,\n    setItem: setItem$2,\n    removeItem: removeItem$2,\n    clear: clear$2,\n    length: length$2,\n    key: key$2,\n    keys: keys$2,\n    dropInstance: dropInstance$2\n};\n\nvar sameValue = function sameValue(x, y) {\n    return x === y || typeof x === 'number' && typeof y === 'number' && isNaN(x) && isNaN(y);\n};\n\nvar includes = function includes(array, searchElement) {\n    var len = array.length;\n    var i = 0;\n    while (i < len) {\n        if (sameValue(array[i], searchElement)) {\n            return true;\n        }\n        i++;\n    }\n\n    return false;\n};\n\nvar isArray = Array.isArray || function (arg) {\n    return Object.prototype.toString.call(arg) === '[object Array]';\n};\n\n// Drivers are stored here when `defineDriver()` is called.\n// They are shared across all instances of localForage.\nvar DefinedDrivers = {};\n\nvar DriverSupport = {};\n\nvar DefaultDrivers = {\n    INDEXEDDB: asyncStorage,\n    WEBSQL: webSQLStorage,\n    LOCALSTORAGE: localStorageWrapper\n};\n\nvar DefaultDriverOrder = [DefaultDrivers.INDEXEDDB._driver, DefaultDrivers.WEBSQL._driver, DefaultDrivers.LOCALSTORAGE._driver];\n\nvar OptionalDriverMethods = ['dropInstance'];\n\nvar LibraryMethods = ['clear', 'getItem', 'iterate', 'key', 'keys', 'length', 'removeItem', 'setItem'].concat(OptionalDriverMethods);\n\nvar DefaultConfig = {\n    description: '',\n    driver: DefaultDriverOrder.slice(),\n    name: 'localforage',\n    // Default DB size is _JUST UNDER_ 5MB, as it's the highest size\n    // we can use without a prompt.\n    size: 4980736,\n    storeName: 'keyvaluepairs',\n    version: 1.0\n};\n\nfunction callWhenReady(localForageInstance, libraryMethod) {\n    localForageInstance[libraryMethod] = function () {\n        var _args = arguments;\n        return localForageInstance.ready().then(function () {\n            return localForageInstance[libraryMethod].apply(localForageInstance, _args);\n        });\n    };\n}\n\nfunction extend() {\n    for (var i = 1; i < arguments.length; i++) {\n        var arg = arguments[i];\n\n        if (arg) {\n            for (var _key in arg) {\n                if (arg.hasOwnProperty(_key)) {\n                    if (isArray(arg[_key])) {\n                        arguments[0][_key] = arg[_key].slice();\n                    } else {\n                        arguments[0][_key] = arg[_key];\n                    }\n                }\n            }\n        }\n    }\n\n    return arguments[0];\n}\n\nvar LocalForage = function () {\n    function LocalForage(options) {\n        _classCallCheck(this, LocalForage);\n\n        for (var driverTypeKey in DefaultDrivers) {\n            if (DefaultDrivers.hasOwnProperty(driverTypeKey)) {\n                var driver = DefaultDrivers[driverTypeKey];\n                var driverName = driver._driver;\n                this[driverTypeKey] = driverName;\n\n                if (!DefinedDrivers[driverName]) {\n                    // we don't need to wait for the promise,\n                    // since the default drivers can be defined\n                    // in a blocking manner\n                    this.defineDriver(driver);\n                }\n            }\n        }\n\n        this._defaultConfig = extend({}, DefaultConfig);\n        this._config = extend({}, this._defaultConfig, options);\n        this._driverSet = null;\n        this._initDriver = null;\n        this._ready = false;\n        this._dbInfo = null;\n\n        this._wrapLibraryMethodsWithReady();\n        this.setDriver(this._config.driver)[\"catch\"](function () {});\n    }\n\n    // Set any config values for localForage; can be called anytime before\n    // the first API call (e.g. `getItem`, `setItem`).\n    // We loop through options so we don't overwrite existing config\n    // values.\n\n\n    LocalForage.prototype.config = function config(options) {\n        // If the options argument is an object, we use it to set values.\n        // Otherwise, we return either a specified config value or all\n        // config values.\n        if ((typeof options === 'undefined' ? 'undefined' : _typeof(options)) === 'object') {\n            // If localforage is ready and fully initialized, we can't set\n            // any new configuration values. Instead, we return an error.\n            if (this._ready) {\n                return new Error(\"Can't call config() after localforage \" + 'has been used.');\n            }\n\n            for (var i in options) {\n                if (i === 'storeName') {\n                    options[i] = options[i].replace(/\\W/g, '_');\n                }\n\n                if (i === 'version' && typeof options[i] !== 'number') {\n                    return new Error('Database version must be a number.');\n                }\n\n                this._config[i] = options[i];\n            }\n\n            // after all config options are set and\n            // the driver option is used, try setting it\n            if ('driver' in options && options.driver) {\n                return this.setDriver(this._config.driver);\n            }\n\n            return true;\n        } else if (typeof options === 'string') {\n            return this._config[options];\n        } else {\n            return this._config;\n        }\n    };\n\n    // Used to define a custom driver, shared across all instances of\n    // localForage.\n\n\n    LocalForage.prototype.defineDriver = function defineDriver(driverObject, callback, errorCallback) {\n        var promise = new Promise$1(function (resolve, reject) {\n            try {\n                var driverName = driverObject._driver;\n                var complianceError = new Error('Custom driver not compliant; see ' + 'https://mozilla.github.io/localForage/#definedriver');\n\n                // A driver name should be defined and not overlap with the\n                // library-defined, default drivers.\n                if (!driverObject._driver) {\n                    reject(complianceError);\n                    return;\n                }\n\n                var driverMethods = LibraryMethods.concat('_initStorage');\n                for (var i = 0, len = driverMethods.length; i < len; i++) {\n                    var driverMethodName = driverMethods[i];\n\n                    // when the property is there,\n                    // it should be a method even when optional\n                    var isRequired = !includes(OptionalDriverMethods, driverMethodName);\n                    if ((isRequired || driverObject[driverMethodName]) && typeof driverObject[driverMethodName] !== 'function') {\n                        reject(complianceError);\n                        return;\n                    }\n                }\n\n                var configureMissingMethods = function configureMissingMethods() {\n                    var methodNotImplementedFactory = function methodNotImplementedFactory(methodName) {\n                        return function () {\n                            var error = new Error('Method ' + methodName + ' is not implemented by the current driver');\n                            var promise = Promise$1.reject(error);\n                            executeCallback(promise, arguments[arguments.length - 1]);\n                            return promise;\n                        };\n                    };\n\n                    for (var _i = 0, _len = OptionalDriverMethods.length; _i < _len; _i++) {\n                        var optionalDriverMethod = OptionalDriverMethods[_i];\n                        if (!driverObject[optionalDriverMethod]) {\n                            driverObject[optionalDriverMethod] = methodNotImplementedFactory(optionalDriverMethod);\n                        }\n                    }\n                };\n\n                configureMissingMethods();\n\n                var setDriverSupport = function setDriverSupport(support) {\n                    if (DefinedDrivers[driverName]) {\n                        console.info('Redefining LocalForage driver: ' + driverName);\n                    }\n                    DefinedDrivers[driverName] = driverObject;\n                    DriverSupport[driverName] = support;\n                    // don't use a then, so that we can define\n                    // drivers that have simple _support methods\n                    // in a blocking manner\n                    resolve();\n                };\n\n                if ('_support' in driverObject) {\n                    if (driverObject._support && typeof driverObject._support === 'function') {\n                        driverObject._support().then(setDriverSupport, reject);\n                    } else {\n                        setDriverSupport(!!driverObject._support);\n                    }\n                } else {\n                    setDriverSupport(true);\n                }\n            } catch (e) {\n                reject(e);\n            }\n        });\n\n        executeTwoCallbacks(promise, callback, errorCallback);\n        return promise;\n    };\n\n    LocalForage.prototype.driver = function driver() {\n        return this._driver || null;\n    };\n\n    LocalForage.prototype.getDriver = function getDriver(driverName, callback, errorCallback) {\n        var getDriverPromise = DefinedDrivers[driverName] ? Promise$1.resolve(DefinedDrivers[driverName]) : Promise$1.reject(new Error('Driver not found.'));\n\n        executeTwoCallbacks(getDriverPromise, callback, errorCallback);\n        return getDriverPromise;\n    };\n\n    LocalForage.prototype.getSerializer = function getSerializer(callback) {\n        var serializerPromise = Promise$1.resolve(localforageSerializer);\n        executeTwoCallbacks(serializerPromise, callback);\n        return serializerPromise;\n    };\n\n    LocalForage.prototype.ready = function ready(callback) {\n        var self = this;\n\n        var promise = self._driverSet.then(function () {\n            if (self._ready === null) {\n                self._ready = self._initDriver();\n            }\n\n            return self._ready;\n        });\n\n        executeTwoCallbacks(promise, callback, callback);\n        return promise;\n    };\n\n    LocalForage.prototype.setDriver = function setDriver(drivers, callback, errorCallback) {\n        var self = this;\n\n        if (!isArray(drivers)) {\n            drivers = [drivers];\n        }\n\n        var supportedDrivers = this._getSupportedDrivers(drivers);\n\n        function setDriverToConfig() {\n            self._config.driver = self.driver();\n        }\n\n        function extendSelfWithDriver(driver) {\n            self._extend(driver);\n            setDriverToConfig();\n\n            self._ready = self._initStorage(self._config);\n            return self._ready;\n        }\n\n        function initDriver(supportedDrivers) {\n            return function () {\n                var currentDriverIndex = 0;\n\n                function driverPromiseLoop() {\n                    while (currentDriverIndex < supportedDrivers.length) {\n                        var driverName = supportedDrivers[currentDriverIndex];\n                        currentDriverIndex++;\n\n                        self._dbInfo = null;\n                        self._ready = null;\n\n                        return self.getDriver(driverName).then(extendSelfWithDriver)[\"catch\"](driverPromiseLoop);\n                    }\n\n                    setDriverToConfig();\n                    var error = new Error('No available storage method found.');\n                    self._driverSet = Promise$1.reject(error);\n                    return self._driverSet;\n                }\n\n                return driverPromiseLoop();\n            };\n        }\n\n        // There might be a driver initialization in progress\n        // so wait for it to finish in order to avoid a possible\n        // race condition to set _dbInfo\n        var oldDriverSetDone = this._driverSet !== null ? this._driverSet[\"catch\"](function () {\n            return Promise$1.resolve();\n        }) : Promise$1.resolve();\n\n        this._driverSet = oldDriverSetDone.then(function () {\n            var driverName = supportedDrivers[0];\n            self._dbInfo = null;\n            self._ready = null;\n\n            return self.getDriver(driverName).then(function (driver) {\n                self._driver = driver._driver;\n                setDriverToConfig();\n                self._wrapLibraryMethodsWithReady();\n                self._initDriver = initDriver(supportedDrivers);\n            });\n        })[\"catch\"](function () {\n            setDriverToConfig();\n            var error = new Error('No available storage method found.');\n            self._driverSet = Promise$1.reject(error);\n            return self._driverSet;\n        });\n\n        executeTwoCallbacks(this._driverSet, callback, errorCallback);\n        return this._driverSet;\n    };\n\n    LocalForage.prototype.supports = function supports(driverName) {\n        return !!DriverSupport[driverName];\n    };\n\n    LocalForage.prototype._extend = function _extend(libraryMethodsAndProperties) {\n        extend(this, libraryMethodsAndProperties);\n    };\n\n    LocalForage.prototype._getSupportedDrivers = function _getSupportedDrivers(drivers) {\n        var supportedDrivers = [];\n        for (var i = 0, len = drivers.length; i < len; i++) {\n            var driverName = drivers[i];\n            if (this.supports(driverName)) {\n                supportedDrivers.push(driverName);\n            }\n        }\n        return supportedDrivers;\n    };\n\n    LocalForage.prototype._wrapLibraryMethodsWithReady = function _wrapLibraryMethodsWithReady() {\n        // Add a stub for each driver API method that delays the call to the\n        // corresponding driver method until localForage is ready. These stubs\n        // will be replaced by the driver methods as soon as the driver is\n        // loaded, so there is no performance impact.\n        for (var i = 0, len = LibraryMethods.length; i < len; i++) {\n            callWhenReady(this, LibraryMethods[i]);\n        }\n    };\n\n    LocalForage.prototype.createInstance = function createInstance(options) {\n        return new LocalForage(options);\n    };\n\n    return LocalForage;\n}();\n\n// The actual localForage object that we expose as a module or via a\n// global. It's extended by pulling in one of our other libraries.\n\n\nvar localforage_js = new LocalForage();\n\nmodule.exports = localforage_js;\n\n},{\"3\":3}]},{},[4])(4)\n});\n", "/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable deprecation/deprecation */\nimport type { Event, EventProcessor, Hub, Integration } from '@sentry/types';\nimport { GLOBAL_OBJ, logger, normalize, uuid4 } from '@sentry/utils';\nimport * as localForage from 'localforage';\n\nimport { DEBUG_BUILD } from './debug-build';\n\nconst WINDOW = GLOBAL_OBJ as typeof GLOBAL_OBJ & Window;\n\ntype LocalForage = {\n  setItem<T>(key: string, value: T, callback?: (err: any, value: T) => void): Promise<T>;\n  iterate<T, U>(\n    iteratee: (value: T, key: string, iterationNumber: number) => U,\n    callback?: (err: any, result: U) => void,\n  ): Promise<U>;\n  removeItem(key: string, callback?: (err: any) => void): Promise<void>;\n  length(): Promise<number>;\n};\n\nexport type Item = { key: string; value: Event };\n\n/**\n * cache offline errors and send when connected\n * @deprecated The offline integration has been deprecated in favor of the offline transport wrapper.\n *\n * http://docs.sentry.io/platforms/javascript/configuration/transports/#offline-caching\n */\nexport class Offline implements Integration {\n  /**\n   * @inheritDoc\n   */\n  public static id: string = 'Offline';\n\n  /**\n   * @inheritDoc\n   */\n  public readonly name: string;\n\n  /**\n   * the current hub instance\n   */\n  public hub?: Hub;\n\n  /**\n   * maximum number of events to store while offline\n   */\n  public maxStoredEvents: number;\n\n  /**\n   * event cache\n   */\n  public offlineEventStore: LocalForage;\n\n  /**\n   * @inheritDoc\n   */\n  public constructor(options: { maxStoredEvents?: number } = {}) {\n    this.name = Offline.id;\n\n    this.maxStoredEvents = options.maxStoredEvents || 30; // set a reasonable default\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n    this.offlineEventStore = localForage.createInstance({\n      name: 'sentry/offlineEventStore',\n    });\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setupOnce(addGlobalEventProcessor: (callback: EventProcessor) => void, getCurrentHub: () => Hub): void {\n    this.hub = getCurrentHub();\n\n    if ('addEventListener' in WINDOW) {\n      WINDOW.addEventListener('online', () => {\n        void this._sendEvents().catch(() => {\n          DEBUG_BUILD && logger.warn('could not send cached events');\n        });\n      });\n    }\n\n    const eventProcessor: EventProcessor = event => {\n      // eslint-disable-next-line deprecation/deprecation\n      if (this.hub && this.hub.getIntegration(Offline)) {\n        // cache if we are positively offline\n        if ('navigator' in WINDOW && 'onLine' in WINDOW.navigator && !WINDOW.navigator.onLine) {\n          DEBUG_BUILD && logger.log('Event dropped due to being a offline - caching instead');\n\n          void this._cacheEvent(event)\n            .then((_event: Event): Promise<void> => this._enforceMaxEvents())\n            .catch((_error): void => {\n              DEBUG_BUILD && logger.warn('could not cache event while offline');\n            });\n\n          // return null on success or failure, because being offline will still result in an error\n          return null;\n        }\n      }\n\n      return event;\n    };\n\n    eventProcessor.id = this.name;\n    addGlobalEventProcessor(eventProcessor);\n\n    // if online now, send any events stored in a previous offline session\n    if ('navigator' in WINDOW && 'onLine' in WINDOW.navigator && WINDOW.navigator.onLine) {\n      void this._sendEvents().catch(() => {\n        DEBUG_BUILD && logger.warn('could not send cached events');\n      });\n    }\n  }\n\n  /**\n   * cache an event to send later\n   * @param event an event\n   */\n  private async _cacheEvent(event: Event): Promise<Event> {\n    return this.offlineEventStore.setItem<Event>(uuid4(), normalize(event));\n  }\n\n  /**\n   * purge excess events if necessary\n   */\n  private async _enforceMaxEvents(): Promise<void> {\n    const events: Array<{ event: Event; cacheKey: string }> = [];\n\n    return this.offlineEventStore\n      .iterate<Event, void>((event: Event, cacheKey: string, _index: number): void => {\n        // aggregate events\n        events.push({ cacheKey, event });\n      })\n      .then(\n        (): Promise<void> =>\n          // this promise resolves when the iteration is finished\n          this._purgeEvents(\n            // purge all events past maxStoredEvents in reverse chronological order\n            events\n              .sort((a, b) => (b.event.timestamp || 0) - (a.event.timestamp || 0))\n              .slice(this.maxStoredEvents < events.length ? this.maxStoredEvents : events.length)\n              .map(event => event.cacheKey),\n          ),\n      )\n      .catch((_error): void => {\n        DEBUG_BUILD && logger.warn('could not enforce max events');\n      });\n  }\n\n  /**\n   * purge event from cache\n   */\n  private async _purgeEvent(cacheKey: string): Promise<void> {\n    return this.offlineEventStore.removeItem(cacheKey);\n  }\n\n  /**\n   * purge events from cache\n   */\n  private async _purgeEvents(cacheKeys: string[]): Promise<void> {\n    // trail with .then to ensure the return type as void and not void|void[]\n    return Promise.all(cacheKeys.map(cacheKey => this._purgeEvent(cacheKey))).then();\n  }\n\n  /**\n   * send all events\n   */\n  private async _sendEvents(): Promise<void> {\n    return this.offlineEventStore.iterate<Event, void>((event: Event, cacheKey: string, _index: number): void => {\n      if (this.hub) {\n        this.hub.captureEvent(event);\n\n        void this._purgeEvent(cacheKey).catch((_error): void => {\n          DEBUG_BUILD && logger.warn('could not purge event from cache');\n        });\n      } else {\n        DEBUG_BUILD && logger.warn('no hub found - could not send cached event');\n      }\n    });\n  }\n}\n", "import { captureMessage, convertIntegrationFnToClass, defineIntegration, getClient, withScope } from '@sentry/core';\nimport type { Client, Integration, IntegrationClass, IntegrationFn } from '@sentry/types';\nimport { GLOBAL_OBJ, supportsReportingObserver } from '@sentry/utils';\n\nconst WINDOW = GLOBAL_OBJ as typeof GLOBAL_OBJ & Window;\n\nconst INTEGRATION_NAME = 'ReportingObserver';\n\ninterface Report {\n  [key: string]: unknown;\n  type: ReportTypes;\n  url: string;\n  body?: ReportBody;\n}\n\ntype ReportTypes = 'crash' | 'deprecation' | 'intervention';\n\ntype ReportBody = CrashReportBody | DeprecationReportBody | InterventionReportBody;\n\ninterface CrashReportBody {\n  [key: string]: unknown;\n  crashId: string;\n  reason?: string;\n}\n\ninterface DeprecationReportBody {\n  [key: string]: unknown;\n  id: string;\n  anticipatedRemoval?: Date;\n  message: string;\n  sourceFile?: string;\n  lineNumber?: number;\n  columnNumber?: number;\n}\n\ninterface InterventionReportBody {\n  [key: string]: unknown;\n  id: string;\n  message: string;\n  sourceFile?: string;\n  lineNumber?: number;\n  columnNumber?: number;\n}\n\ninterface ReportingObserverOptions {\n  types?: ReportTypes[];\n}\n\nconst SETUP_CLIENTS = new WeakMap<Client, boolean>();\n\nconst _reportingObserverIntegration = ((options: ReportingObserverOptions = {}) => {\n  const types = options.types || ['crash', 'deprecation', 'intervention'];\n\n  /** Handler for the reporting observer. */\n  function handler(reports: Report[]): void {\n    if (!SETUP_CLIENTS.has(getClient() as Client)) {\n      return;\n    }\n\n    for (const report of reports) {\n      withScope(scope => {\n        scope.setExtra('url', report.url);\n\n        const label = `ReportingObserver [${report.type}]`;\n        let details = 'No details available';\n\n        if (report.body) {\n          // Object.keys doesn't work on ReportBody, as all properties are inheirted\n          const plainBody: {\n            [key: string]: unknown;\n          } = {};\n\n          // eslint-disable-next-line guard-for-in\n          for (const prop in report.body) {\n            plainBody[prop] = report.body[prop];\n          }\n\n          scope.setExtra('body', plainBody);\n\n          if (report.type === 'crash') {\n            const body = report.body as CrashReportBody;\n            // A fancy way to create a message out of crashId OR reason OR both OR fallback\n            details = [body.crashId || '', body.reason || ''].join(' ').trim() || details;\n          } else {\n            const body = report.body as DeprecationReportBody | InterventionReportBody;\n            details = body.message || details;\n          }\n        }\n\n        captureMessage(`${label}: ${details}`);\n      });\n    }\n  }\n\n  return {\n    name: INTEGRATION_NAME,\n    setupOnce() {\n      if (!supportsReportingObserver()) {\n        return;\n      }\n\n      // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-explicit-any\n      const observer = new (WINDOW as any).ReportingObserver(handler, {\n        buffered: true,\n        types,\n      });\n\n      // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n      observer.observe();\n    },\n\n    setup(client): void {\n      SETUP_CLIENTS.set(client, true);\n    },\n  };\n}) satisfies IntegrationFn;\n\nexport const reportingObserverIntegration = defineIntegration(_reportingObserverIntegration);\n\n/**\n * Reporting API integration - https://w3c.github.io/reporting/\n * @deprecated Use `reportingObserverIntegration()` instead.\n */\n// eslint-disable-next-line deprecation/deprecation\nexport const ReportingObserver = convertIntegrationFnToClass(\n  INTEGRATION_NAME,\n  reportingObserverIntegration,\n) as IntegrationClass<Integration & { setup: (client: Client) => void }> & {\n  new (options?: {\n    types?: ReportTypes[];\n  }): Integration;\n};\n", "import { convertIntegrationFnToClass, defineIntegration } from '@sentry/core';\nimport type { Event, Integration, IntegrationClass, IntegrationFn, StackFrame, Stacktrace } from '@sentry/types';\nimport { basename, relative } from '@sentry/utils';\n\ntype StackFrameIteratee = (frame: StackFrame) => StackFrame;\n\nconst INTEGRATION_NAME = 'RewriteFrames';\n\ninterface RewriteFramesOptions {\n  root?: string;\n  prefix?: string;\n  iteratee?: StackFrameIteratee;\n}\n\nconst _rewriteFramesIntegration = ((options: RewriteFramesOptions = {}) => {\n  const root = options.root;\n  const prefix = options.prefix || 'app:///';\n\n  const iteratee: StackFrameIteratee =\n    options.iteratee ||\n    ((frame: StackFrame) => {\n      if (!frame.filename) {\n        return frame;\n      }\n      // Determine if this is a Windows frame by checking for a Windows-style prefix such as `C:\\`\n      const isWindowsFrame =\n        /^[a-zA-Z]:\\\\/.test(frame.filename) ||\n        // or the presence of a backslash without a forward slash (which are not allowed on Windows)\n        (frame.filename.includes('\\\\') && !frame.filename.includes('/'));\n      // Check if the frame filename begins with `/`\n      const startsWithSlash = /^\\//.test(frame.filename);\n      if (isWindowsFrame || startsWithSlash) {\n        const filename = isWindowsFrame\n          ? frame.filename\n              .replace(/^[a-zA-Z]:/, '') // remove Windows-style prefix\n              .replace(/\\\\/g, '/') // replace all `\\\\` instances with `/`\n          : frame.filename;\n        const base = root ? relative(root, filename) : basename(filename);\n        frame.filename = `${prefix}${base}`;\n      }\n      return frame;\n    });\n\n  /** Process an exception event. */\n  function _processExceptionsEvent(event: Event): Event {\n    try {\n      return {\n        ...event,\n        exception: {\n          ...event.exception,\n          // The check for this is performed inside `process` call itself, safe to skip here\n          // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n          values: event.exception!.values!.map(value => ({\n            ...value,\n            ...(value.stacktrace && { stacktrace: _processStacktrace(value.stacktrace) }),\n          })),\n        },\n      };\n    } catch (_oO) {\n      return event;\n    }\n  }\n\n  /** Process a stack trace. */\n  function _processStacktrace(stacktrace?: Stacktrace): Stacktrace {\n    return {\n      ...stacktrace,\n      frames: stacktrace && stacktrace.frames && stacktrace.frames.map(f => iteratee(f)),\n    };\n  }\n\n  return {\n    name: INTEGRATION_NAME,\n    // TODO v8: Remove this\n    setupOnce() {}, // eslint-disable-line @typescript-eslint/no-empty-function\n    processEvent(originalEvent) {\n      let processedEvent = originalEvent;\n\n      if (originalEvent.exception && Array.isArray(originalEvent.exception.values)) {\n        processedEvent = _processExceptionsEvent(processedEvent);\n      }\n\n      return processedEvent;\n    },\n  };\n}) satisfies IntegrationFn;\n\nexport const rewriteFramesIntegration = defineIntegration(_rewriteFramesIntegration);\n\n/**\n * Rewrite event frames paths.\n * @deprecated Use `rewriteFramesIntegration()` instead.\n */\n// eslint-disable-next-line deprecation/deprecation\nexport const RewriteFrames = convertIntegrationFnToClass(\n  INTEGRATION_NAME,\n  rewriteFramesIntegration,\n) as IntegrationClass<Integration & { processEvent: (event: Event) => Event }> & {\n  new (options?: { root?: string; prefix?: string; iteratee?: StackFrameIteratee }): Integration;\n};\n", "import { convertIntegrationFnToClass, defineIntegration } from '@sentry/core';\nimport type { Event, Integration, IntegrationClass, IntegrationFn } from '@sentry/types';\n\nconst INTEGRATION_NAME = 'SessionTiming';\n\nconst _sessionTimingIntegration = (() => {\n  const startTime = Date.now();\n\n  return {\n    name: INTEGRATION_NAME,\n    // TODO v8: Remove this\n    setupOnce() {}, // eslint-disable-line @typescript-eslint/no-empty-function\n    processEvent(event) {\n      const now = Date.now();\n\n      return {\n        ...event,\n        extra: {\n          ...event.extra,\n          ['session:start']: startTime,\n          ['session:duration']: now - startTime,\n          ['session:end']: now,\n        },\n      };\n    },\n  };\n}) satisfies IntegrationFn;\n\nexport const sessionTimingIntegration = defineIntegration(_sessionTimingIntegration);\n\n/**\n * This function adds duration since Sentry was initialized till the time event was sent.\n * @deprecated Use `sessionTimingIntegration()` instead.\n */\n// eslint-disable-next-line deprecation/deprecation\nexport const SessionTiming = convertIntegrationFnToClass(\n  INTEGRATION_NAME,\n  sessionTimingIntegration,\n) as IntegrationClass<Integration & { processEvent: (event: Event) => Event }>;\n", "import { convertIntegrationFnToClass } from '@sentry/core';\nimport type { Event, Integration, IntegrationClass, IntegrationFn, StackFrame } from '@sentry/types';\n\nconst INTEGRATION_NAME = 'Transaction';\n\nconst transactionIntegration = (() => {\n  return {\n    name: INTEGRATION_NAME,\n    // TODO v8: Remove this\n    setupOnce() {}, // eslint-disable-line @typescript-eslint/no-empty-function\n    processEvent(event) {\n      const frames = _getFramesFromEvent(event);\n\n      // use for loop so we don't have to reverse whole frames array\n      for (let i = frames.length - 1; i >= 0; i--) {\n        const frame = frames[i];\n\n        if (frame.in_app === true) {\n          event.transaction = _getTransaction(frame);\n          break;\n        }\n      }\n\n      return event;\n    },\n  };\n}) satisfies IntegrationFn;\n\n/**\n * Add node transaction to the event.\n * @deprecated This integration will be removed in v8.\n */\n// eslint-disable-next-line deprecation/deprecation\nexport const Transaction = convertIntegrationFnToClass(INTEGRATION_NAME, transactionIntegration) as IntegrationClass<\n  Integration & { processEvent: (event: Event) => Event }\n>;\n\nfunction _getFramesFromEvent(event: Event): StackFrame[] {\n  const exception = event.exception && event.exception.values && event.exception.values[0];\n  return (exception && exception.stacktrace && exception.stacktrace.frames) || [];\n}\n\nfunction _getTransaction(frame: StackFrame): string {\n  return frame.module || frame.function ? `${frame.module || '?'}/${frame.function || '?'}` : '<unknown>';\n}\n", "import {\n  captureEvent,\n  convertIntegrationFnToClass,\n  defineIntegration,\n  getClient,\n  isSentryRequestUrl,\n} from '@sentry/core';\nimport type {\n  Client,\n  Event as SentryEvent,\n  Integration,\n  IntegrationClass,\n  IntegrationFn,\n  SentryWrappedXMLHttpRequest,\n} from '@sentry/types';\nimport {\n  GLOBAL_OBJ,\n  SENTRY_XHR_DATA_KEY,\n  addExceptionMechanism,\n  addFetchInstrumentationHandler,\n  addXhrInstrumentationHandler,\n  logger,\n  supportsNativeFetch,\n} from '@sentry/utils';\n\nimport { DEBUG_BUILD } from './debug-build';\n\nexport type HttpStatusCodeRange = [number, number] | number;\nexport type HttpRequestTarget = string | RegExp;\n\nconst INTEGRATION_NAME = 'HttpClient';\n\ninterface HttpClientOptions {\n  /**\n   * HTTP status codes that should be considered failed.\n   * This array can contain tuples of `[begin, end]` (both inclusive),\n   * single status codes, or a combinations of both\n   *\n   * Example: [[500, 505], 507]\n   * Default: [[500, 599]]\n   */\n  failedRequestStatusCodes: HttpStatusCodeRange[];\n\n  /**\n   * Targets to track for failed requests.\n   * This array can contain strings or regular expressions.\n   *\n   * Example: ['http://localhost', /api\\/.*\\/]\n   * Default: [/.*\\/]\n   */\n  failedRequestTargets: HttpRequestTarget[];\n}\n\nconst _httpClientIntegration = ((options: Partial<HttpClientOptions> = {}) => {\n  const _options: HttpClientOptions = {\n    failedRequestStatusCodes: [[500, 599]],\n    failedRequestTargets: [/.*/],\n    ...options,\n  };\n\n  return {\n    name: INTEGRATION_NAME,\n    // TODO v8: Remove this\n    setupOnce() {}, // eslint-disable-line @typescript-eslint/no-empty-function\n    setup(client): void {\n      _wrapFetch(client, _options);\n      _wrapXHR(client, _options);\n    },\n  };\n}) satisfies IntegrationFn;\n\nexport const httpClientIntegration = defineIntegration(_httpClientIntegration);\n\n/**\n * Create events for failed client side HTTP requests.\n * @deprecated Use `httpClientIntegration()` instead.\n */\n// eslint-disable-next-line deprecation/deprecation\nexport const HttpClient = convertIntegrationFnToClass(INTEGRATION_NAME, httpClientIntegration) as IntegrationClass<\n  Integration & { setup: (client: Client) => void }\n> & {\n  new (options?: {\n    failedRequestStatusCodes: HttpStatusCodeRange[];\n    failedRequestTargets: HttpRequestTarget[];\n  }): Integration;\n};\n\n/**\n * Interceptor function for fetch requests\n *\n * @param requestInfo The Fetch API request info\n * @param response The Fetch API response\n * @param requestInit The request init object\n */\nfunction _fetchResponseHandler(\n  options: HttpClientOptions,\n  requestInfo: RequestInfo,\n  response: Response,\n  requestInit?: RequestInit,\n): void {\n  if (_shouldCaptureResponse(options, response.status, response.url)) {\n    const request = _getRequest(requestInfo, requestInit);\n\n    let requestHeaders, responseHeaders, requestCookies, responseCookies;\n\n    if (_shouldSendDefaultPii()) {\n      [{ headers: requestHeaders, cookies: requestCookies }, { headers: responseHeaders, cookies: responseCookies }] = [\n        { cookieHeader: 'Cookie', obj: request },\n        { cookieHeader: 'Set-Cookie', obj: response },\n      ].map(({ cookieHeader, obj }) => {\n        const headers = _extractFetchHeaders(obj.headers);\n        let cookies;\n\n        try {\n          const cookieString = headers[cookieHeader] || headers[cookieHeader.toLowerCase()] || undefined;\n\n          if (cookieString) {\n            cookies = _parseCookieString(cookieString);\n          }\n        } catch (e) {\n          DEBUG_BUILD && logger.log(`Could not extract cookies from header ${cookieHeader}`);\n        }\n\n        return {\n          headers,\n          cookies,\n        };\n      });\n    }\n\n    const event = _createEvent({\n      url: request.url,\n      method: request.method,\n      status: response.status,\n      requestHeaders,\n      responseHeaders,\n      requestCookies,\n      responseCookies,\n    });\n\n    captureEvent(event);\n  }\n}\n\n/**\n * Interceptor function for XHR requests\n *\n * @param xhr The XHR request\n * @param method The HTTP method\n * @param headers The HTTP headers\n */\nfunction _xhrResponseHandler(\n  options: HttpClientOptions,\n  xhr: XMLHttpRequest,\n  method: string,\n  headers: Record<string, string>,\n): void {\n  if (_shouldCaptureResponse(options, xhr.status, xhr.responseURL)) {\n    let requestHeaders, responseCookies, responseHeaders;\n\n    if (_shouldSendDefaultPii()) {\n      try {\n        const cookieString = xhr.getResponseHeader('Set-Cookie') || xhr.getResponseHeader('set-cookie') || undefined;\n\n        if (cookieString) {\n          responseCookies = _parseCookieString(cookieString);\n        }\n      } catch (e) {\n        DEBUG_BUILD && logger.log('Could not extract cookies from response headers');\n      }\n\n      try {\n        responseHeaders = _getXHRResponseHeaders(xhr);\n      } catch (e) {\n        DEBUG_BUILD && logger.log('Could not extract headers from response');\n      }\n\n      requestHeaders = headers;\n    }\n\n    const event = _createEvent({\n      url: xhr.responseURL,\n      method,\n      status: xhr.status,\n      requestHeaders,\n      // Can't access request cookies from XHR\n      responseHeaders,\n      responseCookies,\n    });\n\n    captureEvent(event);\n  }\n}\n\n/**\n * Extracts response size from `Content-Length` header when possible\n *\n * @param headers\n * @returns The response size in bytes or undefined\n */\nfunction _getResponseSizeFromHeaders(headers?: Record<string, string>): number | undefined {\n  if (headers) {\n    const contentLength = headers['Content-Length'] || headers['content-length'];\n\n    if (contentLength) {\n      return parseInt(contentLength, 10);\n    }\n  }\n\n  return undefined;\n}\n\n/**\n * Creates an object containing cookies from the given cookie string\n *\n * @param cookieString The cookie string to parse\n * @returns The parsed cookies\n */\nfunction _parseCookieString(cookieString: string): Record<string, string> {\n  return cookieString.split('; ').reduce((acc: Record<string, string>, cookie: string) => {\n    const [key, value] = cookie.split('=');\n    acc[key] = value;\n    return acc;\n  }, {});\n}\n\n/**\n * Extracts the headers as an object from the given Fetch API request or response object\n *\n * @param headers The headers to extract\n * @returns The extracted headers as an object\n */\nfunction _extractFetchHeaders(headers: Headers): Record<string, string> {\n  const result: Record<string, string> = {};\n\n  headers.forEach((value, key) => {\n    result[key] = value;\n  });\n\n  return result;\n}\n\n/**\n * Extracts the response headers as an object from the given XHR object\n *\n * @param xhr The XHR object to extract the response headers from\n * @returns The response headers as an object\n */\nfunction _getXHRResponseHeaders(xhr: XMLHttpRequest): Record<string, string> {\n  const headers = xhr.getAllResponseHeaders();\n\n  if (!headers) {\n    return {};\n  }\n\n  return headers.split('\\r\\n').reduce((acc: Record<string, string>, line: string) => {\n    const [key, value] = line.split(': ');\n    acc[key] = value;\n    return acc;\n  }, {});\n}\n\n/**\n * Checks if the given target url is in the given list of targets\n *\n * @param target The target url to check\n * @returns true if the target url is in the given list of targets, false otherwise\n */\nfunction _isInGivenRequestTargets(\n  failedRequestTargets: HttpClientOptions['failedRequestTargets'],\n  target: string,\n): boolean {\n  return failedRequestTargets.some((givenRequestTarget: HttpRequestTarget) => {\n    if (typeof givenRequestTarget === 'string') {\n      return target.includes(givenRequestTarget);\n    }\n\n    return givenRequestTarget.test(target);\n  });\n}\n\n/**\n * Checks if the given status code is in the given range\n *\n * @param status The status code to check\n * @returns true if the status code is in the given range, false otherwise\n */\nfunction _isInGivenStatusRanges(\n  failedRequestStatusCodes: HttpClientOptions['failedRequestStatusCodes'],\n  status: number,\n): boolean {\n  return failedRequestStatusCodes.some((range: HttpStatusCodeRange) => {\n    if (typeof range === 'number') {\n      return range === status;\n    }\n\n    return status >= range[0] && status <= range[1];\n  });\n}\n\n/**\n * Wraps `fetch` function to capture request and response data\n */\nfunction _wrapFetch(client: Client, options: HttpClientOptions): void {\n  if (!supportsNativeFetch()) {\n    return;\n  }\n\n  addFetchInstrumentationHandler(handlerData => {\n    if (getClient() !== client) {\n      return;\n    }\n\n    const { response, args } = handlerData;\n    const [requestInfo, requestInit] = args as [RequestInfo, RequestInit | undefined];\n\n    if (!response) {\n      return;\n    }\n\n    _fetchResponseHandler(options, requestInfo, response as Response, requestInit);\n  });\n}\n\n/**\n * Wraps XMLHttpRequest to capture request and response data\n */\nfunction _wrapXHR(client: Client, options: HttpClientOptions): void {\n  if (!('XMLHttpRequest' in GLOBAL_OBJ)) {\n    return;\n  }\n\n  addXhrInstrumentationHandler(handlerData => {\n    if (getClient() !== client) {\n      return;\n    }\n\n    const xhr = handlerData.xhr as SentryWrappedXMLHttpRequest & XMLHttpRequest;\n\n    const sentryXhrData = xhr[SENTRY_XHR_DATA_KEY];\n\n    if (!sentryXhrData) {\n      return;\n    }\n\n    const { method, request_headers: headers } = sentryXhrData;\n\n    try {\n      _xhrResponseHandler(options, xhr, method, headers);\n    } catch (e) {\n      DEBUG_BUILD && logger.warn('Error while extracting response event form XHR response', e);\n    }\n  });\n}\n\n/**\n * Checks whether to capture given response as an event\n *\n * @param status response status code\n * @param url response url\n */\nfunction _shouldCaptureResponse(options: HttpClientOptions, status: number, url: string): boolean {\n  return (\n    _isInGivenStatusRanges(options.failedRequestStatusCodes, status) &&\n    _isInGivenRequestTargets(options.failedRequestTargets, url) &&\n    !isSentryRequestUrl(url, getClient())\n  );\n}\n\n/**\n * Creates a synthetic Sentry event from given response data\n *\n * @param data response data\n * @returns event\n */\nfunction _createEvent(data: {\n  url: string;\n  method: string;\n  status: number;\n  responseHeaders?: Record<string, string>;\n  responseCookies?: Record<string, string>;\n  requestHeaders?: Record<string, string>;\n  requestCookies?: Record<string, string>;\n}): SentryEvent {\n  const message = `HTTP Client Error with status code: ${data.status}`;\n\n  const event: SentryEvent = {\n    message,\n    exception: {\n      values: [\n        {\n          type: 'Error',\n          value: message,\n        },\n      ],\n    },\n    request: {\n      url: data.url,\n      method: data.method,\n      headers: data.requestHeaders,\n      cookies: data.requestCookies,\n    },\n    contexts: {\n      response: {\n        status_code: data.status,\n        headers: data.responseHeaders,\n        cookies: data.responseCookies,\n        body_size: _getResponseSizeFromHeaders(data.responseHeaders),\n      },\n    },\n  };\n\n  addExceptionMechanism(event, {\n    type: 'http.client',\n    handled: false,\n  });\n\n  return event;\n}\n\nfunction _getRequest(requestInfo: RequestInfo, requestInit?: RequestInit): Request {\n  if (!requestInit && requestInfo instanceof Request) {\n    return requestInfo;\n  }\n\n  // If both are set, we try to construct a new Request with the given arguments\n  // However, if e.g. the original request has a `body`, this will throw an error because it was already accessed\n  // In this case, as a fallback, we just use the original request - using both is rather an edge case\n  if (requestInfo instanceof Request && requestInfo.bodyUsed) {\n    return requestInfo;\n  }\n\n  return new Request(requestInfo, requestInit);\n}\n\nfunction _shouldSendDefaultPii(): boolean {\n  const client = getClient();\n  return client ? Boolean(client.getOptions().sendDefaultPii) : false;\n}\n", "import { convertIntegrationFnToClass, defineIntegration } from '@sentry/core';\nimport type { Event, Integration, IntegrationClass, IntegrationFn, StackFrame } from '@sentry/types';\nimport { GLOBAL_OBJ, addContextToFrame, stripUrlQueryAndFragment } from '@sentry/utils';\n\nconst WINDOW = GLOBAL_OBJ as typeof GLOBAL_OBJ & Window;\n\nconst DEFAULT_LINES_OF_CONTEXT = 7;\n\nconst INTEGRATION_NAME = 'ContextLines';\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\nconst _contextLinesIntegration = ((options: ContextLinesOptions = {}) => {\n  const contextLines = options.frameContextLines != null ? options.frameContextLines : DEFAULT_LINES_OF_CONTEXT;\n\n  return {\n    name: INTEGRATION_NAME,\n    // TODO v8: Remove this\n    setupOnce() {}, // eslint-disable-line @typescript-eslint/no-empty-function\n    processEvent(event) {\n      return addSourceContext(event, contextLines);\n    },\n  };\n}) satisfies IntegrationFn;\n\nexport const contextLinesIntegration = defineIntegration(_contextLinesIntegration);\n\n/**\n * Collects source context lines around the lines of stackframes pointing to JS embedded in\n * the current page's HTML.\n *\n * This integration DOES NOT work for stack frames pointing to JS files that are loaded by the browser.\n * For frames pointing to files, context lines are added during ingestion and symbolication\n * by attempting to download the JS files to the Sentry backend.\n *\n * Use this integration if you have inline JS code in HTML pages that can't be accessed\n * by our backend (e.g. due to a login-protected page).\n *\n * @deprecated Use `contextLinesIntegration()` instead.\n */\n// eslint-disable-next-line deprecation/deprecation\nexport const ContextLines = convertIntegrationFnToClass(INTEGRATION_NAME, contextLinesIntegration) as IntegrationClass<\n  Integration & { processEvent: (event: Event) => Event }\n> & { new (options?: { frameContextLines?: number }): Integration };\n\n/**\n * Processes an event and adds context lines.\n */\nfunction addSourceContext(event: Event, contextLines: number): Event {\n  const doc = WINDOW.document;\n  const htmlFilename = WINDOW.location && stripUrlQueryAndFragment(WINDOW.location.href);\n  if (!doc || !htmlFilename) {\n    return event;\n  }\n\n  const exceptions = event.exception && event.exception.values;\n  if (!exceptions || !exceptions.length) {\n    return event;\n  }\n\n  const html = doc.documentElement.innerHTML;\n  if (!html) {\n    return event;\n  }\n\n  const htmlLines = ['<!DOCTYPE html>', '<html>', ...html.split('\\n'), '</html>'];\n\n  exceptions.forEach(exception => {\n    const stacktrace = exception.stacktrace;\n    if (stacktrace && stacktrace.frames) {\n      stacktrace.frames = stacktrace.frames.map(frame =>\n        applySourceContextToFrame(frame, htmlLines, htmlFilename, contextLines),\n      );\n    }\n  });\n\n  return event;\n}\n\n/**\n * Only exported for testing\n */\nexport function applySourceContextToFrame(\n  frame: StackFrame,\n  htmlLines: string[],\n  htmlFilename: string,\n  linesOfContext: number,\n): StackFrame {\n  if (frame.filename !== htmlFilename || !frame.lineno || !htmlLines.length) {\n    return frame;\n  }\n\n  addContextToFrame(htmlLines, frame, linesOfContext);\n\n  return frame;\n}\n", "Object.defineProperty(exports, '__esModule', { value: true });\n\nconst captureconsole = require('./captureconsole.js');\nconst debug = require('./debug.js');\nconst dedupe = require('./dedupe.js');\nconst extraerrordata = require('./extraerrordata.js');\nconst offline = require('./offline.js');\nconst reportingobserver = require('./reportingobserver.js');\nconst rewriteframes = require('./rewriteframes.js');\nconst sessiontiming = require('./sessiontiming.js');\nconst transaction = require('./transaction.js');\nconst httpclient = require('./httpclient.js');\nconst contextlines = require('./contextlines.js');\n\n\n\nexports.CaptureConsole = captureconsole.CaptureConsole;\nexports.captureConsoleIntegration = captureconsole.captureConsoleIntegration;\nexports.Debug = debug.Debug;\nexports.debugIntegration = debug.debugIntegration;\nexports.Dedupe = dedupe.Dedupe;\nexports.dedupeIntegration = dedupe.dedupeIntegration;\nexports.ExtraErrorData = extraerrordata.ExtraErrorData;\nexports.extraErrorDataIntegration = extraerrordata.extraErrorDataIntegration;\nexports.Offline = offline.Offline;\nexports.ReportingObserver = reportingobserver.ReportingObserver;\nexports.reportingObserverIntegration = reportingobserver.reportingObserverIntegration;\nexports.RewriteFrames = rewriteframes.RewriteFrames;\nexports.rewriteFramesIntegration = rewriteframes.rewriteFramesIntegration;\nexports.SessionTiming = sessiontiming.SessionTiming;\nexports.sessionTimingIntegration = sessiontiming.sessionTimingIntegration;\nexports.Transaction = transaction.Transaction;\nexports.HttpClient = httpclient.HttpClient;\nexports.httpClientIntegration = httpclient.httpClientIntegration;\nexports.ContextLines = contextlines.ContextLines;\nexports.contextLinesIntegration = contextlines.contextLinesIntegration;\n//# sourceMappingURL=index.js.map\n", "const replacements: [string, string][] = [\n  ['january', '1'],\n  ['february', '2'],\n  ['march', '3'],\n  ['april', '4'],\n  ['may', '5'],\n  ['june', '6'],\n  ['july', '7'],\n  ['august', '8'],\n  ['september', '9'],\n  ['october', '10'],\n  ['november', '11'],\n  ['december', '12'],\n  ['jan', '1'],\n  ['feb', '2'],\n  ['mar', '3'],\n  ['apr', '4'],\n  ['may', '5'],\n  ['jun', '6'],\n  ['jul', '7'],\n  ['aug', '8'],\n  ['sep', '9'],\n  ['oct', '10'],\n  ['nov', '11'],\n  ['dec', '12'],\n  ['sunday', '0'],\n  ['monday', '1'],\n  ['tuesday', '2'],\n  ['wednesday', '3'],\n  ['thursday', '4'],\n  ['friday', '5'],\n  ['saturday', '6'],\n  ['sun', '0'],\n  ['mon', '1'],\n  ['tue', '2'],\n  ['wed', '3'],\n  ['thu', '4'],\n  ['fri', '5'],\n  ['sat', '6'],\n];\n\n/**\n * Replaces names in cron expressions\n */\nexport function replaceCronNames(cronExpression: string): string {\n  return replacements.reduce(\n    // eslint-disable-next-line @sentry-internal/sdk/no-regexp-constructor\n    (acc, [name, replacement]) => acc.replace(new RegExp(name, 'gi'), replacement),\n    cronExpression,\n  );\n}\n", "import { withMonitor } from '@sentry/core';\nimport { replaceCronNames } from './common';\n\nexport type CronJobParams = {\n  cronTime: string | Date;\n  onTick: (context: unknown, onComplete?: unknown) => void | Promise<void>;\n  onComplete?: () => void | Promise<void>;\n  start?: boolean | null;\n  context?: unknown;\n  runOnInit?: boolean | null;\n  unrefTimeout?: boolean | null;\n} & (\n  | {\n      timeZone?: string | null;\n      utcOffset?: never;\n    }\n  | {\n      timeZone?: never;\n      utcOffset?: number | null;\n    }\n);\n\nexport type CronJob = {\n  //\n};\n\nexport type CronJobConstructor = {\n  from: (param: CronJobParams) => CronJob;\n\n  new (\n    cronTime: CronJobParams['cronTime'],\n    onTick: CronJobParams['onTick'],\n    onComplete?: CronJobParams['onComplete'],\n    start?: CronJobParams['start'],\n    timeZone?: CronJobParams['timeZone'],\n    context?: CronJobParams['context'],\n    runOnInit?: CronJobParams['runOnInit'],\n    utcOffset?: null,\n    unrefTimeout?: CronJobParams['unrefTimeout'],\n  ): CronJob;\n  new (\n    cronTime: CronJobParams['cronTime'],\n    onTick: CronJobParams['onTick'],\n    onComplete?: CronJobParams['onComplete'],\n    start?: CronJobParams['start'],\n    timeZone?: null,\n    context?: CronJobParams['context'],\n    runOnInit?: CronJobParams['runOnInit'],\n    utcOffset?: CronJobParams['utcOffset'],\n    unrefTimeout?: CronJobParams['unrefTimeout'],\n  ): CronJob;\n};\n\nconst ERROR_TEXT = 'Automatic instrumentation of CronJob only supports crontab string';\n\n/**\n * Instruments the `cron` library to send a check-in event to Sentry for each job execution.\n *\n * ```ts\n * import * as Sentry from '@sentry/node';\n * import { CronJob } from 'cron';\n *\n * const CronJobWithCheckIn = Sentry.cron.instrumentCron(CronJob, 'my-cron-job');\n *\n * // use the constructor\n * const job = new CronJobWithCheckIn('* * * * *', () => {\n *  console.log('You will see this message every minute');\n * });\n *\n * // or from\n * const job = CronJobWithCheckIn.from({ cronTime: '* * * * *', onTick: () => {\n *   console.log('You will see this message every minute');\n * });\n * ```\n */\nexport function instrumentCron<T>(lib: T & CronJobConstructor, monitorSlug: string): T {\n  let jobScheduled = false;\n\n  return new Proxy(lib, {\n    construct(target, args: ConstructorParameters<CronJobConstructor>) {\n      const [cronTime, onTick, onComplete, start, timeZone, ...rest] = args;\n\n      if (typeof cronTime !== 'string') {\n        throw new Error(ERROR_TEXT);\n      }\n\n      if (jobScheduled) {\n        throw new Error(`A job named '${monitorSlug}' has already been scheduled`);\n      }\n\n      jobScheduled = true;\n\n      const cronString = replaceCronNames(cronTime);\n\n      function monitoredTick(context: unknown, onComplete?: unknown): void | Promise<void> {\n        return withMonitor(\n          monitorSlug,\n          () => {\n            return onTick(context, onComplete);\n          },\n          {\n            schedule: { type: 'crontab', value: cronString },\n            timezone: timeZone || undefined,\n          },\n        );\n      }\n\n      return new target(cronTime, monitoredTick, onComplete, start, timeZone, ...rest);\n    },\n    get(target, prop: keyof CronJobConstructor) {\n      if (prop === 'from') {\n        return (param: CronJobParams) => {\n          const { cronTime, onTick, timeZone } = param;\n\n          if (typeof cronTime !== 'string') {\n            throw new Error(ERROR_TEXT);\n          }\n\n          if (jobScheduled) {\n            throw new Error(`A job named '${monitorSlug}' has already been scheduled`);\n          }\n\n          jobScheduled = true;\n\n          const cronString = replaceCronNames(cronTime);\n\n          param.onTick = (context: unknown, onComplete?: unknown) => {\n            return withMonitor(\n              monitorSlug,\n              () => {\n                return onTick(context, onComplete);\n              },\n              {\n                schedule: { type: 'crontab', value: cronString },\n                timezone: timeZone || undefined,\n              },\n            );\n          };\n\n          return target.from(param);\n        };\n      } else {\n        return target[prop];\n      }\n    },\n  });\n}\n", "import { withMonitor } from '@sentry/core';\nimport { replaceCronNames } from './common';\n\nexport interface NodeCronOptions {\n  name: string;\n  timezone?: string;\n}\n\nexport interface NodeCron {\n  schedule: (cronExpression: string, callback: () => void, options: NodeCronOptions) => unknown;\n}\n\n/**\n * Wraps the `node-cron` library with check-in monitoring.\n *\n * ```ts\n * import * as Sentry from \"@sentry/node\";\n * import cron from \"node-cron\";\n *\n * const cronWithCheckIn = Sentry.cron.instrumentNodeCron(cron);\n *\n * cronWithCheckIn.schedule(\n *   \"* * * * *\",\n *   () => {\n *     console.log(\"running a task every minute\");\n *   },\n *   { name: \"my-cron-job\" },\n * );\n * ```\n */\nexport function instrumentNodeCron<T>(lib: Partial<NodeCron> & T): T {\n  return new Proxy(lib, {\n    get(target, prop: keyof NodeCron) {\n      if (prop === 'schedule' && target.schedule) {\n        // When 'get' is called for schedule, return a proxied version of the schedule function\n        return new Proxy(target.schedule, {\n          apply(target, thisArg, argArray: Parameters<NodeCron['schedule']>) {\n            const [expression, , options] = argArray;\n\n            if (!options?.name) {\n              throw new Error('Missing \"name\" for scheduled job. A name is required for Sentry check-in monitoring.');\n            }\n\n            return withMonitor(\n              options.name,\n              () => {\n                return target.apply(thisArg, argArray);\n              },\n              {\n                schedule: { type: 'crontab', value: replaceCronNames(expression) },\n                timezone: options?.timezone,\n              },\n            );\n          },\n        });\n      } else {\n        return target[prop];\n      }\n    },\n  });\n}\n", "import { withMonitor } from '@sentry/core';\nimport { replaceCronNames } from './common';\n\nexport interface NodeSchedule {\n  scheduleJob(\n    nameOrExpression: string | Date | object,\n    expressionOrCallback: string | Date | object | (() => void),\n    callback?: () => void,\n  ): unknown;\n}\n\n/**\n * Instruments the `node-schedule` library to send a check-in event to Sentry for each job execution.\n *\n * ```ts\n * import * as Sentry from '@sentry/node';\n * import * as schedule from 'node-schedule';\n *\n * const scheduleWithCheckIn = Sentry.cron.instrumentNodeSchedule(schedule);\n *\n * const job = scheduleWithCheckIn.scheduleJob('my-cron-job', '* * * * *', () => {\n *  console.log('You will see this message every minute');\n * });\n * ```\n */\nexport function instrumentNodeSchedule<T>(lib: T & NodeSchedule): T {\n  return new Proxy(lib, {\n    get(target, prop: keyof NodeSchedule) {\n      if (prop === 'scheduleJob') {\n        // eslint-disable-next-line @typescript-eslint/unbound-method\n        return new Proxy(target.scheduleJob, {\n          apply(target, thisArg, argArray: Parameters<NodeSchedule['scheduleJob']>) {\n            const [nameOrExpression, expressionOrCallback] = argArray;\n\n            if (typeof nameOrExpression !== 'string' || typeof expressionOrCallback !== 'string') {\n              throw new Error(\n                \"Automatic instrumentation of 'node-schedule' requires the first parameter of 'scheduleJob' to be a job name string and the second parameter to be a crontab string\",\n              );\n            }\n\n            const monitorSlug = nameOrExpression;\n            const expression = expressionOrCallback;\n\n            return withMonitor(\n              monitorSlug,\n              () => {\n                return target.apply(thisArg, argArray);\n              },\n              {\n                schedule: { type: 'crontab', value: replaceCronNames(expression) },\n              },\n            );\n          },\n        });\n      }\n\n      return target[prop];\n    },\n  });\n}\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, TransactionNamingScheme } from '@sentry/utils';\n\nexport type { NodeOptions } from './types';\n\nexport {\n  // eslint-disable-next-line deprecation/deprecation\n  addGlobalEventProcessor,\n  addEventProcessor,\n  addBreadcrumb,\n  addIntegration,\n  captureException,\n  captureEvent,\n  captureMessage,\n  close,\n  // eslint-disable-next-line deprecation/deprecation\n  configureScope,\n  createTransport,\n  // eslint-disable-next-line deprecation/deprecation\n  extractTraceparentData,\n  flush,\n  // eslint-disable-next-line deprecation/deprecation\n  getActiveTransaction,\n  getHubFromCarrier,\n  // eslint-disable-next-line deprecation/deprecation\n  getCurrentHub,\n  getClient,\n  isInitialized,\n  getCurrentScope,\n  getGlobalScope,\n  getIsolationScope,\n  // eslint-disable-next-line deprecation/deprecation\n  Hub,\n  lastEventId,\n  // eslint-disable-next-line deprecation/deprecation\n  makeMain,\n  setCurrentClient,\n  runWithAsyncContext,\n  Scope,\n  // eslint-disable-next-line deprecation/deprecation\n  startTransaction,\n  SDK_VERSION,\n  setContext,\n  setExtra,\n  setExtras,\n  setTag,\n  setTags,\n  setUser,\n  // eslint-disable-next-line deprecation/deprecation\n  spanStatusfromHttpCode,\n  getSpanStatusFromHttpCode,\n  setHttpStatus,\n  // eslint-disable-next-line deprecation/deprecation\n  trace,\n  withScope,\n  withIsolationScope,\n  captureCheckIn,\n  withMonitor,\n  setMeasurement,\n  getActiveSpan,\n  startSpan,\n  // eslint-disable-next-line deprecation/deprecation\n  startActiveSpan,\n  startInactiveSpan,\n  startSpanManual,\n  withActiveSpan,\n  continueTrace,\n  parameterize,\n  metrics,\n  functionToStringIntegration,\n  inboundFiltersIntegration,\n  linkedErrorsIntegration,\n  requestDataIntegration,\n  startSession,\n  captureSession,\n  endSession,\n} from '@sentry/core';\n\nexport {\n  SEMANTIC_ATTRIBUTE_SENTRY_OP,\n  SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n  SEMANTIC_ATTRIBUTE_SENTRY_SOURCE,\n  SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE,\n} from '@sentry/core';\n\nexport type { SpanStatusType } from '@sentry/core';\n\nexport { autoDiscoverNodePerformanceMonitoringIntegrations } from './tracing';\n\nexport { NodeClient } from './client';\nexport { makeNodeTransport } from './transports';\nexport {\n  // eslint-disable-next-line deprecation/deprecation\n  defaultIntegrations,\n  getDefaultIntegrations,\n  init,\n  defaultStackParser,\n  getSentryRelease,\n} from './sdk';\nexport { addRequestDataToEvent, DEFAULT_USER_INCLUDES, extractRequestData } from '@sentry/utils';\n// eslint-disable-next-line deprecation/deprecation\nexport { deepReadDirSync } from './utils';\n\nimport { createGetModuleFromFilename } from './module';\n/**\n * @deprecated use `createGetModuleFromFilename` instead.\n */\nexport const getModuleFromFilename = createGetModuleFromFilename();\nexport { createGetModuleFromFilename };\n\n// eslint-disable-next-line deprecation/deprecation\nexport { enableAnrDetection } from './integrations/anr/legacy';\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\n// TODO: Deprecate this once we migrated tracing integrations\nexport const Integrations = {\n  // eslint-disable-next-line deprecation/deprecation\n  ...CoreIntegrations,\n  ...NodeIntegrations,\n  ...TracingIntegrations,\n};\n\nexport {\n  captureConsoleIntegration,\n  dedupeIntegration,\n  debugIntegration,\n  extraErrorDataIntegration,\n  reportingObserverIntegration,\n  rewriteFramesIntegration,\n  sessionTimingIntegration,\n  httpClientIntegration,\n} from '@sentry/integrations';\n\nexport { consoleIntegration } from './integrations/console';\nexport { onUncaughtExceptionIntegration } from './integrations/onuncaughtexception';\nexport { onUnhandledRejectionIntegration } from './integrations/onunhandledrejection';\nexport { modulesIntegration } from './integrations/modules';\nexport { contextLinesIntegration } from './integrations/contextlines';\nexport { nodeContextIntegration } from './integrations/context';\nexport { localVariablesIntegration } from './integrations/local-variables';\nexport { spotlightIntegration } from './integrations/spotlight';\nexport { anrIntegration } from './integrations/anr';\nexport { hapiIntegration } from './integrations/hapi';\n// eslint-disable-next-line deprecation/deprecation\nexport { Undici, nativeNodeFetchintegration } from './integrations/undici';\n// eslint-disable-next-line deprecation/deprecation\nexport { Http, httpIntegration } from './integrations/http';\n\n// TODO(v8): Remove all of these exports. They were part of a hotfix #10339 where we produced wrong .d.ts files because we were packing packages inside the /build folder.\nexport type { LocalVariablesIntegrationOptions } from './integrations/local-variables/common';\nexport type { DebugSession } from './integrations/local-variables/local-variables-sync';\nexport type { AnrIntegrationOptions } from './integrations/anr/common';\n// ---\n\nexport { Handlers };\n\nexport { trpcMiddleware } from './trpc';\n\nexport { hapiErrorPlugin } from './integrations/hapi';\n\nimport { instrumentCron } from './cron/cron';\nimport { instrumentNodeCron } from './cron/node-cron';\nimport { instrumentNodeSchedule } from './cron/node-schedule';\n\n/** Methods to instrument cron libraries for Sentry check-ins */\nexport const cron = {\n  instrumentCron,\n  instrumentNodeCron,\n  instrumentNodeSchedule,\n};\n", "{\n  \"name\": \"dotenv\",\n  \"version\": \"16.6.1\",\n  \"description\": \"Loads environment variables from .env file\",\n  \"main\": \"lib/main.js\",\n  \"types\": \"lib/main.d.ts\",\n  \"exports\": {\n    \".\": {\n      \"types\": \"./lib/main.d.ts\",\n      \"require\": \"./lib/main.js\",\n      \"default\": \"./lib/main.js\"\n    },\n    \"./config\": \"./config.js\",\n    \"./config.js\": \"./config.js\",\n    \"./lib/env-options\": \"./lib/env-options.js\",\n    \"./lib/env-options.js\": \"./lib/env-options.js\",\n    \"./lib/cli-options\": \"./lib/cli-options.js\",\n    \"./lib/cli-options.js\": \"./lib/cli-options.js\",\n    \"./package.json\": \"./package.json\"\n  },\n  \"scripts\": {\n    \"dts-check\": \"tsc --project tests/types/tsconfig.json\",\n    \"lint\": \"standard\",\n    \"pretest\": \"npm run lint && npm run dts-check\",\n    \"test\": \"tap run --allow-empty-coverage --disable-coverage --timeout=60000\",\n    \"test:coverage\": \"tap run --show-full-coverage --timeout=60000 --coverage-report=text --coverage-report=lcov\",\n    \"prerelease\": \"npm test\",\n    \"release\": \"standard-version\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git://github.com/motdotla/dotenv.git\"\n  },\n  \"homepage\": \"https://github.com/motdotla/dotenv#readme\",\n  \"funding\": \"https://dotenvx.com\",\n  \"keywords\": [\n    \"dotenv\",\n    \"env\",\n    \".env\",\n    \"environment\",\n    \"variables\",\n    \"config\",\n    \"settings\"\n  ],\n  \"readmeFilename\": \"README.md\",\n  \"license\": \"BSD-2-Clause\",\n  \"devDependencies\": {\n    \"@types/node\": \"^18.11.3\",\n    \"decache\": \"^4.6.2\",\n    \"sinon\": \"^14.0.1\",\n    \"standard\": \"^17.0.0\",\n    \"standard-version\": \"^9.5.0\",\n    \"tap\": \"^19.2.0\",\n    \"typescript\": \"^4.8.4\"\n  },\n  \"engines\": {\n    \"node\": \">=12\"\n  },\n  \"browser\": {\n    \"fs\": false\n  }\n}\n", "const fs = require('fs')\nconst path = require('path')\nconst os = require('os')\nconst crypto = require('crypto')\nconst packageJson = require('../package.json')\n\nconst version = packageJson.version\n\nconst LINE = /(?:^|^)\\s*(?:export\\s+)?([\\w.-]+)(?:\\s*=\\s*?|:\\s+?)(\\s*'(?:\\\\'|[^'])*'|\\s*\"(?:\\\\\"|[^\"])*\"|\\s*`(?:\\\\`|[^`])*`|[^#\\r\\n]+)?\\s*(?:#.*)?(?:$|$)/mg\n\n// Parse src into an Object\nfunction parse (src) {\n  const obj = {}\n\n  // Convert buffer to string\n  let lines = src.toString()\n\n  // Convert line breaks to same format\n  lines = lines.replace(/\\r\\n?/mg, '\\n')\n\n  let match\n  while ((match = 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$/mg, '$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    obj[key] = value\n  }\n\n  return obj\n}\n\nfunction _parseVault (options) {\n  options = options || {}\n\n  const vaultPath = _vaultPath(options)\n  options.path = vaultPath // parse .env.vault\n  const result = DotenvModule.configDotenv(options)\n  if (!result.parsed) {\n    const err = new Error(`MISSING_DATA: Cannot parse ${vaultPath} for an unknown reason`)\n    err.code = 'MISSING_DATA'\n    throw err\n  }\n\n  // handle scenario for comma separated keys - for use with key rotation\n  // example: DOTENV_KEY=\"dotenv://:key_1234@dotenvx.com/vault/.env.vault?environment=prod,dotenv://:key_7890@dotenvx.com/vault/.env.vault?environment=prod\"\n  const keys = _dotenvKey(options).split(',')\n  const length = keys.length\n\n  let decrypted\n  for (let i = 0; i < length; i++) {\n    try {\n      // Get full key\n      const key = keys[i].trim()\n\n      // Get instructions for decrypt\n      const attrs = _instructions(result, key)\n\n      // Decrypt\n      decrypted = DotenvModule.decrypt(attrs.ciphertext, attrs.key)\n\n      break\n    } catch (error) {\n      // last key\n      if (i + 1 >= length) {\n        throw error\n      }\n      // try next key\n    }\n  }\n\n  // Parse decrypted .env string\n  return DotenvModule.parse(decrypted)\n}\n\nfunction _warn (message) {\n  console.log(`[dotenv@${version}][WARN] ${message}`)\n}\n\nfunction _debug (message) {\n  console.log(`[dotenv@${version}][DEBUG] ${message}`)\n}\n\nfunction _log (message) {\n  console.log(`[dotenv@${version}] ${message}`)\n}\n\nfunction _dotenvKey (options) {\n  // prioritize developer directly setting options.DOTENV_KEY\n  if (options && options.DOTENV_KEY && options.DOTENV_KEY.length > 0) {\n    return options.DOTENV_KEY\n  }\n\n  // secondary infra already contains a DOTENV_KEY environment variable\n  if (process.env.DOTENV_KEY && process.env.DOTENV_KEY.length > 0) {\n    return process.env.DOTENV_KEY\n  }\n\n  // fallback to empty string\n  return ''\n}\n\nfunction _instructions (result, dotenvKey) {\n  // Parse DOTENV_KEY. Format is a URI\n  let uri\n  try {\n    uri = new URL(dotenvKey)\n  } catch (error) {\n    if (error.code === 'ERR_INVALID_URL') {\n      const err = new Error('INVALID_DOTENV_KEY: Wrong format. Must be in valid uri format like dotenv://:key_1234@dotenvx.com/vault/.env.vault?environment=development')\n      err.code = 'INVALID_DOTENV_KEY'\n      throw err\n    }\n\n    throw error\n  }\n\n  // Get decrypt key\n  const key = uri.password\n  if (!key) {\n    const err = new Error('INVALID_DOTENV_KEY: Missing key part')\n    err.code = 'INVALID_DOTENV_KEY'\n    throw err\n  }\n\n  // Get environment\n  const environment = uri.searchParams.get('environment')\n  if (!environment) {\n    const err = new Error('INVALID_DOTENV_KEY: Missing environment part')\n    err.code = 'INVALID_DOTENV_KEY'\n    throw err\n  }\n\n  // Get ciphertext payload\n  const environmentKey = `DOTENV_VAULT_${environment.toUpperCase()}`\n  const ciphertext = result.parsed[environmentKey] // DOTENV_VAULT_PRODUCTION\n  if (!ciphertext) {\n    const err = new Error(`NOT_FOUND_DOTENV_ENVIRONMENT: Cannot locate environment ${environmentKey} in your .env.vault file.`)\n    err.code = 'NOT_FOUND_DOTENV_ENVIRONMENT'\n    throw err\n  }\n\n  return { ciphertext, key }\n}\n\nfunction _vaultPath (options) {\n  let possibleVaultPath = null\n\n  if (options && options.path && options.path.length > 0) {\n    if (Array.isArray(options.path)) {\n      for (const filepath of options.path) {\n        if (fs.existsSync(filepath)) {\n          possibleVaultPath = filepath.endsWith('.vault') ? filepath : `${filepath}.vault`\n        }\n      }\n    } else {\n      possibleVaultPath = options.path.endsWith('.vault') ? options.path : `${options.path}.vault`\n    }\n  } else {\n    possibleVaultPath = path.resolve(process.cwd(), '.env.vault')\n  }\n\n  if (fs.existsSync(possibleVaultPath)) {\n    return possibleVaultPath\n  }\n\n  return null\n}\n\nfunction _resolveHome (envPath) {\n  return envPath[0] === '~' ? path.join(os.homedir(), envPath.slice(1)) : envPath\n}\n\nfunction _configVault (options) {\n  const debug = Boolean(options && options.debug)\n  const quiet = options && 'quiet' in options ? options.quiet : true\n\n  if (debug || !quiet) {\n    _log('Loading env from encrypted .env.vault')\n  }\n\n  const parsed = DotenvModule._parseVault(options)\n\n  let processEnv = process.env\n  if (options && options.processEnv != null) {\n    processEnv = options.processEnv\n  }\n\n  DotenvModule.populate(processEnv, parsed, options)\n\n  return { parsed }\n}\n\nfunction configDotenv (options) {\n  const dotenvPath = path.resolve(process.cwd(), '.env')\n  let encoding = 'utf8'\n  const debug = Boolean(options && options.debug)\n  const quiet = options && 'quiet' in options ? options.quiet : true\n\n  if (options && options.encoding) {\n    encoding = options.encoding\n  } else {\n    if (debug) {\n      _debug('No encoding is specified. UTF-8 is used by default')\n    }\n  }\n\n  let optionPaths = [dotenvPath] // default, look for .env\n  if (options && options.path) {\n    if (!Array.isArray(options.path)) {\n      optionPaths = [_resolveHome(options.path)]\n    } else {\n      optionPaths = [] // reset default\n      for (const filepath of options.path) {\n        optionPaths.push(_resolveHome(filepath))\n      }\n    }\n  }\n\n  // Build the parsed data in a temporary object (because we need to return it).  Once we have the final\n  // parsed data, we will combine it with process.env (or options.processEnv if provided).\n  let lastError\n  const parsedAll = {}\n  for (const path of optionPaths) {\n    try {\n      // Specifying an encoding returns a string instead of a buffer\n      const parsed = DotenvModule.parse(fs.readFileSync(path, { encoding }))\n\n      DotenvModule.populate(parsedAll, parsed, options)\n    } catch (e) {\n      if (debug) {\n        _debug(`Failed to load ${path} ${e.message}`)\n      }\n      lastError = e\n    }\n  }\n\n  let processEnv = process.env\n  if (options && options.processEnv != null) {\n    processEnv = options.processEnv\n  }\n\n  DotenvModule.populate(processEnv, parsedAll, options)\n\n  if (debug || !quiet) {\n    const keysCount = Object.keys(parsedAll).length\n    const shortPaths = []\n    for (const filePath of optionPaths) {\n      try {\n        const relative = path.relative(process.cwd(), filePath)\n        shortPaths.push(relative)\n      } catch (e) {\n        if (debug) {\n          _debug(`Failed to load ${filePath} ${e.message}`)\n        }\n        lastError = e\n      }\n    }\n\n    _log(`injecting env (${keysCount}) from ${shortPaths.join(',')}`)\n  }\n\n  if (lastError) {\n    return { parsed: parsedAll, error: lastError }\n  } else {\n    return { parsed: parsedAll }\n  }\n}\n\n// Populates process.env from .env file\nfunction config (options) {\n  // fallback to original dotenv if DOTENV_KEY is not set\n  if (_dotenvKey(options).length === 0) {\n    return DotenvModule.configDotenv(options)\n  }\n\n  const vaultPath = _vaultPath(options)\n\n  // dotenvKey exists but .env.vault file does not exist\n  if (!vaultPath) {\n    _warn(`You set DOTENV_KEY but you are missing a .env.vault file at ${vaultPath}. Did you forget to build it?`)\n\n    return DotenvModule.configDotenv(options)\n  }\n\n  return DotenvModule._configVault(options)\n}\n\nfunction decrypt (encrypted, keyStr) {\n  const key = Buffer.from(keyStr.slice(-64), 'hex')\n  let ciphertext = Buffer.from(encrypted, 'base64')\n\n  const nonce = ciphertext.subarray(0, 12)\n  const authTag = ciphertext.subarray(-16)\n  ciphertext = ciphertext.subarray(12, -16)\n\n  try {\n    const aesgcm = crypto.createDecipheriv('aes-256-gcm', key, nonce)\n    aesgcm.setAuthTag(authTag)\n    return `${aesgcm.update(ciphertext)}${aesgcm.final()}`\n  } catch (error) {\n    const isRange = error instanceof RangeError\n    const invalidKeyLength = error.message === 'Invalid key length'\n    const decryptionFailed = error.message === 'Unsupported state or unable to authenticate data'\n\n    if (isRange || invalidKeyLength) {\n      const err = new Error('INVALID_DOTENV_KEY: It must be 64 characters long (or more)')\n      err.code = 'INVALID_DOTENV_KEY'\n      throw err\n    } else if (decryptionFailed) {\n      const err = new Error('DECRYPTION_FAILED: Please check your DOTENV_KEY')\n      err.code = 'DECRYPTION_FAILED'\n      throw err\n    } else {\n      throw error\n    }\n  }\n}\n\n// Populate process.env with parsed values\nfunction populate (processEnv, parsed, options = {}) {\n  const debug = Boolean(options && options.debug)\n  const override = Boolean(options && options.override)\n\n  if (typeof parsed !== 'object') {\n    const err = new Error('OBJECT_REQUIRED: Please check the processEnv argument being passed to populate')\n    err.code = 'OBJECT_REQUIRED'\n    throw err\n  }\n\n  // Set process.env\n  for (const key of Object.keys(parsed)) {\n    if (Object.prototype.hasOwnProperty.call(processEnv, key)) {\n      if (override === true) {\n        processEnv[key] = parsed[key]\n      }\n\n      if (debug) {\n        if (override === true) {\n          _debug(`\"${key}\" is already defined and WAS overwritten`)\n        } else {\n          _debug(`\"${key}\" is already defined and was NOT overwritten`)\n        }\n      }\n    } else {\n      processEnv[key] = parsed[key]\n    }\n  }\n}\n\nconst DotenvModule = {\n  configDotenv,\n  _configVault,\n  _parseVault,\n  config,\n  decrypt,\n  parse,\n  populate\n}\n\nmodule.exports.configDotenv = DotenvModule.configDotenv\nmodule.exports._configVault = DotenvModule._configVault\nmodule.exports._parseVault = DotenvModule._parseVault\nmodule.exports.config = DotenvModule.config\nmodule.exports.decrypt = DotenvModule.decrypt\nmodule.exports.parse = DotenvModule.parse\nmodule.exports.populate = DotenvModule.populate\n\nmodule.exports = DotenvModule\n", "'use strict';\n\nmodule.exports = function (fetch, defaults) {\n  defaults = defaults || {};\n  if (typeof fetch !== 'function') {\n    throw new ArgumentError('fetch must be a function');\n  }\n\n  if (typeof defaults !== 'object') {\n    throw new ArgumentError('defaults must be an object');\n  }\n\n  if (defaults.retries !== undefined && !isPositiveInteger(defaults.retries)) {\n    throw new ArgumentError('retries must be a positive integer');\n  }\n\n  if (defaults.retryDelay !== undefined && !isPositiveInteger(defaults.retryDelay) && typeof defaults.retryDelay !== 'function') {\n    throw new ArgumentError('retryDelay must be a positive integer or a function returning a positive integer');\n  }\n\n  if (defaults.retryOn !== undefined && !Array.isArray(defaults.retryOn) && typeof defaults.retryOn !== 'function') {\n    throw new ArgumentError('retryOn property expects an array or function');\n  }\n\n  var baseDefaults = {\n    retries: 3,\n    retryDelay: 1000,\n    retryOn: [],\n  };\n\n  defaults = Object.assign(baseDefaults, defaults);\n\n  return function fetchRetry(input, init) {\n    var retries = defaults.retries;\n    var retryDelay = defaults.retryDelay;\n    var retryOn = defaults.retryOn;\n\n    if (init && init.retries !== undefined) {\n      if (isPositiveInteger(init.retries)) {\n        retries = init.retries;\n      } else {\n        throw new ArgumentError('retries must be a positive integer');\n      }\n    }\n\n    if (init && init.retryDelay !== undefined) {\n      if (isPositiveInteger(init.retryDelay) || (typeof init.retryDelay === 'function')) {\n        retryDelay = init.retryDelay;\n      } else {\n        throw new ArgumentError('retryDelay must be a positive integer or a function returning a positive integer');\n      }\n    }\n\n    if (init && init.retryOn) {\n      if (Array.isArray(init.retryOn) || (typeof init.retryOn === 'function')) {\n        retryOn = init.retryOn;\n      } else {\n        throw new ArgumentError('retryOn property expects an array or function');\n      }\n    }\n\n    // eslint-disable-next-line no-undef\n    return new Promise(function (resolve, reject) {\n      var wrappedFetch = function (attempt) {\n        // As of node 18, this is no longer needed since node comes with native support for fetch:\n        /* istanbul ignore next */\n        var _input =\n          typeof Request !== 'undefined' && input instanceof Request\n            ? input.clone()\n            : input;\n        fetch(_input, init)\n          .then(function (response) {\n            if (Array.isArray(retryOn) && retryOn.indexOf(response.status) === -1) {\n              resolve(response);\n            } else if (typeof retryOn === 'function') {\n              try {\n                // eslint-disable-next-line no-undef\n                return Promise.resolve(retryOn(attempt, null, response))\n                  .then(function (retryOnResponse) {\n                    if(retryOnResponse) {\n                      retry(attempt, null, response);\n                    } else {\n                      resolve(response);\n                    }\n                  }).catch(reject);\n              } catch (error) {\n                reject(error);\n              }\n            } else {\n              if (attempt < retries) {\n                retry(attempt, null, response);\n              } else {\n                resolve(response);\n              }\n            }\n          })\n          .catch(function (error) {\n            if (typeof retryOn === 'function') {\n              try {\n                // eslint-disable-next-line no-undef\n                Promise.resolve(retryOn(attempt, error, null))\n                  .then(function (retryOnResponse) {\n                    if(retryOnResponse) {\n                      retry(attempt, error, null);\n                    } else {\n                      reject(error);\n                    }\n                  })\n                  .catch(function(error) {\n                    reject(error);\n                  });\n              } catch(error) {\n                reject(error);\n              }\n            } else if (attempt < retries) {\n              retry(attempt, error, null);\n            } else {\n              reject(error);\n            }\n          });\n      };\n\n      function retry(attempt, error, response) {\n        var delay = (typeof retryDelay === 'function') ?\n          retryDelay(attempt, error, response) : retryDelay;\n        setTimeout(function () {\n          wrappedFetch(++attempt);\n        }, delay);\n      }\n\n      wrappedFetch(0);\n    });\n  };\n};\n\nfunction isPositiveInteger(value) {\n  return Number.isInteger(value) && value >= 0;\n}\n\nfunction ArgumentError(message) {\n  this.name = 'ArgumentError';\n  this.message = message;\n}\n", "'use strict';\n\nmodule.exports = cliWidth;\n\nfunction normalizeOpts(options) {\n  const defaultOpts = {\n    defaultWidth: 0,\n    output: process.stdout,\n    tty: require('tty'),\n  };\n\n  if (!options) {\n    return defaultOpts;\n  }\n\n  Object.keys(defaultOpts).forEach(function (key) {\n    if (!options[key]) {\n      options[key] = defaultOpts[key];\n    }\n  });\n\n  return options;\n}\n\nfunction cliWidth(options) {\n  const opts = normalizeOpts(options);\n\n  if (opts.output.getWindowSize) {\n    return opts.output.getWindowSize()[0] || opts.defaultWidth;\n  }\n\n  if (opts.tty.getWindowSize) {\n    return opts.tty.getWindowSize()[1] || opts.defaultWidth;\n  }\n\n  if (opts.output.columns) {\n    return opts.output.columns;\n  }\n\n  if (process.env.CLI_WIDTH) {\n    const width = parseInt(process.env.CLI_WIDTH, 10);\n\n    if (!isNaN(width) && width !== 0) {\n      return width;\n    }\n  }\n\n  return opts.defaultWidth;\n}\n", "module.exports = () => {\n\t// https://mths.be/emoji\n\treturn /[#*0-9]\\uFE0F?\\u20E3|[\\xA9\\xAE\\u203C\\u2049\\u2122\\u2139\\u2194-\\u2199\\u21A9\\u21AA\\u231A\\u231B\\u2328\\u23CF\\u23ED-\\u23EF\\u23F1\\u23F2\\u23F8-\\u23FA\\u24C2\\u25AA\\u25AB\\u25B6\\u25C0\\u25FB\\u25FC\\u25FE\\u2600-\\u2604\\u260E\\u2611\\u2614\\u2615\\u2618\\u2620\\u2622\\u2623\\u2626\\u262A\\u262E\\u262F\\u2638-\\u263A\\u2640\\u2642\\u2648-\\u2653\\u265F\\u2660\\u2663\\u2665\\u2666\\u2668\\u267B\\u267E\\u267F\\u2692\\u2694-\\u2697\\u2699\\u269B\\u269C\\u26A0\\u26A7\\u26AA\\u26B0\\u26B1\\u26BD\\u26BE\\u26C4\\u26C8\\u26CF\\u26D1\\u26E9\\u26F0-\\u26F5\\u26F7\\u26F8\\u26FA\\u2702\\u2708\\u2709\\u270F\\u2712\\u2714\\u2716\\u271D\\u2721\\u2733\\u2734\\u2744\\u2747\\u2757\\u2763\\u27A1\\u2934\\u2935\\u2B05-\\u2B07\\u2B1B\\u2B1C\\u2B55\\u3030\\u303D\\u3297\\u3299]\\uFE0F?|[\\u261D\\u270C\\u270D](?:\\uD83C[\\uDFFB-\\uDFFF]|\\uFE0F)?|[\\u270A\\u270B](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\u23E9-\\u23EC\\u23F0\\u23F3\\u25FD\\u2693\\u26A1\\u26AB\\u26C5\\u26CE\\u26D4\\u26EA\\u26FD\\u2705\\u2728\\u274C\\u274E\\u2753-\\u2755\\u2795-\\u2797\\u27B0\\u27BF\\u2B50]|\\u26D3\\uFE0F?(?:\\u200D\\uD83D\\uDCA5)?|\\u26F9(?:\\uD83C[\\uDFFB-\\uDFFF]|\\uFE0F)?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|\\u2764\\uFE0F?(?:\\u200D(?:\\uD83D\\uDD25|\\uD83E\\uDE79))?|\\uD83C(?:[\\uDC04\\uDD70\\uDD71\\uDD7E\\uDD7F\\uDE02\\uDE37\\uDF21\\uDF24-\\uDF2C\\uDF36\\uDF7D\\uDF96\\uDF97\\uDF99-\\uDF9B\\uDF9E\\uDF9F\\uDFCD\\uDFCE\\uDFD4-\\uDFDF\\uDFF5\\uDFF7]\\uFE0F?|[\\uDF85\\uDFC2\\uDFC7](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDFC4\\uDFCA](?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDFCB\\uDFCC](?:\\uD83C[\\uDFFB-\\uDFFF]|\\uFE0F)?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDCCF\\uDD8E\\uDD91-\\uDD9A\\uDE01\\uDE1A\\uDE2F\\uDE32-\\uDE36\\uDE38-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF20\\uDF2D-\\uDF35\\uDF37-\\uDF43\\uDF45-\\uDF4A\\uDF4C-\\uDF7C\\uDF7E-\\uDF84\\uDF86-\\uDF93\\uDFA0-\\uDFC1\\uDFC5\\uDFC6\\uDFC8\\uDFC9\\uDFCF-\\uDFD3\\uDFE0-\\uDFF0\\uDFF8-\\uDFFF]|\\uDDE6\\uD83C[\\uDDE8-\\uDDEC\\uDDEE\\uDDF1\\uDDF2\\uDDF4\\uDDF6-\\uDDFA\\uDDFC\\uDDFD\\uDDFF]|\\uDDE7\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEF\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9\\uDDFB\\uDDFC\\uDDFE\\uDDFF]|\\uDDE8\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDEE\\uDDF0-\\uDDF7\\uDDFA-\\uDDFF]|\\uDDE9\\uD83C[\\uDDEA\\uDDEC\\uDDEF\\uDDF0\\uDDF2\\uDDF4\\uDDFF]|\\uDDEA\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDED\\uDDF7-\\uDDFA]|\\uDDEB\\uD83C[\\uDDEE-\\uDDF0\\uDDF2\\uDDF4\\uDDF7]|\\uDDEC\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEE\\uDDF1-\\uDDF3\\uDDF5-\\uDDFA\\uDDFC\\uDDFE]|\\uDDED\\uD83C[\\uDDF0\\uDDF2\\uDDF3\\uDDF7\\uDDF9\\uDDFA]|\\uDDEE\\uD83C[\\uDDE8-\\uDDEA\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9]|\\uDDEF\\uD83C[\\uDDEA\\uDDF2\\uDDF4\\uDDF5]|\\uDDF0\\uD83C[\\uDDEA\\uDDEC-\\uDDEE\\uDDF2\\uDDF3\\uDDF5\\uDDF7\\uDDFC\\uDDFE\\uDDFF]|\\uDDF1\\uD83C[\\uDDE6-\\uDDE8\\uDDEE\\uDDF0\\uDDF7-\\uDDFB\\uDDFE]|\\uDDF2\\uD83C[\\uDDE6\\uDDE8-\\uDDED\\uDDF0-\\uDDFF]|\\uDDF3\\uD83C[\\uDDE6\\uDDE8\\uDDEA-\\uDDEC\\uDDEE\\uDDF1\\uDDF4\\uDDF5\\uDDF7\\uDDFA\\uDDFF]|\\uDDF4\\uD83C\\uDDF2|\\uDDF5\\uD83C[\\uDDE6\\uDDEA-\\uDDED\\uDDF0-\\uDDF3\\uDDF7-\\uDDF9\\uDDFC\\uDDFE]|\\uDDF6\\uD83C\\uDDE6|\\uDDF7\\uD83C[\\uDDEA\\uDDF4\\uDDF8\\uDDFA\\uDDFC]|\\uDDF8\\uD83C[\\uDDE6-\\uDDEA\\uDDEC-\\uDDF4\\uDDF7-\\uDDF9\\uDDFB\\uDDFD-\\uDDFF]|\\uDDF9\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDED\\uDDEF-\\uDDF4\\uDDF7\\uDDF9\\uDDFB\\uDDFC\\uDDFF]|\\uDDFA\\uD83C[\\uDDE6\\uDDEC\\uDDF2\\uDDF3\\uDDF8\\uDDFE\\uDDFF]|\\uDDFB\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDEE\\uDDF3\\uDDFA]|\\uDDFC\\uD83C[\\uDDEB\\uDDF8]|\\uDDFD\\uD83C\\uDDF0|\\uDDFE\\uD83C[\\uDDEA\\uDDF9]|\\uDDFF\\uD83C[\\uDDE6\\uDDF2\\uDDFC]|\\uDF44(?:\\u200D\\uD83D\\uDFEB)?|\\uDF4B(?:\\u200D\\uD83D\\uDFE9)?|\\uDFC3(?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D(?:[\\u2640\\u2642]\\uFE0F?(?:\\u200D\\u27A1\\uFE0F?)?|\\u27A1\\uFE0F?))?|\\uDFF3\\uFE0F?(?:\\u200D(?:\\u26A7\\uFE0F?|\\uD83C\\uDF08))?|\\uDFF4(?:\\u200D\\u2620\\uFE0F?|\\uDB40\\uDC67\\uDB40\\uDC62\\uDB40(?:\\uDC65\\uDB40\\uDC6E\\uDB40\\uDC67|\\uDC73\\uDB40\\uDC63\\uDB40\\uDC74|\\uDC77\\uDB40\\uDC6C\\uDB40\\uDC73)\\uDB40\\uDC7F)?)|\\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?|[\\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](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDC6E-\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4\\uDEB5](?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDD74\\uDD90](?:\\uD83C[\\uDFFB-\\uDFFF]|\\uFE0F)?|[\\uDC00-\\uDC07\\uDC09-\\uDC14\\uDC16-\\uDC25\\uDC27-\\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-\\uDE41\\uDE43\\uDE44\\uDE48-\\uDE4A\\uDE80-\\uDEA2\\uDEA4-\\uDEB3\\uDEB7-\\uDEBF\\uDEC1-\\uDEC5\\uDED0-\\uDED2\\uDED5-\\uDED8\\uDEDC-\\uDEDF\\uDEEB\\uDEEC\\uDEF4-\\uDEFC\\uDFE0-\\uDFEB\\uDFF0]|\\uDC08(?:\\u200D\\u2B1B)?|\\uDC15(?:\\u200D\\uD83E\\uDDBA)?|\\uDC26(?:\\u200D(?:\\u2B1B|\\uD83D\\uDD25))?|\\uDC3B(?:\\u200D\\u2744\\uFE0F?)?|\\uDC41\\uFE0F?(?:\\u200D\\uD83D\\uDDE8\\uFE0F?)?|\\uDC68(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDC68\\uDC69]\\u200D\\uD83D(?:\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?)|[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?)|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]))|\\uD83C(?:\\uDFFB(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFC-\\uDFFF])|\\uD83E(?:[\\uDD1D\\uDEEF]\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFC-\\uDFFF]|[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3])))?|\\uDFFC(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])|\\uD83E(?:[\\uDD1D\\uDEEF]\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB\\uDFFD-\\uDFFF]|[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3])))?|\\uDFFD(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])|\\uD83E(?:[\\uDD1D\\uDEEF]\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF]|[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3])))?|\\uDFFE(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])|\\uD83E(?:[\\uDD1D\\uDEEF]\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB-\\uDFFD\\uDFFF]|[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3])))?|\\uDFFF(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB-\\uDFFE])|\\uD83E(?:[\\uDD1D\\uDEEF]\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB-\\uDFFE]|[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3])))?))?|\\uDC69(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?[\\uDC68\\uDC69]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?|\\uDC69\\u200D\\uD83D(?:\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?))|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]))|\\uD83C(?:\\uDFFB(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83D\\uDC69\\uD83C[\\uDFFC-\\uDFFF])|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFC-\\uDFFF]|\\uDEEF\\u200D\\uD83D\\uDC69\\uD83C[\\uDFFC-\\uDFFF])))?|\\uDFFC(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83D\\uDC69\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB\\uDFFD-\\uDFFF]|\\uDEEF\\u200D\\uD83D\\uDC69\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])))?|\\uDFFD(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83D\\uDC69\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF]|\\uDEEF\\u200D\\uD83D\\uDC69\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])))?|\\uDFFE(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83D\\uDC69\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB-\\uDFFD\\uDFFF]|\\uDEEF\\u200D\\uD83D\\uDC69\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])))?|\\uDFFF(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83D\\uDC69\\uD83C[\\uDFFB-\\uDFFE])|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB-\\uDFFE]|\\uDEEF\\u200D\\uD83D\\uDC69\\uD83C[\\uDFFB-\\uDFFE])))?))?|\\uDD75(?:\\uD83C[\\uDFFB-\\uDFFF]|\\uFE0F)?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|\\uDE2E(?:\\u200D\\uD83D\\uDCA8)?|\\uDE35(?:\\u200D\\uD83D\\uDCAB)?|\\uDE36(?:\\u200D\\uD83C\\uDF2B\\uFE0F?)?|\\uDE42(?:\\u200D[\\u2194\\u2195]\\uFE0F?)?|\\uDEB6(?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D(?:[\\u2640\\u2642]\\uFE0F?(?:\\u200D\\u27A1\\uFE0F?)?|\\u27A1\\uFE0F?))?)|\\uD83E(?:[\\uDD0C\\uDD0F\\uDD18-\\uDD1F\\uDD30-\\uDD34\\uDD36\\uDD77\\uDDB5\\uDDB6\\uDDBB\\uDDD2\\uDDD3\\uDDD5\\uDEC3-\\uDEC5\\uDEF0\\uDEF2-\\uDEF8](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3C-\\uDD3E\\uDDB8\\uDDB9\\uDDCD\\uDDCF\\uDDD4\\uDDD6-\\uDDDD](?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDDDE\\uDDDF](?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDD0D\\uDD0E\\uDD10-\\uDD17\\uDD20-\\uDD25\\uDD27-\\uDD2F\\uDD3A\\uDD3F-\\uDD45\\uDD47-\\uDD76\\uDD78-\\uDDB4\\uDDB7\\uDDBA\\uDDBC-\\uDDCC\\uDDD0\\uDDE0-\\uDDFF\\uDE70-\\uDE7C\\uDE80-\\uDE8A\\uDE8E-\\uDEC2\\uDEC6\\uDEC8\\uDECD-\\uDEDC\\uDEDF-\\uDEEA\\uDEEF]|\\uDDCE(?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D(?:[\\u2640\\u2642]\\uFE0F?(?:\\u200D\\u27A1\\uFE0F?)?|\\u27A1\\uFE0F?))?|\\uDDD1(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3\\uDE70]|\\uDD1D\\u200D\\uD83E\\uDDD1|\\uDDD1\\u200D\\uD83E\\uDDD2(?:\\u200D\\uD83E\\uDDD2)?|\\uDDD2(?:\\u200D\\uD83E\\uDDD2)?))|\\uD83C(?:\\uDFFB(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFC-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFC-\\uDFFF])|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3\\uDE70]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF]|\\uDEEF\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFC-\\uDFFF])))?|\\uDFFC(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB\\uDFFD-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3\\uDE70]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF]|\\uDEEF\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])))?|\\uDFFD(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3\\uDE70]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF]|\\uDEEF\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])))?|\\uDFFE(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFD\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3\\uDE70]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF]|\\uDEEF\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])))?|\\uDFFF(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFE]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFE])|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3\\uDE70]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF]|\\uDEEF\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFE])))?))?|\\uDEF1(?:\\uD83C(?:\\uDFFB(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFC-\\uDFFF])?|\\uDFFC(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])?|\\uDFFD(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])?|\\uDFFE(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])?|\\uDFFF(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB-\\uDFFE])?))?)/g;\n};\n", "const Stream = require('stream')\n\nclass MuteStream extends Stream {\n  #isTTY = null\n\n  constructor (opts = {}) {\n    super(opts)\n    this.writable = this.readable = true\n    this.muted = false\n    this.on('pipe', this._onpipe)\n    this.replace = opts.replace\n\n    // For readline-type situations\n    // This much at the start of a line being redrawn after a ctrl char\n    // is seen (such as backspace) won't be redrawn as the replacement\n    this._prompt = opts.prompt || null\n    this._hadControl = false\n  }\n\n  #destSrc (key, def) {\n    if (this._dest) {\n      return this._dest[key]\n    }\n    if (this._src) {\n      return this._src[key]\n    }\n    return def\n  }\n\n  #proxy (method, ...args) {\n    if (typeof this._dest?.[method] === 'function') {\n      this._dest[method](...args)\n    }\n    if (typeof this._src?.[method] === 'function') {\n      this._src[method](...args)\n    }\n  }\n\n  get isTTY () {\n    if (this.#isTTY !== null) {\n      return this.#isTTY\n    }\n    return this.#destSrc('isTTY', false)\n  }\n\n  // basically just get replace the getter/setter with a regular value\n  set isTTY (val) {\n    this.#isTTY = val\n  }\n\n  get rows () {\n    return this.#destSrc('rows')\n  }\n\n  get columns () {\n    return this.#destSrc('columns')\n  }\n\n  mute () {\n    this.muted = true\n  }\n\n  unmute () {\n    this.muted = false\n  }\n\n  _onpipe (src) {\n    this._src = src\n  }\n\n  pipe (dest, options) {\n    this._dest = dest\n    return super.pipe(dest, options)\n  }\n\n  pause () {\n    if (this._src) {\n      return this._src.pause()\n    }\n  }\n\n  resume () {\n    if (this._src) {\n      return this._src.resume()\n    }\n  }\n\n  write (c) {\n    if (this.muted) {\n      if (!this.replace) {\n        return true\n      }\n      // eslint-disable-next-line no-control-regex\n      if (c.match(/^\\u001b/)) {\n        if (c.indexOf(this._prompt) === 0) {\n          c = c.slice(this._prompt.length)\n          c = c.replace(/./g, this.replace)\n          c = this._prompt + c\n        }\n        this._hadControl = true\n        return this.emit('data', c)\n      } else {\n        if (this._prompt && this._hadControl &&\n          c.indexOf(this._prompt) === 0) {\n          this._hadControl = false\n          this.emit('data', this._prompt)\n          c = c.slice(this._prompt.length)\n        }\n        c = c.toString().replace(/./g, this.replace)\n      }\n    }\n    this.emit('data', c)\n  }\n\n  end (c) {\n    if (this.muted) {\n      if (c && this.replace) {\n        c = c.toString().replace(/./g, this.replace)\n      } else {\n        c = null\n      }\n    }\n    if (c) {\n      this.emit('data', c)\n    }\n    this.emit('end')\n  }\n\n  destroy (...args) {\n    return this.#proxy('destroy', ...args)\n  }\n\n  destroySoon (...args) {\n    return this.#proxy('destroySoon', ...args)\n  }\n\n  close (...args) {\n    return this.#proxy('close', ...args)\n  }\n}\n\nmodule.exports = MuteStream\n", "module.exports = {\n    /* The local file header */\n    LOCHDR           : 30, // LOC header size\n    LOCSIG           : 0x04034b50, // \"PK\\003\\004\"\n    LOCVER           : 4,\t// version needed to extract\n    LOCFLG           : 6, // general purpose bit flag\n    LOCHOW           : 8, // compression method\n    LOCTIM           : 10, // modification time (2 bytes time, 2 bytes date)\n    LOCCRC           : 14, // uncompressed file crc-32 value\n    LOCSIZ           : 18, // compressed size\n    LOCLEN           : 22, // uncompressed size\n    LOCNAM           : 26, // filename length\n    LOCEXT           : 28, // extra field length\n\n    /* The Data descriptor */\n    EXTSIG           : 0x08074b50, // \"PK\\007\\008\"\n    EXTHDR           : 16, // EXT header size\n    EXTCRC           : 4, // uncompressed file crc-32 value\n    EXTSIZ           : 8, // compressed size\n    EXTLEN           : 12, // uncompressed size\n\n    /* The central directory file header */\n    CENHDR           : 46, // CEN header size\n    CENSIG           : 0x02014b50, // \"PK\\001\\002\"\n    CENVEM           : 4, // version made by\n    CENVER           : 6, // version needed to extract\n    CENFLG           : 8, // encrypt, decrypt flags\n    CENHOW           : 10, // compression method\n    CENTIM           : 12, // modification time (2 bytes time, 2 bytes date)\n    CENCRC           : 16, // uncompressed file crc-32 value\n    CENSIZ           : 20, // compressed size\n    CENLEN           : 24, // uncompressed size\n    CENNAM           : 28, // filename length\n    CENEXT           : 30, // extra field length\n    CENCOM           : 32, // file comment length\n    CENDSK           : 34, // volume number start\n    CENATT           : 36, // internal file attributes\n    CENATX           : 38, // external file attributes (host system dependent)\n    CENOFF           : 42, // LOC header offset\n\n    /* The entries in the end of central directory */\n    ENDHDR           : 22, // END header size\n    ENDSIG           : 0x06054b50, // \"PK\\005\\006\"\n    ENDSUB           : 8, // number of entries on this disk\n    ENDTOT           : 10, // total number of entries\n    ENDSIZ           : 12, // central directory size in bytes\n    ENDOFF           : 16, // offset of first CEN header\n    ENDCOM           : 20, // zip file comment length\n\n    END64HDR         : 20, // zip64 END header size\n    END64SIG         : 0x07064b50, // zip64 Locator signature, \"PK\\006\\007\"\n    END64START       : 4, // number of the disk with the start of the zip64\n    END64OFF         : 8, // relative offset of the zip64 end of central directory\n    END64NUMDISKS    : 16, // total number of disks\n\n    ZIP64SIG         : 0x06064b50, // zip64 signature, \"PK\\006\\006\"\n    ZIP64HDR         : 56, // zip64 record minimum size\n    ZIP64LEAD        : 12, // leading bytes at the start of the record, not counted by the value stored in ZIP64SIZE\n    ZIP64SIZE        : 4, // zip64 size of the central directory record\n    ZIP64VEM         : 12, // zip64 version made by\n    ZIP64VER         : 14, // zip64 version needed to extract\n    ZIP64DSK         : 16, // zip64 number of this disk\n    ZIP64DSKDIR      : 20, // number of the disk with the start of the record directory\n    ZIP64SUB         : 24, // number of entries on this disk\n    ZIP64TOT         : 32, // total number of entries\n    ZIP64SIZB        : 40, // zip64 central directory size in bytes\n    ZIP64OFF         : 48, // offset of start of central directory with respect to the starting disk number\n    ZIP64EXTRA       : 56, // extensible data sector\n\n    /* Compression methods */\n    STORED           : 0, // no compression\n    SHRUNK           : 1, // shrunk\n    REDUCED1         : 2, // reduced with compression factor 1\n    REDUCED2         : 3, // reduced with compression factor 2\n    REDUCED3         : 4, // reduced with compression factor 3\n    REDUCED4         : 5, // reduced with compression factor 4\n    IMPLODED         : 6, // imploded\n    // 7 reserved for Tokenizing compression algorithm\n    DEFLATED         : 8, // deflated\n    ENHANCED_DEFLATED: 9, // enhanced deflated\n    PKWARE           : 10,// PKWare DCL imploded\n    // 11 reserved by PKWARE\n    BZIP2            : 12, //  compressed using BZIP2\n    // 13 reserved by PKWARE\n    LZMA             : 14, // LZMA\n    // 15-17 reserved by PKWARE\n    IBM_TERSE        : 18, // compressed using IBM TERSE\n    IBM_LZ77         : 19, // IBM LZ77 z\n    AES_ENCRYPT      : 99, // WinZIP AES encryption method\n\n    /* General purpose bit flag */\n    // values can obtained with expression 2**bitnr\n    FLG_ENC          : 1,    // Bit 0: encrypted file\n    FLG_COMP1        : 2,    // Bit 1, compression option\n    FLG_COMP2        : 4,    // Bit 2, compression option\n    FLG_DESC         : 8,    // Bit 3, data descriptor\n    FLG_ENH          : 16,   // Bit 4, enhanced deflating\n    FLG_PATCH        : 32,   // Bit 5, indicates that the file is compressed patched data.\n    FLG_STR          : 64,   // Bit 6, strong encryption (patented)\n                             // Bits 7-10: Currently unused.\n    FLG_EFS          : 2048, // Bit 11: Language encoding flag (EFS)\n                             // Bit 12: Reserved by PKWARE for enhanced compression.\n                             // Bit 13: encrypted the Central Directory (patented).\n                             // Bits 14-15: Reserved by PKWARE.\n    FLG_MSK          : 4096, // mask header values\n\n    /* Load type */\n    FILE             : 2,\n    BUFFER           : 1,\n    NONE             : 0,\n\n    /* 4.5 Extensible data fields */\n    EF_ID            : 0,\n    EF_SIZE          : 2,\n\n    /* Header IDs */\n    ID_ZIP64         : 0x0001,\n    ID_AVINFO        : 0x0007,\n    ID_PFS           : 0x0008,\n    ID_OS2           : 0x0009,\n    ID_NTFS          : 0x000a,\n    ID_OPENVMS       : 0x000c,\n    ID_UNIX          : 0x000d,\n    ID_FORK          : 0x000e,\n    ID_PATCH         : 0x000f,\n    ID_X509_PKCS7    : 0x0014,\n    ID_X509_CERTID_F : 0x0015,\n    ID_X509_CERTID_C : 0x0016,\n    ID_STRONGENC     : 0x0017,\n    ID_RECORD_MGT    : 0x0018,\n    ID_X509_PKCS7_RL : 0x0019,\n    ID_IBM1          : 0x0065,\n    ID_IBM2          : 0x0066,\n    ID_POSZIP        : 0x4690,\n\n    EF_ZIP64_OR_32   : 0xffffffff,\n    EF_ZIP64_OR_16   : 0xffff,\n    EF_ZIP64_SUNCOMP : 0,\n    EF_ZIP64_SCOMP   : 8,\n    EF_ZIP64_RHO     : 16,\n    EF_ZIP64_DSN     : 24\n};\n", "const errors = {\n    /* Header error messages */\n    INVALID_LOC: \"Invalid LOC header (bad signature)\",\n    INVALID_CEN: \"Invalid CEN header (bad signature)\",\n    INVALID_END: \"Invalid END header (bad signature)\",\n\n    /* Descriptor */\n    DESCRIPTOR_NOT_EXIST: \"No descriptor present\",\n    DESCRIPTOR_UNKNOWN: \"Unknown descriptor format\",\n    DESCRIPTOR_FAULTY: \"Descriptor data is malformed\",\n\n    /* ZipEntry error messages*/\n    NO_DATA: \"Nothing to decompress\",\n    BAD_CRC: \"CRC32 checksum failed {0}\",\n    FILE_IN_THE_WAY: \"There is a file in the way: {0}\",\n    UNKNOWN_METHOD: \"Invalid/unsupported compression method\",\n\n    /* Inflater error messages */\n    AVAIL_DATA: \"inflate::Available inflate data did not terminate\",\n    INVALID_DISTANCE: \"inflate::Invalid literal/length or distance code in fixed or dynamic block\",\n    TO_MANY_CODES: \"inflate::Dynamic block code description: too many length or distance codes\",\n    INVALID_REPEAT_LEN: \"inflate::Dynamic block code description: repeat more than specified lengths\",\n    INVALID_REPEAT_FIRST: \"inflate::Dynamic block code description: repeat lengths with no first length\",\n    INCOMPLETE_CODES: \"inflate::Dynamic block code description: code lengths codes incomplete\",\n    INVALID_DYN_DISTANCE: \"inflate::Dynamic block code description: invalid distance code lengths\",\n    INVALID_CODES_LEN: \"inflate::Dynamic block code description: invalid literal/length code lengths\",\n    INVALID_STORE_BLOCK: \"inflate::Stored block length did not match one's complement\",\n    INVALID_BLOCK_TYPE: \"inflate::Invalid block type (type == 3)\",\n\n    /* ADM-ZIP error messages */\n    CANT_EXTRACT_FILE: \"Could not extract the file\",\n    CANT_OVERRIDE: \"Target file already exists\",\n    DISK_ENTRY_TOO_LARGE: \"Number of disk entries is too large\",\n    NO_ZIP: \"No zip file was loaded\",\n    NO_ENTRY: \"Entry doesn't exist\",\n    DIRECTORY_CONTENT_ERROR: \"A directory cannot have content\",\n    FILE_NOT_FOUND: 'File not found: \"{0}\"',\n    NOT_IMPLEMENTED: \"Not implemented\",\n    INVALID_FILENAME: \"Invalid filename\",\n    INVALID_FORMAT: \"Invalid or unsupported zip format. No END header found\",\n    INVALID_PASS_PARAM: \"Incompatible password parameter\",\n    WRONG_PASSWORD: \"Wrong Password\",\n\n    /* ADM-ZIP */\n    COMMENT_TOO_LONG: \"Comment is too long\", // Comment can be max 65535 bytes long (NOTE: some non-US characters may take more space)\n    EXTRA_FIELD_PARSE_ERROR: \"Extra field parsing error\"\n};\n\n// template\nfunction E(message) {\n    return function (...args) {\n        if (args.length) { // Allow {0} .. {9} arguments in error message, based on argument number\n            message = message.replace(/\\{(\\d)\\}/g, (_, n) => args[n] || '');\n        }\n\n        return new Error('ADM-ZIP: ' + message);\n    };\n}\n\n// Init errors with template\nfor (const msg of Object.keys(errors)) {\n    exports[msg] = E(errors[msg]);\n}\n", "const fsystem = require(\"fs\");\nconst pth = require(\"path\");\nconst Constants = require(\"./constants\");\nconst Errors = require(\"./errors\");\nconst isWin = typeof process === \"object\" && \"win32\" === process.platform;\n\nconst is_Obj = (obj) => typeof obj === \"object\" && obj !== null;\n\n// generate CRC32 lookup table\nconst crcTable = new Uint32Array(256).map((t, c) => {\n    for (let k = 0; k < 8; k++) {\n        if ((c & 1) !== 0) {\n            c = 0xedb88320 ^ (c >>> 1);\n        } else {\n            c >>>= 1;\n        }\n    }\n    return c >>> 0;\n});\n\n// UTILS functions\n\nfunction Utils(opts) {\n    this.sep = pth.sep;\n    this.fs = fsystem;\n\n    if (is_Obj(opts)) {\n        // custom filesystem\n        if (is_Obj(opts.fs) && typeof opts.fs.statSync === \"function\") {\n            this.fs = opts.fs;\n        }\n    }\n}\n\nmodule.exports = Utils;\n\n// INSTANTIABLE functions\n\nUtils.prototype.makeDir = function (/*String*/ folder) {\n    const self = this;\n\n    // Sync - make directories tree\n    function mkdirSync(/*String*/ fpath) {\n        let resolvedPath = fpath.split(self.sep)[0];\n        fpath.split(self.sep).forEach(function (name) {\n            if (!name || name.substr(-1, 1) === \":\") return;\n            resolvedPath += self.sep + name;\n            var stat;\n            try {\n                stat = self.fs.statSync(resolvedPath);\n            } catch (e) {\n                self.fs.mkdirSync(resolvedPath);\n            }\n            if (stat && stat.isFile()) throw Errors.FILE_IN_THE_WAY(`\"${resolvedPath}\"`);\n        });\n    }\n\n    mkdirSync(folder);\n};\n\nUtils.prototype.writeFileTo = function (/*String*/ path, /*Buffer*/ content, /*Boolean*/ overwrite, /*Number*/ attr) {\n    const self = this;\n    if (self.fs.existsSync(path)) {\n        if (!overwrite) return false; // cannot overwrite\n\n        var stat = self.fs.statSync(path);\n        if (stat.isDirectory()) {\n            return false;\n        }\n    }\n    var folder = pth.dirname(path);\n    if (!self.fs.existsSync(folder)) {\n        self.makeDir(folder);\n    }\n\n    var fd;\n    try {\n        fd = self.fs.openSync(path, \"w\", 0o666); // 0666\n    } catch (e) {\n        self.fs.chmodSync(path, 0o666);\n        fd = self.fs.openSync(path, \"w\", 0o666);\n    }\n    if (fd) {\n        try {\n            self.fs.writeSync(fd, content, 0, content.length, 0);\n        } finally {\n            self.fs.closeSync(fd);\n        }\n    }\n    self.fs.chmodSync(path, attr || 0o666);\n    return true;\n};\n\nUtils.prototype.writeFileToAsync = function (/*String*/ path, /*Buffer*/ content, /*Boolean*/ overwrite, /*Number*/ attr, /*Function*/ callback) {\n    if (typeof attr === \"function\") {\n        callback = attr;\n        attr = undefined;\n    }\n\n    const self = this;\n\n    self.fs.exists(path, function (exist) {\n        if (exist && !overwrite) return callback(false);\n\n        self.fs.stat(path, function (err, stat) {\n            if (exist && stat.isDirectory()) {\n                return callback(false);\n            }\n\n            var folder = pth.dirname(path);\n            self.fs.exists(folder, function (exists) {\n                if (!exists) self.makeDir(folder);\n\n                self.fs.open(path, \"w\", 0o666, function (err, fd) {\n                    if (err) {\n                        self.fs.chmod(path, 0o666, function () {\n                            self.fs.open(path, \"w\", 0o666, function (err, fd) {\n                                self.fs.write(fd, content, 0, content.length, 0, function () {\n                                    self.fs.close(fd, function () {\n                                        self.fs.chmod(path, attr || 0o666, function () {\n                                            callback(true);\n                                        });\n                                    });\n                                });\n                            });\n                        });\n                    } else if (fd) {\n                        self.fs.write(fd, content, 0, content.length, 0, function () {\n                            self.fs.close(fd, function () {\n                                self.fs.chmod(path, attr || 0o666, function () {\n                                    callback(true);\n                                });\n                            });\n                        });\n                    } else {\n                        self.fs.chmod(path, attr || 0o666, function () {\n                            callback(true);\n                        });\n                    }\n                });\n            });\n        });\n    });\n};\n\nUtils.prototype.findFiles = function (/*String*/ path) {\n    const self = this;\n\n    function findSync(/*String*/ dir, /*RegExp*/ pattern, /*Boolean*/ recursive) {\n        if (typeof pattern === \"boolean\") {\n            recursive = pattern;\n            pattern = undefined;\n        }\n        let files = [];\n        self.fs.readdirSync(dir).forEach(function (file) {\n            const path = pth.join(dir, file);\n            const stat = self.fs.statSync(path);\n\n            if (!pattern || pattern.test(path)) {\n                files.push(pth.normalize(path) + (stat.isDirectory() ? self.sep : \"\"));\n            }\n\n            if (stat.isDirectory() && recursive) files = files.concat(findSync(path, pattern, recursive));\n        });\n        return files;\n    }\n\n    return findSync(path, undefined, true);\n};\n\n/**\n * Callback for showing if everything was done.\n *\n * @callback filelistCallback\n * @param {Error} err - Error object\n * @param {string[]} list - was request fully completed\n */\n\n/**\n *\n * @param {string} dir\n * @param {filelistCallback} cb\n */\nUtils.prototype.findFilesAsync = function (dir, cb) {\n    const self = this;\n    let results = [];\n    self.fs.readdir(dir, function (err, list) {\n        if (err) return cb(err);\n        let list_length = list.length;\n        if (!list_length) return cb(null, results);\n        list.forEach(function (file) {\n            file = pth.join(dir, file);\n            self.fs.stat(file, function (err, stat) {\n                if (err) return cb(err);\n                if (stat) {\n                    results.push(pth.normalize(file) + (stat.isDirectory() ? self.sep : \"\"));\n                    if (stat.isDirectory()) {\n                        self.findFilesAsync(file, function (err, res) {\n                            if (err) return cb(err);\n                            results = results.concat(res);\n                            if (!--list_length) cb(null, results);\n                        });\n                    } else {\n                        if (!--list_length) cb(null, results);\n                    }\n                }\n            });\n        });\n    });\n};\n\nUtils.prototype.getAttributes = function () {};\n\nUtils.prototype.setAttributes = function () {};\n\n// STATIC functions\n\n// crc32 single update (it is part of crc32)\nUtils.crc32update = function (crc, byte) {\n    return crcTable[(crc ^ byte) & 0xff] ^ (crc >>> 8);\n};\n\nUtils.crc32 = function (buf) {\n    if (typeof buf === \"string\") {\n        buf = Buffer.from(buf, \"utf8\");\n    }\n\n    let len = buf.length;\n    let crc = ~0;\n    for (let off = 0; off < len; ) crc = Utils.crc32update(crc, buf[off++]);\n    // xor and cast as uint32 number\n    return ~crc >>> 0;\n};\n\nUtils.methodToString = function (/*Number*/ method) {\n    switch (method) {\n        case Constants.STORED:\n            return \"STORED (\" + method + \")\";\n        case Constants.DEFLATED:\n            return \"DEFLATED (\" + method + \")\";\n        default:\n            return \"UNSUPPORTED (\" + method + \")\";\n    }\n};\n\n/**\n * removes \"..\" style path elements\n * @param {string} path - fixable path\n * @returns string - fixed filepath\n */\nUtils.canonical = function (/*string*/ path) {\n    if (!path) return \"\";\n    // trick normalize think path is absolute\n    const safeSuffix = pth.posix.normalize(\"/\" + path.split(\"\\\\\").join(\"/\"));\n    return pth.join(\".\", safeSuffix);\n};\n\n/**\n * fix file names in achive\n * @param {string} path - fixable path\n * @returns string - fixed filepath\n */\n\nUtils.zipnamefix = function (path) {\n    if (!path) return \"\";\n    // trick normalize think path is absolute\n    const safeSuffix = pth.posix.normalize(\"/\" + path.split(\"\\\\\").join(\"/\"));\n    return pth.posix.join(\".\", safeSuffix);\n};\n\n/**\n *\n * @param {Array} arr\n * @param {function} callback\n * @returns\n */\nUtils.findLast = function (arr, callback) {\n    if (!Array.isArray(arr)) throw new TypeError(\"arr is not array\");\n\n    const len = arr.length >>> 0;\n    for (let i = len - 1; i >= 0; i--) {\n        if (callback(arr[i], i, arr)) {\n            return arr[i];\n        }\n    }\n    return void 0;\n};\n\n// make abolute paths taking prefix as root folder\nUtils.sanitize = function (/*string*/ prefix, /*string*/ name) {\n    prefix = pth.resolve(pth.normalize(prefix));\n    var parts = name.split(\"/\");\n    for (var i = 0, l = parts.length; i < l; i++) {\n        var path = pth.normalize(pth.join(prefix, parts.slice(i, l).join(pth.sep)));\n        if (path.indexOf(prefix) === 0) {\n            return path;\n        }\n    }\n    return pth.normalize(pth.join(prefix, pth.basename(name)));\n};\n\n// converts buffer, Uint8Array, string types to buffer\nUtils.toBuffer = function toBuffer(/*buffer, Uint8Array, string*/ input, /* function */ encoder) {\n    if (Buffer.isBuffer(input)) {\n        return input;\n    } else if (input instanceof Uint8Array) {\n        return Buffer.from(input);\n    } else {\n        // expect string all other values are invalid and return empty buffer\n        return typeof input === \"string\" ? encoder(input) : Buffer.alloc(0);\n    }\n};\n\nUtils.readBigUInt64LE = function (/*Buffer*/ buffer, /*int*/ index) {\n    var slice = Buffer.from(buffer.slice(index, index + 8));\n    slice.swap64();\n\n    return parseInt(`0x${slice.toString(\"hex\")}`);\n};\n\nUtils.fromDOS2Date = function (val) {\n    return new Date(((val >> 25) & 0x7f) + 1980, Math.max(((val >> 21) & 0x0f) - 1, 0), Math.max((val >> 16) & 0x1f, 1), (val >> 11) & 0x1f, (val >> 5) & 0x3f, (val & 0x1f) << 1);\n};\n\nUtils.fromDate2DOS = function (val) {\n    let date = 0;\n    let time = 0;\n    if (val.getFullYear() > 1979) {\n        date = (((val.getFullYear() - 1980) & 0x7f) << 9) | ((val.getMonth() + 1) << 5) | val.getDate();\n        time = (val.getHours() << 11) | (val.getMinutes() << 5) | (val.getSeconds() >> 1);\n    }\n    return (date << 16) | time;\n};\n\nUtils.isWin = isWin; // Do we have windows system\nUtils.crcTable = crcTable;\n", "const pth = require(\"path\");\n\nmodule.exports = function (/*String*/ path, /*Utils object*/ { fs }) {\n    var _path = path || \"\",\n        _obj = newAttr(),\n        _stat = null;\n\n    function newAttr() {\n        return {\n            directory: false,\n            readonly: false,\n            hidden: false,\n            executable: false,\n            mtime: 0,\n            atime: 0\n        };\n    }\n\n    if (_path && fs.existsSync(_path)) {\n        _stat = fs.statSync(_path);\n        _obj.directory = _stat.isDirectory();\n        _obj.mtime = _stat.mtime;\n        _obj.atime = _stat.atime;\n        _obj.executable = (0o111 & _stat.mode) !== 0; // file is executable who ever har right not just owner\n        _obj.readonly = (0o200 & _stat.mode) === 0; // readonly if owner has no write right\n        _obj.hidden = pth.basename(_path)[0] === \".\";\n    } else {\n        console.warn(\"Invalid path: \" + _path);\n    }\n\n    return {\n        get directory() {\n            return _obj.directory;\n        },\n\n        get readOnly() {\n            return _obj.readonly;\n        },\n\n        get hidden() {\n            return _obj.hidden;\n        },\n\n        get mtime() {\n            return _obj.mtime;\n        },\n\n        get atime() {\n            return _obj.atime;\n        },\n\n        get executable() {\n            return _obj.executable;\n        },\n\n        decodeAttributes: function () {},\n\n        encodeAttributes: function () {},\n\n        toJSON: function () {\n            return {\n                path: _path,\n                isDirectory: _obj.directory,\n                isReadOnly: _obj.readonly,\n                isHidden: _obj.hidden,\n                isExecutable: _obj.executable,\n                mTime: _obj.mtime,\n                aTime: _obj.atime\n            };\n        },\n\n        toString: function () {\n            return JSON.stringify(this.toJSON(), null, \"\\t\");\n        }\n    };\n};\n", "module.exports = {\n    efs: true,\n    encode: (data) => Buffer.from(data, \"utf8\"),\n    decode: (data) => data.toString(\"utf8\")\n};\n", "module.exports = require(\"./utils\");\nmodule.exports.Constants = require(\"./constants\");\nmodule.exports.Errors = require(\"./errors\");\nmodule.exports.FileAttr = require(\"./fattr\");\nmodule.exports.decoder = require(\"./decoder\");\n", "var Utils = require(\"../util\"),\n    Constants = Utils.Constants;\n\n/* The central directory file header */\nmodule.exports = function () {\n    var _verMade = 20, // v2.0\n        _version = 10, // v1.0\n        _flags = 0,\n        _method = 0,\n        _time = 0,\n        _crc = 0,\n        _compressedSize = 0,\n        _size = 0,\n        _fnameLen = 0,\n        _extraLen = 0,\n        _comLen = 0,\n        _diskStart = 0,\n        _inattr = 0,\n        _attr = 0,\n        _offset = 0;\n\n    _verMade |= Utils.isWin ? 0x0a00 : 0x0300;\n\n    // Set EFS flag since filename and comment fields are all by default encoded using UTF-8.\n    // Without it file names may be corrupted for other apps when file names use unicode chars\n    _flags |= Constants.FLG_EFS;\n\n    const _localHeader = {\n        extraLen: 0\n    };\n\n    // casting\n    const uint32 = (val) => Math.max(0, val) >>> 0;\n    const uint16 = (val) => Math.max(0, val) & 0xffff;\n    const uint8 = (val) => Math.max(0, val) & 0xff;\n\n    _time = Utils.fromDate2DOS(new Date());\n\n    return {\n        get made() {\n            return _verMade;\n        },\n        set made(val) {\n            _verMade = val;\n        },\n\n        get version() {\n            return _version;\n        },\n        set version(val) {\n            _version = val;\n        },\n\n        get flags() {\n            return _flags;\n        },\n        set flags(val) {\n            _flags = val;\n        },\n\n        get flags_efs() {\n            return (_flags & Constants.FLG_EFS) > 0;\n        },\n        set flags_efs(val) {\n            if (val) {\n                _flags |= Constants.FLG_EFS;\n            } else {\n                _flags &= ~Constants.FLG_EFS;\n            }\n        },\n\n        get flags_desc() {\n            return (_flags & Constants.FLG_DESC) > 0;\n        },\n        set flags_desc(val) {\n            if (val) {\n                _flags |= Constants.FLG_DESC;\n            } else {\n                _flags &= ~Constants.FLG_DESC;\n            }\n        },\n\n        get method() {\n            return _method;\n        },\n        set method(val) {\n            switch (val) {\n                case Constants.STORED:\n                    this.version = 10;\n                case Constants.DEFLATED:\n                default:\n                    this.version = 20;\n            }\n            _method = val;\n        },\n\n        get time() {\n            return Utils.fromDOS2Date(this.timeval);\n        },\n        set time(val) {\n            this.timeval = Utils.fromDate2DOS(val);\n        },\n\n        get timeval() {\n            return _time;\n        },\n        set timeval(val) {\n            _time = uint32(val);\n        },\n\n        get timeHighByte() {\n            return uint8(_time >>> 8);\n        },\n        get crc() {\n            return _crc;\n        },\n        set crc(val) {\n            _crc = uint32(val);\n        },\n\n        get compressedSize() {\n            return _compressedSize;\n        },\n        set compressedSize(val) {\n            _compressedSize = uint32(val);\n        },\n\n        get size() {\n            return _size;\n        },\n        set size(val) {\n            _size = uint32(val);\n        },\n\n        get fileNameLength() {\n            return _fnameLen;\n        },\n        set fileNameLength(val) {\n            _fnameLen = val;\n        },\n\n        get extraLength() {\n            return _extraLen;\n        },\n        set extraLength(val) {\n            _extraLen = val;\n        },\n\n        get extraLocalLength() {\n            return _localHeader.extraLen;\n        },\n        set extraLocalLength(val) {\n            _localHeader.extraLen = val;\n        },\n\n        get commentLength() {\n            return _comLen;\n        },\n        set commentLength(val) {\n            _comLen = val;\n        },\n\n        get diskNumStart() {\n            return _diskStart;\n        },\n        set diskNumStart(val) {\n            _diskStart = uint32(val);\n        },\n\n        get inAttr() {\n            return _inattr;\n        },\n        set inAttr(val) {\n            _inattr = uint32(val);\n        },\n\n        get attr() {\n            return _attr;\n        },\n        set attr(val) {\n            _attr = uint32(val);\n        },\n\n        // get Unix file permissions\n        get fileAttr() {\n            return (_attr || 0) >> 16 & 0xfff;\n        },\n\n        get offset() {\n            return _offset;\n        },\n        set offset(val) {\n            _offset = uint32(val);\n        },\n\n        get encrypted() {\n            return (_flags & Constants.FLG_ENC) === Constants.FLG_ENC;\n        },\n\n        get centralHeaderSize() {\n            return Constants.CENHDR + _fnameLen + _extraLen + _comLen;\n        },\n\n        get realDataOffset() {\n            return _offset + Constants.LOCHDR + _localHeader.fnameLen + _localHeader.extraLen;\n        },\n\n        get localHeader() {\n            return _localHeader;\n        },\n\n        loadLocalHeaderFromBinary: function (/*Buffer*/ input) {\n            var data = input.slice(_offset, _offset + Constants.LOCHDR);\n            // 30 bytes and should start with \"PK\\003\\004\"\n            if (data.readUInt32LE(0) !== Constants.LOCSIG) {\n                throw Utils.Errors.INVALID_LOC();\n            }\n\n            // version needed to extract\n            _localHeader.version = data.readUInt16LE(Constants.LOCVER);\n            // general purpose bit flag\n            _localHeader.flags = data.readUInt16LE(Constants.LOCFLG);\n            // compression method\n            _localHeader.method = data.readUInt16LE(Constants.LOCHOW);\n            // modification time (2 bytes time, 2 bytes date)\n            _localHeader.time = data.readUInt32LE(Constants.LOCTIM);\n            // uncompressed file crc-32 valu\n            _localHeader.crc = data.readUInt32LE(Constants.LOCCRC);\n            // compressed size\n            _localHeader.compressedSize = data.readUInt32LE(Constants.LOCSIZ);\n            // uncompressed size\n            _localHeader.size = data.readUInt32LE(Constants.LOCLEN);\n            // filename length\n            _localHeader.fnameLen = data.readUInt16LE(Constants.LOCNAM);\n            // extra field length\n            _localHeader.extraLen = data.readUInt16LE(Constants.LOCEXT);\n\n            // read extra data\n            const extraStart = _offset + Constants.LOCHDR + _localHeader.fnameLen;\n            const extraEnd = extraStart + _localHeader.extraLen;\n            return input.slice(extraStart, extraEnd);\n        },\n\n        loadFromBinary: function (/*Buffer*/ data) {\n            // data should be 46 bytes and start with \"PK 01 02\"\n            if (data.length !== Constants.CENHDR || data.readUInt32LE(0) !== Constants.CENSIG) {\n                throw Utils.Errors.INVALID_CEN();\n            }\n            // version made by\n            _verMade = data.readUInt16LE(Constants.CENVEM);\n            // version needed to extract\n            _version = data.readUInt16LE(Constants.CENVER);\n            // encrypt, decrypt flags\n            _flags = data.readUInt16LE(Constants.CENFLG);\n            // compression method\n            _method = data.readUInt16LE(Constants.CENHOW);\n            // modification time (2 bytes time, 2 bytes date)\n            _time = data.readUInt32LE(Constants.CENTIM);\n            // uncompressed file crc-32 value\n            _crc = data.readUInt32LE(Constants.CENCRC);\n            // compressed size\n            _compressedSize = data.readUInt32LE(Constants.CENSIZ);\n            // uncompressed size\n            _size = data.readUInt32LE(Constants.CENLEN);\n            // filename length\n            _fnameLen = data.readUInt16LE(Constants.CENNAM);\n            // extra field length\n            _extraLen = data.readUInt16LE(Constants.CENEXT);\n            // file comment length\n            _comLen = data.readUInt16LE(Constants.CENCOM);\n            // volume number start\n            _diskStart = data.readUInt16LE(Constants.CENDSK);\n            // internal file attributes\n            _inattr = data.readUInt16LE(Constants.CENATT);\n            // external file attributes\n            _attr = data.readUInt32LE(Constants.CENATX);\n            // LOC header offset\n            _offset = data.readUInt32LE(Constants.CENOFF);\n        },\n\n        localHeaderToBinary: function () {\n            // LOC header size (30 bytes)\n            var data = Buffer.alloc(Constants.LOCHDR);\n            // \"PK\\003\\004\"\n            data.writeUInt32LE(Constants.LOCSIG, 0);\n            // version needed to extract\n            data.writeUInt16LE(_version, Constants.LOCVER);\n            // general purpose bit flag\n            data.writeUInt16LE(_flags, Constants.LOCFLG);\n            // compression method\n            data.writeUInt16LE(_method, Constants.LOCHOW);\n            // modification time (2 bytes time, 2 bytes date)\n            data.writeUInt32LE(_time, Constants.LOCTIM);\n            // uncompressed file crc-32 value\n            data.writeUInt32LE(_crc, Constants.LOCCRC);\n            // compressed size\n            data.writeUInt32LE(_compressedSize, Constants.LOCSIZ);\n            // uncompressed size\n            data.writeUInt32LE(_size, Constants.LOCLEN);\n            // filename length\n            data.writeUInt16LE(_fnameLen, Constants.LOCNAM);\n            // extra field length\n            data.writeUInt16LE(_localHeader.extraLen, Constants.LOCEXT);\n            return data;\n        },\n\n        centralHeaderToBinary: function () {\n            // CEN header size (46 bytes)\n            var data = Buffer.alloc(Constants.CENHDR + _fnameLen + _extraLen + _comLen);\n            // \"PK\\001\\002\"\n            data.writeUInt32LE(Constants.CENSIG, 0);\n            // version made by\n            data.writeUInt16LE(_verMade, Constants.CENVEM);\n            // version needed to extract\n            data.writeUInt16LE(_version, Constants.CENVER);\n            // encrypt, decrypt flags\n            data.writeUInt16LE(_flags, Constants.CENFLG);\n            // compression method\n            data.writeUInt16LE(_method, Constants.CENHOW);\n            // modification time (2 bytes time, 2 bytes date)\n            data.writeUInt32LE(_time, Constants.CENTIM);\n            // uncompressed file crc-32 value\n            data.writeUInt32LE(_crc, Constants.CENCRC);\n            // compressed size\n            data.writeUInt32LE(_compressedSize, Constants.CENSIZ);\n            // uncompressed size\n            data.writeUInt32LE(_size, Constants.CENLEN);\n            // filename length\n            data.writeUInt16LE(_fnameLen, Constants.CENNAM);\n            // extra field length\n            data.writeUInt16LE(_extraLen, Constants.CENEXT);\n            // file comment length\n            data.writeUInt16LE(_comLen, Constants.CENCOM);\n            // volume number start\n            data.writeUInt16LE(_diskStart, Constants.CENDSK);\n            // internal file attributes\n            data.writeUInt16LE(_inattr, Constants.CENATT);\n            // external file attributes\n            data.writeUInt32LE(_attr, Constants.CENATX);\n            // LOC header offset\n            data.writeUInt32LE(_offset, Constants.CENOFF);\n            return data;\n        },\n\n        toJSON: function () {\n            const bytes = function (nr) {\n                return nr + \" bytes\";\n            };\n\n            return {\n                made: _verMade,\n                version: _version,\n                flags: _flags,\n                method: Utils.methodToString(_method),\n                time: this.time,\n                crc: \"0x\" + _crc.toString(16).toUpperCase(),\n                compressedSize: bytes(_compressedSize),\n                size: bytes(_size),\n                fileNameLength: bytes(_fnameLen),\n                extraLength: bytes(_extraLen),\n                commentLength: bytes(_comLen),\n                diskNumStart: _diskStart,\n                inAttr: _inattr,\n                attr: _attr,\n                offset: _offset,\n                centralHeaderSize: bytes(Constants.CENHDR + _fnameLen + _extraLen + _comLen)\n            };\n        },\n\n        toString: function () {\n            return JSON.stringify(this.toJSON(), null, \"\\t\");\n        }\n    };\n};\n", "var Utils = require(\"../util\"),\n    Constants = Utils.Constants;\n\n/* The entries in the end of central directory */\nmodule.exports = function () {\n    var _volumeEntries = 0,\n        _totalEntries = 0,\n        _size = 0,\n        _offset = 0,\n        _commentLength = 0;\n\n    return {\n        get diskEntries() {\n            return _volumeEntries;\n        },\n        set diskEntries(/*Number*/ val) {\n            _volumeEntries = _totalEntries = val;\n        },\n\n        get totalEntries() {\n            return _totalEntries;\n        },\n        set totalEntries(/*Number*/ val) {\n            _totalEntries = _volumeEntries = val;\n        },\n\n        get size() {\n            return _size;\n        },\n        set size(/*Number*/ val) {\n            _size = val;\n        },\n\n        get offset() {\n            return _offset;\n        },\n        set offset(/*Number*/ val) {\n            _offset = val;\n        },\n\n        get commentLength() {\n            return _commentLength;\n        },\n        set commentLength(/*Number*/ val) {\n            _commentLength = val;\n        },\n\n        get mainHeaderSize() {\n            return Constants.ENDHDR + _commentLength;\n        },\n\n        loadFromBinary: function (/*Buffer*/ data) {\n            // data should be 22 bytes and start with \"PK 05 06\"\n            // or be 56+ bytes and start with \"PK 06 06\" for Zip64\n            if (\n                (data.length !== Constants.ENDHDR || data.readUInt32LE(0) !== Constants.ENDSIG) &&\n                (data.length < Constants.ZIP64HDR || data.readUInt32LE(0) !== Constants.ZIP64SIG)\n            ) {\n                throw Utils.Errors.INVALID_END();\n            }\n\n            if (data.readUInt32LE(0) === Constants.ENDSIG) {\n                // number of entries on this volume\n                _volumeEntries = data.readUInt16LE(Constants.ENDSUB);\n                // total number of entries\n                _totalEntries = data.readUInt16LE(Constants.ENDTOT);\n                // central directory size in bytes\n                _size = data.readUInt32LE(Constants.ENDSIZ);\n                // offset of first CEN header\n                _offset = data.readUInt32LE(Constants.ENDOFF);\n                // zip file comment length\n                _commentLength = data.readUInt16LE(Constants.ENDCOM);\n            } else {\n                // number of entries on this volume\n                _volumeEntries = Utils.readBigUInt64LE(data, Constants.ZIP64SUB);\n                // total number of entries\n                _totalEntries = Utils.readBigUInt64LE(data, Constants.ZIP64TOT);\n                // central directory size in bytes\n                _size = Utils.readBigUInt64LE(data, Constants.ZIP64SIZE);\n                // offset of first CEN header\n                _offset = Utils.readBigUInt64LE(data, Constants.ZIP64OFF);\n\n                _commentLength = 0;\n            }\n        },\n\n        toBinary: function () {\n            var b = Buffer.alloc(Constants.ENDHDR + _commentLength);\n            // \"PK 05 06\" signature\n            b.writeUInt32LE(Constants.ENDSIG, 0);\n            b.writeUInt32LE(0, 4);\n            // number of entries on this volume\n            b.writeUInt16LE(_volumeEntries, Constants.ENDSUB);\n            // total number of entries\n            b.writeUInt16LE(_totalEntries, Constants.ENDTOT);\n            // central directory size in bytes\n            b.writeUInt32LE(_size, Constants.ENDSIZ);\n            // offset of first CEN header\n            b.writeUInt32LE(_offset, Constants.ENDOFF);\n            // zip file comment length\n            b.writeUInt16LE(_commentLength, Constants.ENDCOM);\n            // fill comment memory with spaces so no garbage is left there\n            b.fill(\" \", Constants.ENDHDR);\n\n            return b;\n        },\n\n        toJSON: function () {\n            // creates 0x0000 style output\n            const offset = function (nr, len) {\n                let offs = nr.toString(16).toUpperCase();\n                while (offs.length < len) offs = \"0\" + offs;\n                return \"0x\" + offs;\n            };\n\n            return {\n                diskEntries: _volumeEntries,\n                totalEntries: _totalEntries,\n                size: _size + \" bytes\",\n                offset: offset(_offset, 4),\n                commentLength: _commentLength\n            };\n        },\n\n        toString: function () {\n            return JSON.stringify(this.toJSON(), null, \"\\t\");\n        }\n    };\n};\n// Misspelled\n", "exports.EntryHeader = require(\"./entryHeader\");\nexports.MainHeader = require(\"./mainHeader\");\n", "module.exports = function (/*Buffer*/ inbuf) {\n    var zlib = require(\"zlib\");\n\n    var opts = { chunkSize: (parseInt(inbuf.length / 1024) + 1) * 1024 };\n\n    return {\n        deflate: function () {\n            return zlib.deflateRawSync(inbuf, opts);\n        },\n\n        deflateAsync: function (/*Function*/ callback) {\n            var tmp = zlib.createDeflateRaw(opts),\n                parts = [],\n                total = 0;\n            tmp.on(\"data\", function (data) {\n                parts.push(data);\n                total += data.length;\n            });\n            tmp.on(\"end\", function () {\n                var buf = Buffer.alloc(total),\n                    written = 0;\n                buf.fill(0);\n                for (var i = 0; i < parts.length; i++) {\n                    var part = parts[i];\n                    part.copy(buf, written);\n                    written += part.length;\n                }\n                callback && callback(buf);\n            });\n            tmp.end(inbuf);\n        }\n    };\n};\n", "const version = +(process.versions ? process.versions.node : \"\").split(\".\")[0] || 0;\n\nmodule.exports = function (/*Buffer*/ inbuf, /*number*/ expectedLength) {\n    var zlib = require(\"zlib\");\n    const option = version >= 15 && expectedLength > 0 ? { maxOutputLength: expectedLength } : {};\n\n    return {\n        inflate: function () {\n            return zlib.inflateRawSync(inbuf, option);\n        },\n\n        inflateAsync: function (/*Function*/ callback) {\n            var tmp = zlib.createInflateRaw(option),\n                parts = [],\n                total = 0;\n            tmp.on(\"data\", function (data) {\n                parts.push(data);\n                total += data.length;\n            });\n            tmp.on(\"end\", function () {\n                var buf = Buffer.alloc(total),\n                    written = 0;\n                buf.fill(0);\n                for (var i = 0; i < parts.length; i++) {\n                    var part = parts[i];\n                    part.copy(buf, written);\n                    written += part.length;\n                }\n                callback && callback(buf);\n            });\n            tmp.end(inbuf);\n        }\n    };\n};\n", "\"use strict\";\n\n// node crypt, we use it for generate salt\n// eslint-disable-next-line node/no-unsupported-features/node-builtins\nconst { randomFillSync } = require(\"crypto\");\nconst Errors = require(\"../util/errors\");\n\n// generate CRC32 lookup table\nconst crctable = new Uint32Array(256).map((t, crc) => {\n    for (let j = 0; j < 8; j++) {\n        if (0 !== (crc & 1)) {\n            crc = (crc >>> 1) ^ 0xedb88320;\n        } else {\n            crc >>>= 1;\n        }\n    }\n    return crc >>> 0;\n});\n\n// C-style uInt32 Multiply (discards higher bits, when JS multiply discards lower bits)\nconst uMul = (a, b) => Math.imul(a, b) >>> 0;\n\n// crc32 byte single update (actually same function is part of utils.crc32 function :) )\nconst crc32update = (pCrc32, bval) => {\n    return crctable[(pCrc32 ^ bval) & 0xff] ^ (pCrc32 >>> 8);\n};\n\n// function for generating salt for encrytion header\nconst genSalt = () => {\n    if (\"function\" === typeof randomFillSync) {\n        return randomFillSync(Buffer.alloc(12));\n    } else {\n        // fallback if function is not defined\n        return genSalt.node();\n    }\n};\n\n// salt generation with node random function (mainly as fallback)\ngenSalt.node = () => {\n    const salt = Buffer.alloc(12);\n    const len = salt.length;\n    for (let i = 0; i < len; i++) salt[i] = (Math.random() * 256) & 0xff;\n    return salt;\n};\n\n// general config\nconst config = {\n    genSalt\n};\n\n// Class Initkeys handles same basic ops with keys\nfunction Initkeys(pw) {\n    const pass = Buffer.isBuffer(pw) ? pw : Buffer.from(pw);\n    this.keys = new Uint32Array([0x12345678, 0x23456789, 0x34567890]);\n    for (let i = 0; i < pass.length; i++) {\n        this.updateKeys(pass[i]);\n    }\n}\n\nInitkeys.prototype.updateKeys = function (byteValue) {\n    const keys = this.keys;\n    keys[0] = crc32update(keys[0], byteValue);\n    keys[1] += keys[0] & 0xff;\n    keys[1] = uMul(keys[1], 134775813) + 1;\n    keys[2] = crc32update(keys[2], keys[1] >>> 24);\n    return byteValue;\n};\n\nInitkeys.prototype.next = function () {\n    const k = (this.keys[2] | 2) >>> 0; // key\n    return (uMul(k, k ^ 1) >> 8) & 0xff; // decode\n};\n\nfunction make_decrypter(/*Buffer*/ pwd) {\n    // 1. Stage initialize key\n    const keys = new Initkeys(pwd);\n\n    // return decrypter function\n    return function (/*Buffer*/ data) {\n        // result - we create new Buffer for results\n        const result = Buffer.alloc(data.length);\n        let pos = 0;\n        // process input data\n        for (let c of data) {\n            //c ^= keys.next();\n            //result[pos++] = c; // decode & Save Value\n            result[pos++] = keys.updateKeys(c ^ keys.next()); // update keys with decoded byte\n        }\n        return result;\n    };\n}\n\nfunction make_encrypter(/*Buffer*/ pwd) {\n    // 1. Stage initialize key\n    const keys = new Initkeys(pwd);\n\n    // return encrypting function, result and pos is here so we dont have to merge buffers later\n    return function (/*Buffer*/ data, /*Buffer*/ result, /* Number */ pos = 0) {\n        // result - we create new Buffer for results\n        if (!result) result = Buffer.alloc(data.length);\n        // process input data\n        for (let c of data) {\n            const k = keys.next(); // save key byte\n            result[pos++] = c ^ k; // save val\n            keys.updateKeys(c); // update keys with decoded byte\n        }\n        return result;\n    };\n}\n\nfunction decrypt(/*Buffer*/ data, /*Object*/ header, /*String, Buffer*/ pwd) {\n    if (!data || !Buffer.isBuffer(data) || data.length < 12) {\n        return Buffer.alloc(0);\n    }\n\n    // 1. We Initialize and generate decrypting function\n    const decrypter = make_decrypter(pwd);\n\n    // 2. decrypt salt what is always 12 bytes and is a part of file content\n    const salt = decrypter(data.slice(0, 12));\n\n    // if bit 3 (0x08) of the general-purpose flags field is set, check salt[11] with the high byte of the header time\n    // 2 byte data block (as per Info-Zip spec), otherwise check with the high byte of the header entry\n    const verifyByte = (header.flags & 0x8) === 0x8 ? header.timeHighByte : header.crc >>> 24;\n\n    //3. does password meet expectations\n    if (salt[11] !== verifyByte) {\n        throw Errors.WRONG_PASSWORD();\n    }\n\n    // 4. decode content\n    return decrypter(data.slice(12));\n}\n\n// lets add way to populate salt, NOT RECOMMENDED for production but maybe useful for testing general functionality\nfunction _salter(data) {\n    if (Buffer.isBuffer(data) && data.length >= 12) {\n        // be aware - currently salting buffer data is modified\n        config.genSalt = function () {\n            return data.slice(0, 12);\n        };\n    } else if (data === \"node\") {\n        // test salt generation with node random function\n        config.genSalt = genSalt.node;\n    } else {\n        // if value is not acceptable config gets reset.\n        config.genSalt = genSalt;\n    }\n}\n\nfunction encrypt(/*Buffer*/ data, /*Object*/ header, /*String, Buffer*/ pwd, /*Boolean*/ oldlike = false) {\n    // 1. test data if data is not Buffer we make buffer from it\n    if (data == null) data = Buffer.alloc(0);\n    // if data is not buffer be make buffer from it\n    if (!Buffer.isBuffer(data)) data = Buffer.from(data.toString());\n\n    // 2. We Initialize and generate encrypting function\n    const encrypter = make_encrypter(pwd);\n\n    // 3. generate salt (12-bytes of random data)\n    const salt = config.genSalt();\n    salt[11] = (header.crc >>> 24) & 0xff;\n\n    // old implementations (before PKZip 2.04g) used two byte check\n    if (oldlike) salt[10] = (header.crc >>> 16) & 0xff;\n\n    // 4. create output\n    const result = Buffer.alloc(data.length + 12);\n    encrypter(salt, result);\n\n    // finally encode content\n    return encrypter(data, result, 12);\n}\n\nmodule.exports = { decrypt, encrypt, _salter };\n", "exports.Deflater = require(\"./deflater\");\nexports.Inflater = require(\"./inflater\");\nexports.ZipCrypto = require(\"./zipcrypto\");\n", "var Utils = require(\"./util\"),\n    Headers = require(\"./headers\"),\n    Constants = Utils.Constants,\n    Methods = require(\"./methods\");\n\nmodule.exports = function (/** object */ options, /*Buffer*/ input) {\n    var _centralHeader = new Headers.EntryHeader(),\n        _entryName = Buffer.alloc(0),\n        _comment = Buffer.alloc(0),\n        _isDirectory = false,\n        uncompressedData = null,\n        _extra = Buffer.alloc(0),\n        _extralocal = Buffer.alloc(0),\n        _efs = true;\n\n    // assign options\n    const opts = options;\n\n    const decoder = typeof opts.decoder === \"object\" ? opts.decoder : Utils.decoder;\n    _efs = decoder.hasOwnProperty(\"efs\") ? decoder.efs : false;\n\n    function getCompressedDataFromZip() {\n        //if (!input || !Buffer.isBuffer(input)) {\n        if (!input || !(input instanceof Uint8Array)) {\n            return Buffer.alloc(0);\n        }\n        _extralocal = _centralHeader.loadLocalHeaderFromBinary(input);\n        return input.slice(_centralHeader.realDataOffset, _centralHeader.realDataOffset + _centralHeader.compressedSize);\n    }\n\n    function crc32OK(data) {\n        // if bit 3 (0x08) of the general-purpose flags field is set, then the CRC-32 and file sizes are not known when the local header is written\n        if (!_centralHeader.flags_desc) {\n            if (Utils.crc32(data) !== _centralHeader.localHeader.crc) {\n                return false;\n            }\n        } else {\n            const descriptor = {};\n            const dataEndOffset = _centralHeader.realDataOffset + _centralHeader.compressedSize;\n            // no descriptor after compressed data, instead new local header\n            if (input.readUInt32LE(dataEndOffset) == Constants.LOCSIG || input.readUInt32LE(dataEndOffset) == Constants.CENSIG) {\n                throw Utils.Errors.DESCRIPTOR_NOT_EXIST();\n            }\n\n            // get decriptor data\n            if (input.readUInt32LE(dataEndOffset) == Constants.EXTSIG) {\n                // descriptor with signature\n                descriptor.crc = input.readUInt32LE(dataEndOffset + Constants.EXTCRC);\n                descriptor.compressedSize = input.readUInt32LE(dataEndOffset + Constants.EXTSIZ);\n                descriptor.size = input.readUInt32LE(dataEndOffset + Constants.EXTLEN);\n            } else if (input.readUInt16LE(dataEndOffset + 12) === 0x4b50) {\n                // descriptor without signature (we check is new header starting where we expect)\n                descriptor.crc = input.readUInt32LE(dataEndOffset + Constants.EXTCRC - 4);\n                descriptor.compressedSize = input.readUInt32LE(dataEndOffset + Constants.EXTSIZ - 4);\n                descriptor.size = input.readUInt32LE(dataEndOffset + Constants.EXTLEN - 4);\n            } else {\n                throw Utils.Errors.DESCRIPTOR_UNKNOWN();\n            }\n\n            // check data integrity\n            if (descriptor.compressedSize !== _centralHeader.compressedSize || descriptor.size !== _centralHeader.size || descriptor.crc !== _centralHeader.crc) {\n                throw Utils.Errors.DESCRIPTOR_FAULTY();\n            }\n            if (Utils.crc32(data) !== descriptor.crc) {\n                return false;\n            }\n\n            // @TODO: zip64 bit descriptor fields\n            // if bit 3 is set and any value in local header \"zip64 Extended information\" extra field are set 0 (place holder)\n            // then 64-bit descriptor format is used instead of 32-bit\n            // central header - \"zip64 Extended information\" extra field should store real values and not place holders\n        }\n        return true;\n    }\n\n    function decompress(/*Boolean*/ async, /*Function*/ callback, /*String, Buffer*/ pass) {\n        if (typeof callback === \"undefined\" && typeof async === \"string\") {\n            pass = async;\n            async = void 0;\n        }\n        if (_isDirectory) {\n            if (async && callback) {\n                callback(Buffer.alloc(0), Utils.Errors.DIRECTORY_CONTENT_ERROR()); //si added error.\n            }\n            return Buffer.alloc(0);\n        }\n\n        var compressedData = getCompressedDataFromZip();\n\n        if (compressedData.length === 0) {\n            // File is empty, nothing to decompress.\n            if (async && callback) callback(compressedData);\n            return compressedData;\n        }\n\n        if (_centralHeader.encrypted) {\n            if (\"string\" !== typeof pass && !Buffer.isBuffer(pass)) {\n                throw Utils.Errors.INVALID_PASS_PARAM();\n            }\n            compressedData = Methods.ZipCrypto.decrypt(compressedData, _centralHeader, pass);\n        }\n\n        var data = Buffer.alloc(_centralHeader.size);\n\n        switch (_centralHeader.method) {\n            case Utils.Constants.STORED:\n                compressedData.copy(data);\n                if (!crc32OK(data)) {\n                    if (async && callback) callback(data, Utils.Errors.BAD_CRC()); //si added error\n                    throw Utils.Errors.BAD_CRC();\n                } else {\n                    //si added otherwise did not seem to return data.\n                    if (async && callback) callback(data);\n                    return data;\n                }\n            case Utils.Constants.DEFLATED:\n                var inflater = new Methods.Inflater(compressedData, _centralHeader.size);\n                if (!async) {\n                    const result = inflater.inflate(data);\n                    result.copy(data, 0);\n                    if (!crc32OK(data)) {\n                        throw Utils.Errors.BAD_CRC(`\"${decoder.decode(_entryName)}\"`);\n                    }\n                    return data;\n                } else {\n                    inflater.inflateAsync(function (result) {\n                        result.copy(result, 0);\n                        if (callback) {\n                            if (!crc32OK(result)) {\n                                callback(result, Utils.Errors.BAD_CRC()); //si added error\n                            } else {\n                                callback(result);\n                            }\n                        }\n                    });\n                }\n                break;\n            default:\n                if (async && callback) callback(Buffer.alloc(0), Utils.Errors.UNKNOWN_METHOD());\n                throw Utils.Errors.UNKNOWN_METHOD();\n        }\n    }\n\n    function compress(/*Boolean*/ async, /*Function*/ callback) {\n        if ((!uncompressedData || !uncompressedData.length) && Buffer.isBuffer(input)) {\n            // no data set or the data wasn't changed to require recompression\n            if (async && callback) callback(getCompressedDataFromZip());\n            return getCompressedDataFromZip();\n        }\n\n        if (uncompressedData.length && !_isDirectory) {\n            var compressedData;\n            // Local file header\n            switch (_centralHeader.method) {\n                case Utils.Constants.STORED:\n                    _centralHeader.compressedSize = _centralHeader.size;\n\n                    compressedData = Buffer.alloc(uncompressedData.length);\n                    uncompressedData.copy(compressedData);\n\n                    if (async && callback) callback(compressedData);\n                    return compressedData;\n                default:\n                case Utils.Constants.DEFLATED:\n                    var deflater = new Methods.Deflater(uncompressedData);\n                    if (!async) {\n                        var deflated = deflater.deflate();\n                        _centralHeader.compressedSize = deflated.length;\n                        return deflated;\n                    } else {\n                        deflater.deflateAsync(function (data) {\n                            compressedData = Buffer.alloc(data.length);\n                            _centralHeader.compressedSize = data.length;\n                            data.copy(compressedData);\n                            callback && callback(compressedData);\n                        });\n                    }\n                    deflater = null;\n                    break;\n            }\n        } else if (async && callback) {\n            callback(Buffer.alloc(0));\n        } else {\n            return Buffer.alloc(0);\n        }\n    }\n\n    function readUInt64LE(buffer, offset) {\n        return (buffer.readUInt32LE(offset + 4) << 4) + buffer.readUInt32LE(offset);\n    }\n\n    function parseExtra(data) {\n        try {\n            var offset = 0;\n            var signature, size, part;\n            while (offset + 4 < data.length) {\n                signature = data.readUInt16LE(offset);\n                offset += 2;\n                size = data.readUInt16LE(offset);\n                offset += 2;\n                part = data.slice(offset, offset + size);\n                offset += size;\n                if (Constants.ID_ZIP64 === signature) {\n                    parseZip64ExtendedInformation(part);\n                }\n            }\n        } catch (error) {\n            throw Utils.Errors.EXTRA_FIELD_PARSE_ERROR();\n        }\n    }\n\n    //Override header field values with values from the ZIP64 extra field\n    function parseZip64ExtendedInformation(data) {\n        var size, compressedSize, offset, diskNumStart;\n\n        if (data.length >= Constants.EF_ZIP64_SCOMP) {\n            size = readUInt64LE(data, Constants.EF_ZIP64_SUNCOMP);\n            if (_centralHeader.size === Constants.EF_ZIP64_OR_32) {\n                _centralHeader.size = size;\n            }\n        }\n        if (data.length >= Constants.EF_ZIP64_RHO) {\n            compressedSize = readUInt64LE(data, Constants.EF_ZIP64_SCOMP);\n            if (_centralHeader.compressedSize === Constants.EF_ZIP64_OR_32) {\n                _centralHeader.compressedSize = compressedSize;\n            }\n        }\n        if (data.length >= Constants.EF_ZIP64_DSN) {\n            offset = readUInt64LE(data, Constants.EF_ZIP64_RHO);\n            if (_centralHeader.offset === Constants.EF_ZIP64_OR_32) {\n                _centralHeader.offset = offset;\n            }\n        }\n        if (data.length >= Constants.EF_ZIP64_DSN + 4) {\n            diskNumStart = data.readUInt32LE(Constants.EF_ZIP64_DSN);\n            if (_centralHeader.diskNumStart === Constants.EF_ZIP64_OR_16) {\n                _centralHeader.diskNumStart = diskNumStart;\n            }\n        }\n    }\n\n    return {\n        get entryName() {\n            return decoder.decode(_entryName);\n        },\n        get rawEntryName() {\n            return _entryName;\n        },\n        set entryName(val) {\n            _entryName = Utils.toBuffer(val, decoder.encode);\n            var lastChar = _entryName[_entryName.length - 1];\n            _isDirectory = lastChar === 47 || lastChar === 92;\n            _centralHeader.fileNameLength = _entryName.length;\n        },\n\n        get efs() {\n            if (typeof _efs === \"function\") {\n                return _efs(this.entryName);\n            } else {\n                return _efs;\n            }\n        },\n\n        get extra() {\n            return _extra;\n        },\n        set extra(val) {\n            _extra = val;\n            _centralHeader.extraLength = val.length;\n            parseExtra(val);\n        },\n\n        get comment() {\n            return decoder.decode(_comment);\n        },\n        set comment(val) {\n            _comment = Utils.toBuffer(val, decoder.encode);\n            _centralHeader.commentLength = _comment.length;\n            if (_comment.length > 0xffff) throw Utils.Errors.COMMENT_TOO_LONG();\n        },\n\n        get name() {\n            var n = decoder.decode(_entryName);\n            return _isDirectory\n                ? n\n                      .substr(n.length - 1)\n                      .split(\"/\")\n                      .pop()\n                : n.split(\"/\").pop();\n        },\n        get isDirectory() {\n            return _isDirectory;\n        },\n\n        getCompressedData: function () {\n            return compress(false, null);\n        },\n\n        getCompressedDataAsync: function (/*Function*/ callback) {\n            compress(true, callback);\n        },\n\n        setData: function (value) {\n            uncompressedData = Utils.toBuffer(value, Utils.decoder.encode);\n            if (!_isDirectory && uncompressedData.length) {\n                _centralHeader.size = uncompressedData.length;\n                _centralHeader.method = Utils.Constants.DEFLATED;\n                _centralHeader.crc = Utils.crc32(value);\n                _centralHeader.changed = true;\n            } else {\n                // folders and blank files should be stored\n                _centralHeader.method = Utils.Constants.STORED;\n            }\n        },\n\n        getData: function (pass) {\n            if (_centralHeader.changed) {\n                return uncompressedData;\n            } else {\n                return decompress(false, null, pass);\n            }\n        },\n\n        getDataAsync: function (/*Function*/ callback, pass) {\n            if (_centralHeader.changed) {\n                callback(uncompressedData);\n            } else {\n                decompress(true, callback, pass);\n            }\n        },\n\n        set attr(attr) {\n            _centralHeader.attr = attr;\n        },\n        get attr() {\n            return _centralHeader.attr;\n        },\n\n        set header(/*Buffer*/ data) {\n            _centralHeader.loadFromBinary(data);\n        },\n\n        get header() {\n            return _centralHeader;\n        },\n\n        packCentralHeader: function () {\n            _centralHeader.flags_efs = this.efs;\n            _centralHeader.extraLength = _extra.length;\n            // 1. create header (buffer)\n            var header = _centralHeader.centralHeaderToBinary();\n            var addpos = Utils.Constants.CENHDR;\n            // 2. add file name\n            _entryName.copy(header, addpos);\n            addpos += _entryName.length;\n            // 3. add extra data\n            _extra.copy(header, addpos);\n            addpos += _centralHeader.extraLength;\n            // 4. add file comment\n            _comment.copy(header, addpos);\n            return header;\n        },\n\n        packLocalHeader: function () {\n            let addpos = 0;\n            _centralHeader.flags_efs = this.efs;\n            _centralHeader.extraLocalLength = _extralocal.length;\n            // 1. construct local header Buffer\n            const localHeaderBuf = _centralHeader.localHeaderToBinary();\n            // 2. localHeader - crate header buffer\n            const localHeader = Buffer.alloc(localHeaderBuf.length + _entryName.length + _centralHeader.extraLocalLength);\n            // 2.1 add localheader\n            localHeaderBuf.copy(localHeader, addpos);\n            addpos += localHeaderBuf.length;\n            // 2.2 add file name\n            _entryName.copy(localHeader, addpos);\n            addpos += _entryName.length;\n            // 2.3 add extra field\n            _extralocal.copy(localHeader, addpos);\n            addpos += _extralocal.length;\n\n            return localHeader;\n        },\n\n        toJSON: function () {\n            const bytes = function (nr) {\n                return \"<\" + ((nr && nr.length + \" bytes buffer\") || \"null\") + \">\";\n            };\n\n            return {\n                entryName: this.entryName,\n                name: this.name,\n                comment: this.comment,\n                isDirectory: this.isDirectory,\n                header: _centralHeader.toJSON(),\n                compressedData: bytes(input),\n                data: bytes(uncompressedData)\n            };\n        },\n\n        toString: function () {\n            return JSON.stringify(this.toJSON(), null, \"\\t\");\n        }\n    };\n};\n", "const ZipEntry = require(\"./zipEntry\");\nconst Headers = require(\"./headers\");\nconst Utils = require(\"./util\");\n\nmodule.exports = function (/*Buffer|null*/ inBuffer, /** object */ options) {\n    var entryList = [],\n        entryTable = {},\n        _comment = Buffer.alloc(0),\n        mainHeader = new Headers.MainHeader(),\n        loadedEntries = false;\n    var password = null;\n    const temporary = new Set();\n\n    // assign options\n    const opts = options;\n\n    const { noSort, decoder } = opts;\n\n    if (inBuffer) {\n        // is a memory buffer\n        readMainHeader(opts.readEntries);\n    } else {\n        // none. is a new file\n        loadedEntries = true;\n    }\n\n    function makeTemporaryFolders() {\n        const foldersList = new Set();\n\n        // Make list of all folders in file\n        for (const elem of Object.keys(entryTable)) {\n            const elements = elem.split(\"/\");\n            elements.pop(); // filename\n            if (!elements.length) continue; // no folders\n            for (let i = 0; i < elements.length; i++) {\n                const sub = elements.slice(0, i + 1).join(\"/\") + \"/\";\n                foldersList.add(sub);\n            }\n        }\n\n        // create missing folders as temporary\n        for (const elem of foldersList) {\n            if (!(elem in entryTable)) {\n                const tempfolder = new ZipEntry(opts);\n                tempfolder.entryName = elem;\n                tempfolder.attr = 0x10;\n                tempfolder.temporary = true;\n                entryList.push(tempfolder);\n                entryTable[tempfolder.entryName] = tempfolder;\n                temporary.add(tempfolder);\n            }\n        }\n    }\n\n    function readEntries() {\n        loadedEntries = true;\n        entryTable = {};\n        if (mainHeader.diskEntries > (inBuffer.length - mainHeader.offset) / Utils.Constants.CENHDR) {\n            throw Utils.Errors.DISK_ENTRY_TOO_LARGE();\n        }\n        entryList = new Array(mainHeader.diskEntries); // total number of entries\n        var index = mainHeader.offset; // offset of first CEN header\n        for (var i = 0; i < entryList.length; i++) {\n            var tmp = index,\n                entry = new ZipEntry(opts, inBuffer);\n            entry.header = inBuffer.slice(tmp, (tmp += Utils.Constants.CENHDR));\n\n            entry.entryName = inBuffer.slice(tmp, (tmp += entry.header.fileNameLength));\n\n            if (entry.header.extraLength) {\n                entry.extra = inBuffer.slice(tmp, (tmp += entry.header.extraLength));\n            }\n\n            if (entry.header.commentLength) entry.comment = inBuffer.slice(tmp, tmp + entry.header.commentLength);\n\n            index += entry.header.centralHeaderSize;\n\n            entryList[i] = entry;\n            entryTable[entry.entryName] = entry;\n        }\n        temporary.clear();\n        makeTemporaryFolders();\n    }\n\n    function readMainHeader(/*Boolean*/ readNow) {\n        var i = inBuffer.length - Utils.Constants.ENDHDR, // END header size\n            max = Math.max(0, i - 0xffff), // 0xFFFF is the max zip file comment length\n            n = max,\n            endStart = inBuffer.length,\n            endOffset = -1, // Start offset of the END header\n            commentEnd = 0;\n\n        // option to search header form entire file\n        const trailingSpace = typeof opts.trailingSpace === \"boolean\" ? opts.trailingSpace : false;\n        if (trailingSpace) max = 0;\n\n        for (i; i >= n; i--) {\n            if (inBuffer[i] !== 0x50) continue; // quick check that the byte is 'P'\n            if (inBuffer.readUInt32LE(i) === Utils.Constants.ENDSIG) {\n                // \"PK\\005\\006\"\n                endOffset = i;\n                commentEnd = i;\n                endStart = i + Utils.Constants.ENDHDR;\n                // We already found a regular signature, let's look just a bit further to check if there's any zip64 signature\n                n = i - Utils.Constants.END64HDR;\n                continue;\n            }\n\n            if (inBuffer.readUInt32LE(i) === Utils.Constants.END64SIG) {\n                // Found a zip64 signature, let's continue reading the whole zip64 record\n                n = max;\n                continue;\n            }\n\n            if (inBuffer.readUInt32LE(i) === Utils.Constants.ZIP64SIG) {\n                // Found the zip64 record, let's determine it's size\n                endOffset = i;\n                endStart = i + Utils.readBigUInt64LE(inBuffer, i + Utils.Constants.ZIP64SIZE) + Utils.Constants.ZIP64LEAD;\n                break;\n            }\n        }\n\n        if (endOffset == -1) throw Utils.Errors.INVALID_FORMAT();\n\n        mainHeader.loadFromBinary(inBuffer.slice(endOffset, endStart));\n        if (mainHeader.commentLength) {\n            _comment = inBuffer.slice(commentEnd + Utils.Constants.ENDHDR);\n        }\n        if (readNow) readEntries();\n    }\n\n    function sortEntries() {\n        if (entryList.length > 1 && !noSort) {\n            entryList.sort((a, b) => a.entryName.toLowerCase().localeCompare(b.entryName.toLowerCase()));\n        }\n    }\n\n    return {\n        /**\n         * Returns an array of ZipEntry objects existent in the current opened archive\n         * @return Array\n         */\n        get entries() {\n            if (!loadedEntries) {\n                readEntries();\n            }\n            return entryList.filter((e) => !temporary.has(e));\n        },\n\n        /**\n         * Archive comment\n         * @return {String}\n         */\n        get comment() {\n            return decoder.decode(_comment);\n        },\n        set comment(val) {\n            _comment = Utils.toBuffer(val, decoder.encode);\n            mainHeader.commentLength = _comment.length;\n        },\n\n        getEntryCount: function () {\n            if (!loadedEntries) {\n                return mainHeader.diskEntries;\n            }\n\n            return entryList.length;\n        },\n\n        forEach: function (callback) {\n            this.entries.forEach(callback);\n        },\n\n        /**\n         * Returns a reference to the entry with the given name or null if entry is inexistent\n         *\n         * @param entryName\n         * @return ZipEntry\n         */\n        getEntry: function (/*String*/ entryName) {\n            if (!loadedEntries) {\n                readEntries();\n            }\n            return entryTable[entryName] || null;\n        },\n\n        /**\n         * Adds the given entry to the entry list\n         *\n         * @param entry\n         */\n        setEntry: function (/*ZipEntry*/ entry) {\n            if (!loadedEntries) {\n                readEntries();\n            }\n            entryList.push(entry);\n            entryTable[entry.entryName] = entry;\n            mainHeader.totalEntries = entryList.length;\n        },\n\n        /**\n         * Removes the file with the given name from the entry list.\n         *\n         * If the entry is a directory, then all nested files and directories will be removed\n         * @param entryName\n         * @returns {void}\n         */\n        deleteFile: function (/*String*/ entryName, withsubfolders = true) {\n            if (!loadedEntries) {\n                readEntries();\n            }\n            const entry = entryTable[entryName];\n            const list = this.getEntryChildren(entry, withsubfolders).map((child) => child.entryName);\n\n            list.forEach(this.deleteEntry);\n        },\n\n        /**\n         * Removes the entry with the given name from the entry list.\n         *\n         * @param {string} entryName\n         * @returns {void}\n         */\n        deleteEntry: function (/*String*/ entryName) {\n            if (!loadedEntries) {\n                readEntries();\n            }\n            const entry = entryTable[entryName];\n            const index = entryList.indexOf(entry);\n            if (index >= 0) {\n                entryList.splice(index, 1);\n                delete entryTable[entryName];\n                mainHeader.totalEntries = entryList.length;\n            }\n        },\n\n        /**\n         *  Iterates and returns all nested files and directories of the given entry\n         *\n         * @param entry\n         * @return Array\n         */\n        getEntryChildren: function (/*ZipEntry*/ entry, subfolders = true) {\n            if (!loadedEntries) {\n                readEntries();\n            }\n            if (typeof entry === \"object\") {\n                if (entry.isDirectory && subfolders) {\n                    const list = [];\n                    const name = entry.entryName;\n\n                    for (const zipEntry of entryList) {\n                        if (zipEntry.entryName.startsWith(name)) {\n                            list.push(zipEntry);\n                        }\n                    }\n                    return list;\n                } else {\n                    return [entry];\n                }\n            }\n            return [];\n        },\n\n        /**\n         *  How many child elements entry has\n         *\n         * @param {ZipEntry} entry\n         * @return {integer}\n         */\n        getChildCount: function (entry) {\n            if (entry && entry.isDirectory) {\n                const list = this.getEntryChildren(entry);\n                return list.includes(entry) ? list.length - 1 : list.length;\n            }\n            return 0;\n        },\n\n        /**\n         * Returns the zip file\n         *\n         * @return Buffer\n         */\n        compressToBuffer: function () {\n            if (!loadedEntries) {\n                readEntries();\n            }\n            sortEntries();\n\n            const dataBlock = [];\n            const headerBlocks = [];\n            let totalSize = 0;\n            let dindex = 0;\n\n            mainHeader.size = 0;\n            mainHeader.offset = 0;\n            let totalEntries = 0;\n\n            for (const entry of this.entries) {\n                // compress data and set local and entry header accordingly. Reason why is called first\n                const compressedData = entry.getCompressedData();\n                entry.header.offset = dindex;\n\n                // 1. construct local header\n                const localHeader = entry.packLocalHeader();\n\n                // 2. offsets\n                const dataLength = localHeader.length + compressedData.length;\n                dindex += dataLength;\n\n                // 3. store values in sequence\n                dataBlock.push(localHeader);\n                dataBlock.push(compressedData);\n\n                // 4. construct central header\n                const centralHeader = entry.packCentralHeader();\n                headerBlocks.push(centralHeader);\n                // 5. update main header\n                mainHeader.size += centralHeader.length;\n                totalSize += dataLength + centralHeader.length;\n                totalEntries++;\n            }\n\n            totalSize += mainHeader.mainHeaderSize; // also includes zip file comment length\n            // point to end of data and beginning of central directory first record\n            mainHeader.offset = dindex;\n            mainHeader.totalEntries = totalEntries;\n\n            dindex = 0;\n            const outBuffer = Buffer.alloc(totalSize);\n            // write data blocks\n            for (const content of dataBlock) {\n                content.copy(outBuffer, dindex);\n                dindex += content.length;\n            }\n\n            // write central directory entries\n            for (const content of headerBlocks) {\n                content.copy(outBuffer, dindex);\n                dindex += content.length;\n            }\n\n            // write main header\n            const mh = mainHeader.toBinary();\n            if (_comment) {\n                _comment.copy(mh, Utils.Constants.ENDHDR); // add zip file comment\n            }\n            mh.copy(outBuffer, dindex);\n\n            // Since we update entry and main header offsets,\n            // they are no longer valid and we have to reset content\n            // (Issue 64)\n\n            inBuffer = outBuffer;\n            loadedEntries = false;\n\n            return outBuffer;\n        },\n\n        toAsyncBuffer: function (/*Function*/ onSuccess, /*Function*/ onFail, /*Function*/ onItemStart, /*Function*/ onItemEnd) {\n            try {\n                if (!loadedEntries) {\n                    readEntries();\n                }\n                sortEntries();\n\n                const dataBlock = [];\n                const centralHeaders = [];\n                let totalSize = 0;\n                let dindex = 0;\n                let totalEntries = 0;\n\n                mainHeader.size = 0;\n                mainHeader.offset = 0;\n\n                const compress2Buffer = function (entryLists) {\n                    if (entryLists.length > 0) {\n                        const entry = entryLists.shift();\n                        const name = entry.entryName + entry.extra.toString();\n                        if (onItemStart) onItemStart(name);\n                        entry.getCompressedDataAsync(function (compressedData) {\n                            if (onItemEnd) onItemEnd(name);\n                            entry.header.offset = dindex;\n\n                            // 1. construct local header\n                            const localHeader = entry.packLocalHeader();\n\n                            // 2. offsets\n                            const dataLength = localHeader.length + compressedData.length;\n                            dindex += dataLength;\n\n                            // 3. store values in sequence\n                            dataBlock.push(localHeader);\n                            dataBlock.push(compressedData);\n\n                            // central header\n                            const centalHeader = entry.packCentralHeader();\n                            centralHeaders.push(centalHeader);\n                            mainHeader.size += centalHeader.length;\n                            totalSize += dataLength + centalHeader.length;\n                            totalEntries++;\n\n                            compress2Buffer(entryLists);\n                        });\n                    } else {\n                        totalSize += mainHeader.mainHeaderSize; // also includes zip file comment length\n                        // point to end of data and beginning of central directory first record\n                        mainHeader.offset = dindex;\n                        mainHeader.totalEntries = totalEntries;\n\n                        dindex = 0;\n                        const outBuffer = Buffer.alloc(totalSize);\n                        dataBlock.forEach(function (content) {\n                            content.copy(outBuffer, dindex); // write data blocks\n                            dindex += content.length;\n                        });\n                        centralHeaders.forEach(function (content) {\n                            content.copy(outBuffer, dindex); // write central directory entries\n                            dindex += content.length;\n                        });\n\n                        const mh = mainHeader.toBinary();\n                        if (_comment) {\n                            _comment.copy(mh, Utils.Constants.ENDHDR); // add zip file comment\n                        }\n\n                        mh.copy(outBuffer, dindex); // write main header\n\n                        // Since we update entry and main header offsets, they are no\n                        // longer valid and we have to reset content using our new buffer\n                        // (Issue 64)\n\n                        inBuffer = outBuffer;\n                        loadedEntries = false;\n\n                        onSuccess(outBuffer);\n                    }\n                };\n\n                compress2Buffer(Array.from(this.entries));\n            } catch (e) {\n                onFail(e);\n            }\n        }\n    };\n};\n", "const Utils = require(\"./util\");\nconst pth = require(\"path\");\nconst ZipEntry = require(\"./zipEntry\");\nconst ZipFile = require(\"./zipFile\");\n\nconst get_Bool = (...val) => Utils.findLast(val, (c) => typeof c === \"boolean\");\nconst get_Str = (...val) => Utils.findLast(val, (c) => typeof c === \"string\");\nconst get_Fun = (...val) => Utils.findLast(val, (c) => typeof c === \"function\");\n\nconst defaultOptions = {\n    // option \"noSort\" : if true it disables files sorting\n    noSort: false,\n    // read entries during load (initial loading may be slower)\n    readEntries: false,\n    // default method is none\n    method: Utils.Constants.NONE,\n    // file system\n    fs: null\n};\n\nmodule.exports = function (/**String*/ input, /** object */ options) {\n    let inBuffer = null;\n\n    // create object based default options, allowing them to be overwritten\n    const opts = Object.assign(Object.create(null), defaultOptions);\n\n    // test input variable\n    if (input && \"object\" === typeof input) {\n        // if value is not buffer we accept it to be object with options\n        if (!(input instanceof Uint8Array)) {\n            Object.assign(opts, input);\n            input = opts.input ? opts.input : undefined;\n            if (opts.input) delete opts.input;\n        }\n\n        // if input is buffer\n        if (Buffer.isBuffer(input)) {\n            inBuffer = input;\n            opts.method = Utils.Constants.BUFFER;\n            input = undefined;\n        }\n    }\n\n    // assign options\n    Object.assign(opts, options);\n\n    // instanciate utils filesystem\n    const filetools = new Utils(opts);\n\n    if (typeof opts.decoder !== \"object\" || typeof opts.decoder.encode !== \"function\" || typeof opts.decoder.decode !== \"function\") {\n        opts.decoder = Utils.decoder;\n    }\n\n    // if input is file name we retrieve its content\n    if (input && \"string\" === typeof input) {\n        // load zip file\n        if (filetools.fs.existsSync(input)) {\n            opts.method = Utils.Constants.FILE;\n            opts.filename = input;\n            inBuffer = filetools.fs.readFileSync(input);\n        } else {\n            throw Utils.Errors.INVALID_FILENAME();\n        }\n    }\n\n    // create variable\n    const _zip = new ZipFile(inBuffer, opts);\n\n    const { canonical, sanitize, zipnamefix } = Utils;\n\n    function getEntry(/**Object*/ entry) {\n        if (entry && _zip) {\n            var item;\n            // If entry was given as a file name\n            if (typeof entry === \"string\") item = _zip.getEntry(pth.posix.normalize(entry));\n            // if entry was given as a ZipEntry object\n            if (typeof entry === \"object\" && typeof entry.entryName !== \"undefined\" && typeof entry.header !== \"undefined\") item = _zip.getEntry(entry.entryName);\n\n            if (item) {\n                return item;\n            }\n        }\n        return null;\n    }\n\n    function fixPath(zipPath) {\n        const { join, normalize, sep } = pth.posix;\n        // convert windows file separators and normalize\n        return join(\".\", normalize(sep + zipPath.split(\"\\\\\").join(sep) + sep));\n    }\n\n    function filenameFilter(filterfn) {\n        if (filterfn instanceof RegExp) {\n            // if filter is RegExp wrap it\n            return (function (rx) {\n                return function (filename) {\n                    return rx.test(filename);\n                };\n            })(filterfn);\n        } else if (\"function\" !== typeof filterfn) {\n            // if filter is not function we will replace it\n            return () => true;\n        }\n        return filterfn;\n    }\n\n    // keep last character on folders\n    const relativePath = (local, entry) => {\n        let lastChar = entry.slice(-1);\n        lastChar = lastChar === filetools.sep ? filetools.sep : \"\";\n        return pth.relative(local, entry) + lastChar;\n    };\n\n    return {\n        /**\n         * Extracts the given entry from the archive and returns the content as a Buffer object\n         * @param {ZipEntry|string} entry ZipEntry object or String with the full path of the entry\n         * @param {Buffer|string} [pass] - password\n         * @return Buffer or Null in case of error\n         */\n        readFile: function (entry, pass) {\n            var item = getEntry(entry);\n            return (item && item.getData(pass)) || null;\n        },\n\n        /**\n         * Returns how many child elements has on entry (directories) on files it is always 0\n         * @param {ZipEntry|string} entry ZipEntry object or String with the full path of the entry\n         * @returns {integer}\n         */\n        childCount: function (entry) {\n            const item = getEntry(entry);\n            if (item) {\n                return _zip.getChildCount(item);\n            }\n        },\n\n        /**\n         * Asynchronous readFile\n         * @param {ZipEntry|string} entry ZipEntry object or String with the full path of the entry\n         * @param {callback} callback\n         *\n         * @return Buffer or Null in case of error\n         */\n        readFileAsync: function (entry, callback) {\n            var item = getEntry(entry);\n            if (item) {\n                item.getDataAsync(callback);\n            } else {\n                callback(null, \"getEntry failed for:\" + entry);\n            }\n        },\n\n        /**\n         * Extracts the given entry from the archive and returns the content as plain text in the given encoding\n         * @param {ZipEntry|string} entry - ZipEntry object or String with the full path of the entry\n         * @param {string} encoding - Optional. If no encoding is specified utf8 is used\n         *\n         * @return String\n         */\n        readAsText: function (entry, encoding) {\n            var item = getEntry(entry);\n            if (item) {\n                var data = item.getData();\n                if (data && data.length) {\n                    return data.toString(encoding || \"utf8\");\n                }\n            }\n            return \"\";\n        },\n\n        /**\n         * Asynchronous readAsText\n         * @param {ZipEntry|string} entry ZipEntry object or String with the full path of the entry\n         * @param {callback} callback\n         * @param {string} [encoding] - Optional. If no encoding is specified utf8 is used\n         *\n         * @return String\n         */\n        readAsTextAsync: function (entry, callback, encoding) {\n            var item = getEntry(entry);\n            if (item) {\n                item.getDataAsync(function (data, err) {\n                    if (err) {\n                        callback(data, err);\n                        return;\n                    }\n\n                    if (data && data.length) {\n                        callback(data.toString(encoding || \"utf8\"));\n                    } else {\n                        callback(\"\");\n                    }\n                });\n            } else {\n                callback(\"\");\n            }\n        },\n\n        /**\n         * Remove the entry from the file or the entry and all it's nested directories and files if the given entry is a directory\n         *\n         * @param {ZipEntry|string} entry\n         * @returns {void}\n         */\n        deleteFile: function (entry, withsubfolders = true) {\n            // @TODO: test deleteFile\n            var item = getEntry(entry);\n            if (item) {\n                _zip.deleteFile(item.entryName, withsubfolders);\n            }\n        },\n\n        /**\n         * Remove the entry from the file or directory without affecting any nested entries\n         *\n         * @param {ZipEntry|string} entry\n         * @returns {void}\n         */\n        deleteEntry: function (entry) {\n            // @TODO: test deleteEntry\n            var item = getEntry(entry);\n            if (item) {\n                _zip.deleteEntry(item.entryName);\n            }\n        },\n\n        /**\n         * Adds a comment to the zip. The zip must be rewritten after adding the comment.\n         *\n         * @param {string} comment\n         */\n        addZipComment: function (comment) {\n            // @TODO: test addZipComment\n            _zip.comment = comment;\n        },\n\n        /**\n         * Returns the zip comment\n         *\n         * @return String\n         */\n        getZipComment: function () {\n            return _zip.comment || \"\";\n        },\n\n        /**\n         * Adds a comment to a specified zipEntry. The zip must be rewritten after adding the comment\n         * The comment cannot exceed 65535 characters in length\n         *\n         * @param {ZipEntry} entry\n         * @param {string} comment\n         */\n        addZipEntryComment: function (entry, comment) {\n            var item = getEntry(entry);\n            if (item) {\n                item.comment = comment;\n            }\n        },\n\n        /**\n         * Returns the comment of the specified entry\n         *\n         * @param {ZipEntry} entry\n         * @return String\n         */\n        getZipEntryComment: function (entry) {\n            var item = getEntry(entry);\n            if (item) {\n                return item.comment || \"\";\n            }\n            return \"\";\n        },\n\n        /**\n         * Updates the content of an existing entry inside the archive. The zip must be rewritten after updating the content\n         *\n         * @param {ZipEntry} entry\n         * @param {Buffer} content\n         */\n        updateFile: function (entry, content) {\n            var item = getEntry(entry);\n            if (item) {\n                item.setData(content);\n            }\n        },\n\n        /**\n         * Adds a file from the disk to the archive\n         *\n         * @param {string} localPath File to add to zip\n         * @param {string} [zipPath] Optional path inside the zip\n         * @param {string} [zipName] Optional name for the file\n         * @param {string} [comment] Optional file comment\n         */\n        addLocalFile: function (localPath, zipPath, zipName, comment) {\n            if (filetools.fs.existsSync(localPath)) {\n                // fix ZipPath\n                zipPath = zipPath ? fixPath(zipPath) : \"\";\n\n                // p - local file name\n                const p = pth.win32.basename(pth.win32.normalize(localPath));\n\n                // add file name into zippath\n                zipPath += zipName ? zipName : p;\n\n                // read file attributes\n                const _attr = filetools.fs.statSync(localPath);\n\n                // get file content\n                const data = _attr.isFile() ? filetools.fs.readFileSync(localPath) : Buffer.alloc(0);\n\n                // if folder\n                if (_attr.isDirectory()) zipPath += filetools.sep;\n\n                // add file into zip file\n                this.addFile(zipPath, data, comment, _attr);\n            } else {\n                throw Utils.Errors.FILE_NOT_FOUND(localPath);\n            }\n        },\n\n        /**\n         * Callback for showing if everything was done.\n         *\n         * @callback doneCallback\n         * @param {Error} err - Error object\n         * @param {boolean} done - was request fully completed\n         */\n\n        /**\n         * Adds a file from the disk to the archive\n         *\n         * @param {(object|string)} options - options object, if it is string it us used as localPath.\n         * @param {string} options.localPath - Local path to the file.\n         * @param {string} [options.comment] - Optional file comment.\n         * @param {string} [options.zipPath] - Optional path inside the zip\n         * @param {string} [options.zipName] - Optional name for the file\n         * @param {doneCallback} callback - The callback that handles the response.\n         */\n        addLocalFileAsync: function (options, callback) {\n            options = typeof options === \"object\" ? options : { localPath: options };\n            const localPath = pth.resolve(options.localPath);\n            const { comment } = options;\n            let { zipPath, zipName } = options;\n            const self = this;\n\n            filetools.fs.stat(localPath, function (err, stats) {\n                if (err) return callback(err, false);\n                // fix ZipPath\n                zipPath = zipPath ? fixPath(zipPath) : \"\";\n                // p - local file name\n                const p = pth.win32.basename(pth.win32.normalize(localPath));\n                // add file name into zippath\n                zipPath += zipName ? zipName : p;\n\n                if (stats.isFile()) {\n                    filetools.fs.readFile(localPath, function (err, data) {\n                        if (err) return callback(err, false);\n                        self.addFile(zipPath, data, comment, stats);\n                        return setImmediate(callback, undefined, true);\n                    });\n                } else if (stats.isDirectory()) {\n                    zipPath += filetools.sep;\n                    self.addFile(zipPath, Buffer.alloc(0), comment, stats);\n                    return setImmediate(callback, undefined, true);\n                }\n            });\n        },\n\n        /**\n         * Adds a local directory and all its nested files and directories to the archive\n         *\n         * @param {string} localPath - local path to the folder\n         * @param {string} [zipPath] - optional path inside zip\n         * @param {(RegExp|function)} [filter] - optional RegExp or Function if files match will be included.\n         */\n        addLocalFolder: function (localPath, zipPath, filter) {\n            // Prepare filter\n            filter = filenameFilter(filter);\n\n            // fix ZipPath\n            zipPath = zipPath ? fixPath(zipPath) : \"\";\n\n            // normalize the path first\n            localPath = pth.normalize(localPath);\n\n            if (filetools.fs.existsSync(localPath)) {\n                const items = filetools.findFiles(localPath);\n                const self = this;\n\n                if (items.length) {\n                    for (const filepath of items) {\n                        const p = pth.join(zipPath, relativePath(localPath, filepath));\n                        if (filter(p)) {\n                            self.addLocalFile(filepath, pth.dirname(p));\n                        }\n                    }\n                }\n            } else {\n                throw Utils.Errors.FILE_NOT_FOUND(localPath);\n            }\n        },\n\n        /**\n         * Asynchronous addLocalFolder\n         * @param {string} localPath\n         * @param {callback} callback\n         * @param {string} [zipPath] optional path inside zip\n         * @param {RegExp|function} [filter] optional RegExp or Function if files match will\n         *               be included.\n         */\n        addLocalFolderAsync: function (localPath, callback, zipPath, filter) {\n            // Prepare filter\n            filter = filenameFilter(filter);\n\n            // fix ZipPath\n            zipPath = zipPath ? fixPath(zipPath) : \"\";\n\n            // normalize the path first\n            localPath = pth.normalize(localPath);\n\n            var self = this;\n            filetools.fs.open(localPath, \"r\", function (err) {\n                if (err && err.code === \"ENOENT\") {\n                    callback(undefined, Utils.Errors.FILE_NOT_FOUND(localPath));\n                } else if (err) {\n                    callback(undefined, err);\n                } else {\n                    var items = filetools.findFiles(localPath);\n                    var i = -1;\n\n                    var next = function () {\n                        i += 1;\n                        if (i < items.length) {\n                            var filepath = items[i];\n                            var p = relativePath(localPath, filepath).split(\"\\\\\").join(\"/\"); //windows fix\n                            p = p\n                                .normalize(\"NFD\")\n                                .replace(/[\\u0300-\\u036f]/g, \"\")\n                                .replace(/[^\\x20-\\x7E]/g, \"\"); // accent fix\n                            if (filter(p)) {\n                                filetools.fs.stat(filepath, function (er0, stats) {\n                                    if (er0) callback(undefined, er0);\n                                    if (stats.isFile()) {\n                                        filetools.fs.readFile(filepath, function (er1, data) {\n                                            if (er1) {\n                                                callback(undefined, er1);\n                                            } else {\n                                                self.addFile(zipPath + p, data, \"\", stats);\n                                                next();\n                                            }\n                                        });\n                                    } else {\n                                        self.addFile(zipPath + p + \"/\", Buffer.alloc(0), \"\", stats);\n                                        next();\n                                    }\n                                });\n                            } else {\n                                process.nextTick(() => {\n                                    next();\n                                });\n                            }\n                        } else {\n                            callback(true, undefined);\n                        }\n                    };\n\n                    next();\n                }\n            });\n        },\n\n        /**\n         * Adds a local directory and all its nested files and directories to the archive\n         *\n         * @param {object | string} options - options object, if it is string it us used as localPath.\n         * @param {string} options.localPath - Local path to the folder.\n         * @param {string} [options.zipPath] - optional path inside zip.\n         * @param {RegExp|function} [options.filter] - optional RegExp or Function if files match will be included.\n         * @param {function|string} [options.namefix] - optional function to help fix filename\n         * @param {doneCallback} callback - The callback that handles the response.\n         *\n         */\n        addLocalFolderAsync2: function (options, callback) {\n            const self = this;\n            options = typeof options === \"object\" ? options : { localPath: options };\n            localPath = pth.resolve(fixPath(options.localPath));\n            let { zipPath, filter, namefix } = options;\n\n            if (filter instanceof RegExp) {\n                filter = (function (rx) {\n                    return function (filename) {\n                        return rx.test(filename);\n                    };\n                })(filter);\n            } else if (\"function\" !== typeof filter) {\n                filter = function () {\n                    return true;\n                };\n            }\n\n            // fix ZipPath\n            zipPath = zipPath ? fixPath(zipPath) : \"\";\n\n            // Check Namefix function\n            if (namefix == \"latin1\") {\n                namefix = (str) =>\n                    str\n                        .normalize(\"NFD\")\n                        .replace(/[\\u0300-\\u036f]/g, \"\")\n                        .replace(/[^\\x20-\\x7E]/g, \"\"); // accent fix (latin1 characers only)\n            }\n\n            if (typeof namefix !== \"function\") namefix = (str) => str;\n\n            // internal, create relative path + fix the name\n            const relPathFix = (entry) => pth.join(zipPath, namefix(relativePath(localPath, entry)));\n            const fileNameFix = (entry) => pth.win32.basename(pth.win32.normalize(namefix(entry)));\n\n            filetools.fs.open(localPath, \"r\", function (err) {\n                if (err && err.code === \"ENOENT\") {\n                    callback(undefined, Utils.Errors.FILE_NOT_FOUND(localPath));\n                } else if (err) {\n                    callback(undefined, err);\n                } else {\n                    filetools.findFilesAsync(localPath, function (err, fileEntries) {\n                        if (err) return callback(err);\n                        fileEntries = fileEntries.filter((dir) => filter(relPathFix(dir)));\n                        if (!fileEntries.length) callback(undefined, false);\n\n                        setImmediate(\n                            fileEntries.reverse().reduce(function (next, entry) {\n                                return function (err, done) {\n                                    if (err || done === false) return setImmediate(next, err, false);\n\n                                    self.addLocalFileAsync(\n                                        {\n                                            localPath: entry,\n                                            zipPath: pth.dirname(relPathFix(entry)),\n                                            zipName: fileNameFix(entry)\n                                        },\n                                        next\n                                    );\n                                };\n                            }, callback)\n                        );\n                    });\n                }\n            });\n        },\n\n        /**\n         * Adds a local directory and all its nested files and directories to the archive\n         *\n         * @param {string} localPath - path where files will be extracted\n         * @param {object} props - optional properties\n         * @param {string} [props.zipPath] - optional path inside zip\n         * @param {RegExp|function} [props.filter] - optional RegExp or Function if files match will be included.\n         * @param {function|string} [props.namefix] - optional function to help fix filename\n         */\n        addLocalFolderPromise: function (localPath, props) {\n            return new Promise((resolve, reject) => {\n                this.addLocalFolderAsync2(Object.assign({ localPath }, props), (err, done) => {\n                    if (err) reject(err);\n                    if (done) resolve(this);\n                });\n            });\n        },\n\n        /**\n         * Allows you to create a entry (file or directory) in the zip file.\n         * If you want to create a directory the entryName must end in / and a null buffer should be provided.\n         * Comment and attributes are optional\n         *\n         * @param {string} entryName\n         * @param {Buffer | string} content - file content as buffer or utf8 coded string\n         * @param {string} [comment] - file comment\n         * @param {number | object} [attr] - number as unix file permissions, object as filesystem Stats object\n         */\n        addFile: function (entryName, content, comment, attr) {\n            entryName = zipnamefix(entryName);\n            let entry = getEntry(entryName);\n            const update = entry != null;\n\n            // prepare new entry\n            if (!update) {\n                entry = new ZipEntry(opts);\n                entry.entryName = entryName;\n            }\n            entry.comment = comment || \"\";\n\n            const isStat = \"object\" === typeof attr && attr instanceof filetools.fs.Stats;\n\n            // last modification time from file stats\n            if (isStat) {\n                entry.header.time = attr.mtime;\n            }\n\n            // Set file attribute\n            var fileattr = entry.isDirectory ? 0x10 : 0; // (MS-DOS directory flag)\n\n            // extended attributes field for Unix\n            // set file type either S_IFDIR / S_IFREG\n            let unix = entry.isDirectory ? 0x4000 : 0x8000;\n\n            if (isStat) {\n                // File attributes from file stats\n                unix |= 0xfff & attr.mode;\n            } else if (\"number\" === typeof attr) {\n                // attr from given attr values\n                unix |= 0xfff & attr;\n            } else {\n                // Default values:\n                unix |= entry.isDirectory ? 0o755 : 0o644; // permissions (drwxr-xr-x) or (-r-wr--r--)\n            }\n\n            fileattr = (fileattr | (unix << 16)) >>> 0; // add attributes\n\n            entry.attr = fileattr;\n\n            entry.setData(content);\n            if (!update) _zip.setEntry(entry);\n\n            return entry;\n        },\n\n        /**\n         * Returns an array of ZipEntry objects representing the files and folders inside the archive\n         *\n         * @param {string} [password]\n         * @returns Array\n         */\n        getEntries: function (password) {\n            _zip.password = password;\n            return _zip ? _zip.entries : [];\n        },\n\n        /**\n         * Returns a ZipEntry object representing the file or folder specified by ``name``.\n         *\n         * @param {string} name\n         * @return ZipEntry\n         */\n        getEntry: function (/**String*/ name) {\n            return getEntry(name);\n        },\n\n        getEntryCount: function () {\n            return _zip.getEntryCount();\n        },\n\n        forEach: function (callback) {\n            return _zip.forEach(callback);\n        },\n\n        /**\n         * Extracts the given entry to the given targetPath\n         * If the entry is a directory inside the archive, the entire directory and it's subdirectories will be extracted\n         *\n         * @param {string|ZipEntry} entry - ZipEntry object or String with the full path of the entry\n         * @param {string} targetPath - Target folder where to write the file\n         * @param {boolean} [maintainEntryPath=true] - If maintainEntryPath is true and the entry is inside a folder, the entry folder will be created in targetPath as well. Default is TRUE\n         * @param {boolean} [overwrite=false] - If the file already exists at the target path, the file will be overwriten if this is true.\n         * @param {boolean} [keepOriginalPermission=false] - The file will be set as the permission from the entry if this is true.\n         * @param {string} [outFileName] - String If set will override the filename of the extracted file (Only works if the entry is a file)\n         *\n         * @return Boolean\n         */\n        extractEntryTo: function (entry, targetPath, maintainEntryPath, overwrite, keepOriginalPermission, outFileName) {\n            overwrite = get_Bool(false, overwrite);\n            keepOriginalPermission = get_Bool(false, keepOriginalPermission);\n            maintainEntryPath = get_Bool(true, maintainEntryPath);\n            outFileName = get_Str(keepOriginalPermission, outFileName);\n\n            var item = getEntry(entry);\n            if (!item) {\n                throw Utils.Errors.NO_ENTRY();\n            }\n\n            var entryName = canonical(item.entryName);\n\n            var target = sanitize(targetPath, outFileName && !item.isDirectory ? outFileName : maintainEntryPath ? entryName : pth.basename(entryName));\n\n            if (item.isDirectory) {\n                var children = _zip.getEntryChildren(item);\n                children.forEach(function (child) {\n                    if (child.isDirectory) return;\n                    var content = child.getData();\n                    if (!content) {\n                        throw Utils.Errors.CANT_EXTRACT_FILE();\n                    }\n                    var name = canonical(child.entryName);\n                    var childName = sanitize(targetPath, maintainEntryPath ? name : pth.basename(name));\n                    // The reverse operation for attr depend on method addFile()\n                    const fileAttr = keepOriginalPermission ? child.header.fileAttr : undefined;\n                    filetools.writeFileTo(childName, content, overwrite, fileAttr);\n                });\n                return true;\n            }\n\n            var content = item.getData(_zip.password);\n            if (!content) throw Utils.Errors.CANT_EXTRACT_FILE();\n\n            if (filetools.fs.existsSync(target) && !overwrite) {\n                throw Utils.Errors.CANT_OVERRIDE();\n            }\n            // The reverse operation for attr depend on method addFile()\n            const fileAttr = keepOriginalPermission ? entry.header.fileAttr : undefined;\n            filetools.writeFileTo(target, content, overwrite, fileAttr);\n\n            return true;\n        },\n\n        /**\n         * Test the archive\n         * @param {string} [pass]\n         */\n        test: function (pass) {\n            if (!_zip) {\n                return false;\n            }\n\n            for (var entry in _zip.entries) {\n                try {\n                    if (entry.isDirectory) {\n                        continue;\n                    }\n                    var content = _zip.entries[entry].getData(pass);\n                    if (!content) {\n                        return false;\n                    }\n                } catch (err) {\n                    return false;\n                }\n            }\n            return true;\n        },\n\n        /**\n         * Extracts the entire archive to the given location\n         *\n         * @param {string} targetPath Target location\n         * @param {boolean} [overwrite=false] If the file already exists at the target path, the file will be overwriten if this is true.\n         *                  Default is FALSE\n         * @param {boolean} [keepOriginalPermission=false] The file will be set as the permission from the entry if this is true.\n         *                  Default is FALSE\n         * @param {string|Buffer} [pass] password\n         */\n        extractAllTo: function (targetPath, overwrite, keepOriginalPermission, pass) {\n            keepOriginalPermission = get_Bool(false, keepOriginalPermission);\n            pass = get_Str(keepOriginalPermission, pass);\n            overwrite = get_Bool(false, overwrite);\n            if (!_zip) throw Utils.Errors.NO_ZIP();\n\n            _zip.entries.forEach(function (entry) {\n                var entryName = sanitize(targetPath, canonical(entry.entryName));\n                if (entry.isDirectory) {\n                    filetools.makeDir(entryName);\n                    return;\n                }\n                var content = entry.getData(pass);\n                if (!content) {\n                    throw Utils.Errors.CANT_EXTRACT_FILE();\n                }\n                // The reverse operation for attr depend on method addFile()\n                const fileAttr = keepOriginalPermission ? entry.header.fileAttr : undefined;\n                filetools.writeFileTo(entryName, content, overwrite, fileAttr);\n                try {\n                    filetools.fs.utimesSync(entryName, entry.header.time, entry.header.time);\n                } catch (err) {\n                    throw Utils.Errors.CANT_EXTRACT_FILE();\n                }\n            });\n        },\n\n        /**\n         * Asynchronous extractAllTo\n         *\n         * @param {string} targetPath Target location\n         * @param {boolean} [overwrite=false] If the file already exists at the target path, the file will be overwriten if this is true.\n         *                  Default is FALSE\n         * @param {boolean} [keepOriginalPermission=false] The file will be set as the permission from the entry if this is true.\n         *                  Default is FALSE\n         * @param {function} callback The callback will be executed when all entries are extracted successfully or any error is thrown.\n         */\n        extractAllToAsync: function (targetPath, overwrite, keepOriginalPermission, callback) {\n            callback = get_Fun(overwrite, keepOriginalPermission, callback);\n            keepOriginalPermission = get_Bool(false, keepOriginalPermission);\n            overwrite = get_Bool(false, overwrite);\n            if (!callback) {\n                return new Promise((resolve, reject) => {\n                    this.extractAllToAsync(targetPath, overwrite, keepOriginalPermission, function (err) {\n                        if (err) {\n                            reject(err);\n                        } else {\n                            resolve(this);\n                        }\n                    });\n                });\n            }\n            if (!_zip) {\n                callback(Utils.Errors.NO_ZIP());\n                return;\n            }\n\n            targetPath = pth.resolve(targetPath);\n            // convert entryName to\n            const getPath = (entry) => sanitize(targetPath, pth.normalize(canonical(entry.entryName)));\n            const getError = (msg, file) => new Error(msg + ': \"' + file + '\"');\n\n            // separate directories from files\n            const dirEntries = [];\n            const fileEntries = [];\n            _zip.entries.forEach((e) => {\n                if (e.isDirectory) {\n                    dirEntries.push(e);\n                } else {\n                    fileEntries.push(e);\n                }\n            });\n\n            // Create directory entries first synchronously\n            // this prevents race condition and assures folders are there before writing files\n            for (const entry of dirEntries) {\n                const dirPath = getPath(entry);\n                // The reverse operation for attr depend on method addFile()\n                const dirAttr = keepOriginalPermission ? entry.header.fileAttr : undefined;\n                try {\n                    filetools.makeDir(dirPath);\n                    if (dirAttr) filetools.fs.chmodSync(dirPath, dirAttr);\n                    // in unix timestamp will change if files are later added to folder, but still\n                    filetools.fs.utimesSync(dirPath, entry.header.time, entry.header.time);\n                } catch (er) {\n                    callback(getError(\"Unable to create folder\", dirPath));\n                }\n            }\n\n            fileEntries.reverse().reduce(function (next, entry) {\n                return function (err) {\n                    if (err) {\n                        next(err);\n                    } else {\n                        const entryName = pth.normalize(canonical(entry.entryName));\n                        const filePath = sanitize(targetPath, entryName);\n                        entry.getDataAsync(function (content, err_1) {\n                            if (err_1) {\n                                next(err_1);\n                            } else if (!content) {\n                                next(Utils.Errors.CANT_EXTRACT_FILE());\n                            } else {\n                                // The reverse operation for attr depend on method addFile()\n                                const fileAttr = keepOriginalPermission ? entry.header.fileAttr : undefined;\n                                filetools.writeFileToAsync(filePath, content, overwrite, fileAttr, function (succ) {\n                                    if (!succ) {\n                                        next(getError(\"Unable to write file\", filePath));\n                                    }\n                                    filetools.fs.utimes(filePath, entry.header.time, entry.header.time, function (err_2) {\n                                        if (err_2) {\n                                            next(getError(\"Unable to set times\", filePath));\n                                        } else {\n                                            next();\n                                        }\n                                    });\n                                });\n                            }\n                        });\n                    }\n                };\n            }, callback)();\n        },\n\n        /**\n         * Writes the newly created zip file to disk at the specified location or if a zip was opened and no ``targetFileName`` is provided, it will overwrite the opened zip\n         *\n         * @param {string} targetFileName\n         * @param {function} callback\n         */\n        writeZip: function (targetFileName, callback) {\n            if (arguments.length === 1) {\n                if (typeof targetFileName === \"function\") {\n                    callback = targetFileName;\n                    targetFileName = \"\";\n                }\n            }\n\n            if (!targetFileName && opts.filename) {\n                targetFileName = opts.filename;\n            }\n            if (!targetFileName) return;\n\n            var zipData = _zip.compressToBuffer();\n            if (zipData) {\n                var ok = filetools.writeFileTo(targetFileName, zipData, true);\n                if (typeof callback === \"function\") callback(!ok ? new Error(\"failed\") : null, \"\");\n            }\n        },\n\n        /**\n         *\n         * @param {string} targetFileName\n         * @param {object} [props]\n         * @param {boolean} [props.overwrite=true] If the file already exists at the target path, the file will be overwriten if this is true.\n         * @param {boolean} [props.perm] The file will be set as the permission from the entry if this is true.\n\n         * @returns {Promise<void>}\n         */\n        writeZipPromise: function (/**String*/ targetFileName, /* object */ props) {\n            const { overwrite, perm } = Object.assign({ overwrite: true }, props);\n\n            return new Promise((resolve, reject) => {\n                // find file name\n                if (!targetFileName && opts.filename) targetFileName = opts.filename;\n                if (!targetFileName) reject(\"ADM-ZIP: ZIP File Name Missing\");\n\n                this.toBufferPromise().then((zipData) => {\n                    const ret = (done) => (done ? resolve(done) : reject(\"ADM-ZIP: Wasn't able to write zip file\"));\n                    filetools.writeFileToAsync(targetFileName, zipData, overwrite, perm, ret);\n                }, reject);\n            });\n        },\n\n        /**\n         * @returns {Promise<Buffer>} A promise to the Buffer.\n         */\n        toBufferPromise: function () {\n            return new Promise((resolve, reject) => {\n                _zip.toAsyncBuffer(resolve, reject);\n            });\n        },\n\n        /**\n         * Returns the content of the entire zip file as a Buffer object\n         *\n         * @prop {function} [onSuccess]\n         * @prop {function} [onFail]\n         * @prop {function} [onItemStart]\n         * @prop {function} [onItemEnd]\n         * @returns {Buffer}\n         */\n        toBuffer: function (onSuccess, onFail, onItemStart, onItemEnd) {\n            if (typeof onSuccess === \"function\") {\n                _zip.toAsyncBuffer(onSuccess, onFail, onItemStart, onItemEnd);\n                return null;\n            }\n            return _zip.compressToBuffer();\n        }\n    };\n};\n", "import type {\n  RequestInstrumentationOptions as RequestInstrumentationOptionsT,\n  SpanStatusType as SpanStatusTypeT,\n} from '@sentry-internal/tracing';\nimport {\n  Apollo,\n  BROWSER_TRACING_INTEGRATION_ID as BROWSER_TRACING_INTEGRATION_ID_T,\n  BrowserTracing as BrowserTracingT,\n  Express,\n  GraphQL,\n  IdleTransaction as IdleTransactionT,\n  Mongo,\n  Mysql,\n  Postgres,\n  Prisma,\n  Span as SpanT,\n  SpanStatus as SpanStatusT,\n  TRACEPARENT_REGEXP as TRACEPARENT_REGEXP_T,\n  Transaction as TransactionT,\n  addExtensionMethods as addExtensionMethodsT,\n  defaultRequestInstrumentationOptions as defaultRequestInstrumentationOptionsT,\n  extractTraceparentData as extractTraceparentDataT,\n  getActiveTransaction as getActiveTransactionT,\n  hasTracingEnabled as hasTracingEnabledT,\n  instrumentOutgoingRequests as instrumentOutgoingRequestsT,\n  spanStatusfromHttpCode as spanStatusfromHttpCodeT,\n  startIdleTransaction as startIdleTransactionT,\n  stripUrlQueryAndFragment as stripUrlQueryAndFragmentT,\n} from '@sentry-internal/tracing';\n\n// BrowserTracing is already exported as part of `Integrations` below (and for the moment will remain so for\n// backwards compatibility), but that interferes with treeshaking, so we also export it separately\n// here.\n/**\n * @deprecated `@sentry/tracing` has been deprecated and will be moved to to `@sentry/node`, `@sentry/browser`, or your framework SDK in the next major version.\n * `BrowserTracing` can be imported from `@sentry/browser` or your framework SDK\n *\n * import { BrowserTracing } from '@sentry/browser';\n * new BrowserTracing()\n */\n// eslint-disable-next-line deprecation/deprecation\nexport const BrowserTracing = BrowserTracingT;\n\n// BrowserTracing is already exported as part of `Integrations` below (and for the moment will remain so for\n// backwards compatibility), but that interferes with treeshaking, so we also export it separately\n// here.\n/**\n * @deprecated `@sentry/tracing` has been deprecated and will be moved to to `@sentry/node`, `@sentry/browser`, or your framework SDK in the next major version.\n * `BrowserTracing` can be imported from `@sentry/browser` or your framework SDK\n *\n * import { BrowserTracing } from '@sentry/browser';\n * new BrowserTracing()\n */\n// eslint-disable-next-line deprecation/deprecation\nexport type BrowserTracing = BrowserTracingT;\n\n/**\n * @deprecated `@sentry/tracing` has been deprecated and will be moved to to `@sentry/node`, `@sentry/browser`, or your framework SDK in the next major version.\n */\nexport const addExtensionMethods = addExtensionMethodsT;\n\n/**\n * @deprecated `@sentry/tracing` has been deprecated and will be moved to to `@sentry/node`, `@sentry/browser`, or your framework SDK in the next major version.\n *\n * `getActiveTransaction` can be imported from `@sentry/node`, `@sentry/browser`, or your framework SDK\n */\n// eslint-disable-next-line deprecation/deprecation\nexport const getActiveTransaction = getActiveTransactionT;\n\n/**\n * @deprecated `@sentry/tracing` has been deprecated and will be moved to to `@sentry/node`, `@sentry/browser`, or your framework SDK in the next major version.\n *\n * `extractTraceparentData` can be imported from `@sentry/node`, `@sentry/browser`, or your framework SDK\n */\n// eslint-disable-next-line deprecation/deprecation\nexport const extractTraceparentData = extractTraceparentDataT;\n\n/**\n * @deprecated `@sentry/tracing` has been deprecated and will be moved to to `@sentry/node`, `@sentry/browser`, or your framework SDK in the next major version.\n *\n * `spanStatusfromHttpCode` can be imported from `@sentry/node`, `@sentry/browser`, or your framework SDK\n */\n// eslint-disable-next-line deprecation/deprecation\nexport const spanStatusfromHttpCode = spanStatusfromHttpCodeT;\n\n/**\n * @deprecated `@sentry/tracing` has been deprecated and will be moved to to `@sentry/node`, `@sentry/browser`, or your framework SDK in the next major version.\n *\n * `SpanStatusType` can be imported from `@sentry/node`, `@sentry/browser`, or your framework SDK\n */\nexport type SpanStatusType = SpanStatusTypeT;\n\n/**\n * @deprecated `@sentry/tracing` has been deprecated and will be moved to to `@sentry/node`, `@sentry/browser`, or your framework SDK in the next major version.\n *\n * `Transaction` can be imported from `@sentry/node`, `@sentry/browser`, or your framework SDK\n */\nexport const Transaction = TransactionT;\n\n/**\n * @deprecated `@sentry/tracing` has been deprecated and will be moved to to `@sentry/node`, `@sentry/browser`, or your framework SDK in the next major version.\n *\n * `Transaction` can be imported from `@sentry/node`, `@sentry/browser`, or your framework SDK\n */\nexport type Transaction = TransactionT;\n\n/**\n * @deprecated `@sentry/tracing` has been deprecated and will be moved to to `@sentry/node`, `@sentry/browser`, or your framework SDK in the next major version.\n *\n * `Span` can be imported from `@sentry/node`, `@sentry/browser`, or your framework SDK\n */\nexport const Span = SpanT;\n\n/**\n * @deprecated `@sentry/tracing` has been deprecated and will be moved to to `@sentry/node`, `@sentry/browser`, or your framework SDK in the next major version.\n *\n * `Span` can be imported from `@sentry/node`, `@sentry/browser`, or your framework SDK\n */\nexport type Span = SpanT;\n\n/**\n * @deprecated `@sentry/tracing` has been deprecated and will be moved to to `@sentry/node`, `@sentry/browser`, or your framework SDK in the next major version.\n */\nexport const BROWSER_TRACING_INTEGRATION_ID = BROWSER_TRACING_INTEGRATION_ID_T;\n\n/**\n * @deprecated `@sentry/tracing` has been deprecated and will be moved to to `@sentry/node`, `@sentry/browser`, or your framework SDK in the next major version.\n *\n * `defaultRequestInstrumentationOptions` can be imported from `@sentry/browser`, or your framework SDK\n */\nexport const defaultRequestInstrumentationOptions = defaultRequestInstrumentationOptionsT;\n\n/**\n * @deprecated `@sentry/tracing` has been deprecated and will be moved to to `@sentry/node`, `@sentry/browser`, or your framework SDK in the next major version.\n *\n * `hasTracingEnabled` can be imported from `@sentry/utils`\n */\nexport const hasTracingEnabled = hasTracingEnabledT;\n\n/**\n * @deprecated `@sentry/tracing` has been deprecated and will be moved to to `@sentry/node`, `@sentry/browser`, or your framework SDK in the next major version.\n *\n * `stripUrlQueryAndFragment` can be imported from `@sentry/utils`\n */\nexport const stripUrlQueryAndFragment = stripUrlQueryAndFragmentT;\n\n/**\n * @deprecated `@sentry/tracing` has been deprecated and will be moved to to `@sentry/node`, `@sentry/browser`, or your framework SDK in the next major version.\n *\n * `TRACEPARENT_REGEXP` can be imported from `@sentry/utils`\n */\nexport const TRACEPARENT_REGEXP = TRACEPARENT_REGEXP_T;\n\n/**\n * @deprecated `@sentry/tracing` has been deprecated and will be moved to to `@sentry/node`, `@sentry/browser`, or your framework SDK in the next major version.\n */\nexport const IdleTransaction = IdleTransactionT;\n\n/**\n * @deprecated `@sentry/tracing` has been deprecated and will be moved to to `@sentry/node`, `@sentry/browser`, or your framework SDK in the next major version.\n */\nexport type IdleTransaction = IdleTransactionT;\n\n/**\n * @deprecated `@sentry/tracing` has been deprecated and will be moved to to `@sentry/node`, `@sentry/browser`, or your framework SDK in the next major version.\n */\nexport const instrumentOutgoingRequests = instrumentOutgoingRequestsT;\n\n/**\n * @deprecated `@sentry/tracing` has been deprecated and will be moved to to `@sentry/node`, `@sentry/browser`, or your framework SDK in the next major version.\n */\nexport const startIdleTransaction = startIdleTransactionT;\n\n/**\n * @deprecated `@sentry/tracing` has been deprecated and will be moved to to `@sentry/node`, `@sentry/browser`, or your framework SDK in the next major version.\n */\n// eslint-disable-next-line deprecation/deprecation\nexport const SpanStatus = SpanStatusT;\n\n/**\n * @deprecated `@sentry/tracing` has been deprecated and will be moved to to `@sentry/node`, `@sentry/browser`, or your framework SDK in the next major version.\n */\n// eslint-disable-next-line deprecation/deprecation\nexport type SpanStatus = SpanStatusT;\n\n/**\n * @deprecated `@sentry/tracing` has been deprecated and will be moved to to `@sentry/node`, `@sentry/browser`, or your framework SDK in the next major version.\n */\nexport type RequestInstrumentationOptions = RequestInstrumentationOptionsT;\n\nexport const Integrations = {\n  /**\n   * @deprecated `@sentry/tracing` has been deprecated and will be moved to to `@sentry/node`, `@sentry/browser`, or your framework SDK in the next major version.\n   * `BrowserTracing` can be imported from `@sentry/browser` or your framework SDK\n   *\n   * import { BrowserTracing } from '@sentry/browser';\n   * new BrowserTracing()\n   */\n  // eslint-disable-next-line deprecation/deprecation\n  BrowserTracing: BrowserTracing,\n  /**\n   * @deprecated `@sentry/tracing` has been deprecated and will be moved to to `@sentry/node`, `@sentry/browser`, or your framework SDK in the next major version.\n   * `Apollo` can be imported from `@sentry/node`\n   *\n   * import { Integrations } from '@sentry/node';\n   * new Integrations.Apollo({ ... })\n   */\n  // eslint-disable-next-line deprecation/deprecation\n  Apollo: Apollo,\n  /**\n   * @deprecated `@sentry/tracing` has been deprecated and will be moved to to `@sentry/node`, `@sentry/browser`, or your framework SDK in the next major version.\n   * `Express` can be imported from `@sentry/node`\n   *\n   * import { Integrations } from '@sentry/node';\n   * new Integrations.Express({ ... })\n   */\n  // eslint-disable-next-line deprecation/deprecation\n  Express: Express,\n  /**\n   * @deprecated `@sentry/tracing` has been deprecated and will be moved to to `@sentry/node`, `@sentry/browser`, or your framework SDK in the next major version.\n   * `GraphQL` can be imported from `@sentry/node`\n   *\n   * import { Integrations } from '@sentry/node';\n   * new Integrations.GraphQL({ ... })\n   */\n  // eslint-disable-next-line deprecation/deprecation\n  GraphQL: GraphQL,\n  /**\n   * @deprecated `@sentry/tracing` has been deprecated and will be moved to to `@sentry/node`, `@sentry/browser`, or your framework SDK in the next major version.\n   * `Mongo` can be imported from `@sentry/node`\n   *\n   * import { Integrations } from '@sentry/node';\n   * new Integrations.Mongo({ ... })\n   */\n  // eslint-disable-next-line deprecation/deprecation\n  Mongo: Mongo,\n  /**\n   * @deprecated `@sentry/tracing` has been deprecated and will be moved to to `@sentry/node`, `@sentry/browser`, or your framework SDK in the next major version.\n   * `Mysql` can be imported from `@sentry/node`\n   *\n   * import { Integrations } from '@sentry/node';\n   * new Integrations.Mysql({ ... })\n   */\n  // eslint-disable-next-line deprecation/deprecation\n  Mysql: Mysql,\n  /**\n   * @deprecated `@sentry/tracing` has been deprecated and will be moved to to `@sentry/node`, `@sentry/browser`, or your framework SDK in the next major version.\n   * `Postgres` can be imported from `@sentry/node`\n   *\n   * import { Integrations } from '@sentry/node';\n   * new Integrations.Postgres({ ... })\n   */\n  // eslint-disable-next-line deprecation/deprecation\n  Postgres: Postgres,\n  /**\n   * @deprecated `@sentry/tracing` has been deprecated and will be moved to to `@sentry/node`, `@sentry/browser`, or your framework SDK in the next major version.\n   * `Prisma` can be imported from `@sentry/node`\n   *\n   * import { Integrations } from '@sentry/node';\n   * new Integrations.Prisma({ ... })\n   */\n  // eslint-disable-next-line deprecation/deprecation\n  Prisma: Prisma,\n};\n\n// Treeshakable guard to remove all code related to tracing\ndeclare const __SENTRY_TRACING__: boolean;\n\n// Guard for tree\nif (typeof __SENTRY_TRACING__ === 'undefined' || __SENTRY_TRACING__) {\n  // We are patching the global object with our hub extension methods\n  addExtensionMethodsT();\n}\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 | undefined;\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\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  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  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 `deprecatedImportAssert` parser 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  ImportCallArity: `\\`import()\\` requires exactly one or two arguments.`,\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  InvalidCoverDiscardElement:\n    \"'void' must be followed by an expression when not used in a binding position.\",\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` or in the bare case statement.\",\n  UnexpectedVoidPattern: \"Unexpected void binding.\",\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  VoidPatternCatchClauseParam:\n    \"A void binding can not be the catch clause parameter. Use `try { ... } catch { ... }` if you want to discard the caught error.\",\n  VoidPatternInitializer: \"A void binding may not have an initializer.\",\n  YieldBindingIdentifier:\n    \"Can not use 'yield' as identifier inside a generator.\",\n  YieldInParameter: \"Yield expression is not allowed in formal parameters.\",\n  YieldNotInGeneratorFunction:\n    \"'yield' is only allowed within generator functions.\",\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\";\n\nexport default {\n  ParseExpressionEmptyInput:\n    \"Unexpected parseExpression() input: The input is empty or contains only comments.\",\n  ParseExpressionExpectsEOF: ({ unexpected }: { unexpected: number }) =>\n    `Unexpected parseExpression() input: The input should contain exactly one expression, but the first expression is followed by the unexpected character \\`${String.fromCodePoint(unexpected)}\\`.`,\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: process.env.BABEL_8_BREAKING\n    ? 'Topic references are only supported when using the `\"proposal\": \"hack\"` version of the pipeline proposal.'\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  ...(process.env.BABEL_8_BREAKING\n    ? {}\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      }),\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 ParseExpressionErrors from \"./parse-error/parse-expression-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(ParseExpressionErrors),\n  ...ParseErrorEnum`pipelineOperator`(PipelineOperatorErrors),\n};\n\nexport type { LValAncestor } from \"./parse-error/standard-errors.ts\";\n", "import type { Plugin } 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\" | \"commonjs\" | \"module\" | \"unambiguous\";\n\nexport interface Options {\n  /**\n   * By default, import and export declarations can only appear at a program's top level.\n   * Setting this option to true allows them anywhere where a statement is allowed.\n   */\n  allowImportExportEverywhere?: boolean;\n\n  /**\n   * By default, await use is not allowed outside of an async function.\n   * Set this to true to accept such code.\n   */\n  allowAwaitOutsideFunction?: boolean;\n\n  /**\n   * By default, a return statement at the top level raises an error.\n   * Set this to true to accept such code.\n   */\n  allowReturnOutsideFunction?: boolean;\n\n  /**\n   * By default, new.target use is not allowed outside of a function or class.\n   * Set this to true to accept such code.\n   */\n  allowNewTargetOutsideFunction?: boolean;\n\n  /**\n   * By default, super calls are not allowed outside of a method.\n   * Set this to true to accept such code.\n   */\n  allowSuperOutsideMethod?: boolean;\n\n  /**\n   * By default, exported identifiers must refer to a declared variable.\n   * Set this to true to allow export statements to reference undeclared variables.\n   */\n  allowUndeclaredExports?: boolean;\n\n  /**\n   * By default, yield use is not allowed outside of a generator function.\n   * Set this to true to accept such code.\n   */\n\n  allowYieldOutsideFunction?: boolean;\n\n  /**\n   * By default, Babel parser JavaScript code according to Annex B syntax.\n   * Set this to `false` to disable such behavior.\n   */\n  annexB?: boolean;\n\n  /**\n   * By default, Babel attaches comments to adjacent AST nodes.\n   * When this option is set to false, comments are not attached.\n   * It can provide up to 30% performance improvement when the input code has many comments.\n   * @babel/eslint-parser will set it for you.\n   * It is not recommended to use attachComment: false with Babel transform,\n   * as doing so removes all the comments in output code, and renders annotations such as\n   * /* istanbul ignore next *\\/ nonfunctional.\n   */\n  attachComment?: boolean;\n\n  /**\n   * By default, Babel always throws an error when it finds some invalid code.\n   * When this option is set to true, it will store the parsing error and\n   * try to continue parsing the invalid input file.\n   */\n  errorRecovery?: boolean;\n\n  /**\n   * Indicate the mode the code should be parsed in.\n   * Can be one of \"script\", \"commonjs\", \"module\", or \"unambiguous\". Defaults to \"script\".\n   * \"unambiguous\" will make @babel/parser attempt to guess, based on the presence\n   * of ES6 import or export statements.\n   * Files with ES6 imports and exports are considered \"module\" and are otherwise \"script\".\n   *\n   * Use \"commonjs\" to parse code that is intended to be run in a CommonJS environment such as Node.js.\n   */\n  sourceType?: SourceType;\n\n  /**\n   * Correlate output AST nodes with their source filename.\n   * Useful when generating code and source maps from the ASTs of multiple input files.\n   */\n  sourceFilename?: string;\n\n  /**\n   * By default, all source indexes start from 0.\n   * You can provide a start index to alternatively start with.\n   * Useful for integration with other source tools.\n   */\n  startIndex?: number;\n\n  /**\n   * By default, the first line of code parsed is treated as line 1.\n   * You can provide a line number to alternatively start with.\n   * Useful for integration with other source tools.\n   */\n  startLine?: number;\n\n  /**\n   * By default, the parsed code is treated as if it starts from line 1, column 0.\n   * You can provide a column number to alternatively start with.\n   * Useful for integration with other source tools.\n   */\n  startColumn?: number;\n\n  /**\n   * Array containing the plugins that you want to enable.\n   */\n  plugins?: Plugin[];\n\n  /**\n   * Should the parser work in strict mode.\n   * Defaults to true if sourceType === 'module'. Otherwise, false.\n   */\n  strictMode?: boolean;\n\n  /**\n   * Adds a ranges property to each node: [node.start, node.end]\n   */\n  ranges?: boolean;\n\n  /**\n   * Adds all parsed tokens to a tokens property on the File node.\n   */\n  tokens?: boolean;\n\n  /**\n   * By default, the parser adds information about parentheses by setting\n   * `extra.parenthesized` to `true` as needed.\n   * When this option is `true` the parser creates `ParenthesizedExpression`\n   * AST nodes instead of using the `extra` property.\n   */\n  createParenthesizedExpressions?: boolean;\n\n  /**\n   * The default is false in Babel 7 and true in Babel 8\n   * Set this to true to parse it as an `ImportExpression` node.\n   * Otherwise `import(foo)` is parsed as `CallExpression(Import, [Identifier(foo)])`.\n   */\n  createImportExpressions?: boolean;\n}\n\nexport const enum OptionFlags {\n  AllowAwaitOutsideFunction = 1 << 0,\n  AllowReturnOutsideFunction = 1 << 1,\n  AllowNewTargetOutsideFunction = 1 << 2,\n  AllowImportExportEverywhere = 1 << 3,\n  AllowSuperOutsideMethod = 1 << 4,\n  AllowYieldOutsideFunction = 1 << 5,\n  AllowUndeclaredExports = 1 << 6,\n  Ranges = 1 << 7,\n  Tokens = 1 << 8,\n  CreateImportExpressions = 1 << 9,\n  CreateParenthesizedExpressions = 1 << 10,\n  ErrorRecovery = 1 << 11,\n  AttachComment = 1 << 12,\n  AnnexB = 1 << 13,\n}\n\ntype KeepOptionalKeys = \"sourceFilename\" | \"strictMode\";\nexport type OptionsWithDefaults = Omit<Required<Options>, KeepOptionalKeys> &\n  Pick<Options, KeepOptionalKeys>;\n\nfunction createDefaultOptions(): OptionsWithDefaults {\n  return {\n    // Source type (\"script\" or \"module\") for different semantics\n    sourceType: \"script\",\n    // Source filename.\n    sourceFilename: undefined,\n    // Index (0-based) from which to start counting source. Useful for\n    // integration with other tools.\n    startIndex: 0,\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    // When enabled, super outside a method is not considered an error.\n    allowSuperOutsideMethod: false,\n    // When enabled, export statements can reference undeclared variables.\n    allowUndeclaredExports: false,\n    allowYieldOutsideFunction: false,\n    // An array of plugins to enable\n    plugins: [],\n    // TODO\n    strictMode: undefined,\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\n// Interpret and default an options object\n\nexport function getOptions(opts?: Options | null): OptionsWithDefaults {\n  // https://github.com/babel/babel/pull/16918\n  // `options` is accessed frequently, please make sure it is a fast object.\n  // `%ToFastProperties` can make it a fast object, but the performance is the same as the slow object.\n  const options: any = createDefaultOptions();\n\n  if (opts == null) {\n    return options;\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  for (const key of Object.keys(options) as (keyof Options)[]) {\n    if (opts[key] != null) options[key] = opts[key];\n  }\n\n  if (options.startLine === 1) {\n    if (opts.startIndex == null && options.startColumn > 0) {\n      options.startIndex = options.startColumn;\n    } else if (opts.startColumn == null && options.startIndex > 0) {\n      options.startColumn = options.startIndex;\n    }\n  } else if (opts.startColumn == null || opts.startIndex == null) {\n    if (opts.startIndex != null || process.env.BABEL_8_BREAKING) {\n      throw new Error(\n        \"With a `startLine > 1` you must also specify `startIndex` and `startColumn`.\",\n      );\n    }\n  }\n\n  if (options.sourceType === \"commonjs\") {\n    if (opts.allowAwaitOutsideFunction != null) {\n      throw new Error(\n        \"The `allowAwaitOutsideFunction` option cannot be used with `sourceType: 'commonjs'`.\",\n      );\n    }\n    if (opts.allowReturnOutsideFunction != null) {\n      throw new Error(\n        \"`sourceType: 'commonjs'` implies `allowReturnOutsideFunction: true`, please remove the `allowReturnOutsideFunction` option or use `sourceType: 'script'`.\",\n      );\n    }\n    if (opts.allowNewTargetOutsideFunction != null) {\n      throw new Error(\n        \"`sourceType: 'commonjs'` implies `allowNewTargetOutsideFunction: true`, please remove the `allowNewTargetOutsideFunction` option or use `sourceType: 'script'`.\",\n      );\n    }\n  }\n\n  return options;\n}\n", "import type { TokenType } from \"../tokenizer/types.ts\";\nimport type Parser from \"../parser/index.ts\";\nimport type * as N from \"../types.ts\";\nimport type { Node as NodeType, NodeBase } 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\";\nimport { OptionFlags } from \"../options.ts\";\nimport type { ExpressionErrors } from \"../parser/util.ts\";\nimport type { ParseResult, File } from \"../index.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(): ParseResult<File> {\n      const file = toESTreeLocation(super.parse());\n\n      if (this.optionFlags & OptionFlags.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    // https://github.com/estree/estree/blob/master/es2020.md#chainexpression\n    estreeParseChainExpression(\n      node: N.Expression,\n      endLoc: Position,\n    ): N.EstreeChainExpression {\n      const chain = this.startNodeAtNode<N.EstreeChainExpression>(node);\n      chain.expression = node;\n      return this.finishNodeAt(chain, \"ChainExpression\", endLoc);\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      // @ts-expect-error delete non-optional properties\n      delete directive.value;\n\n      this.castNodeTo(expression, \"Literal\");\n      expression.raw = expression.extra!.raw;\n      expression.value = expression.extra!.expressionValue;\n\n      const stmt = this.castNodeTo(directive, \"ExpressionStatement\");\n      stmt.expression = expression;\n      stmt.directive = expression.extra!.rawValue;\n\n      delete expression.extra;\n\n      return stmt;\n    }\n\n    /**\n     * The TS-ESLint always define optional AST properties, here we provide the\n     * default value for such properties immediately after `finishNode` was invoked.\n     * This hook will be implemented by the typescript plugin.\n     *\n     * Note: This hook should be manually invoked when we change the `type` of a given AST\n     * node, to ensure that the optional properties are correctly filled.\n     * @param node The AST node finished by finishNode\n     */\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    fillOptionalPropertiesForTSESLint(node: NodeType) {}\n\n    cloneEstreeStringLiteral(node: N.EstreeLiteral): N.EstreeLiteral {\n      const { start, end, loc, range, raw, value } = node;\n      const cloned = Object.create(node.constructor.prototype);\n      cloned.type = \"Literal\";\n      cloned.start = start;\n      cloned.end = end;\n      cloned.loc = loc;\n      cloned.range = range;\n      cloned.raw = raw;\n      cloned.value = value;\n      return cloned;\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): stmt is N.ExpressionStatement {\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      // @ts-expect-error delete non-optional properties\n      delete node.directives;\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      // @ts-expect-error delete non-optional properties\n      delete node.id;\n      // @ts-expect-error mutate AST types\n      node.name = name;\n      return this.castNodeTo(node, \"PrivateIdentifier\");\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      | N.EstreeProperty\n      | N.EstreeMethodDefinition\n      | N.EstreeTSAbstractMethodDefinition {\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        funcNode,\n        isGenerator,\n        isAsync,\n        isConstructor,\n        allowDirectSuper,\n        type,\n        inClassScope,\n      );\n      // @ts-expect-error delete non-optional properties\n      delete funcNode.kind;\n      const { typeParameters } = node;\n      if (typeParameters) {\n        delete node.typeParameters;\n        funcNode.typeParameters = typeParameters;\n        this.resetStartLocationFromNode(funcNode, typeParameters);\n      }\n      const valueNode = this.castNodeTo(\n        funcNode as N.MethodLike,\n        process.env.BABEL_8_BREAKING &&\n          this.hasPlugin(\"typescript\") &&\n          !funcNode.body\n          ? \"TSEmptyBodyFunctionExpression\"\n          : \"FunctionExpression\",\n      );\n      (\n        node as unknown as Undone<\n          | N.EstreeProperty\n          | N.EstreeMethodDefinition\n          | N.EstreeTSAbstractMethodDefinition\n        >\n      ).value = valueNode;\n      if (type === \"ClassPrivateMethod\") {\n        node.computed = false;\n      }\n      if (process.env.BABEL_8_BREAKING && this.hasPlugin(\"typescript\")) {\n        // @ts-expect-error todo(flow->ts) property not defined for all types in union\n        if (node.abstract) {\n          // @ts-expect-error remove abstract from TSAbstractMethodDefinition\n          delete node.abstract;\n          return this.finishNode(\n            // @ts-expect-error cast methods to estree types\n            node as Undone<N.EstreeTSAbstractMethodDefinition>,\n            \"TSAbstractMethodDefinition\",\n          );\n        }\n      }\n      if (type === \"ObjectMethod\") {\n        if ((node as any as N.ObjectMethod).kind === \"method\") {\n          (node as any as N.EstreeProperty).kind = \"init\";\n        }\n        (node as any as N.EstreeProperty).shorthand = false;\n        return this.finishNode(\n          // @ts-expect-error cast methods to estree types\n          node as Undone<N.EstreeProperty>,\n          \"Property\",\n        );\n      } else {\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\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);\n      if (!process.env.BABEL_8_BREAKING) {\n        if (!this.getPluginOption(\"estree\", \"classFeatures\")) {\n          return propertyNode as unknown as N.EstreePropertyDefinition;\n        }\n      }\n      if (\n        process.env.BABEL_8_BREAKING &&\n        propertyNode.abstract &&\n        this.hasPlugin(\"typescript\")\n      ) {\n        delete propertyNode.abstract;\n        this.castNodeTo(propertyNode, \"TSAbstractPropertyDefinition\");\n      } else {\n        this.castNodeTo(propertyNode, \"PropertyDefinition\");\n      }\n      return propertyNode;\n    }\n\n    parseClassPrivateProperty(...args: [N.ClassPrivateProperty]): any {\n      const propertyNode = super.parseClassPrivateProperty(...args);\n      if (!process.env.BABEL_8_BREAKING) {\n        if (!this.getPluginOption(\"estree\", \"classFeatures\")) {\n          return propertyNode as unknown as N.EstreePropertyDefinition;\n        }\n      }\n      if (\n        process.env.BABEL_8_BREAKING &&\n        propertyNode.abstract &&\n        this.hasPlugin(\"typescript\")\n      ) {\n        this.castNodeTo(propertyNode, \"TSAbstractPropertyDefinition\");\n      } else {\n        this.castNodeTo(propertyNode, \"PropertyDefinition\");\n      }\n      propertyNode.computed = false;\n      return propertyNode;\n    }\n\n    parseClassAccessorProperty(\n      this: Parser,\n      node: N.ClassAccessorProperty,\n    ): any {\n      const accessorPropertyNode = super.parseClassAccessorProperty(node);\n      if (!process.env.BABEL_8_BREAKING) {\n        if (!this.getPluginOption(\"estree\", \"classFeatures\")) {\n          return accessorPropertyNode;\n        }\n      }\n      if (accessorPropertyNode.abstract && this.hasPlugin(\"typescript\")) {\n        delete accessorPropertyNode.abstract;\n        this.castNodeTo(accessorPropertyNode, \"TSAbstractAccessorProperty\");\n      } else {\n        this.castNodeTo(accessorPropertyNode, \"AccessorProperty\");\n      }\n      return accessorPropertyNode;\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        this.castNodeTo(node, \"Property\");\n      }\n\n      return node as any;\n    }\n\n    finishObjectProperty(node: Undone<N.ObjectProperty>): N.ObjectProperty {\n      (node as unknown as Undone<N.EstreeProperty>).kind = \"init\";\n      return this.finishNode(\n        node as unknown as Undone<N.EstreeProperty>,\n        \"Property\",\n      ) as any;\n    }\n\n    isValidLVal(\n      type: string,\n      disallowCallExpression: boolean,\n      isUnparenthesizedInAssign: boolean,\n      binding: BindingFlag,\n    ) {\n      return type === \"Property\"\n        ? \"value\"\n        : super.isValidLVal(\n            type,\n            disallowCallExpression,\n            isUnparenthesizedInAssign,\n            binding,\n          );\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        this.castNodeTo(node, \"ImportExpression\");\n        (node as N.Node as N.EstreeImportExpression).source = node\n          .arguments[0] as N.Expression;\n        (node as N.Node as N.EstreeImportExpression).options =\n          (node.arguments[1] as N.Expression) ?? null;\n        if (!process.env.BABEL_8_BREAKING) {\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        // @ts-expect-error delete non-optional properties\n        delete node.arguments;\n        // callee isn't optional in the type definition\n        // @ts-expect-error delete non-optional properties\n        delete node.callee;\n      } else if (node.type === \"OptionalCallExpression\") {\n        this.castNodeTo(node, \"CallExpression\");\n      } else {\n        node.optional = false;\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            this.castNodeTo(node, \"ExportAllDeclaration\");\n            // @ts-expect-error mutating AST types\n            node.exported = node.specifiers[0].exported;\n            // @ts-expect-error The ESTree AST shape differs from the Babel AST\n            delete node.specifiers;\n          }\n\n        // fallthrough\n        case \"ExportDefaultDeclaration\":\n          {\n            const { declaration } = node;\n            if (\n              declaration?.type === \"ClassDeclaration\" &&\n              // @ts-expect-error comparing undefined and number\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    stopParseSubscript(base: N.Expression, state: N.ParseSubscriptState) {\n      const node = super.stopParseSubscript(base, state);\n      if (state.optionalChainMember) {\n        return this.estreeParseChainExpression(node, base.loc.end);\n      }\n      return node;\n    }\n\n    parseMember(\n      base: N.Expression,\n      startLoc: Position,\n      state: N.ParseSubscriptState,\n      computed: boolean,\n      optional: boolean,\n    ) {\n      const node = super.parseMember(base, startLoc, state, computed, optional);\n      if (node.type === \"OptionalMemberExpression\") {\n        this.castNodeTo(node, \"MemberExpression\");\n      } else {\n        node.optional = false;\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    /* ============================================================ *\n     * parser/node.ts                                               *\n     * ============================================================ */\n\n    castNodeTo<T extends N.Node[\"type\"]>(\n      node: N.Node,\n      type: T,\n    ): Extract<N.Node, { type: T }> {\n      const result = super.castNodeTo(node, type);\n      this.fillOptionalPropertiesForTSESLint(result);\n      return result;\n    }\n\n    cloneIdentifier<T extends N.Identifier | N.Placeholder>(node: T): T {\n      const cloned = super.cloneIdentifier(node);\n      this.fillOptionalPropertiesForTSESLint(cloned);\n      return cloned;\n    }\n\n    cloneStringLiteral<\n      T extends N.EstreeLiteral | N.StringLiteral | N.Placeholder,\n    >(node: T): T {\n      if (node.type === \"Literal\") {\n        return this.cloneEstreeStringLiteral(node) as T;\n      }\n      return super.cloneStringLiteral(node);\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    // Override for TS-ESLint that does not allow optional AST properties\n    finishNode<T extends NodeType>(node: Undone<T>, type: T[\"type\"]): T {\n      const result = super.finishNode(node, type);\n      this.fillOptionalPropertiesForTSESLint(result);\n      return result;\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  // TODO: Remove this in Babel 8\n  bracketHashL: createToken(\"#[\", { beforeExpr, startsExpr }),\n  // TODO: Remove this in Babel 8\n  bracketBarL: createToken(\"[|\", { beforeExpr, startsExpr }),\n  bracketR: createToken(\"]\"),\n  // TODO: Remove this in Babel 8\n  bracketBarR: createToken(\"|]\"),\n  braceL: createToken(\"{\", { beforeExpr, startsExpr }),\n  // TODO: Remove this in Babel 8\n  braceBarL: createToken(\"{|\", { beforeExpr, startsExpr }),\n  // TODO: Remove this in Babel 8\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\n  // placeholder plugin\n  placeholder: createToken(\"%%\", { 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 }),\n  jsxTagStart: createToken(\"jsxTagStart\", { startsExpr }),\n  jsxTagEnd: createToken(\"jsxTagEnd\"),\n} as const;\n\nexport function tokenIsIdentifier(token: TokenType): boolean {\n  return token >= tt._as && token <= tt.placeholder;\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.placeholder;\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-\\u088f\\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\\u0c5c\\u0c5d\\u0c60\\u0c61\\u0c80\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbd\\u0cdc-\\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-\\ua7dc\\ua7f1-\\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-\\u1add\\u1ae0-\\u1aeb\\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,7,25,39,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,5,57,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,24,43,261,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,33,24,3,24,45,74,6,0,67,12,65,1,2,0,15,4,10,7381,42,31,98,114,8702,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,208,30,2,2,2,1,2,6,3,4,10,1,225,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,4381,3,5773,3,7472,16,621,2467,541,1507,4938,6,8489];\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,78,5,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,199,7,137,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,55,9,266,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,233,0,3,0,8,1,6,0,475,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_BASE) > 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 allowNewTarget() {\n    return (this.currentThisScopeFlags() & ScopeFlag.NEW_TARGET) > 0;\n  }\n  get inClass() {\n    return (this.currentThisScopeFlags() & ScopeFlag.CLASS_BASE) > 0;\n  }\n  get inClassAndNotInNonArrowFunction() {\n    const flags = this.currentThisScopeFlags();\n    return (\n      (flags & ScopeFlag.CLASS_BASE) > 0 &&\n      (flags & ScopeFlag.FUNCTION_BASE) === 0\n    );\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_BASE)) {\n        // function body, module body, class property initializers\n        return false;\n      }\n    }\n  }\n  get inNonArrowFunction() {\n    return (this.currentThisScopeFlags() & ScopeFlag.FUNCTION_BASE) > 0;\n  }\n  get inBareCaseStatement() {\n    return (this.currentScope().flags & ScopeFlag.SWITCH) > 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_BASE | 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) || 0;\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_BASE) &&\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", "/*:: 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 type { Undone } from \"../../parser/node.ts\";\nimport type { ClassWithMixin, IJSXParserMixin } from \"../jsx/index.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: ClassWithMixin<typeof Parser, IJSXParserMixin>) =>\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 | null,\n      N.FlowPredicate | 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      }\n      throw this.unexpected();\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      const body: N.Statement[] = (bodyNode.body = []);\n      this.expect(tt.braceL);\n      while (!this.match(tt.braceR)) {\n        const 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          body.push(super.parseImport(bodyNode));\n        } else {\n          this.expectContextual(\n            tt._declare,\n            FlowErrors.UnsupportedStatementInDeclareModule,\n          );\n          body.push(this.flowParseDeclare(bodyNode, true));\n        }\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.default = false;\n            delete node.exportKind;\n            return this.castNodeTo(\n              node as N.ExportNamedDeclaration,\n              \"DeclareExportDeclaration\",\n            );\n          } else {\n            return this.castNodeTo(\n              node as N.ExportAllDeclaration,\n              \"DeclareExportAllDeclaration\",\n            );\n          }\n        }\n      }\n\n      throw 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      this.castNodeTo(finished, \"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      this.castNodeTo(finished, \"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    // Parse in top level normal context if we are in a JSX context\n    flowInTopLevelContext<T>(cb: () => T): T {\n      if (this.curContext() !== tc.brace) {\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      } else {\n        return cb();\n      }\n    }\n\n    // Used when parsing type arguments from ES or JSX productions, where the first token\n    // has been created without state.inType. Thus we need to re-scan the lt token.\n    flowParseTypeParameterInstantiationInExpression():\n      | N.TypeParameterInstantiation\n      | undefined {\n      if (this.reScan_lt() !== tt.lt) return;\n      return this.flowParseTypeParameterInstantiation();\n    }\n\n    flowParseTypeParameterInstantiation(): N.TypeParameterInstantiation {\n      const node = this.startNode<N.TypeParameterInstantiation>();\n      const oldInType = this.state.inType;\n\n      this.state.inType = true;\n      node.params = [];\n      this.flowInTopLevelContext(() => {\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      });\n\n      this.state.inType = oldInType;\n      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\n      return this.finishNode(node, \"TypeParameterInstantiation\");\n    }\n\n    flowParseTypeParameterInstantiationCallOrNew(): N.TypeParameterInstantiation | null {\n      if (this.reScan_lt() !== tt.lt) return null;\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          throw this.unexpected();\n        case tt.num:\n          return this.parseLiteral(\n            this.state.value,\n            \"NumberLiteralTypeAnnotation\",\n          );\n\n        case tt.bigint:\n          return this.parseLiteral(\n            this.state.value,\n            \"BigIntLiteralTypeAnnotation\",\n          );\n\n        case tt._void:\n          this.next();\n          return this.finishNode(node, \"VoidTypeAnnotation\");\n\n        case tt._null:\n          this.next();\n          return this.finishNode(node, \"NullLiteralTypeAnnotation\");\n\n        case tt._this:\n          this.next();\n          return this.finishNode(node, \"ThisTypeAnnotation\");\n\n        case tt.star:\n          this.next();\n          return this.finishNode(node, \"ExistsTypeAnnotation\");\n\n        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      throw 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() as [\n          N.FlowType,\n          N.FlowPredicate,\n        ];\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 (this.isContextual(tt._enum)) {\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 (type === tt._enum || tokenIsFlowInterfaceOrTypeOrOpaque(type)) {\n        return !this.state.containsEsc;\n      }\n      return super.shouldParseExportDeclaration();\n    }\n\n    isExportDefaultSpecifier(): boolean {\n      const { type } = this.state;\n      if (type === tt._enum || tokenIsFlowInterfaceOrTypeOrOpaque(type)) {\n        return this.state.containsEsc;\n      }\n\n      return super.isExportDefaultSpecifier();\n    }\n\n    parseExportDefaultExpression() {\n      if (this.isContextual(tt._enum)) {\n        const node = this.startNode();\n        this.next();\n        return this.flowParseEnumDeclaration(node);\n      }\n      return super.parseExportDefaultExpression();\n    }\n\n    parseConditional(\n      expr: N.Expression,\n\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 (\n        this.state.noArrowParamsConversionAt.includes(\n          this.offsetToSourcePos(node.start),\n        )\n      ) {\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 (this.isContextual(tt._enum)) {\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 | null>\n        | ReadonlyArray<N.Expression | N.RestElement>,\n      isParenthesizedExpr?: boolean,\n    ):\n      | ReadonlyArray<N.Expression | N.SpreadElement | null>\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      isTuple: boolean,\n      refExpressionErrors?: ExpressionErrors | null,\n    ): N.ArrayExpression | N.TupleExpression {\n      const node = super.parseArrayLike(close, isTuple, refExpressionErrors);\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 (refExpressionErrors != null && !this.state.maybeInArrowParameters) {\n        this.toReferencedList(node.elements);\n      }\n\n      return node;\n    }\n\n    isValidLVal(\n      type: string,\n      disallowCallExpression: boolean,\n      isParenthesized: boolean,\n      binding: BindingFlag,\n    ) {\n      return (\n        type === \"TypeCastExpression\" ||\n        super.isValidLVal(\n          type,\n          disallowCallExpression,\n          isParenthesized,\n          binding,\n        )\n      );\n    }\n\n    // parse class property type annotations\n    parseClassProperty(node: N.ClassProperty): N.ClassProperty {\n      if (this.match(tt.colon)) {\n        node.typeAnnotation = this.flowParseTypeAnnotation();\n      }\n      return super.parseClassProperty(node);\n    }\n\n    parseClassPrivateProperty(\n      node: N.ClassPrivateProperty,\n    ): N.ClassPrivateProperty {\n      if (this.match(tt.colon)) {\n        node.typeAnnotation = this.flowParseTypeAnnotation();\n      }\n      return super.parseClassPrivateProperty(node);\n    }\n\n    // determine whether or not we're currently in the position where a class method would appear\n    isClassMethod(): boolean {\n      return this.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 fact 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 (\n        node.superClass &&\n        (this.match(tt.lt) ||\n          // handles `class extends C<<T>`\n          this.match(tt.bitShiftL))\n      ) {\n        if (process.env.BABEL_8_BREAKING) {\n          node.superTypeArguments =\n            this.flowParseTypeParameterInstantiationInExpression();\n        } else {\n          node.superTypeParameters =\n            this.flowParseTypeParameterInstantiationInExpression();\n        }\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<P extends N.Pattern>(\n      startLoc?: Position | null,\n      left?: P | null,\n    ): P | N.AssignmentPattern {\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 = this.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 = this.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\" | \"using\" | \"await using\",\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() as [\n            N.FlowType,\n            N.FlowPredicate,\n          ];\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 (\n        this.state.noArrowParamsConversionAt.includes(\n          this.offsetToSourcePos(node.start),\n        )\n      ) {\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(\n          this.offsetToSourcePos(node.start),\n        )\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 &&\n          !this.state.noArrowAt.includes(\n            this.sourceToOffsetPos(this.state.start),\n          ),\n      );\n    }\n\n    parseSubscripts(\n      base: N.Expression,\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();\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 =\n          this.flowParseTypeParameterInstantiationInExpression();\n        this.expect(tt.parenL);\n        node.arguments = this.parseCallExpressionArguments();\n        node.optional = true;\n        return this.finishCallExpression(node, /* optional */ true);\n      } else if (\n        !noCalls &&\n        this.shouldParseTypes() &&\n        (this.match(tt.lt) ||\n          // also handles `new C<<T>`\n          this.match(tt.bitShiftL))\n      ) {\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();\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        booleanMembers: [],\n        numberMembers: [],\n        stringMembers: [],\n        defaultedMembers: [],\n      };\n      let hasUnknownMembers = false;\n      while (!this.match(tt.braceR)) {\n        if (this.eat(tt.ellipsis)) {\n          hasUnknownMembers = true;\n          break;\n        }\n        const memberNode = this.startNode<N.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              // @ts-expect-error NodeAny not supported\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              // @ts-expect-error NodeAny not supported\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              // @ts-expect-error NodeAny not supported\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                  // @ts-expect-error NodeAny not supported\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    jsxParseOpeningElementAfterName(\n      node: N.JSXOpeningElement,\n    ): N.JSXOpeningElement {\n      if (this.shouldParseTypes()) {\n        if (this.match(tt.lt) || this.match(tt.bitShiftL)) {\n          node.typeArguments =\n            this.flowParseTypeParameterInstantiationInExpression();\n        }\n      }\n\n      return super.jsxParseOpeningElementAfterName(node);\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    // 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    maybeUnwrapTypeCastExpression(node: N.Node) {\n      return node.type === \"TypeCastExpression\" ? node.expression : node;\n    }\n  };\n", "const entities: { [name: string]: string } = {\n  // @ts-expect-error __proto__ is not an actual property: https://github.com/microsoft/TypeScript/issues/38385\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\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 * 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 type 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: 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", "// 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 { OptionFlags, 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 optionFlags: OptionFlags;\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  declare startIndex: number;\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  sourceToOffsetPos(sourcePos: number) {\n    return sourcePos + this.startIndex;\n  }\n\n  offsetToSourcePos(offsetPos: number) {\n    return offsetPos - this.startIndex;\n  }\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 } 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(node: Undone<Node>, comments: Array<Comment>) {\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 | null>,\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 node = commentWS.containingNode!;\n      const commentStart = commentWS.start;\n      if (\n        this.input.charCodeAt(this.offsetToSourcePos(commentStart) - 1) ===\n        charCodes.comma\n      ) {\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 \"ImportExpression\":\n            adjustInnerComments(\n              node,\n              [node.source, node.options ?? null],\n              commentWS,\n            );\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          case \"TSEnumDeclaration\":\n            if (!process.env.BABEL_8_BREAKING) {\n              adjustInnerComments(node, node.members!, commentWS);\n            } else {\n              setInnerComments(node, comments);\n            }\n            break;\n          case \"TSEnumBody\":\n            adjustInnerComments(node, node.members, 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  /**\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 type { OptionsWithDefaults } 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 = 0;\n\n  @bit accessor strict = false;\n\n  startIndex!: number;\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({\n    strictMode,\n    sourceType,\n    startIndex,\n    startLine,\n    startColumn,\n  }: OptionsWithDefaults): void {\n    this.strict =\n      strictMode === false\n        ? false\n        : strictMode === true\n          ? true\n          : sourceType === \"module\";\n\n    this.startIndex = startIndex;\n    this.curLine = startLine;\n    this.lineStart = -startColumn;\n    this.startLoc = this.endLoc = new Position(\n      startLine,\n      startColumn,\n      startIndex,\n    );\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 | null;\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 = null;\n  // this is initialized when generating the second token.\n  lastTokStartLoc: Position | null = 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(\n      this.curLine,\n      this.pos - this.lineStart,\n      this.pos + this.startIndex,\n    );\n  }\n\n  clone(): State {\n    const state = new State();\n    state.flags = this.flags;\n    state.startIndex = this.startIndex;\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 | null;\n  curLine: number;\n  lineStart: number;\n  curPosition: State[\"curPosition\"];\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 { OptionsWithDefaults } from \"../options.ts\";\nimport { OptionFlags } 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    const startIndex = state.startIndex || 0;\n    this.type = state.type;\n    this.value = state.value;\n    this.start = startIndex + state.start;\n    this.end = startIndex + 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: OptionsWithDefaults, 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.optionFlags & OptionFlags.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.lookaheadCharCodeSince(this.state.pos);\n  }\n\n  lookaheadCharCodeSince(pos: number): number {\n    return this.input.charCodeAt(this.nextTokenStartSince(pos));\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: this.sourceToOffsetPos(start),\n      end: this.sourceToOffsetPos(end + commentEnd.length),\n      // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n      loc: new SourceLocation(startLoc!, this.state.curPosition()),\n    };\n    if (this.optionFlags & OptionFlags.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: this.sourceToOffsetPos(start),\n      end: this.sourceToOffsetPos(end),\n      // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n      loc: new SourceLocation(startLoc!, this.state.curPosition()),\n    };\n    if (this.optionFlags & OptionFlags.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.Comment[] | null =\n      this.optionFlags & OptionFlags.AttachComment ? [] : null;\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                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                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.optionFlags & OptionFlags.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                comments?.push(comment);\n              }\n            } else {\n              break loop;\n            }\n          } else if (\n            ch === charCodes.lessThan &&\n            !this.inModule &&\n            this.optionFlags & OptionFlags.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                comments?.push(comment);\n              }\n            } else {\n              break loop;\n            }\n          } else {\n            break loop;\n          }\n      }\n    }\n\n    // @ts-expect-error comparing undefined and number\n    if (comments?.length > 0) {\n      const end = this.state.pos;\n      const commentWhitespace: CommentWhitespace = {\n        start: this.sourceToOffsetPos(spaceStart),\n        end: this.sourceToOffsetPos(end),\n        comments: 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      !process.env.BABEL_8_BREAKING &&\n      (next === charCodes.leftCurlyBrace ||\n        (next === charCodes.leftSquareBracket &&\n          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 start = this.state.pos;\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.slice(start, this.state.pos).replace(/[_n]/g, \"\");\n      this.finishToken(tt.bigint, str);\n      return;\n    }\n\n    this.finishToken(tt.num, val);\n  }\n\n  // Read an integer, octal integer, or floating-point number.\n\n  readNumber(startsWithDot: boolean): void {\n    const start = this.state.pos;\n    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        this.sourceToOffsetPos(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.optionFlags & OptionFlags.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): any {\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[]): any {\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  errorBuilder(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.optionFlags & OptionFlags.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.errorBuilder(\n      Errors.NumericSeparatorInEscapeSequence,\n    ),\n    unexpectedNumericSeparator: this.errorBuilder(\n      Errors.UnexpectedNumericSeparator,\n    ),\n  };\n\n  errorHandlers_readCodePoint: CodePointErrorHandlers = {\n    ...this.errorHandlers_readInt,\n    invalidEscapeSequence: this.errorBuilder(Errors.InvalidEscapeSequence),\n    invalidCodePoint: this.errorBuilder(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.errorBuilder(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\";\nimport type { Undone } from \"../parser/node.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: Undone<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", "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\";\nimport { OptionFlags } from \"../options.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    if (this.input.startsWith(name, nameStart)) {\n      const nextCh = this.input.charCodeAt(nameStart + name.length);\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.offsetToSourcePos(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> | null>(\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 as T) => {\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: 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      voidPatternLoc,\n    } = refExpressionErrors;\n\n    const hasErrors =\n      !!shorthandAssignLoc ||\n      !!doubleProtoLoc ||\n      !!optionalParametersLoc ||\n      !!privateKeyLoc ||\n      !!voidPatternLoc;\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    if (voidPatternLoc != null) {\n      this.raise(Errors.InvalidCoverDiscardElement, voidPatternLoc);\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 (\n      this.inModule ||\n      this.optionFlags & OptionFlags.AllowAwaitOutsideFunction\n    ) {\n      paramFlags |= ParamKind.PARAM_AWAIT;\n    }\n    if (this.optionFlags & OptionFlags.AllowYieldOutsideFunction) {\n      paramFlags |= ParamKind.PARAM_YIELD;\n    }\n    // The inModule flag ensures that the module block within a CommonJS source\n    // will be treated as an ES module.\n    const isCommonJS = !this.inModule && this.options.sourceType === \"commonjs\";\n    if (\n      isCommonJS ||\n      this.optionFlags & OptionFlags.AllowReturnOutsideFunction\n    ) {\n      paramFlags |= ParamKind.PARAM_RETURN;\n    }\n    this.prodParam.enter(paramFlags);\n    let scopeFlags = isCommonJS ? ScopeFlag.FUNCTION : ScopeFlag.PROGRAM;\n    if (this.optionFlags & OptionFlags.AllowNewTargetOutsideFunction) {\n      scopeFlags |= ScopeFlag.NEW_TARGET;\n    }\n    if (process.env.BABEL_8_BREAKING) {\n      if (this.optionFlags & OptionFlags.AllowSuperOutsideMethod) {\n        scopeFlags |= ScopeFlag.SUPER | ScopeFlag.DIRECT_SUPER;\n      }\n    }\n    this.scope.enter(scopeFlags);\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 null\n *\n * Types of ExpressionErrors:\n *\n * - **shorthandAssignLoc**: track initializer `=` position\n * - **doubleProtoLoc**: track the duplicate `__proto__` key position\n * - **privateKeyLoc**: 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  voidPatternLoc: Position | undefined | null = null;\n}\n", "import UtilParser from \"./util.ts\";\nimport { SourceLocation, type Position } from \"../util/location.ts\";\nimport type {\n  Comment,\n  Node as NodeType,\n  NodeBase,\n  EstreeLiteral,\n  Identifier,\n  Placeholder,\n  StringLiteral,\n} from \"../types.ts\";\nimport { OptionFlags } from \"../options.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?.optionFlags & OptionFlags.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\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.optionFlags & OptionFlags.Ranges) node.range![1] = endLoc.index;\n    if (this.optionFlags & OptionFlags.AttachComment) {\n      this.processComment(node as T);\n    }\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.optionFlags & OptionFlags.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.optionFlags & OptionFlags.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  castNodeTo<T extends NodeType[\"type\"]>(\n    node: NodeType,\n    type: T,\n  ): Extract<NodeType, { type: T }> {\n    node.type = type;\n    return node as Extract<NodeType, { type: T }>;\n  }\n\n  cloneIdentifier<T extends Identifier | Placeholder>(node: T): T {\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, 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.name = name;\n    if (node.extra) cloned.extra = node.extra;\n    return cloned;\n  }\n\n  cloneStringLiteral<T extends StringLiteral | EstreeLiteral | Placeholder>(\n    node: T,\n  ): T {\n    const { type, start, end, loc, range, extra } = 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.value = (node as StringLiteral).value;\n    return cloned;\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  VoidPattern,\n} from \"../types.ts\";\nimport type { 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\";\nimport { OptionFlags } from \"../options.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  ): Expression;\n\n  abstract parseMaybeAssignAllowIn(\n    refExpressionErrors?: ExpressionErrors | null,\n    afterLeftParse?: Function,\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 !== \"CallExpression\" &&\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      case \"VoidPattern\":\n        break;\n\n      case \"ObjectExpression\":\n        this.castNodeTo(node, \"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        this.castNodeTo(node, \"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        this.castNodeTo(node, \"AssignmentPattern\");\n        // @ts-expect-error delete non-optional properties\n        delete node.operator;\n        if (node.left.type === \"VoidPattern\") {\n          this.raise(Errors.VoidPatternInitializer, node.left);\n        }\n        this.toAssignable(node.left, isLHS);\n        break;\n\n      case \"ParenthesizedExpression\":\n        /*::invariant (parenthesized !== undefined) */\n        // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\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      this.castNodeTo(prop, \"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: (\n      | Expression\n      | SpreadElement\n      | RestElement\n      | VoidPattern\n      | AssignmentPattern\n      | null\n    )[],\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      this.toAssignableListItem(\n        exprList as (\n          | Expression\n          | SpreadElement\n          | RestElement\n          | VoidPattern\n          | AssignmentPattern\n        )[],\n        i,\n        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  toAssignableListItem(\n    exprList: (\n      | Expression\n      | SpreadElement\n      | RestElement\n      | VoidPattern\n      | AssignmentPattern\n    )[],\n    index: number,\n    isLHS: boolean,\n  ): void {\n    const node = exprList[index];\n    if (node.type === \"SpreadElement\") {\n      this.castNodeTo(node, \"RestElement\");\n      const arg = node.argument;\n      this.checkToRestConversion(arg, /* allowPattern */ true);\n      this.toAssignable(arg, isLHS);\n    } else {\n      this.toAssignable(node, isLHS);\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      case \"VoidPattern\":\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<\n          Expression | SpreadElement | VoidPattern | AssignmentPattern | null\n        >\n      | ReadonlyArray<\n          Expression | RestElement | VoidPattern | AssignmentPattern | null\n        >,\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    isParenthesizedExpr?: boolean,\n  ):\n    | ReadonlyArray<\n        Expression | SpreadElement | VoidPattern | AssignmentPattern | null\n      >\n    | ReadonlyArray<\n        Expression | RestElement | VoidPattern | AssignmentPattern | null\n      > {\n    return exprList;\n  }\n\n  toReferencedListDeep(\n    exprList:\n      | ReadonlyArray<\n          Expression | SpreadElement | VoidPattern | AssignmentPattern | null\n        >\n      | ReadonlyArray<\n          Expression | RestElement | VoidPattern | AssignmentPattern | null\n        >,\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-BindingRestElement\n  parseRestBinding(this: Parser): RestElement {\n    const node = this.startNode<RestElement>();\n    this.next(); // eat `...`\n    const argument = this.parseBindingAtom();\n    if (argument.type === \"VoidPattern\") {\n      this.raise(Errors.UnexpectedVoidPattern, argument);\n    }\n    node.argument = argument;\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        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      case tt._void:\n        return this.parseVoidPattern(null);\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.ALLOW_EMPTY,\n  ): Array<Pattern | null>;\n  parseBindingList(\n    this: Parser,\n    close: TokenType,\n    closeCharCode: (typeof charCodes)[keyof typeof charCodes],\n    flags: ParseBindingListFlags.IS_FUNCTION_PARAMS,\n  ): Array<Pattern | TSParameterProperty>;\n  parseBindingList(\n    this: Parser,\n    close: TokenType,\n    closeCharCode: (typeof charCodes)[keyof typeof charCodes],\n    flags: ParseBindingListFlags,\n  ): Array<Pattern | TSParameterProperty | null> {\n    const allowEmpty = flags & ParseBindingListFlags.ALLOW_EMPTY;\n\n    const elts: Array<Pattern | TSParameterProperty | null> = [];\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 (flags & ParseBindingListFlags.IS_FUNCTION_PARAMS) {\n          if (this.match(tt.at) && this.hasPlugin(\"decorators\")) {\n            this.raise(\n              Errors.UnsupportedParameterDecorator,\n              this.state.startLoc,\n            );\n          }\n          // invariant: hasPlugin(\"decorators-legacy\")\n          while (this.match(tt.at)) {\n            decorators.push(this.parseDecorator());\n          }\n        }\n        elts.push(this.parseBindingElement(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    if (this.hasPlugin(\"discardBinding\") && this.match(tt._void)) {\n      prop.argument = this.parseVoidPattern(null);\n      this.raise(Errors.UnexpectedVoidPattern, prop.argument);\n    } else {\n      // Don't use parseRestBinding() as we only allow Identifier here.\n      prop.argument = this.parseIdentifier();\n    }\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  // https://tc39.es/ecma262/#prod-BindingElement\n  parseBindingElement(\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    if (decorators.length) {\n      left.decorators = decorators;\n      this.resetStartLocationFromNode(left, decorators[0]);\n    }\n    const elt = this.parseMaybeDefault(left.loc.start, left);\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<P extends Pattern>(\n    this: Parser,\n    startLoc?: Position | null,\n    left?: P | null,\n  ): P | AssignmentPattern;\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    if (left.type === \"VoidPattern\") {\n      this.raise(Errors.VoidPatternInitializer, left);\n    }\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 disallowCallExpression Whether to disallow `CallExpression` as an LVal.\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    disallowCallExpression: boolean,\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      case \"VoidPattern\":\n        return true;\n      case \"CallExpression\":\n        if (\n          !disallowCallExpression &&\n          !this.state.strict &&\n          this.optionFlags & OptionFlags.AnnexB\n        ) {\n          return true;\n        }\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   * @param disallowCallExpression Whether to disallow `CallExpression` as an LVal.\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    disallowCallExpression: 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    } else if (type === \"VoidPattern\" && ancestor.type === \"CatchClause\") {\n      this.raise(Errors.VoidPatternCatchClauseParam, expression);\n    }\n\n    const unwrappedExpression = unwrapParenthesizedExpression(expression);\n    disallowCallExpression ||=\n      unwrappedExpression.type === \"CallExpression\" &&\n      (unwrappedExpression.callee.type === \"Import\" ||\n        unwrappedExpression.callee.type === \"Super\");\n    const validity = this.isValidLVal(\n      type,\n      disallowCallExpression,\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            true,\n          );\n        }\n      }\n    } else if (val) {\n      this.checkLVal(\n        val,\n        nextAncestor,\n        binding,\n        checkClashes,\n        strictModeChanged,\n        isParenthesizedExpression,\n        disallowCallExpression,\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 type { Undone } from \"../../parser/node.ts\";\nimport type { ClassWithMixin, IJSXParserMixin } from \"../jsx/index.ts\";\nimport { ParseBindingListFlags } from \"../../parser/lval.ts\";\nimport { OptionFlags } from \"../../options.ts\";\nimport { isIdentifierChar, isIdentifierStart } from \"../../util/identifier.ts\";\n\nconst keywordAndTSRelationalOperator = /in(?:stanceof)?|as|satisfies/y;\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    modifier,\n  }: {\n    modifier: N.Accessibility;\n  }) => `Accessibility modifier already seen: '${modifier}'.`,\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  InvalidHeritageClauseType: ({ token }: { token: \"extends\" | \"implements\" }) =>\n    `'${token}' list can only include identifiers or qualified-names with optional type arguments.`,\n  InvalidModifierOnAwaitUsingDeclaration: (modifier: TsModifier) =>\n    `'${modifier}' modifier cannot appear on an await using declaration.`,\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\n  InvalidModifierOnUsingDeclaration: (modifier: TsModifier) =>\n    `'${modifier}' modifier cannot appear on a using declaration.`,\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  NonClassMethodPropertyHasAbstractModifier:\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  UsingDeclarationInAmbientContext: (kind: \"using\" | \"await using\") =>\n    `'${kind}' declarations are not allowed in ambient contexts.`,\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\nfunction tsIsEntityName(\n  node: N.Expression,\n): node is N.MemberExpression | N.Identifier | N.TsInstantiationExpression {\n  if (node.extra?.parenthesized) {\n    return false;\n  }\n  switch (node.type) {\n    case \"Identifier\":\n      return true;\n    case \"MemberExpression\":\n      return !node.computed && tsIsEntityName(node.object);\n    case \"TSInstantiationExpression\":\n      return tsIsEntityName(node.expression);\n    default:\n      return false;\n  }\n}\n\nexport const enum tsParseEntityNameFlags {\n  NONE = 0b00,\n  ALLOW_RESERVED_WORDS = 0b01,\n  LEADING_THIS_AS_IDENTIFIER = 0b10,\n}\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      hasSeenStaticModifier?: boolean | null,\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 (hasSeenStaticModifier && this.match(tt._static)) {\n          return undefined;\n        }\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          modified.static,\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        if (process.env.BABEL_8_BREAKING) {\n          // Consume as an non-conditional type so that we can recover from this error\n          node.argument = this.tsParseNonConditionalType() as any;\n        } else {\n          node.argument = super.parseExprAtom() as any;\n        }\n      } else {\n        if (process.env.BABEL_8_BREAKING) {\n          node.argument = this.tsParseLiteralTypeNode();\n        } else {\n          // @ts-ignore(Babel 7 vs Babel 8) Babel 7 AST\n          node.argument = this.parseStringLiteral(this.state.value);\n        }\n      }\n      if (this.eat(tt.comma)) {\n        node.options = this.tsParseImportTypeOptions();\n      } else {\n        node.options = null;\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          tsParseEntityNameFlags.ALLOW_RESERVED_WORDS |\n            tsParseEntityNameFlags.LEADING_THIS_AS_IDENTIFIER,\n        );\n      }\n      if (this.match(tt.lt)) {\n        if (process.env.BABEL_8_BREAKING) {\n          node.typeArguments = this.tsParseTypeArguments();\n        } else {\n          node.typeParameters = this.tsParseTypeArguments();\n        }\n      }\n      return this.finishNode(node, \"TSImportType\");\n    }\n\n    tsParseImportTypeOptions(): N.ObjectExpression {\n      const node = this.startNode<N.ObjectExpression>();\n      this.expect(tt.braceL);\n      const withProperty = this.startNode<N.ObjectProperty>();\n      if (this.isContextual(tt._with)) {\n        withProperty.method = false;\n        withProperty.key = this.parseIdentifier(true);\n        withProperty.computed = false;\n        withProperty.shorthand = false;\n      } else {\n        this.unexpected(null, tt._with);\n      }\n      this.expect(tt.colon);\n      withProperty.value = this.tsParseImportTypeWithPropertyValue();\n      node.properties = [this.finishObjectProperty(withProperty)];\n      this.eat(tt.comma);\n      this.expect(tt.braceR);\n      return this.finishNode(node, \"ObjectExpression\");\n    }\n\n    tsParseImportTypeWithPropertyValue(): N.ObjectExpression {\n      const node = this.startNode<N.ObjectExpression>();\n      const properties = [];\n      this.expect(tt.braceL);\n      while (!this.match(tt.braceR)) {\n        const type = this.state.type;\n        if (tokenIsIdentifier(type) || type === tt.string) {\n          properties.push(super.parsePropertyDefinition(null));\n        } else {\n          this.unexpected();\n        }\n        this.eat(tt.comma);\n      }\n      node.properties = properties;\n      this.next(); // eat }\n      return this.finishNode(node, \"ObjectExpression\");\n    }\n\n    tsParseEntityName(flags: tsParseEntityNameFlags): N.TsEntityName {\n      let entity: N.TsEntityName;\n      if (\n        flags & tsParseEntityNameFlags.ALLOW_RESERVED_WORDS &&\n        this.match(tt._this)\n      ) {\n        if (flags & tsParseEntityNameFlags.LEADING_THIS_AS_IDENTIFIER) {\n          entity = this.parseIdentifier(true);\n        } else {\n          const node = this.startNode<N.ThisExpression>();\n          this.next();\n          entity = this.finishNode(node, \"ThisExpression\");\n        }\n      } else {\n        entity = this.parseIdentifier(\n          !!(flags & tsParseEntityNameFlags.ALLOW_RESERVED_WORDS),\n        );\n      }\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(\n          !!(flags & tsParseEntityNameFlags.ALLOW_RESERVED_WORDS),\n        );\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        tsParseEntityNameFlags.ALLOW_RESERVED_WORDS,\n      );\n      if (!this.hasPrecedingLineBreak() && this.match(tt.lt)) {\n        if (process.env.BABEL_8_BREAKING) {\n          node.typeArguments = this.tsParseTypeArguments();\n        } else {\n          node.typeParameters = this.tsParseTypeArguments();\n        }\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        if (process.env.BABEL_8_BREAKING) {\n          node.exprName = this.tsParseEntityName(\n            tsParseEntityNameFlags.ALLOW_RESERVED_WORDS,\n          );\n        } else {\n          node.exprName = this.tsParseEntityName(\n            tsParseEntityNameFlags.ALLOW_RESERVED_WORDS |\n              tsParseEntityNameFlags.LEADING_THIS_AS_IDENTIFIER,\n          );\n        }\n      }\n      if (!this.hasPrecedingLineBreak() && this.match(tt.lt)) {\n        if (process.env.BABEL_8_BREAKING) {\n          node.typeArguments = this.tsParseTypeArguments();\n        } else {\n          node.typeParameters = this.tsParseTypeArguments();\n        }\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      | N.RestElement\n      | N.ObjectPattern\n      | N.ArrayPattern\n      | N.VoidPattern\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: Undone<N.TsPropertySignature | N.TsMethodSignature>,\n      readonly: boolean,\n    ): N.TsPropertySignature | N.TsMethodSignature {\n      if (this.eat(tt.question)) node.optional = true;\n\n      if (this.match(tt.parenL) || this.match(tt.lt)) {\n        if (readonly) {\n          this.raise(TSErrors.ReadonlyForMethodSignature, node);\n        }\n        const method = node as Undone<N.TsMethodSignature>;\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 = node as Undone<N.TsPropertySignature>;\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        // Allow < here so that we can recover from get key<T> later\n        if (!this.match(tt.parenL) && !this.match(tt.lt)) {\n          this.unexpected(null, tt.parenL);\n        }\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 restStartLoc = this.state.startLoc;\n\n      const rest = this.eat(tt.ellipsis);\n      const { startLoc } = this.state;\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 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.startNodeAt<N.TsNamedTupleMember>(startLoc);\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.startNodeAt<N.TsNamedTupleMember>(startLoc);\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.startNodeAt<N.TsOptionalType>(startLoc);\n        optionalTypeNode.typeAnnotation = type;\n        type = this.finishNode(optionalTypeNode, \"TSOptionalType\");\n      }\n\n      if (rest) {\n        const restNode = this.startNodeAt<N.TsRestType>(restStartLoc);\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.TsTemplateLiteralType | N.TsLiteralType {\n      if (process.env.BABEL_8_BREAKING) {\n        const startLoc = this.state.startLoc;\n        let curElt = this.parseTemplateElement(false);\n        const quasis = [curElt];\n        if (curElt.tail) {\n          const node = this.startNodeAt<N.TsLiteralType>(startLoc);\n          const literal = this.startNodeAt<N.TemplateLiteral>(startLoc);\n          literal.expressions = [];\n          literal.quasis = quasis;\n          node.literal = this.finishNode(literal, \"TemplateLiteral\");\n          return this.finishNode(node, \"TSLiteralType\");\n        } else {\n          const substitutions: N.TsType[] = [];\n          while (!curElt.tail) {\n            substitutions.push(this.tsParseType());\n            this.readTemplateContinuation();\n            quasis.push((curElt = this.parseTemplateElement(false)));\n          }\n          const node = this.startNodeAt<N.TsTemplateLiteralType>(startLoc);\n          node.types = substitutions;\n          node.quasis = quasis;\n          return this.finishNode(node, \"TSTemplateLiteralType\");\n        }\n      } else {\n        const node = this.startNode<N.TsLiteralType>();\n        node.literal = super.parseTemplate(false);\n        return this.finishNode(node, \"TSLiteralType\");\n      }\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            node.literal = this.parseMaybeUnary() as N.UnaryExpression;\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 (\n              !(this.optionFlags & OptionFlags.CreateParenthesizedExpressions)\n            ) {\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      throw this.unexpected();\n    }\n\n    tsParseArrayTypeOrHigher(): N.TsType {\n      const { startLoc } = this.state;\n      let type = this.tsParseNonArrayType();\n      while (!this.hasPrecedingLineBreak() && this.eat(tt.bracketL)) {\n        if (this.match(tt.bracketR)) {\n          const node = this.startNodeAt<N.TsArrayType>(startLoc);\n          node.elementType = type;\n          this.expect(tt.bracketR);\n          type = this.finishNode(node, \"TSArrayType\");\n        } else {\n          const node = this.startNodeAt<N.TsIndexedAccessType>(startLoc);\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.isLookaheadContextual(\"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          if (process.env.BABEL_8_BREAKING) {\n            const expression = super.parseExprSubscripts();\n            if (!tsIsEntityName(expression)) {\n              this.raise(\n                TSErrors.InvalidHeritageClauseType,\n                expression.loc.start,\n                { token },\n              );\n            }\n            const nodeType =\n              token === \"extends\" ? \"TSInterfaceHeritage\" : \"TSClassImplements\";\n            if (expression.type === \"TSInstantiationExpression\") {\n              // @ts-expect-error cast TSInstantiationExpression to TSInterfaceHeritage/TSClassImplements\n              expression.type = nodeType;\n              return expression;\n            }\n            const node = this.startNodeAtNode<\n              N.TSInterfaceHeritage | N.TSClassImplements\n            >(expression);\n            node.expression = expression;\n            // The last element can not form a TSInstantiationExpression because of the bail condition in\n            // `parseSubscript`, in this case we have to parse type arguments again\n            if (this.match(tt.lt) || this.match(tt.bitShiftL)) {\n              node.typeArguments = this.tsParseTypeArgumentsInExpression();\n            }\n            return this.finishNode(node, nodeType);\n          } else {\n            const node = this.startNode<\n              N.TSInterfaceHeritage | N.TSClassImplements\n            >();\n            // @ts-expect-error Babel 7 vs Babel 8\n            node.expression = this.tsParseEntityName(\n              tsParseEntityNameFlags.ALLOW_RESERVED_WORDS |\n                tsParseEntityNameFlags.LEADING_THIS_AS_IDENTIFIER,\n            );\n            if (this.match(tt.lt)) {\n              // @ts-expect-error Babel 7 vs Babel 8\n              node.typeParameters = this.tsParseTypeArguments();\n            }\n\n            return this.finishNode(\n              node,\n              // @ts-expect-error Babel 7 vs Babel 8\n              \"TSExpressionWithTypeArguments\",\n            );\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: Undone<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.lookaheadCharCode() !== charCodes.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    // Parse in top level normal context if we are in a JSX context\n    tsInTopLevelContext<T>(cb: () => T): T {\n      if (this.curContext() !== tc.brace) {\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      } else {\n        return cb();\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      if (process.env.BABEL_8_BREAKING) {\n        node.body = this.tsParseEnumBody();\n      } else {\n        this.expect(tt.braceL);\n        node.members = this.tsParseDelimitedList(\n          \"EnumMembers\",\n          this.tsParseEnumMember.bind(this),\n        );\n        this.expect(tt.braceR);\n      }\n      return this.finishNode(node, \"TSEnumDeclaration\");\n    }\n\n    tsParseEnumBody(): N.TsEnumBody {\n      const node = this.startNode<N.TsEnumBody>();\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, \"TSEnumBody\");\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 = process.env.BABEL_8_BREAKING\n        ? this.tsParseEntityName(tsParseEntityNameFlags.ALLOW_RESERVED_WORDS)\n        : this.parseIdentifier();\n\n      if (\n        process.env.BABEL_8_BREAKING ? node.id.type === \"Identifier\" : !nested\n      ) {\n        // @ts-expect-error checked above\n        this.checkIdentifier(node.id, BindingFlag.TYPE_TS_NAMESPACE);\n      }\n\n      if (!process.env.BABEL_8_BREAKING && 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: Undone<N.TsModuleDeclaration>,\n    ): N.TsModuleDeclaration {\n      if (this.isContextual(tt._global)) {\n        node.kind = \"global\";\n        if (!process.env.BABEL_8_BREAKING) {\n          node.global = true;\n        }\n        node.id = this.parseIdentifier();\n      } else if (this.match(tt.string)) {\n        node.kind = \"module\";\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      if (!process.env.BABEL_8_BREAKING) {\n        node.isExport = isExport || false;\n      }\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(tsParseEntityNameFlags.NONE);\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(node: any) {\n      if (this.isLineTerminator()) {\n        return;\n      }\n      const startType = this.state.type;\n      return this.tsInAmbientContext(() => {\n        switch (startType) {\n          case tt._function:\n            node.declare = true;\n            return super.parseFunctionStatement(\n              node,\n              /* async */ false,\n              /* isHangingDeclaration */ false,\n            );\n          case tt._class:\n            // While this is also set by tsTryParseDeclare, we need to set it\n            // before parsing the class declaration to know how to register it in the scope.\n            node.declare = true;\n            return this.parseClass(\n              node as Undone<N.ClassDeclaration>,\n              /* isStatement */ true,\n              /* optionalId */ false,\n            );\n          case tt._enum:\n            return this.tsParseEnumDeclaration(node, { declare: true });\n          case tt._global:\n            return this.tsParseAmbientExternalModuleDeclaration(node);\n          case tt._let:\n            if (this.state.containsEsc) {\n              return;\n            }\n          // fallthrough\n          case tt._const:\n          case tt._var:\n            if (!this.match(tt._const) || !this.isLookaheadContextual(\"enum\")) {\n              node.declare = true;\n              return this.parseVarStatement(node, this.state.value, true);\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(node, {\n              const: true,\n              declare: true,\n            });\n          case tt._using:\n            if (this.isUsing()) {\n              this.raise(\n                TSErrors.InvalidModifierOnUsingDeclaration,\n                this.state.startLoc,\n                \"declare\",\n              );\n              node.declare = true;\n              return this.parseVarStatement(node, \"using\", true);\n            }\n            break;\n          case tt._await:\n            if (this.isAwaitUsing()) {\n              this.raise(\n                TSErrors.InvalidModifierOnAwaitUsingDeclaration,\n                this.state.startLoc,\n                \"declare\",\n              );\n              node.declare = true;\n              this.next(); // eat 'await'\n              return this.parseVarStatement(node, \"await using\", true);\n            }\n            break;\n          case tt._interface: {\n            const result = this.tsParseInterfaceDeclaration(node, {\n              declare: true,\n            });\n            if (result) return result;\n          }\n          // fallthrough\n          default:\n            if (tokenIsIdentifier(startType)) {\n              return this.tsParseDeclaration(\n                node,\n                this.state.type,\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 | null | undefined {\n      return this.tsParseDeclaration(\n        this.startNode(),\n        this.state.type,\n        /* next */ true,\n        /* decorators */ null,\n      );\n    }\n\n    // Common to tsTryParseDeclare and tsTryParseExportDeclaration.\n    tsParseDeclaration(\n      node: any,\n      type: number,\n      next: boolean,\n      decorators: N.Decorator[] | null,\n    ):\n      | N.ClassDeclaration\n      | N.TsInterfaceDeclaration\n      | N.TsTypeAliasDeclaration\n      | N.TsModuleDeclaration\n      | null\n      | undefined {\n      // no declaration apart from enum can be followed by a line break.\n      switch (type) {\n        case tt._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 tt._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              node.kind = \"module\";\n              return this.tsParseModuleOrNamespaceDeclaration(node);\n            }\n          }\n          break;\n\n        case tt._namespace:\n          if (\n            this.tsCheckLineTerminator(next) &&\n            tokenIsIdentifier(this.state.type)\n          ) {\n            node.kind = \"namespace\";\n            return this.tsParseModuleOrNamespaceDeclaration(node);\n          }\n          break;\n\n        case tt._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 | null =\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 or JSX productions, where the first token\n    // has been created without state.inType. Thus we need to re-scan 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        this.tsInTopLevelContext(() => {\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    parseBindingElement(\n      flags: ParseBindingListFlags,\n      decorators: N.Decorator[],\n    ): N.Pattern | N.TSParameterProperty {\n      // Store original location to include decorators/modifiers in range\n      const startLoc = decorators.length\n        ? decorators[0].loc.start\n        : 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(\n      items: Array<N.Expression | N.SpreadElement | null>,\n    ) {\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 | null>,\n      // eslint-disable-next-line @typescript-eslint/no-unused-vars\n      isInParens?: boolean,\n    ): Array<N.Expression | 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      isTuple: boolean,\n      refExpressionErrors?: ExpressionErrors | null,\n    ): N.ArrayExpression | N.TupleExpression {\n      const node = super.parseArrayLike(close, isTuple, refExpressionErrors);\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              state.stop = true;\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            if (process.env.BABEL_8_BREAKING) {\n              result.typeArguments = typeArguments;\n            } else {\n              result.typeParameters = typeArguments;\n            }\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            node.arguments = this.parseCallExpressionArguments();\n\n            // Handles invalid case: `f<T>(a:b)`\n            this.tsCheckForInvalidTypeCasts(node.arguments);\n\n            if (process.env.BABEL_8_BREAKING) {\n              node.typeArguments = typeArguments;\n            } else {\n              node.typeParameters = typeArguments;\n            }\n\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          if (process.env.BABEL_8_BREAKING) {\n            node.typeArguments = typeArguments;\n          } else {\n            node.typeParameters = typeArguments;\n          }\n          return this.finishNode(node, \"TSInstantiationExpression\");\n        });\n\n        if (missingParenErrorLoc) {\n          this.unexpected(missingParenErrorLoc, tt.parenL);\n        }\n\n        if (result) {\n          if (result.type === \"TSInstantiationExpression\") {\n            if (\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            if (!this.match(tt.dot) && !this.match(tt.questionDot)) {\n              // If TSInstantiationExpression is not followed by . / ?.,\n              // it must be the end of a subscript chain. Note that `(` already forms\n              // call expression arguments\n              result.expression = super.stopParseSubscript(base, state);\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        if (process.env.BABEL_8_BREAKING) {\n          node.typeArguments = callee.typeArguments;\n        } else {\n          node.typeParameters = callee.typeParameters;\n        }\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        const nodeImportEquals = process.env.BABEL_8_BREAKING\n          ? this.startNode<N.TsImportEqualsDeclaration>()\n          : (node as Undone<N.TsImportEqualsDeclaration>);\n        this.next(); // eat `tt._import`\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        const declaration = this.tsParseImportEqualsDeclaration(\n          nodeImportEquals,\n          maybeDefaultIdentifier,\n          /* isExport */ true,\n        );\n        if (process.env.BABEL_8_BREAKING) {\n          (node as Undone<N.ExportNamedDeclaration>).attributes = [];\n          (node as Undone<N.ExportNamedDeclaration>).declaration = declaration;\n          (node as Undone<N.ExportNamedDeclaration>).exportKind = \"value\";\n          (node as Undone<N.ExportNamedDeclaration>).source = null;\n          (node as Undone<N.ExportNamedDeclaration>).specifiers = [];\n          return this.finishNode(node, \"ExportNamedDeclaration\");\n        } else {\n          return declaration;\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.isLookaheadContextual(\"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\" | \"await 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      // If node.declare is true, the error has already been raised in tsTryParseDeclare.\n      if (!node.declare && (kind === \"using\" || kind === \"await using\")) {\n        this.raiseOverwrite(\n          TSErrors.UsingDeclarationInAmbientContext,\n          node,\n          kind,\n        );\n        return declaration;\n      }\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 === \"var\" || kind === \"let\" || !!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.state.containsEsc) {\n        switch (this.state.type) {\n          case tt._const: {\n            if (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            break;\n          }\n          case tt._abstract:\n          case tt._declare: {\n            if (\n              this.nextTokenIsIdentifierAndNotTSRelationalOperatorOnSameLine()\n            ) {\n              const token = this.state.type;\n              const node = this.startNode<N.ExpressionStatement>();\n              this.next(); // eat 'abstract' or 'declare'\n              const declaration =\n                token === tt._declare\n                  ? this.tsTryParseDeclare(node)\n                  : this.tsParseAbstractDeclaration(node, decorators);\n              if (declaration) {\n                if (token === tt._declare) {\n                  declaration.declare = true;\n                }\n                return declaration;\n              } else {\n                // The production is invalid. Construct AST for error recovery.\n                node.expression = this.createIdentifier(\n                  this.startNodeAt<N.Identifier>(node.loc.start),\n                  token === tt._declare ? \"declare\" : \"abstract\",\n                );\n                this.semicolon(false);\n                return this.finishNode(node, \"ExpressionStatement\");\n              }\n            }\n            break;\n          }\n          case tt._enum:\n            return this.tsParseEnumDeclaration(\n              this.startNode<N.TsEnumDeclaration>(),\n            );\n          case tt._global: {\n            const nextCh = this.lookaheadCharCode();\n            if (nextCh === charCodes.leftCurlyBrace) {\n              const node = this.startNode<N.TsModuleDeclaration>();\n              return this.tsParseAmbientExternalModuleDeclaration(node);\n            }\n            break;\n          }\n          case tt._interface: {\n            const result = this.tsParseInterfaceDeclaration(this.startNode());\n            if (result) return result;\n            break;\n          }\n          case tt._module: {\n            if (this.nextTokenIsIdentifierOrStringLiteralOnSameLine()) {\n              const node = this.startNode<N.TsModuleDeclaration>();\n              this.next(); // eat 'module'\n              return this.tsParseDeclaration(\n                node,\n                tt._module,\n                false,\n                decorators,\n              ) as N.TsModuleDeclaration;\n            }\n            break;\n          }\n          case tt._namespace: {\n            if (this.nextTokenIsIdentifierOnSameLine()) {\n              const node = this.startNode<N.TsModuleDeclaration>();\n              this.next(); // eat 'namespace'\n              return this.tsParseDeclaration(\n                node,\n                tt._namespace,\n                false,\n                decorators,\n              ) as N.TsModuleDeclaration;\n            }\n            break;\n          }\n          case tt._type: {\n            if (this.nextTokenIsIdentifierOnSameLine()) {\n              const node = this.startNode<N.TsTypeAliasDeclaration>();\n              this.next(); // eat 'type'\n              return this.tsParseTypeAliasDeclaration(node);\n            }\n            break;\n          }\n        }\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    // 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      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      return super.parseConditional(expr, startLoc, refExpressionErrors);\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 && declaration.type !== \"TSImportEqualsDeclaration\") {\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(this.offsetToSourcePos(key.start), this.offsetToSourcePos(key.end))}]`,\n          },\n        );\n      }\n\n      return super.parseClassProperty(node);\n    }\n\n    parseClassPrivateProperty(\n      node: N.ClassPrivateProperty,\n    ): N.ClassPrivateProperty {\n      if (node.abstract) {\n        this.raise(TSErrors.PrivateElementHasAbstract, node);\n      }\n\n      if (node.accessibility) {\n        this.raise(TSErrors.PrivateElementHasAccessibility, node, {\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      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        (node as unknown as N.EstreeMethodDefinition).value.body == null\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        if (process.env.BABEL_8_BREAKING) {\n          node.superTypeArguments = this.tsParseTypeArgumentsInExpression();\n        } else {\n          node.superTypeParameters = this.tsParseTypeArgumentsInExpression();\n        }\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\" | \"await 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      // eslint-disable-next-line @typescript-eslint/only-throw-error\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> | null | undefined {\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      disallowCallExpression: boolean,\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          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(\n            type,\n            disallowCallExpression,\n            isUnparenthesizedInAssign,\n            binding,\n          );\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(\n      expr: N.Expression,\n      startLoc: Position,\n    ): 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            startLoc,\n          ) as N.CallExpression;\n          if (process.env.BABEL_8_BREAKING) {\n            call.typeArguments = typeArguments;\n          } else {\n            call.typeParameters = typeArguments;\n          }\n\n          return call;\n        }\n\n        this.unexpected(null, tt.parenL);\n      }\n\n      return super.parseMaybeDecoratorArguments(expr, startLoc);\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<P extends N.Pattern>(\n      startLoc?: Position | null,\n      left?: P | null,\n    ): P | N.AssignmentPattern {\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    toAssignableListItem(\n      exprList: (N.Expression | N.SpreadElement | N.RestElement)[],\n      index: number,\n      isLHS: boolean,\n    ): void {\n      const node = exprList[index];\n      if (node.type === \"TSTypeCastExpression\") {\n        exprList[index] = this.typeCastToParameter(node);\n      }\n      super.toAssignableListItem(exprList, index, 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) {\n          if (process.env.BABEL_8_BREAKING) {\n            node.typeArguments = typeArguments;\n          } else {\n            node.typeParameters = typeArguments;\n          }\n        }\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 | 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.NonClassMethodPropertyHasAbstractModifier, node);\n          return this.tsParseInterfaceDeclaration(\n            node as N.TsInterfaceDeclaration,\n          );\n        } else {\n          return null;\n        }\n      }\n      throw this.unexpected(null, tt._class);\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 || method.type === \"TSAbstractMethodDefinition\") {\n        const hasEstreePlugin = this.hasPlugin(\"estree\");\n        const methodFn = hasEstreePlugin\n          ? // @ts-expect-error estree typings\n            method.value\n          : method;\n        if (methodFn.body) {\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(this.offsetToSourcePos(key.start), this.offsetToSourcePos(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] = this.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    /**\n     * This hook is defined in the ESTree plugin.\n     * The TS-ESLint always define optional AST properties, here we provide the\n     * default value for such properties immediately after `finishNode` was invoked.\n     *\n     * @param node The AST node finished by finishNode\n     * @returns\n     */\n    fillOptionalPropertiesForTSESLint(node: N.Node): void {\n      switch (node.type) {\n        case \"ExpressionStatement\":\n          node.directive ??= undefined;\n          return;\n        case \"RestElement\":\n          node.value = undefined;\n        /* fallthrough */\n        case \"Identifier\":\n        case \"ArrayPattern\":\n        case \"AssignmentPattern\":\n        case \"ObjectPattern\":\n          node.decorators ??= [];\n          node.optional ??= false;\n          node.typeAnnotation ??= undefined;\n          return;\n        case \"TSParameterProperty\":\n          node.accessibility ??= undefined;\n          node.decorators ??= [];\n          node.override ??= false;\n          node.readonly ??= false;\n          node.static ??= false;\n          return;\n        case \"TSEmptyBodyFunctionExpression\":\n          node.body = null;\n        /* fallthrough */\n        case \"TSDeclareFunction\":\n        case \"FunctionDeclaration\":\n        case \"FunctionExpression\":\n        case \"ClassMethod\":\n        case \"ClassPrivateMethod\":\n          node.declare ??= false;\n          node.returnType ??= undefined;\n          node.typeParameters ??= undefined;\n          return;\n        case \"Property\":\n          node.optional ??= false;\n          return;\n        case \"TSMethodSignature\":\n        case \"TSPropertySignature\":\n          node.optional ??= false;\n        /* fallthrough */\n        case \"TSIndexSignature\":\n          node.accessibility ??= undefined;\n          node.readonly ??= false;\n          node.static ??= false;\n          return;\n        case \"TSAbstractPropertyDefinition\":\n        case \"PropertyDefinition\":\n        case \"TSAbstractAccessorProperty\":\n        case \"AccessorProperty\":\n          node.declare ??= false;\n          node.definite ??= false;\n          node.readonly ??= false;\n          node.typeAnnotation ??= undefined;\n        /* fallthrough */\n        case \"TSAbstractMethodDefinition\":\n        case \"MethodDefinition\":\n          node.accessibility ??= undefined;\n          node.decorators ??= [];\n          node.override ??= false;\n          node.optional ??= false;\n          return;\n        case \"ClassExpression\":\n          node.id ??= null;\n        /* fallthrough */\n        case \"ClassDeclaration\":\n          node.abstract ??= false;\n          node.declare ??= false;\n          node.decorators ??= [];\n          node.implements ??= [];\n          node.superTypeArguments ??= undefined;\n          node.typeParameters ??= undefined;\n          return;\n        case \"TSTypeAliasDeclaration\":\n        case \"VariableDeclaration\":\n          node.declare ??= false;\n          return;\n        case \"VariableDeclarator\":\n          node.definite ??= false;\n          return;\n        case \"TSEnumDeclaration\":\n          node.const ??= false;\n          node.declare ??= false;\n          return;\n        case \"TSEnumMember\":\n          node.computed ??= false;\n          return;\n        case \"TSImportType\":\n          node.qualifier ??= null;\n          node.options ??= null;\n          if (process.env.BABEL_8_BREAKING) {\n            node.typeArguments ??= null;\n          }\n          return;\n        case \"TSInterfaceDeclaration\":\n          node.declare ??= false;\n          node.extends ??= [];\n          return;\n        case \"TSMappedType\":\n          node.optional ??= false;\n          node.readonly ??= undefined;\n          return;\n        case \"TSModuleDeclaration\":\n          node.declare ??= false;\n          node.global ??= node.kind === \"global\";\n          return;\n        case \"TSTypeParameter\":\n          node.const ??= false;\n          node.in ??= false;\n          node.out ??= false;\n          return;\n      }\n    }\n\n    chStartsBindingIdentifierAndNotRelationalOperator(ch: number, pos: number) {\n      if (isIdentifierStart(ch)) {\n        keywordAndTSRelationalOperator.lastIndex = pos;\n        if (keywordAndTSRelationalOperator.test(this.input)) {\n          // We have seen as/in/instanceof/satisfies so far, now check if the identifier\n          // ends here\n          const endCh = this.codePointAtPos(\n            keywordAndTSRelationalOperator.lastIndex,\n          );\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    nextTokenIsIdentifierAndNotTSRelationalOperatorOnSameLine(): boolean {\n      const next = this.nextTokenInLineStart();\n      const nextCh = this.codePointAtPos(next);\n      return this.chStartsBindingIdentifierAndNotRelationalOperator(\n        nextCh,\n        next,\n      );\n    }\n\n    nextTokenIsIdentifierOrStringLiteralOnSameLine(): boolean {\n      const next = this.nextTokenInLineStart();\n      const nextCh = this.codePointAtPos(next);\n      return (\n        this.chStartsBindingIdentifier(nextCh, next) ||\n        nextCh === charCodes.quotationMark ||\n        nextCh === charCodes.apostrophe\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.ts                                           *\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.ts                                         *\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/node.ts                                               *\n     * ============================================================ */\n\n    cloneIdentifier<T extends N.Identifier | N.Placeholder>(node: T): T {\n      const cloned = super.cloneIdentifier(node);\n      if (cloned.type === \"Placeholder\") {\n        cloned.expectedNode = (node as N.Placeholder).expectedNode;\n      }\n      return cloned;\n    }\n\n    cloneStringLiteral<\n      T extends N.EstreeLiteral | N.StringLiteral | N.Placeholder,\n    >(node: T): T {\n      if (node.type === \"Placeholder\") {\n        return this.cloneIdentifier(node) as T;\n      }\n      return super.cloneStringLiteral(node);\n    }\n\n    /* ============================================================ *\n     * parser/lval.ts                                               *\n     * ============================================================ */\n\n    parseBindingAtom(): MaybePlaceholder<\"Pattern\"> {\n      return this.parsePlaceholder(\"Pattern\") || super.parseBindingAtom();\n    }\n\n    isValidLVal(\n      type: string,\n      disallowCallExpression: boolean,\n      isParenthesized: boolean,\n      binding: BindingFlag,\n    ) {\n      return (\n        type === \"Placeholder\" ||\n        super.isValidLVal(\n          type,\n          disallowCallExpression,\n          isParenthesized,\n          binding,\n        )\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.ts                                          *\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 next = this.nextTokenStart();\n      if (\n        this.input.charCodeAt(next) === charCodes.percentSign &&\n        this.input.charCodeAt(next + 1) === charCodes.percentSign\n      ) {\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 (\n        this.state.start >\n        this.offsetToSourcePos(this.state.lastTokEndLoc!.index)\n      ) {\n        this.raise(\n          PlaceholderErrors.UnexpectedSpace,\n          this.state.lastTokEndLoc!,\n        );\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 | undefined {\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          this.castNodeTo(identifier, \"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 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    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 (!process.env.BABEL_8_BREAKING) {\n        if (\n          topicToken === \"#\" &&\n          pluginsMap.get(\"recordAndTuple\")?.syntaxType === \"hash\"\n        ) {\n          throw new Error(\n            `Plugin conflict between \\`[\"pipelineOperator\", { proposal: \"hack\", topicToken: \"#\" }]\\` and \\`${JSON.stringify([\"recordAndTuple\", pluginsMap.get(\"recordAndTuple\")])}\\`.`,\n          );\n        }\n      }\n    } else if (\n      !process.env.BABEL_8_BREAKING &&\n      proposal === \"smart\" &&\n      pluginsMap.get(\"recordAndTuple\")?.syntaxType === \"hash\"\n    ) {\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 migrate to import attributes instead.\",\n      );\n    } else {\n      if (\n        pluginsMap.has(\"deprecatedImportAssert\") ||\n        pluginsMap.has(\"importAssertions\")\n      ) {\n        throw new Error(\n          \"Cannot combine importAssertions, deprecatedImportAssert 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 import attributes instead.\" +\n          \" To use the non-standard `assert` syntax you can enable the `deprecatedImportAssert` parser plugin.\",\n      );\n    } else if (pluginsMap.has(\"deprecatedImportAssert\")) {\n      throw new Error(\n        \"Cannot combine importAssertions and deprecatedImportAssert plugins.\",\n      );\n    }\n  }\n  if (\n    !pluginsMap.has(\"deprecatedImportAssert\") &&\n    pluginsMap.has(\"importAttributes\") &&\n    pluginsMap.get(\"importAttributes\").deprecatedAssertSyntax\n  ) {\n    if (process.env.BABEL_8_BREAKING) {\n      throw new Error(\n        \"The 'importAttributes' plugin has been removed in Babel 8. If you need to enable support \" +\n          \"for the deprecated `assert` syntax, you can enable the `deprecatedImportAssert` parser plugin.\",\n      );\n    } else {\n      pluginsMap.set(\"deprecatedImportAssert\", {});\n    }\n  }\n\n  if (pluginsMap.has(\"recordAndTuple\")) {\n    if (process.env.BABEL_8_BREAKING) {\n      throw new Error(\n        \"The 'recordAndTuple' plugin has been removed in Babel 8. Please remove it from your configuration.\",\n      );\n    } else {\n      const syntaxType = pluginsMap.get(\"recordAndTuple\").syntaxType;\n      if (syntaxType != null) {\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 (\n    pluginsMap.has(\"discardBinding\") &&\n    pluginsMap.get(\"discardBinding\").syntaxType !== \"void\"\n  ) {\n    throw new Error(\n      \"The 'discardBinding' plugin requires a 'syntaxType' option. Currently the only supported value is 'void'.\",\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", "// 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 } from \"../parse-error.ts\";\nimport {\n  UnparenthesizedPipeBodyDescriptions,\n  type UnparenthesizedPipeBodyTypes,\n} from \"../parse-error/pipeline-operator-errors.ts\";\nimport { setInnerComments } from \"./comments.ts\";\nimport type { Undone } from \"./node.ts\";\nimport type Parser from \"./index.ts\";\n\nimport { OptionFlags, 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    sawProto: boolean,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): boolean {\n    if (\n      prop.type === \"SpreadElement\" ||\n      this.isObjectMethod(prop) ||\n      prop.computed ||\n      prop.shorthand\n    ) {\n      return sawProto;\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 true;\n      }\n      if (sawProto) {\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      return true;\n    }\n\n    return sawProto;\n  }\n\n  shouldExitDescending(\n    expr: N.Expression | N.PrivateName,\n    potentialArrowAt: number,\n  ): expr is N.ArrowFunctionExpression {\n    return (\n      expr.type === \"ArrowFunctionExpression\" &&\n      this.offsetToSourcePos(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    if (this.match(tt.eof)) {\n      throw this.raise(Errors.ParseExpressionEmptyInput, this.state.startLoc);\n    }\n    const expr = this.parseExpression() as N.Expression & N.ParserOutput;\n    if (!this.match(tt.eof)) {\n      throw this.raise(Errors.ParseExpressionExpectsEOF, this.state.startLoc, {\n        unexpected: this.input.codePointAt(this.state.start),\n      });\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.optionFlags & OptionFlags.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(refExpressionErrors: ExpressionErrors) {\n    refExpressionErrors.optionalParametersLoc = 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    const isYield = this.isContextual(tt._yield);\n    if (isYield) {\n      if (this.prodParam.hasYield) {\n        this.next();\n        let left = this.parseYield(startLoc);\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 as N.AssignmentOperator;\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        if (\n          refExpressionErrors.voidPatternLoc != null &&\n          refExpressionErrors.voidPatternLoc.index >= startIndex\n        ) {\n          refExpressionErrors.voidPatternLoc = null;\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(\n        left,\n        this.finishNode(node, \"AssignmentExpression\"),\n        undefined,\n        undefined,\n        undefined,\n        undefined,\n        operator === \"||=\" || operator === \"&&=\" || operator === \"??=\",\n      );\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    if (isYield) {\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.isAmbiguousPrefixOrIdentifier()) {\n        this.raiseOverwrite(Errors.YieldNotInGeneratorFunction, startLoc);\n        return this.parseYield(startLoc);\n      }\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          !process.env.BABEL_8_BREAKING &&\n          op === tt.pipeline &&\n          // @ts-expect-error: Only in Babel 7\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          case \"fsharp\":\n            return this.withSoloAwaitPermittingContext(() => {\n              return this.parseFSharpPipelineBody(prec);\n            });\n        }\n\n        if (\n          !process.env.BABEL_8_BREAKING &&\n          // @ts-expect-error: Babel 7 only\n          this.getPluginOption(\"pipelineOperator\", \"proposal\") === \"smart\"\n        ) {\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\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.isAmbiguousPrefixOrIdentifier()) {\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          return this.stopParseSubscript(base, state);\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        return this.stopParseSubscript(base, state);\n      }\n    }\n  }\n\n  stopParseSubscript(\n    this: Parser,\n    base: N.Expression,\n    state: N.ParseSubscriptState,\n  ) {\n    state.stop = true;\n    return base;\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 Undone<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      (node as Undone<N.OptionalCallExpression>).optional = optional;\n    }\n\n    if (optional) {\n      node.arguments = this.parseCallExpressionArguments();\n    } else {\n      node.arguments = this.parseCallExpressionArguments(\n        base.type !== \"Super\",\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      this.offsetToSourcePos(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 === 0 || node.arguments.length > 2) {\n        this.raise(Errors.ImportCallArity, node);\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    allowPlaceholder?: boolean,\n    nodeForExtra?: Undone<N.Node> | null,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): Array<N.Expression> {\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(tt.parenR)) {\n      if (first) {\n        first = false;\n      } else {\n        this.expect(tt.comma);\n        if (this.match(tt.parenR)) {\n          if (nodeForExtra) {\n            this.addTrailingCommaExtraToNode(nodeForExtra);\n          }\n          this.next();\n          break;\n        }\n      }\n\n      elts.push(\n        this.parseExprListItem(\n          tt.parenR,\n          false,\n          refExpressionErrors,\n          allowPlaceholder,\n        ),\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.parseImportMetaPropertyOrPhaseCall(\n            node as Undone<N.MetaProperty | N.ImportExpression>,\n          );\n        }\n\n        if (this.match(tt.parenL)) {\n          if (this.optionFlags & OptionFlags.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.bracketL: {\n        return this.parseArrayLike(\n          tt.bracketR,\n          /* isTuple */ false,\n          refExpressionErrors,\n        );\n      }\n      case tt.braceL: {\n        return this.parseObjectLike(\n          tt.braceR,\n          /* isPattern */ false,\n          /* isRecord */ false,\n          refExpressionErrors,\n        );\n      }\n      case tt._function:\n        return this.parseFunctionOrFunctionSent();\n\n      case tt.at:\n        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        throw this.unexpected();\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          // None of these plugins is enabled, otherwise they would have\n          // handled `<` by themselves.\n          throw this.expectOnePlugin([\"jsx\", \"flow\", \"typescript\"]);\n        }\n        throw this.unexpected();\n      }\n\n      default:\n        if (!process.env.BABEL_8_BREAKING) {\n          if (type === tt.decimal) {\n            return this.parseDecimalLiteral(this.state.value);\n          } else if (type === tt.bracketBarL || type === tt.bracketHashL) {\n            return this.parseArrayLike(\n              this.state.type === tt.bracketBarL ? tt.bracketBarR : tt.bracketR,\n              /* isTuple */ true,\n            );\n          } else if (type === tt.braceBarL || type === 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        }\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          throw 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    }\n    throw this.unexpected();\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      if (process.env.BABEL_8_BREAKING || pipeProposal === \"hack\") {\n        if (!this.topicReferenceIsAllowedInCurrentContext()) {\n          this.raise(Errors.PipeTopicUnbound, startLoc);\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, \"TopicReference\");\n      } else {\n        // pipeProposal is \"smart\"\n\n        if (!this.topicReferenceIsAllowedInCurrentContext()) {\n          this.raise(Errors.PrimaryTopicNotAllowed!, startLoc);\n        }\n        this.registerTopicReference();\n        return this.finishNode(node, \"PipelinePrimaryTopicReference\");\n      }\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\"(Babel 7) 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 (this.match(tt.parenL) && !this.scope.allowDirectSuper) {\n      if (process.env.BABEL_8_BREAKING) {\n        this.raise(Errors.SuperNotAllowed, node);\n      } else {\n        if (!(this.optionFlags & OptionFlags.AllowSuperOutsideMethod)) {\n          this.raise(Errors.SuperNotAllowed, node);\n        }\n      }\n    } else if (!this.scope.allowSuper) {\n      if (process.env.BABEL_8_BREAKING) {\n        this.raise(Errors.UnexpectedSuper, node);\n      } else {\n        if (!(this.optionFlags & OptionFlags.AllowSuperOutsideMethod)) {\n          this.raise(Errors.UnexpectedSuper, node);\n        }\n      }\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  // https://tc39.es/proposal-source-phase-imports/\n  parseImportMetaPropertyOrPhaseCall(\n    this: Parser,\n    node: Undone<N.MetaProperty | N.ImportExpression>,\n  ): N.MetaProperty | N.ImportExpression {\n    this.next(); // eat `.`\n\n    if (this.isContextual(tt._source) || this.isContextual(tt._defer)) {\n      const isSource = this.isContextual(tt._source);\n\n      this.expectPlugin(\n        isSource ? \"sourcePhaseImports\" : \"deferredImportEvaluation\",\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    } else {\n      const id = this.createIdentifierAt(\n        this.startNodeAtNode<N.Identifier>(node),\n        \"import\",\n        this.state.lastTokStartLoc!,\n      );\n      if (this.isContextual(tt._meta)) {\n        if (!this.inModule) {\n          this.raise(Errors.ImportMetaOutsideModule, id);\n        }\n        this.sawUnambiguousESM = true;\n      }\n      return this.parseMetaProperty(node as Undone<N.MetaProperty>, id, \"meta\");\n    }\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(\n      node,\n      \"raw\",\n      this.input.slice(this.offsetToSourcePos(node.start), this.state.end),\n    );\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    if (process.env.BABEL_8_BREAKING) {\n      let bigInt: bigint | null;\n      try {\n        bigInt = BigInt(value);\n      } catch {\n        // parser supports invalid bigints like `1.0n` or `1e1n` such that it\n        // can throw a recoverable error, but BigInt constructor does not\n        // support them.\n        bigInt = null;\n      }\n      const node = this.parseLiteral<N.BigIntLiteral>(bigInt, \"BigIntLiteral\");\n      return node;\n    } else {\n      return this.parseLiteral<N.BigIntLiteral>(value, \"BigIntLiteral\");\n    }\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(\n      node,\n      \"raw\",\n      this.input.slice(this.offsetToSourcePos(node.start), this.state.end),\n    );\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      | N.Expression\n      | N.RestElement\n      | N.VoidPattern\n      | N.AssignmentPattern\n    )[] = [];\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.parseMaybeAssignAllowInOrVoidPattern(\n            tt.parenR,\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: Undone<N.ArrowFunctionExpression> | null | undefined =\n      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.optionFlags & OptionFlags.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 | null {\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 (!this.scope.allowNewTarget) {\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 as N.Expression[];\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    let sawProto = false;\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(node);\n          break;\n        }\n      }\n\n      let prop;\n      if (isPattern) {\n        prop = this.parseBindingProperty();\n      } else {\n        prop = this.parsePropertyDefinition(refExpressionErrors);\n        sawProto = this.checkProto(\n          prop,\n          isRecord,\n          sawProto,\n          refExpressionErrors,\n        );\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: Undone<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.parseMaybeAssignAllowInOrVoidPattern(\n            tt.braceR,\n            refExpressionErrors,\n          );\n\n      return this.finishObjectProperty(prop);\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          this.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          this.cloneIdentifier(prop.key),\n        );\n      } else {\n        prop.value = this.cloneIdentifier(prop.key);\n      }\n      prop.shorthand = true;\n\n      return this.finishObjectProperty(prop);\n    }\n  }\n\n  finishObjectProperty(node: Undone<N.ObjectProperty>) {\n    return this.finishNode(node, \"ObjectProperty\");\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    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      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          N.Expression | N.SpreadElement | N.VoidPattern | N.AssignmentPattern\n        >\n      | Array<\n          N.Expression | N.RestElement | N.VoidPattern | N.AssignmentPattern\n        >\n      | null\n      | undefined,\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          N.Expression | N.SpreadElement | N.VoidPattern | N.AssignmentPattern\n        >\n      | Array<\n          N.Expression | N.RestElement | N.VoidPattern | N.AssignmentPattern\n        >,\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  // https://tc39.es/ecma262/#prod-ElementList\n  parseExprList(\n    this: Parser,\n    close: TokenType,\n    allowEmpty?: boolean,\n    refExpressionErrors?: ExpressionErrors | null,\n    nodeForExtra?: Undone<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(close, allowEmpty, refExpressionErrors));\n    }\n    return elts;\n  }\n\n  parseExprListItem(\n    this: Parser,\n    close: TokenType,\n    allowEmpty?: boolean,\n    refExpressionErrors?: ExpressionErrors | null,\n    allowPlaceholder?: boolean | null,\n  ): N.Expression | null;\n  parseExprListItem(\n    this: Parser,\n    close: TokenType,\n    allowEmpty?: false,\n    refExpressionErrors?: ExpressionErrors | null,\n    allowPlaceholder?: boolean | null,\n  ): N.Expression;\n  parseExprListItem(\n    this: Parser,\n    close: TokenType,\n    allowEmpty?: boolean | null,\n    refExpressionErrors?: ExpressionErrors | null,\n    allowPlaceholder?: boolean | null,\n  ):\n    | N.Expression\n    | N.SpreadElement\n    | N.ArgumentPlaceholder\n    | N.VoidPattern\n    | N.AssignmentPattern\n    | 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.parseMaybeAssignAllowInOrVoidPattern(\n        close,\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(node: Undone<N.Identifier>, name: string): N.Identifier {\n    node.name = name;\n    node.loc.identifierName = name;\n\n    return this.finishNode(node, \"Identifier\");\n  }\n\n  createIdentifierAt(\n    node: Undone<N.Identifier>,\n    name: string,\n    endLoc: Position,\n  ): N.Identifier {\n    node.name = name;\n    node.loc.identifierName = name;\n\n    return this.finishNodeAt(node, \"Identifier\", endLoc);\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 whether `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 = this.prodParam.hasAwait;\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      node,\n    );\n\n    if (this.eat(tt.star)) {\n      this.raise(Errors.ObsoleteAwaitStar, node);\n    }\n\n    if (\n      !this.scope.inFunction &&\n      !(this.optionFlags & OptionFlags.AllowAwaitOutsideFunction)\n    ) {\n      if (this.isAmbiguousPrefixOrIdentifier()) {\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  isAmbiguousPrefixOrIdentifier(): 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, startLoc: Position): N.YieldExpression {\n    const node = this.startNodeAt<N.YieldExpression>(startLoc);\n\n    this.expressionScope.recordParameterInitializerError(\n      Errors.YieldInParameter,\n      node,\n    );\n\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    node.options = null;\n    if (this.eat(tt.comma)) {\n      if (!this.match(tt.parenR)) {\n        node.options = this.parseMaybeAssignAllowIn();\n        if (this.eat(tt.comma)) {\n          this.addTrailingCommaExtraToNode(node.options);\n          if (!this.match(tt.parenR)) {\n            // keep consuming arguments, to then throw ImportCallArity\n            // instead of \"expected )\"\n            do {\n              this.parseMaybeAssignAllowIn();\n            } while (this.eat(tt.comma) && !this.match(tt.parenR));\n\n            this.raise(Errors.ImportCallArity, node);\n          }\n        }\n      } else {\n        this.addTrailingCommaExtraToNode(node.source);\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    // TODO(Babel 8): Remove this method\n\n    if (\n      !process.env.BABEL_8_BREAKING &&\n      // @ts-expect-error Babel 7 only\n      this.hasPlugin([\"pipelineOperator\", { proposal: \"smart\" }])\n    ) {\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\"(Babel 7), \"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  parseVoidPattern(\n    this: Parser,\n    refExpressionErrors: ExpressionErrors | null,\n  ): N.VoidPattern {\n    this.expectPlugin(\"discardBinding\");\n    const node = this.startNode<N.VoidPattern>();\n    if (refExpressionErrors != null) {\n      refExpressionErrors.voidPatternLoc = this.state.startLoc;\n    }\n    this.next();\n    return this.finishNode(node, \"VoidPattern\");\n  }\n\n  parseMaybeAssignAllowInOrVoidPattern(\n    this: Parser,\n    close: TokenType,\n    refExpressionErrors: ExpressionErrors | null | undefined,\n    afterLeftParse?: Function,\n  ) {\n    if (refExpressionErrors != null && this.match(tt._void)) {\n      const nextCode = this.lookaheadCharCode();\n      if (\n        nextCode === charCodes.comma ||\n        nextCode ===\n          (close === tt.bracketR\n            ? charCodes.rightSquareBracket\n            : close === tt.braceR\n              ? charCodes.rightCurlyBrace\n              : charCodes.rightParenthesis) ||\n        nextCode === charCodes.equalsTo\n      ) {\n        // `void = Initializer` is not allowed, here we parse the production as an assignment pattern\n        // so that we can recover from this error\n        return this.parseMaybeDefault(\n          this.state.startLoc,\n          this.parseVoidPattern(refExpressionErrors),\n        );\n      }\n    }\n    return this.parseMaybeAssignAllowIn(refExpressionErrors, afterLeftParse);\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 { OptionFlags, 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 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(\n  tokens: (Token | N.Comment)[],\n  input: string,\n  startIndex: number,\n) {\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 - startIndex) === 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(\n      program,\n      tt.eof,\n      this.options.sourceType === \"module\" ? \"module\" : \"script\",\n    );\n    file.comments = this.comments;\n\n    if (this.optionFlags & OptionFlags.Tokens) {\n      file.tokens = babel7CompatTokens(\n        this.tokens,\n        this.input,\n        this.startIndex,\n      );\n    }\n\n    return this.finishNode(file, \"File\");\n  }\n\n  parseProgram(\n    this: Parser,\n    program: Undone<N.Program>,\n    end: TokenType,\n    sourceType: 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.optionFlags & OptionFlags.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.ExpressionStatement): N.Directive {\n    const directive = this.castNodeTo(stmt, \"Directive\");\n\n    const directiveLiteral = this.castNodeTo(\n      stmt.expression,\n      \"DirectiveLiteral\",\n    );\n    const expressionValue = directiveLiteral.value;\n    const raw = this.input.slice(\n      this.offsetToSourcePos(directiveLiteral.start),\n      this.offsetToSourcePos(directiveLiteral.end),\n    );\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    directive.value = directiveLiteral;\n    // @ts-expect-error delete non-optional properties\n    delete stmt.expression;\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  isUsing(): boolean {\n    if (!this.isContextual(tt._using)) {\n      return false;\n    }\n    return this.nextTokenIsIdentifierOnSameLine();\n  }\n\n  isForUsing(): boolean {\n    if (!this.isContextual(tt._using)) {\n      return false;\n    }\n    const next = this.nextTokenInLineStart();\n    const nextCh = this.codePointAtPos(next);\n    if (this.isUnparsedContextual(next, \"of\")) {\n      const nextCharAfterOf = this.lookaheadCharCodeSince(next + 2);\n      // `for( using of` must start either a for-lhs-of statement\n      // or a for lexical declaration\n      if (\n        nextCharAfterOf !== charCodes.equalsTo &&\n        nextCharAfterOf !== charCodes.colon &&\n        // recover from `for(using of;...);`\n        nextCharAfterOf !== charCodes.semicolon\n      ) {\n        return false;\n      }\n    }\n    if (\n      this.chStartsBindingIdentifier(nextCh, next) ||\n      this.isUnparsedContextual(next, \"void\")\n    ) {\n      return true;\n    }\n    return false;\n  }\n\n  nextTokenIsIdentifierOnSameLine(): boolean {\n    const next = this.nextTokenInLineStart();\n    const nextCh = this.codePointAtPos(next);\n    return this.chStartsBindingIdentifier(nextCh, next);\n  }\n\n  isAwaitUsing(): boolean {\n    if (!this.isContextual(tt._await)) {\n      return false;\n    }\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        return true;\n      }\n    }\n    return false;\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  allowsUsing(): boolean {\n    return (\n      (this.scope.inModule || !this.scope.inTopLevel) &&\n      !this.scope.inBareCaseStatement\n    );\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.isAwaitUsing()) {\n          if (!this.allowsUsing()) {\n            this.raise(Errors.UnexpectedUsingDeclaration, node);\n          } else if (!allowDeclaration) {\n            this.raise(Errors.UnexpectedLexicalDeclaration, node);\n          } else if (!this.recordAwaitIfAllowed()) {\n            this.raise(Errors.AwaitUsingNotInAsyncContext, 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        if (!this.allowsUsing()) {\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 (\n          !(this.optionFlags & OptionFlags.AllowImportExportEverywhere) &&\n          !topLevel\n        ) {\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        } else {\n          result = this.parseExport(\n            node as Undone<\n              | N.ExportAllDeclaration\n              | N.ExportDefaultDeclaration\n              | N.ExportNamedDeclaration\n            >,\n            decorators,\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 (\n      !(this.optionFlags & OptionFlags.AllowImportExportEverywhere) &&\n      !this.inModule\n    ) {\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 | undefined,\n    classNode: T,\n    exportNode?: Undone<N.ExportDefaultDeclaration | N.ExportNamedDeclaration>,\n  ): T {\n    if (maybeDecorators) {\n      if (classNode.decorators?.length) {\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, startLoc);\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, startLoc);\n      }\n    } else {\n      node.expression = this.parseExprSubscripts();\n    }\n    return this.finishNode(node, \"Decorator\");\n  }\n\n  parseMaybeDecoratorArguments(\n    this: Parser,\n    expr: N.Expression,\n    startLoc: Position,\n  ): N.Expression {\n    if (this.eat(tt.parenL)) {\n      const node = this.startNodeAt<N.CallExpression>(startLoc);\n      node.callee = expr;\n      node.arguments = this.parseCallExpressionArguments();\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 = this.isAwaitUsing();\n      const starsWithUsingDeclaration =\n        startsWithAwaitUsing || this.isForUsing();\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) {\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.SWITCH);\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        : ScopeFlag.OTHER,\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.sourceToOffsetPos(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.sourceToOffsetPos(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 | undefined,\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): stmt is N.ExpressionStatement {\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    } else {\n      if (id.type === \"VoidPattern\") {\n        this.raise(Errors.UnexpectedVoidPattern, 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    ) as Array<N.Pattern>;\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      this.parsePostMemberNameModifiers(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 | undefined,\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      this.sawUnambiguousESM = 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      this.sawUnambiguousESM = true;\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      this.sawUnambiguousESM = true;\n      return this.finishNode(node2, \"ExportDefaultDeclaration\");\n    }\n\n    throw 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      node2.source = null;\n      if (!process.env.BABEL_8_BREAKING && this.hasPlugin(\"importAssertions\")) {\n        node2.assertions = [];\n      } else {\n        node2.attributes = [];\n      }\n      node2.declaration = null;\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      } else {\n        node.attributes = [];\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 (\n      this.match(tt._const) ||\n      this.match(tt._var) ||\n      this.isLet() ||\n      this.isUsing() ||\n      this.isAwaitUsing()\n    ) {\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        // 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        const next = this.nextTokenStart();\n        const nextChar = this.input.charCodeAt(next);\n        if (\n          nextChar === charCodes.leftCurlyBrace ||\n          (this.chStartsBindingIdentifier(nextChar, next) &&\n            !this.input.startsWith(\"from\", next))\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.isUsing()) {\n      this.raise(Errors.UsingDeclarationExport, this.state.startLoc);\n      return true;\n    }\n\n    if (this.isAwaitUsing()) {\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 = this.cloneStringLiteral(node.local);\n    } else if (!node.exported) {\n      node.exported = this.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      // @ts-expect-error comparing undefined and number\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.startNode<N.Identifier>();\n    const phaseIdentifierName = this.parseIdentifierName(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.applyImportPhase(\n        node as Undone<N.ImportDeclaration>,\n        isExport,\n        phaseIdentifierName,\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 this.createIdentifier(phaseIdentifier, phaseIdentifierName);\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    this.sawUnambiguousESM = true;\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 && this.hasPlugin(\"moduleAttributes\")) {\n        attributes = this.parseModuleAttributes();\n        this.addExtra(node, \"deprecatedWithLegacySyntax\", true);\n      } else {\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 (\n        !this.hasPlugin(\"deprecatedImportAssert\") &&\n        (process.env.BABEL_8_BREAKING || !this.hasPlugin(\"importAssertions\"))\n      ) {\n        this.raise(Errors.ImportAttributesUseAssert, this.state.startLoc);\n      }\n      if (process.env.BABEL_8_BREAKING || !this.hasPlugin(\"importAssertions\")) {\n        this.addExtra(node, \"deprecatedAssertSyntax\", true);\n      }\n      this.next(); // eat `assert`\n      attributes = this.parseImportAttributes();\n    } else {\n      attributes = [];\n    }\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 = this.cloneIdentifier(imported as N.Identifier);\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 * as N from \"../types.ts\";\nimport { getOptions, OptionFlags } from \"../options.ts\";\nimport StatementParser from \"./statement.ts\";\nimport ScopeHandler from \"../util/scope.ts\";\nimport type { ParserOptions, ParseResult, File } from \"@babel/parser\";\n\nexport type PluginsMap = Map<\n  string,\n  {\n    [x: string]: any;\n  }\n>;\n\nexport default class Parser extends StatementParser {\n  constructor(\n    options: ParserOptions | undefined | null,\n    input: string,\n    pluginsMap: PluginsMap,\n  ) {\n    const normalizedOptions = getOptions(options);\n    super(normalizedOptions, input);\n\n    this.options = normalizedOptions;\n    this.initializeScopes();\n    this.plugins = pluginsMap;\n    this.filename = normalizedOptions.sourceFilename;\n    this.startIndex = normalizedOptions.startIndex;\n\n    let optionFlags = 0;\n    if (normalizedOptions.allowAwaitOutsideFunction) {\n      optionFlags |= OptionFlags.AllowAwaitOutsideFunction;\n    }\n    if (normalizedOptions.allowReturnOutsideFunction) {\n      optionFlags |= OptionFlags.AllowReturnOutsideFunction;\n    }\n    if (normalizedOptions.allowImportExportEverywhere) {\n      optionFlags |= OptionFlags.AllowImportExportEverywhere;\n    }\n    if (normalizedOptions.allowSuperOutsideMethod) {\n      optionFlags |= OptionFlags.AllowSuperOutsideMethod;\n    }\n    if (normalizedOptions.allowUndeclaredExports) {\n      optionFlags |= OptionFlags.AllowUndeclaredExports;\n    }\n    if (normalizedOptions.allowNewTargetOutsideFunction) {\n      optionFlags |= OptionFlags.AllowNewTargetOutsideFunction;\n    }\n    if (normalizedOptions.allowYieldOutsideFunction) {\n      optionFlags |= OptionFlags.AllowYieldOutsideFunction;\n    }\n    if (normalizedOptions.ranges) {\n      optionFlags |= OptionFlags.Ranges;\n    }\n    if (normalizedOptions.tokens) {\n      optionFlags |= OptionFlags.Tokens;\n    }\n    if (normalizedOptions.createImportExpressions) {\n      optionFlags |= OptionFlags.CreateImportExpressions;\n    }\n    if (normalizedOptions.createParenthesizedExpressions) {\n      optionFlags |= OptionFlags.CreateParenthesizedExpressions;\n    }\n    if (normalizedOptions.errorRecovery) {\n      optionFlags |= OptionFlags.ErrorRecovery;\n    }\n    if (normalizedOptions.attachComment) {\n      optionFlags |= OptionFlags.AttachComment;\n    }\n    if (normalizedOptions.annexB) {\n      optionFlags |= OptionFlags.AnnexB;\n    }\n\n    this.optionFlags = optionFlags;\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(): ParseResult<File> {\n    this.enterInitialScopes();\n    const file = this.startNode<N.File>();\n    const program = this.startNode<N.Program>();\n    this.nextToken();\n    // @ts-expect-error define later\n    file.errors = null;\n    const result = this.parseTopLevel(file, program);\n    result.errors = this.state.errors;\n    result.comments.length = this.state.commentsLen;\n    return result as ParseResult<File>;\n  }\n}\n", "import type { Options } from \"./options.ts\";\nimport {\n  validatePlugins,\n  mixinPluginNames,\n  mixinPlugins,\n} from \"./plugin-utils.ts\";\nexport type {\n  PluginConfig as ParserPlugin,\n  DecoratorsPluginOptions,\n  FlowPluginOptions,\n  PipelineOperatorPluginOptions,\n  RecordAndTuplePluginOptions,\n  TypeScriptPluginOptions,\n} from \"./typings.ts\";\nimport Parser, { type PluginsMap } from \"./parser/index.ts\";\nimport type { ParseError as ParseErrorGeneric } from \"./parse-error.ts\";\n\nimport type { ExportedTokenType } from \"./tokenizer/types.ts\";\nimport {\n  getExportedToken,\n  tt as internalTokenTypes,\n  type InternalTokenTypes,\n} from \"./tokenizer/types.ts\";\nexport type { Token } from \"./tokenizer/index.ts\";\n\n// TODO: Rather than type-casting the internal AST definitions to the\n// @babel/types one, we should actually unify them.\nimport type { Expression, File } from \"@babel/types\";\nexport type { Expression, File };\n\nexport type ParserOptions = Partial<Options>;\n\nexport type ParseError = ParseErrorGeneric<object>;\nexport type ParseResult<Result extends File | Expression = File> = Result & {\n  comments: File[\"comments\"];\n  errors: null | ParseError[];\n  tokens?: File[\"tokens\"];\n};\n\n/**\n * Parse the provided code as an entire ECMAScript program.\n */\nexport function parse(\n  input: string,\n  options?: ParserOptions,\n): ParseResult<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(\n  input: string,\n  options?: ParserOptions,\n): ParseResult<Expression> {\n  const parser = getParser(options, input);\n  if (parser.options.strictMode) {\n    parser.state.strict = true;\n  }\n  return parser.getExpression() as ParseResult<Expression>;\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(\n  options: ParserOptions | undefined | null,\n  input: string,\n): 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", "// 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'\n\n// Note: this is the semver.org version of the spec that it implements\n// Not necessarily the package version of this code.\nconst SEMVER_SPEC_VERSION = '2.0.0'\n\nconst MAX_LENGTH = 256\nconst MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER ||\n/* istanbul ignore next */ 9007199254740991\n\n// Max safe segment length for coercion.\nconst MAX_SAFE_COMPONENT_LENGTH = 16\n\n// Max safe length for a build identifier. The max length minus 6 characters for\n// the shortest version with a build 0.0.0+BUILD.\nconst MAX_SAFE_BUILD_LENGTH = MAX_LENGTH - 6\n\nconst RELEASE_TYPES = [\n  'major',\n  'premajor',\n  'minor',\n  'preminor',\n  'patch',\n  'prepatch',\n  'prerelease',\n]\n\nmodule.exports = {\n  MAX_LENGTH,\n  MAX_SAFE_COMPONENT_LENGTH,\n  MAX_SAFE_BUILD_LENGTH,\n  MAX_SAFE_INTEGER,\n  RELEASE_TYPES,\n  SEMVER_SPEC_VERSION,\n  FLAG_INCLUDE_PRERELEASE: 0b001,\n  FLAG_LOOSE: 0b010,\n}\n", "'use strict'\n\nconst debug = (\n  typeof process === 'object' &&\n  process.env &&\n  process.env.NODE_DEBUG &&\n  /\\bsemver\\b/i.test(process.env.NODE_DEBUG)\n) ? (...args) => console.error('SEMVER', ...args)\n  : () => {}\n\nmodule.exports = debug\n", "'use strict'\n\nconst {\n  MAX_SAFE_COMPONENT_LENGTH,\n  MAX_SAFE_BUILD_LENGTH,\n  MAX_LENGTH,\n} = require('./constants')\nconst debug = require('./debug')\nexports = module.exports = {}\n\n// The actual regexps go on exports.re\nconst re = exports.re = []\nconst safeRe = exports.safeRe = []\nconst src = exports.src = []\nconst safeSrc = exports.safeSrc = []\nconst t = exports.t = {}\nlet R = 0\n\nconst LETTERDASHNUMBER = '[a-zA-Z0-9-]'\n\n// Replace some greedy regex tokens to prevent regex dos issues. These regex are\n// used internally via the safeRe object since all inputs in this library get\n// normalized first to trim and collapse all extra whitespace. The original\n// regexes are exported for userland consumption and lower level usage. A\n// future breaking change could export the safer regex only with a note that\n// all input should have extra whitespace removed.\nconst safeRegexReplacements = [\n  ['\\\\s', 1],\n  ['\\\\d', MAX_LENGTH],\n  [LETTERDASHNUMBER, MAX_SAFE_BUILD_LENGTH],\n]\n\nconst makeSafeRegex = (value) => {\n  for (const [token, max] of safeRegexReplacements) {\n    value = value\n      .split(`${token}*`).join(`${token}{0,${max}}`)\n      .split(`${token}+`).join(`${token}{1,${max}}`)\n  }\n  return value\n}\n\nconst createToken = (name, value, isGlobal) => {\n  const safe = makeSafeRegex(value)\n  const index = R++\n  debug(name, index, value)\n  t[name] = index\n  src[index] = value\n  safeSrc[index] = safe\n  re[index] = new RegExp(value, isGlobal ? 'g' : undefined)\n  safeRe[index] = new RegExp(safe, isGlobal ? 'g' : undefined)\n}\n\n// The following Regular Expressions can be used for tokenizing,\n// validating, and parsing SemVer version strings.\n\n// ## Numeric Identifier\n// A single `0`, or a non-zero digit followed by zero or more digits.\n\ncreateToken('NUMERICIDENTIFIER', '0|[1-9]\\\\d*')\ncreateToken('NUMERICIDENTIFIERLOOSE', '\\\\d+')\n\n// ## Non-numeric Identifier\n// Zero or more digits, followed by a letter or hyphen, and then zero or\n// more letters, digits, or hyphens.\n\ncreateToken('NONNUMERICIDENTIFIER', `\\\\d*[a-zA-Z-]${LETTERDASHNUMBER}*`)\n\n// ## Main Version\n// Three dot-separated numeric identifiers.\n\ncreateToken('MAINVERSION', `(${src[t.NUMERICIDENTIFIER]})\\\\.` +\n                   `(${src[t.NUMERICIDENTIFIER]})\\\\.` +\n                   `(${src[t.NUMERICIDENTIFIER]})`)\n\ncreateToken('MAINVERSIONLOOSE', `(${src[t.NUMERICIDENTIFIERLOOSE]})\\\\.` +\n                        `(${src[t.NUMERICIDENTIFIERLOOSE]})\\\\.` +\n                        `(${src[t.NUMERICIDENTIFIERLOOSE]})`)\n\n// ## Pre-release Version Identifier\n// A numeric identifier, or a non-numeric identifier.\n// Non-numberic identifiers include numberic identifiers but can be longer.\n// Therefore non-numberic identifiers must go first.\n\ncreateToken('PRERELEASEIDENTIFIER', `(?:${src[t.NONNUMERICIDENTIFIER]\n}|${src[t.NUMERICIDENTIFIER]})`)\n\ncreateToken('PRERELEASEIDENTIFIERLOOSE', `(?:${src[t.NONNUMERICIDENTIFIER]\n}|${src[t.NUMERICIDENTIFIERLOOSE]})`)\n\n// ## Pre-release Version\n// Hyphen, followed by one or more dot-separated pre-release version\n// identifiers.\n\ncreateToken('PRERELEASE', `(?:-(${src[t.PRERELEASEIDENTIFIER]\n}(?:\\\\.${src[t.PRERELEASEIDENTIFIER]})*))`)\n\ncreateToken('PRERELEASELOOSE', `(?:-?(${src[t.PRERELEASEIDENTIFIERLOOSE]\n}(?:\\\\.${src[t.PRERELEASEIDENTIFIERLOOSE]})*))`)\n\n// ## Build Metadata Identifier\n// Any combination of digits, letters, or hyphens.\n\ncreateToken('BUILDIDENTIFIER', `${LETTERDASHNUMBER}+`)\n\n// ## Build Metadata\n// Plus sign, followed by one or more period-separated build metadata\n// identifiers.\n\ncreateToken('BUILD', `(?:\\\\+(${src[t.BUILDIDENTIFIER]\n}(?:\\\\.${src[t.BUILDIDENTIFIER]})*))`)\n\n// ## Full Version String\n// A main version, followed optionally by a pre-release version and\n// build metadata.\n\n// Note that the only major, minor, patch, and pre-release sections of\n// the version string are capturing groups.  The build metadata is not a\n// capturing group, because it should not ever be used in version\n// comparison.\n\ncreateToken('FULLPLAIN', `v?${src[t.MAINVERSION]\n}${src[t.PRERELEASE]}?${\n  src[t.BUILD]}?`)\n\ncreateToken('FULL', `^${src[t.FULLPLAIN]}$`)\n\n// like full, but allows v1.2.3 and =1.2.3, which people do sometimes.\n// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty\n// common in the npm registry.\ncreateToken('LOOSEPLAIN', `[v=\\\\s]*${src[t.MAINVERSIONLOOSE]\n}${src[t.PRERELEASELOOSE]}?${\n  src[t.BUILD]}?`)\n\ncreateToken('LOOSE', `^${src[t.LOOSEPLAIN]}$`)\n\ncreateToken('GTLT', '((?:<|>)?=?)')\n\n// Something like \"2.*\" or \"1.2.x\".\n// Note that \"x.x\" is a valid xRange identifer, meaning \"any version\"\n// Only the first item is strictly required.\ncreateToken('XRANGEIDENTIFIERLOOSE', `${src[t.NUMERICIDENTIFIERLOOSE]}|x|X|\\\\*`)\ncreateToken('XRANGEIDENTIFIER', `${src[t.NUMERICIDENTIFIER]}|x|X|\\\\*`)\n\ncreateToken('XRANGEPLAIN', `[v=\\\\s]*(${src[t.XRANGEIDENTIFIER]})` +\n                   `(?:\\\\.(${src[t.XRANGEIDENTIFIER]})` +\n                   `(?:\\\\.(${src[t.XRANGEIDENTIFIER]})` +\n                   `(?:${src[t.PRERELEASE]})?${\n                     src[t.BUILD]}?` +\n                   `)?)?`)\n\ncreateToken('XRANGEPLAINLOOSE', `[v=\\\\s]*(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n                        `(?:\\\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n                        `(?:\\\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n                        `(?:${src[t.PRERELEASELOOSE]})?${\n                          src[t.BUILD]}?` +\n                        `)?)?`)\n\ncreateToken('XRANGE', `^${src[t.GTLT]}\\\\s*${src[t.XRANGEPLAIN]}$`)\ncreateToken('XRANGELOOSE', `^${src[t.GTLT]}\\\\s*${src[t.XRANGEPLAINLOOSE]}$`)\n\n// Coercion.\n// Extract anything that could conceivably be a part of a valid semver\ncreateToken('COERCEPLAIN', `${'(^|[^\\\\d])' +\n              '(\\\\d{1,'}${MAX_SAFE_COMPONENT_LENGTH}})` +\n              `(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` +\n              `(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?`)\ncreateToken('COERCE', `${src[t.COERCEPLAIN]}(?:$|[^\\\\d])`)\ncreateToken('COERCEFULL', src[t.COERCEPLAIN] +\n              `(?:${src[t.PRERELEASE]})?` +\n              `(?:${src[t.BUILD]})?` +\n              `(?:$|[^\\\\d])`)\ncreateToken('COERCERTL', src[t.COERCE], true)\ncreateToken('COERCERTLFULL', src[t.COERCEFULL], true)\n\n// Tilde ranges.\n// Meaning is \"reasonably at or greater than\"\ncreateToken('LONETILDE', '(?:~>?)')\n\ncreateToken('TILDETRIM', `(\\\\s*)${src[t.LONETILDE]}\\\\s+`, true)\nexports.tildeTrimReplace = '$1~'\n\ncreateToken('TILDE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAIN]}$`)\ncreateToken('TILDELOOSE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAINLOOSE]}$`)\n\n// Caret ranges.\n// Meaning is \"at least and backwards compatible with\"\ncreateToken('LONECARET', '(?:\\\\^)')\n\ncreateToken('CARETTRIM', `(\\\\s*)${src[t.LONECARET]}\\\\s+`, true)\nexports.caretTrimReplace = '$1^'\n\ncreateToken('CARET', `^${src[t.LONECARET]}${src[t.XRANGEPLAIN]}$`)\ncreateToken('CARETLOOSE', `^${src[t.LONECARET]}${src[t.XRANGEPLAINLOOSE]}$`)\n\n// A simple gt/lt/eq thing, or just \"\" to indicate \"any version\"\ncreateToken('COMPARATORLOOSE', `^${src[t.GTLT]}\\\\s*(${src[t.LOOSEPLAIN]})$|^$`)\ncreateToken('COMPARATOR', `^${src[t.GTLT]}\\\\s*(${src[t.FULLPLAIN]})$|^$`)\n\n// An expression to strip any whitespace between the gtlt and the thing\n// it modifies, so that `> 1.2.3` ==> `>1.2.3`\ncreateToken('COMPARATORTRIM', `(\\\\s*)${src[t.GTLT]\n}\\\\s*(${src[t.LOOSEPLAIN]}|${src[t.XRANGEPLAIN]})`, true)\nexports.comparatorTrimReplace = '$1$2$3'\n\n// Something like `1.2.3 - 1.2.4`\n// Note that these all use the loose form, because they'll be\n// checked against either the strict or loose comparator form\n// later.\ncreateToken('HYPHENRANGE', `^\\\\s*(${src[t.XRANGEPLAIN]})` +\n                   `\\\\s+-\\\\s+` +\n                   `(${src[t.XRANGEPLAIN]})` +\n                   `\\\\s*$`)\n\ncreateToken('HYPHENRANGELOOSE', `^\\\\s*(${src[t.XRANGEPLAINLOOSE]})` +\n                        `\\\\s+-\\\\s+` +\n                        `(${src[t.XRANGEPLAINLOOSE]})` +\n                        `\\\\s*$`)\n\n// Star ranges basically just allow anything at all.\ncreateToken('STAR', '(<|>)?=?\\\\s*\\\\*')\n// >=0.0.0 is like a star\ncreateToken('GTE0', '^\\\\s*>=\\\\s*0\\\\.0\\\\.0\\\\s*$')\ncreateToken('GTE0PRE', '^\\\\s*>=\\\\s*0\\\\.0\\\\.0-0\\\\s*$')\n", "'use strict'\n\n// parse out just the options we care about\nconst looseOption = Object.freeze({ loose: true })\nconst emptyOpts = Object.freeze({ })\nconst parseOptions = options => {\n  if (!options) {\n    return emptyOpts\n  }\n\n  if (typeof options !== 'object') {\n    return looseOption\n  }\n\n  return options\n}\nmodule.exports = parseOptions\n", "'use strict'\n\nconst numeric = /^[0-9]+$/\nconst compareIdentifiers = (a, b) => {\n  if (typeof a === 'number' && typeof b === 'number') {\n    return a === b ? 0 : a < b ? -1 : 1\n  }\n\n  const anum = numeric.test(a)\n  const bnum = numeric.test(b)\n\n  if (anum && bnum) {\n    a = +a\n    b = +b\n  }\n\n  return a === b ? 0\n    : (anum && !bnum) ? -1\n    : (bnum && !anum) ? 1\n    : a < b ? -1\n    : 1\n}\n\nconst rcompareIdentifiers = (a, b) => compareIdentifiers(b, a)\n\nmodule.exports = {\n  compareIdentifiers,\n  rcompareIdentifiers,\n}\n", "'use strict'\n\nconst debug = require('../internal/debug')\nconst { MAX_LENGTH, MAX_SAFE_INTEGER } = require('../internal/constants')\nconst { safeRe: re, t } = require('../internal/re')\n\nconst parseOptions = require('../internal/parse-options')\nconst { compareIdentifiers } = require('../internal/identifiers')\nclass SemVer {\n  constructor (version, options) {\n    options = parseOptions(options)\n\n    if (version instanceof SemVer) {\n      if (version.loose === !!options.loose &&\n        version.includePrerelease === !!options.includePrerelease) {\n        return version\n      } else {\n        version = version.version\n      }\n    } else if (typeof version !== 'string') {\n      throw new TypeError(`Invalid version. Must be a string. Got type \"${typeof version}\".`)\n    }\n\n    if (version.length > MAX_LENGTH) {\n      throw new TypeError(\n        `version is longer than ${MAX_LENGTH} characters`\n      )\n    }\n\n    debug('SemVer', version, options)\n    this.options = options\n    this.loose = !!options.loose\n    // this isn't actually relevant for versions, but keep it so that we\n    // don't run into trouble passing this.options around.\n    this.includePrerelease = !!options.includePrerelease\n\n    const m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL])\n\n    if (!m) {\n      throw new TypeError(`Invalid Version: ${version}`)\n    }\n\n    this.raw = version\n\n    // these are actually numbers\n    this.major = +m[1]\n    this.minor = +m[2]\n    this.patch = +m[3]\n\n    if (this.major > MAX_SAFE_INTEGER || this.major < 0) {\n      throw new TypeError('Invalid major version')\n    }\n\n    if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) {\n      throw new TypeError('Invalid minor version')\n    }\n\n    if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) {\n      throw new TypeError('Invalid patch version')\n    }\n\n    // numberify any prerelease numeric ids\n    if (!m[4]) {\n      this.prerelease = []\n    } else {\n      this.prerelease = m[4].split('.').map((id) => {\n        if (/^[0-9]+$/.test(id)) {\n          const num = +id\n          if (num >= 0 && num < MAX_SAFE_INTEGER) {\n            return num\n          }\n        }\n        return id\n      })\n    }\n\n    this.build = m[5] ? m[5].split('.') : []\n    this.format()\n  }\n\n  format () {\n    this.version = `${this.major}.${this.minor}.${this.patch}`\n    if (this.prerelease.length) {\n      this.version += `-${this.prerelease.join('.')}`\n    }\n    return this.version\n  }\n\n  toString () {\n    return this.version\n  }\n\n  compare (other) {\n    debug('SemVer.compare', this.version, this.options, other)\n    if (!(other instanceof SemVer)) {\n      if (typeof other === 'string' && other === this.version) {\n        return 0\n      }\n      other = new SemVer(other, this.options)\n    }\n\n    if (other.version === this.version) {\n      return 0\n    }\n\n    return this.compareMain(other) || this.comparePre(other)\n  }\n\n  compareMain (other) {\n    if (!(other instanceof SemVer)) {\n      other = new SemVer(other, this.options)\n    }\n\n    if (this.major < other.major) {\n      return -1\n    }\n    if (this.major > other.major) {\n      return 1\n    }\n    if (this.minor < other.minor) {\n      return -1\n    }\n    if (this.minor > other.minor) {\n      return 1\n    }\n    if (this.patch < other.patch) {\n      return -1\n    }\n    if (this.patch > other.patch) {\n      return 1\n    }\n    return 0\n  }\n\n  comparePre (other) {\n    if (!(other instanceof SemVer)) {\n      other = new SemVer(other, this.options)\n    }\n\n    // NOT having a prerelease is > having one\n    if (this.prerelease.length && !other.prerelease.length) {\n      return -1\n    } else if (!this.prerelease.length && other.prerelease.length) {\n      return 1\n    } else if (!this.prerelease.length && !other.prerelease.length) {\n      return 0\n    }\n\n    let i = 0\n    do {\n      const a = this.prerelease[i]\n      const b = other.prerelease[i]\n      debug('prerelease compare', i, a, b)\n      if (a === undefined && b === undefined) {\n        return 0\n      } else if (b === undefined) {\n        return 1\n      } else if (a === undefined) {\n        return -1\n      } else if (a === b) {\n        continue\n      } else {\n        return compareIdentifiers(a, b)\n      }\n    } while (++i)\n  }\n\n  compareBuild (other) {\n    if (!(other instanceof SemVer)) {\n      other = new SemVer(other, this.options)\n    }\n\n    let i = 0\n    do {\n      const a = this.build[i]\n      const b = other.build[i]\n      debug('build compare', i, a, b)\n      if (a === undefined && b === undefined) {\n        return 0\n      } else if (b === undefined) {\n        return 1\n      } else if (a === undefined) {\n        return -1\n      } else if (a === b) {\n        continue\n      } else {\n        return compareIdentifiers(a, b)\n      }\n    } while (++i)\n  }\n\n  // preminor will bump the version up to the next minor release, and immediately\n  // down to pre-release. premajor and prepatch work the same way.\n  inc (release, identifier, identifierBase) {\n    if (release.startsWith('pre')) {\n      if (!identifier && identifierBase === false) {\n        throw new Error('invalid increment argument: identifier is empty')\n      }\n      // Avoid an invalid semver results\n      if (identifier) {\n        const match = `-${identifier}`.match(this.options.loose ? re[t.PRERELEASELOOSE] : re[t.PRERELEASE])\n        if (!match || match[1] !== identifier) {\n          throw new Error(`invalid identifier: ${identifier}`)\n        }\n      }\n    }\n\n    switch (release) {\n      case 'premajor':\n        this.prerelease.length = 0\n        this.patch = 0\n        this.minor = 0\n        this.major++\n        this.inc('pre', identifier, identifierBase)\n        break\n      case 'preminor':\n        this.prerelease.length = 0\n        this.patch = 0\n        this.minor++\n        this.inc('pre', identifier, identifierBase)\n        break\n      case 'prepatch':\n        // If this is already a prerelease, it will bump to the next version\n        // drop any prereleases that might already exist, since they are not\n        // relevant at this point.\n        this.prerelease.length = 0\n        this.inc('patch', identifier, identifierBase)\n        this.inc('pre', identifier, identifierBase)\n        break\n      // If the input is a non-prerelease version, this acts the same as\n      // prepatch.\n      case 'prerelease':\n        if (this.prerelease.length === 0) {\n          this.inc('patch', identifier, identifierBase)\n        }\n        this.inc('pre', identifier, identifierBase)\n        break\n      case 'release':\n        if (this.prerelease.length === 0) {\n          throw new Error(`version ${this.raw} is not a prerelease`)\n        }\n        this.prerelease.length = 0\n        break\n\n      case 'major':\n        // If this is a pre-major version, bump up to the same major version.\n        // Otherwise increment major.\n        // 1.0.0-5 bumps to 1.0.0\n        // 1.1.0 bumps to 2.0.0\n        if (\n          this.minor !== 0 ||\n          this.patch !== 0 ||\n          this.prerelease.length === 0\n        ) {\n          this.major++\n        }\n        this.minor = 0\n        this.patch = 0\n        this.prerelease = []\n        break\n      case 'minor':\n        // If this is a pre-minor version, bump up to the same minor version.\n        // Otherwise increment minor.\n        // 1.2.0-5 bumps to 1.2.0\n        // 1.2.1 bumps to 1.3.0\n        if (this.patch !== 0 || this.prerelease.length === 0) {\n          this.minor++\n        }\n        this.patch = 0\n        this.prerelease = []\n        break\n      case 'patch':\n        // If this is not a pre-release version, it will increment the patch.\n        // If it is a pre-release it will bump up to the same patch version.\n        // 1.2.0-5 patches to 1.2.0\n        // 1.2.0 patches to 1.2.1\n        if (this.prerelease.length === 0) {\n          this.patch++\n        }\n        this.prerelease = []\n        break\n      // This probably shouldn't be used publicly.\n      // 1.0.0 'pre' would become 1.0.0-0 which is the wrong direction.\n      case 'pre': {\n        const base = Number(identifierBase) ? 1 : 0\n\n        if (this.prerelease.length === 0) {\n          this.prerelease = [base]\n        } else {\n          let i = this.prerelease.length\n          while (--i >= 0) {\n            if (typeof this.prerelease[i] === 'number') {\n              this.prerelease[i]++\n              i = -2\n            }\n          }\n          if (i === -1) {\n            // didn't increment anything\n            if (identifier === this.prerelease.join('.') && identifierBase === false) {\n              throw new Error('invalid increment argument: identifier already exists')\n            }\n            this.prerelease.push(base)\n          }\n        }\n        if (identifier) {\n          // 1.2.0-beta.1 bumps to 1.2.0-beta.2,\n          // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0\n          let prerelease = [identifier, base]\n          if (identifierBase === false) {\n            prerelease = [identifier]\n          }\n          if (compareIdentifiers(this.prerelease[0], identifier) === 0) {\n            if (isNaN(this.prerelease[1])) {\n              this.prerelease = prerelease\n            }\n          } else {\n            this.prerelease = prerelease\n          }\n        }\n        break\n      }\n      default:\n        throw new Error(`invalid increment argument: ${release}`)\n    }\n    this.raw = this.format()\n    if (this.build.length) {\n      this.raw += `+${this.build.join('.')}`\n    }\n    return this\n  }\n}\n\nmodule.exports = SemVer\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst parse = (version, options, throwErrors = false) => {\n  if (version instanceof SemVer) {\n    return version\n  }\n  try {\n    return new SemVer(version, options)\n  } catch (er) {\n    if (!throwErrors) {\n      return null\n    }\n    throw er\n  }\n}\n\nmodule.exports = parse\n", "'use strict'\n\nconst parse = require('./parse')\nconst valid = (version, options) => {\n  const v = parse(version, options)\n  return v ? v.version : null\n}\nmodule.exports = valid\n", "'use strict'\n\nconst parse = require('./parse')\nconst clean = (version, options) => {\n  const s = parse(version.trim().replace(/^[=v]+/, ''), options)\n  return s ? s.version : null\n}\nmodule.exports = clean\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\n\nconst inc = (version, release, options, identifier, identifierBase) => {\n  if (typeof (options) === 'string') {\n    identifierBase = identifier\n    identifier = options\n    options = undefined\n  }\n\n  try {\n    return new SemVer(\n      version instanceof SemVer ? version.version : version,\n      options\n    ).inc(release, identifier, identifierBase).version\n  } catch (er) {\n    return null\n  }\n}\nmodule.exports = inc\n", "'use strict'\n\nconst parse = require('./parse.js')\n\nconst diff = (version1, version2) => {\n  const v1 = parse(version1, null, true)\n  const v2 = parse(version2, null, true)\n  const comparison = v1.compare(v2)\n\n  if (comparison === 0) {\n    return null\n  }\n\n  const v1Higher = comparison > 0\n  const highVersion = v1Higher ? v1 : v2\n  const lowVersion = v1Higher ? v2 : v1\n  const highHasPre = !!highVersion.prerelease.length\n  const lowHasPre = !!lowVersion.prerelease.length\n\n  if (lowHasPre && !highHasPre) {\n    // Going from prerelease -> no prerelease requires some special casing\n\n    // If the low version has only a major, then it will always be a major\n    // Some examples:\n    // 1.0.0-1 -> 1.0.0\n    // 1.0.0-1 -> 1.1.1\n    // 1.0.0-1 -> 2.0.0\n    if (!lowVersion.patch && !lowVersion.minor) {\n      return 'major'\n    }\n\n    // If the main part has no difference\n    if (lowVersion.compareMain(highVersion) === 0) {\n      if (lowVersion.minor && !lowVersion.patch) {\n        return 'minor'\n      }\n      return 'patch'\n    }\n  }\n\n  // add the `pre` prefix if we are going to a prerelease version\n  const prefix = highHasPre ? 'pre' : ''\n\n  if (v1.major !== v2.major) {\n    return prefix + 'major'\n  }\n\n  if (v1.minor !== v2.minor) {\n    return prefix + 'minor'\n  }\n\n  if (v1.patch !== v2.patch) {\n    return prefix + 'patch'\n  }\n\n  // high and low are preleases\n  return 'prerelease'\n}\n\nmodule.exports = diff\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst major = (a, loose) => new SemVer(a, loose).major\nmodule.exports = major\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst minor = (a, loose) => new SemVer(a, loose).minor\nmodule.exports = minor\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst patch = (a, loose) => new SemVer(a, loose).patch\nmodule.exports = patch\n", "'use strict'\n\nconst parse = require('./parse')\nconst prerelease = (version, options) => {\n  const parsed = parse(version, options)\n  return (parsed && parsed.prerelease.length) ? parsed.prerelease : null\n}\nmodule.exports = prerelease\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst compare = (a, b, loose) =>\n  new SemVer(a, loose).compare(new SemVer(b, loose))\n\nmodule.exports = compare\n", "'use strict'\n\nconst compare = require('./compare')\nconst rcompare = (a, b, loose) => compare(b, a, loose)\nmodule.exports = rcompare\n", "'use strict'\n\nconst compare = require('./compare')\nconst compareLoose = (a, b) => compare(a, b, true)\nmodule.exports = compareLoose\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst compareBuild = (a, b, loose) => {\n  const versionA = new SemVer(a, loose)\n  const versionB = new SemVer(b, loose)\n  return versionA.compare(versionB) || versionA.compareBuild(versionB)\n}\nmodule.exports = compareBuild\n", "'use strict'\n\nconst compareBuild = require('./compare-build')\nconst sort = (list, loose) => list.sort((a, b) => compareBuild(a, b, loose))\nmodule.exports = sort\n", "'use strict'\n\nconst compareBuild = require('./compare-build')\nconst rsort = (list, loose) => list.sort((a, b) => compareBuild(b, a, loose))\nmodule.exports = rsort\n", "'use strict'\n\nconst compare = require('./compare')\nconst gt = (a, b, loose) => compare(a, b, loose) > 0\nmodule.exports = gt\n", "'use strict'\n\nconst compare = require('./compare')\nconst lt = (a, b, loose) => compare(a, b, loose) < 0\nmodule.exports = lt\n", "'use strict'\n\nconst compare = require('./compare')\nconst eq = (a, b, loose) => compare(a, b, loose) === 0\nmodule.exports = eq\n", "'use strict'\n\nconst compare = require('./compare')\nconst neq = (a, b, loose) => compare(a, b, loose) !== 0\nmodule.exports = neq\n", "'use strict'\n\nconst compare = require('./compare')\nconst gte = (a, b, loose) => compare(a, b, loose) >= 0\nmodule.exports = gte\n", "'use strict'\n\nconst compare = require('./compare')\nconst lte = (a, b, loose) => compare(a, b, loose) <= 0\nmodule.exports = lte\n", "'use strict'\n\nconst eq = require('./eq')\nconst neq = require('./neq')\nconst gt = require('./gt')\nconst gte = require('./gte')\nconst lt = require('./lt')\nconst lte = require('./lte')\n\nconst cmp = (a, op, b, loose) => {\n  switch (op) {\n    case '===':\n      if (typeof a === 'object') {\n        a = a.version\n      }\n      if (typeof b === 'object') {\n        b = b.version\n      }\n      return a === b\n\n    case '!==':\n      if (typeof a === 'object') {\n        a = a.version\n      }\n      if (typeof b === 'object') {\n        b = b.version\n      }\n      return a !== b\n\n    case '':\n    case '=':\n    case '==':\n      return eq(a, b, loose)\n\n    case '!=':\n      return neq(a, b, loose)\n\n    case '>':\n      return gt(a, b, loose)\n\n    case '>=':\n      return gte(a, b, loose)\n\n    case '<':\n      return lt(a, b, loose)\n\n    case '<=':\n      return lte(a, b, loose)\n\n    default:\n      throw new TypeError(`Invalid operator: ${op}`)\n  }\n}\nmodule.exports = cmp\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst parse = require('./parse')\nconst { safeRe: re, t } = require('../internal/re')\n\nconst coerce = (version, options) => {\n  if (version instanceof SemVer) {\n    return version\n  }\n\n  if (typeof version === 'number') {\n    version = String(version)\n  }\n\n  if (typeof version !== 'string') {\n    return null\n  }\n\n  options = options || {}\n\n  let match = null\n  if (!options.rtl) {\n    match = version.match(options.includePrerelease ? re[t.COERCEFULL] : re[t.COERCE])\n  } else {\n    // Find the right-most coercible string that does not share\n    // a terminus with a more left-ward coercible string.\n    // Eg, '1.2.3.4' wants to coerce '2.3.4', not '3.4' or '4'\n    // With includePrerelease option set, '1.2.3.4-rc' wants to coerce '2.3.4-rc', not '2.3.4'\n    //\n    // Walk through the string checking with a /g regexp\n    // Manually set the index so as to pick up overlapping matches.\n    // Stop when we get a match that ends at the string end, since no\n    // coercible string can be more right-ward without the same terminus.\n    const coerceRtlRegex = options.includePrerelease ? re[t.COERCERTLFULL] : re[t.COERCERTL]\n    let next\n    while ((next = coerceRtlRegex.exec(version)) &&\n        (!match || match.index + match[0].length !== version.length)\n    ) {\n      if (!match ||\n            next.index + next[0].length !== match.index + match[0].length) {\n        match = next\n      }\n      coerceRtlRegex.lastIndex = next.index + next[1].length + next[2].length\n    }\n    // leave it in a clean state\n    coerceRtlRegex.lastIndex = -1\n  }\n\n  if (match === null) {\n    return null\n  }\n\n  const major = match[2]\n  const minor = match[3] || '0'\n  const patch = match[4] || '0'\n  const prerelease = options.includePrerelease && match[5] ? `-${match[5]}` : ''\n  const build = options.includePrerelease && match[6] ? `+${match[6]}` : ''\n\n  return parse(`${major}.${minor}.${patch}${prerelease}${build}`, options)\n}\nmodule.exports = coerce\n", "'use strict'\n\nclass LRUCache {\n  constructor () {\n    this.max = 1000\n    this.map = new Map()\n  }\n\n  get (key) {\n    const value = this.map.get(key)\n    if (value === undefined) {\n      return undefined\n    } else {\n      // Remove the key from the map and add it to the end\n      this.map.delete(key)\n      this.map.set(key, value)\n      return value\n    }\n  }\n\n  delete (key) {\n    return this.map.delete(key)\n  }\n\n  set (key, value) {\n    const deleted = this.delete(key)\n\n    if (!deleted && value !== undefined) {\n      // If cache is full, delete the least recently used item\n      if (this.map.size >= this.max) {\n        const firstKey = this.map.keys().next().value\n        this.delete(firstKey)\n      }\n\n      this.map.set(key, value)\n    }\n\n    return this\n  }\n}\n\nmodule.exports = LRUCache\n", "'use strict'\n\nconst SPACE_CHARACTERS = /\\s+/g\n\n// hoisted class for cyclic dependency\nclass Range {\n  constructor (range, options) {\n    options = parseOptions(options)\n\n    if (range instanceof Range) {\n      if (\n        range.loose === !!options.loose &&\n        range.includePrerelease === !!options.includePrerelease\n      ) {\n        return range\n      } else {\n        return new Range(range.raw, options)\n      }\n    }\n\n    if (range instanceof Comparator) {\n      // just put it in the set and return\n      this.raw = range.value\n      this.set = [[range]]\n      this.formatted = undefined\n      return this\n    }\n\n    this.options = options\n    this.loose = !!options.loose\n    this.includePrerelease = !!options.includePrerelease\n\n    // First reduce all whitespace as much as possible so we do not have to rely\n    // on potentially slow regexes like \\s*. This is then stored and used for\n    // future error messages as well.\n    this.raw = range.trim().replace(SPACE_CHARACTERS, ' ')\n\n    // First, split on ||\n    this.set = this.raw\n      .split('||')\n      // map the range to a 2d array of comparators\n      .map(r => this.parseRange(r.trim()))\n      // throw out any comparator lists that are empty\n      // this generally means that it was not a valid range, which is allowed\n      // in loose mode, but will still throw if the WHOLE range is invalid.\n      .filter(c => c.length)\n\n    if (!this.set.length) {\n      throw new TypeError(`Invalid SemVer Range: ${this.raw}`)\n    }\n\n    // if we have any that are not the null set, throw out null sets.\n    if (this.set.length > 1) {\n      // keep the first one, in case they're all null sets\n      const first = this.set[0]\n      this.set = this.set.filter(c => !isNullSet(c[0]))\n      if (this.set.length === 0) {\n        this.set = [first]\n      } else if (this.set.length > 1) {\n        // if we have any that are *, then the range is just *\n        for (const c of this.set) {\n          if (c.length === 1 && isAny(c[0])) {\n            this.set = [c]\n            break\n          }\n        }\n      }\n    }\n\n    this.formatted = undefined\n  }\n\n  get range () {\n    if (this.formatted === undefined) {\n      this.formatted = ''\n      for (let i = 0; i < this.set.length; i++) {\n        if (i > 0) {\n          this.formatted += '||'\n        }\n        const comps = this.set[i]\n        for (let k = 0; k < comps.length; k++) {\n          if (k > 0) {\n            this.formatted += ' '\n          }\n          this.formatted += comps[k].toString().trim()\n        }\n      }\n    }\n    return this.formatted\n  }\n\n  format () {\n    return this.range\n  }\n\n  toString () {\n    return this.range\n  }\n\n  parseRange (range) {\n    // memoize range parsing for performance.\n    // this is a very hot path, and fully deterministic.\n    const memoOpts =\n      (this.options.includePrerelease && FLAG_INCLUDE_PRERELEASE) |\n      (this.options.loose && FLAG_LOOSE)\n    const memoKey = memoOpts + ':' + range\n    const cached = cache.get(memoKey)\n    if (cached) {\n      return cached\n    }\n\n    const loose = this.options.loose\n    // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4`\n    const hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE]\n    range = range.replace(hr, hyphenReplace(this.options.includePrerelease))\n    debug('hyphen replace', range)\n\n    // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5`\n    range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace)\n    debug('comparator trim', range)\n\n    // `~ 1.2.3` => `~1.2.3`\n    range = range.replace(re[t.TILDETRIM], tildeTrimReplace)\n    debug('tilde trim', range)\n\n    // `^ 1.2.3` => `^1.2.3`\n    range = range.replace(re[t.CARETTRIM], caretTrimReplace)\n    debug('caret trim', range)\n\n    // At this point, the range is completely trimmed and\n    // ready to be split into comparators.\n\n    let rangeList = range\n      .split(' ')\n      .map(comp => parseComparator(comp, this.options))\n      .join(' ')\n      .split(/\\s+/)\n      // >=0.0.0 is equivalent to *\n      .map(comp => replaceGTE0(comp, this.options))\n\n    if (loose) {\n      // in loose mode, throw out any that are not valid comparators\n      rangeList = rangeList.filter(comp => {\n        debug('loose invalid filter', comp, this.options)\n        return !!comp.match(re[t.COMPARATORLOOSE])\n      })\n    }\n    debug('range list', rangeList)\n\n    // if any comparators are the null set, then replace with JUST null set\n    // if more than one comparator, remove any * comparators\n    // also, don't include the same comparator more than once\n    const rangeMap = new Map()\n    const comparators = rangeList.map(comp => new Comparator(comp, this.options))\n    for (const comp of comparators) {\n      if (isNullSet(comp)) {\n        return [comp]\n      }\n      rangeMap.set(comp.value, comp)\n    }\n    if (rangeMap.size > 1 && rangeMap.has('')) {\n      rangeMap.delete('')\n    }\n\n    const result = [...rangeMap.values()]\n    cache.set(memoKey, result)\n    return result\n  }\n\n  intersects (range, options) {\n    if (!(range instanceof Range)) {\n      throw new TypeError('a Range is required')\n    }\n\n    return this.set.some((thisComparators) => {\n      return (\n        isSatisfiable(thisComparators, options) &&\n        range.set.some((rangeComparators) => {\n          return (\n            isSatisfiable(rangeComparators, options) &&\n            thisComparators.every((thisComparator) => {\n              return rangeComparators.every((rangeComparator) => {\n                return thisComparator.intersects(rangeComparator, options)\n              })\n            })\n          )\n        })\n      )\n    })\n  }\n\n  // if ANY of the sets match ALL of its comparators, then pass\n  test (version) {\n    if (!version) {\n      return false\n    }\n\n    if (typeof version === 'string') {\n      try {\n        version = new SemVer(version, this.options)\n      } catch (er) {\n        return false\n      }\n    }\n\n    for (let i = 0; i < this.set.length; i++) {\n      if (testSet(this.set[i], version, this.options)) {\n        return true\n      }\n    }\n    return false\n  }\n}\n\nmodule.exports = Range\n\nconst LRU = require('../internal/lrucache')\nconst cache = new LRU()\n\nconst parseOptions = require('../internal/parse-options')\nconst Comparator = require('./comparator')\nconst debug = require('../internal/debug')\nconst SemVer = require('./semver')\nconst {\n  safeRe: re,\n  t,\n  comparatorTrimReplace,\n  tildeTrimReplace,\n  caretTrimReplace,\n} = require('../internal/re')\nconst { FLAG_INCLUDE_PRERELEASE, FLAG_LOOSE } = require('../internal/constants')\n\nconst isNullSet = c => c.value === '<0.0.0-0'\nconst isAny = c => c.value === ''\n\n// take a set of comparators and determine whether there\n// exists a version which can satisfy it\nconst isSatisfiable = (comparators, options) => {\n  let result = true\n  const remainingComparators = comparators.slice()\n  let testComparator = remainingComparators.pop()\n\n  while (result && remainingComparators.length) {\n    result = remainingComparators.every((otherComparator) => {\n      return testComparator.intersects(otherComparator, options)\n    })\n\n    testComparator = remainingComparators.pop()\n  }\n\n  return result\n}\n\n// comprised of xranges, tildes, stars, and gtlt's at this point.\n// already replaced the hyphen ranges\n// turn into a set of JUST comparators.\nconst parseComparator = (comp, options) => {\n  comp = comp.replace(re[t.BUILD], '')\n  debug('comp', comp, options)\n  comp = replaceCarets(comp, options)\n  debug('caret', comp)\n  comp = replaceTildes(comp, options)\n  debug('tildes', comp)\n  comp = replaceXRanges(comp, options)\n  debug('xrange', comp)\n  comp = replaceStars(comp, options)\n  debug('stars', comp)\n  return comp\n}\n\nconst isX = id => !id || id.toLowerCase() === 'x' || id === '*'\n\n// ~, ~> --> * (any, kinda silly)\n// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0-0\n// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0-0\n// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0-0\n// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0-0\n// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0-0\n// ~0.0.1 --> >=0.0.1 <0.1.0-0\nconst replaceTildes = (comp, options) => {\n  return comp\n    .trim()\n    .split(/\\s+/)\n    .map((c) => replaceTilde(c, options))\n    .join(' ')\n}\n\nconst replaceTilde = (comp, options) => {\n  const r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE]\n  return comp.replace(r, (_, M, m, p, pr) => {\n    debug('tilde', comp, _, M, m, p, pr)\n    let ret\n\n    if (isX(M)) {\n      ret = ''\n    } else if (isX(m)) {\n      ret = `>=${M}.0.0 <${+M + 1}.0.0-0`\n    } else if (isX(p)) {\n      // ~1.2 == >=1.2.0 <1.3.0-0\n      ret = `>=${M}.${m}.0 <${M}.${+m + 1}.0-0`\n    } else if (pr) {\n      debug('replaceTilde pr', pr)\n      ret = `>=${M}.${m}.${p}-${pr\n      } <${M}.${+m + 1}.0-0`\n    } else {\n      // ~1.2.3 == >=1.2.3 <1.3.0-0\n      ret = `>=${M}.${m}.${p\n      } <${M}.${+m + 1}.0-0`\n    }\n\n    debug('tilde return', ret)\n    return ret\n  })\n}\n\n// ^ --> * (any, kinda silly)\n// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0-0\n// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0-0\n// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0-0\n// ^1.2.3 --> >=1.2.3 <2.0.0-0\n// ^1.2.0 --> >=1.2.0 <2.0.0-0\n// ^0.0.1 --> >=0.0.1 <0.0.2-0\n// ^0.1.0 --> >=0.1.0 <0.2.0-0\nconst replaceCarets = (comp, options) => {\n  return comp\n    .trim()\n    .split(/\\s+/)\n    .map((c) => replaceCaret(c, options))\n    .join(' ')\n}\n\nconst replaceCaret = (comp, options) => {\n  debug('caret', comp, options)\n  const r = options.loose ? re[t.CARETLOOSE] : re[t.CARET]\n  const z = options.includePrerelease ? '-0' : ''\n  return comp.replace(r, (_, M, m, p, pr) => {\n    debug('caret', comp, _, M, m, p, pr)\n    let ret\n\n    if (isX(M)) {\n      ret = ''\n    } else if (isX(m)) {\n      ret = `>=${M}.0.0${z} <${+M + 1}.0.0-0`\n    } else if (isX(p)) {\n      if (M === '0') {\n        ret = `>=${M}.${m}.0${z} <${M}.${+m + 1}.0-0`\n      } else {\n        ret = `>=${M}.${m}.0${z} <${+M + 1}.0.0-0`\n      }\n    } else if (pr) {\n      debug('replaceCaret pr', pr)\n      if (M === '0') {\n        if (m === '0') {\n          ret = `>=${M}.${m}.${p}-${pr\n          } <${M}.${m}.${+p + 1}-0`\n        } else {\n          ret = `>=${M}.${m}.${p}-${pr\n          } <${M}.${+m + 1}.0-0`\n        }\n      } else {\n        ret = `>=${M}.${m}.${p}-${pr\n        } <${+M + 1}.0.0-0`\n      }\n    } else {\n      debug('no pr')\n      if (M === '0') {\n        if (m === '0') {\n          ret = `>=${M}.${m}.${p\n          }${z} <${M}.${m}.${+p + 1}-0`\n        } else {\n          ret = `>=${M}.${m}.${p\n          }${z} <${M}.${+m + 1}.0-0`\n        }\n      } else {\n        ret = `>=${M}.${m}.${p\n        } <${+M + 1}.0.0-0`\n      }\n    }\n\n    debug('caret return', ret)\n    return ret\n  })\n}\n\nconst replaceXRanges = (comp, options) => {\n  debug('replaceXRanges', comp, options)\n  return comp\n    .split(/\\s+/)\n    .map((c) => replaceXRange(c, options))\n    .join(' ')\n}\n\nconst replaceXRange = (comp, options) => {\n  comp = comp.trim()\n  const r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE]\n  return comp.replace(r, (ret, gtlt, M, m, p, pr) => {\n    debug('xRange', comp, ret, gtlt, M, m, p, pr)\n    const xM = isX(M)\n    const xm = xM || isX(m)\n    const xp = xm || isX(p)\n    const anyX = xp\n\n    if (gtlt === '=' && anyX) {\n      gtlt = ''\n    }\n\n    // if we're including prereleases in the match, then we need\n    // to fix this to -0, the lowest possible prerelease value\n    pr = options.includePrerelease ? '-0' : ''\n\n    if (xM) {\n      if (gtlt === '>' || gtlt === '<') {\n        // nothing is allowed\n        ret = '<0.0.0-0'\n      } else {\n        // nothing is forbidden\n        ret = '*'\n      }\n    } else if (gtlt && anyX) {\n      // we know patch is an x, because we have any x at all.\n      // replace X with 0\n      if (xm) {\n        m = 0\n      }\n      p = 0\n\n      if (gtlt === '>') {\n        // >1 => >=2.0.0\n        // >1.2 => >=1.3.0\n        gtlt = '>='\n        if (xm) {\n          M = +M + 1\n          m = 0\n          p = 0\n        } else {\n          m = +m + 1\n          p = 0\n        }\n      } else if (gtlt === '<=') {\n        // <=0.7.x is actually <0.8.0, since any 0.7.x should\n        // pass.  Similarly, <=7.x is actually <8.0.0, etc.\n        gtlt = '<'\n        if (xm) {\n          M = +M + 1\n        } else {\n          m = +m + 1\n        }\n      }\n\n      if (gtlt === '<') {\n        pr = '-0'\n      }\n\n      ret = `${gtlt + M}.${m}.${p}${pr}`\n    } else if (xm) {\n      ret = `>=${M}.0.0${pr} <${+M + 1}.0.0-0`\n    } else if (xp) {\n      ret = `>=${M}.${m}.0${pr\n      } <${M}.${+m + 1}.0-0`\n    }\n\n    debug('xRange return', ret)\n\n    return ret\n  })\n}\n\n// Because * is AND-ed with everything else in the comparator,\n// and '' means \"any version\", just remove the *s entirely.\nconst replaceStars = (comp, options) => {\n  debug('replaceStars', comp, options)\n  // Looseness is ignored here.  star is always as loose as it gets!\n  return comp\n    .trim()\n    .replace(re[t.STAR], '')\n}\n\nconst replaceGTE0 = (comp, options) => {\n  debug('replaceGTE0', comp, options)\n  return comp\n    .trim()\n    .replace(re[options.includePrerelease ? t.GTE0PRE : t.GTE0], '')\n}\n\n// This function is passed to string.replace(re[t.HYPHENRANGE])\n// M, m, patch, prerelease, build\n// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5\n// 1.2.3 - 3.4 => >=1.2.0 <3.5.0-0 Any 3.4.x will do\n// 1.2 - 3.4 => >=1.2.0 <3.5.0-0\n// TODO build?\nconst hyphenReplace = incPr => ($0,\n  from, fM, fm, fp, fpr, fb,\n  to, tM, tm, tp, tpr) => {\n  if (isX(fM)) {\n    from = ''\n  } else if (isX(fm)) {\n    from = `>=${fM}.0.0${incPr ? '-0' : ''}`\n  } else if (isX(fp)) {\n    from = `>=${fM}.${fm}.0${incPr ? '-0' : ''}`\n  } else if (fpr) {\n    from = `>=${from}`\n  } else {\n    from = `>=${from}${incPr ? '-0' : ''}`\n  }\n\n  if (isX(tM)) {\n    to = ''\n  } else if (isX(tm)) {\n    to = `<${+tM + 1}.0.0-0`\n  } else if (isX(tp)) {\n    to = `<${tM}.${+tm + 1}.0-0`\n  } else if (tpr) {\n    to = `<=${tM}.${tm}.${tp}-${tpr}`\n  } else if (incPr) {\n    to = `<${tM}.${tm}.${+tp + 1}-0`\n  } else {\n    to = `<=${to}`\n  }\n\n  return `${from} ${to}`.trim()\n}\n\nconst testSet = (set, version, options) => {\n  for (let i = 0; i < set.length; i++) {\n    if (!set[i].test(version)) {\n      return false\n    }\n  }\n\n  if (version.prerelease.length && !options.includePrerelease) {\n    // Find the set of versions that are allowed to have prereleases\n    // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0\n    // That should allow `1.2.3-pr.2` to pass.\n    // However, `1.2.4-alpha.notready` should NOT be allowed,\n    // even though it's within the range set by the comparators.\n    for (let i = 0; i < set.length; i++) {\n      debug(set[i].semver)\n      if (set[i].semver === Comparator.ANY) {\n        continue\n      }\n\n      if (set[i].semver.prerelease.length > 0) {\n        const allowed = set[i].semver\n        if (allowed.major === version.major &&\n            allowed.minor === version.minor &&\n            allowed.patch === version.patch) {\n          return true\n        }\n      }\n    }\n\n    // Version has a -pre, but it's not one of the ones we like.\n    return false\n  }\n\n  return true\n}\n", "'use strict'\n\nconst ANY = Symbol('SemVer ANY')\n// hoisted class for cyclic dependency\nclass Comparator {\n  static get ANY () {\n    return ANY\n  }\n\n  constructor (comp, options) {\n    options = parseOptions(options)\n\n    if (comp instanceof Comparator) {\n      if (comp.loose === !!options.loose) {\n        return comp\n      } else {\n        comp = comp.value\n      }\n    }\n\n    comp = comp.trim().split(/\\s+/).join(' ')\n    debug('comparator', comp, options)\n    this.options = options\n    this.loose = !!options.loose\n    this.parse(comp)\n\n    if (this.semver === ANY) {\n      this.value = ''\n    } else {\n      this.value = this.operator + this.semver.version\n    }\n\n    debug('comp', this)\n  }\n\n  parse (comp) {\n    const r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR]\n    const m = comp.match(r)\n\n    if (!m) {\n      throw new TypeError(`Invalid comparator: ${comp}`)\n    }\n\n    this.operator = m[1] !== undefined ? m[1] : ''\n    if (this.operator === '=') {\n      this.operator = ''\n    }\n\n    // if it literally is just '>' or '' then allow anything.\n    if (!m[2]) {\n      this.semver = ANY\n    } else {\n      this.semver = new SemVer(m[2], this.options.loose)\n    }\n  }\n\n  toString () {\n    return this.value\n  }\n\n  test (version) {\n    debug('Comparator.test', version, this.options.loose)\n\n    if (this.semver === ANY || version === ANY) {\n      return true\n    }\n\n    if (typeof version === 'string') {\n      try {\n        version = new SemVer(version, this.options)\n      } catch (er) {\n        return false\n      }\n    }\n\n    return cmp(version, this.operator, this.semver, this.options)\n  }\n\n  intersects (comp, options) {\n    if (!(comp instanceof Comparator)) {\n      throw new TypeError('a Comparator is required')\n    }\n\n    if (this.operator === '') {\n      if (this.value === '') {\n        return true\n      }\n      return new Range(comp.value, options).test(this.value)\n    } else if (comp.operator === '') {\n      if (comp.value === '') {\n        return true\n      }\n      return new Range(this.value, options).test(comp.semver)\n    }\n\n    options = parseOptions(options)\n\n    // Special cases where nothing can possibly be lower\n    if (options.includePrerelease &&\n      (this.value === '<0.0.0-0' || comp.value === '<0.0.0-0')) {\n      return false\n    }\n    if (!options.includePrerelease &&\n      (this.value.startsWith('<0.0.0') || comp.value.startsWith('<0.0.0'))) {\n      return false\n    }\n\n    // Same direction increasing (> or >=)\n    if (this.operator.startsWith('>') && comp.operator.startsWith('>')) {\n      return true\n    }\n    // Same direction decreasing (< or <=)\n    if (this.operator.startsWith('<') && comp.operator.startsWith('<')) {\n      return true\n    }\n    // same SemVer and both sides are inclusive (<= or >=)\n    if (\n      (this.semver.version === comp.semver.version) &&\n      this.operator.includes('=') && comp.operator.includes('=')) {\n      return true\n    }\n    // opposite directions less than\n    if (cmp(this.semver, '<', comp.semver, options) &&\n      this.operator.startsWith('>') && comp.operator.startsWith('<')) {\n      return true\n    }\n    // opposite directions greater than\n    if (cmp(this.semver, '>', comp.semver, options) &&\n      this.operator.startsWith('<') && comp.operator.startsWith('>')) {\n      return true\n    }\n    return false\n  }\n}\n\nmodule.exports = Comparator\n\nconst parseOptions = require('../internal/parse-options')\nconst { safeRe: re, t } = require('../internal/re')\nconst cmp = require('../functions/cmp')\nconst debug = require('../internal/debug')\nconst SemVer = require('./semver')\nconst Range = require('./range')\n", "'use strict'\n\nconst Range = require('../classes/range')\nconst satisfies = (version, range, options) => {\n  try {\n    range = new Range(range, options)\n  } catch (er) {\n    return false\n  }\n  return range.test(version)\n}\nmodule.exports = satisfies\n", "'use strict'\n\nconst Range = require('../classes/range')\n\n// Mostly just for testing and legacy API reasons\nconst toComparators = (range, options) =>\n  new Range(range, options).set\n    .map(comp => comp.map(c => c.value).join(' ').trim().split(' '))\n\nmodule.exports = toComparators\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\n\nconst maxSatisfying = (versions, range, options) => {\n  let max = null\n  let maxSV = null\n  let rangeObj = null\n  try {\n    rangeObj = new Range(range, options)\n  } catch (er) {\n    return null\n  }\n  versions.forEach((v) => {\n    if (rangeObj.test(v)) {\n      // satisfies(v, range, options)\n      if (!max || maxSV.compare(v) === -1) {\n        // compare(max, v, true)\n        max = v\n        maxSV = new SemVer(max, options)\n      }\n    }\n  })\n  return max\n}\nmodule.exports = maxSatisfying\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\nconst minSatisfying = (versions, range, options) => {\n  let min = null\n  let minSV = null\n  let rangeObj = null\n  try {\n    rangeObj = new Range(range, options)\n  } catch (er) {\n    return null\n  }\n  versions.forEach((v) => {\n    if (rangeObj.test(v)) {\n      // satisfies(v, range, options)\n      if (!min || minSV.compare(v) === 1) {\n        // compare(min, v, true)\n        min = v\n        minSV = new SemVer(min, options)\n      }\n    }\n  })\n  return min\n}\nmodule.exports = minSatisfying\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\nconst gt = require('../functions/gt')\n\nconst minVersion = (range, loose) => {\n  range = new Range(range, loose)\n\n  let minver = new SemVer('0.0.0')\n  if (range.test(minver)) {\n    return minver\n  }\n\n  minver = new SemVer('0.0.0-0')\n  if (range.test(minver)) {\n    return minver\n  }\n\n  minver = null\n  for (let i = 0; i < range.set.length; ++i) {\n    const comparators = range.set[i]\n\n    let setMin = null\n    comparators.forEach((comparator) => {\n      // Clone to avoid manipulating the comparator's semver object.\n      const compver = new SemVer(comparator.semver.version)\n      switch (comparator.operator) {\n        case '>':\n          if (compver.prerelease.length === 0) {\n            compver.patch++\n          } else {\n            compver.prerelease.push(0)\n          }\n          compver.raw = compver.format()\n          /* fallthrough */\n        case '':\n        case '>=':\n          if (!setMin || gt(compver, setMin)) {\n            setMin = compver\n          }\n          break\n        case '<':\n        case '<=':\n          /* Ignore maximum versions */\n          break\n        /* istanbul ignore next */\n        default:\n          throw new Error(`Unexpected operation: ${comparator.operator}`)\n      }\n    })\n    if (setMin && (!minver || gt(minver, setMin))) {\n      minver = setMin\n    }\n  }\n\n  if (minver && range.test(minver)) {\n    return minver\n  }\n\n  return null\n}\nmodule.exports = minVersion\n", "'use strict'\n\nconst Range = require('../classes/range')\nconst validRange = (range, options) => {\n  try {\n    // Return '*' instead of '' so that truthiness works.\n    // This will throw if it's invalid anyway\n    return new Range(range, options).range || '*'\n  } catch (er) {\n    return null\n  }\n}\nmodule.exports = validRange\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst Comparator = require('../classes/comparator')\nconst { ANY } = Comparator\nconst Range = require('../classes/range')\nconst satisfies = require('../functions/satisfies')\nconst gt = require('../functions/gt')\nconst lt = require('../functions/lt')\nconst lte = require('../functions/lte')\nconst gte = require('../functions/gte')\n\nconst outside = (version, range, hilo, options) => {\n  version = new SemVer(version, options)\n  range = new Range(range, options)\n\n  let gtfn, ltefn, ltfn, comp, ecomp\n  switch (hilo) {\n    case '>':\n      gtfn = gt\n      ltefn = lte\n      ltfn = lt\n      comp = '>'\n      ecomp = '>='\n      break\n    case '<':\n      gtfn = lt\n      ltefn = gte\n      ltfn = gt\n      comp = '<'\n      ecomp = '<='\n      break\n    default:\n      throw new TypeError('Must provide a hilo val of \"<\" or \">\"')\n  }\n\n  // If it satisfies the range it is not outside\n  if (satisfies(version, range, options)) {\n    return false\n  }\n\n  // From now on, variable terms are as if we're in \"gtr\" mode.\n  // but note that everything is flipped for the \"ltr\" function.\n\n  for (let i = 0; i < range.set.length; ++i) {\n    const comparators = range.set[i]\n\n    let high = null\n    let low = null\n\n    comparators.forEach((comparator) => {\n      if (comparator.semver === ANY) {\n        comparator = new Comparator('>=0.0.0')\n      }\n      high = high || comparator\n      low = low || comparator\n      if (gtfn(comparator.semver, high.semver, options)) {\n        high = comparator\n      } else if (ltfn(comparator.semver, low.semver, options)) {\n        low = comparator\n      }\n    })\n\n    // If the edge version comparator has a operator then our version\n    // isn't outside it\n    if (high.operator === comp || high.operator === ecomp) {\n      return false\n    }\n\n    // If the lowest version comparator has an operator and our version\n    // is less than it then it isn't higher than the range\n    if ((!low.operator || low.operator === comp) &&\n        ltefn(version, low.semver)) {\n      return false\n    } else if (low.operator === ecomp && ltfn(version, low.semver)) {\n      return false\n    }\n  }\n  return true\n}\n\nmodule.exports = outside\n", "'use strict'\n\n// Determine if version is greater than all the versions possible in the range.\nconst outside = require('./outside')\nconst gtr = (version, range, options) => outside(version, range, '>', options)\nmodule.exports = gtr\n", "'use strict'\n\nconst outside = require('./outside')\n// Determine if version is less than all the versions possible in the range\nconst ltr = (version, range, options) => outside(version, range, '<', options)\nmodule.exports = ltr\n", "'use strict'\n\nconst Range = require('../classes/range')\nconst intersects = (r1, r2, options) => {\n  r1 = new Range(r1, options)\n  r2 = new Range(r2, options)\n  return r1.intersects(r2, options)\n}\nmodule.exports = intersects\n", "'use strict'\n\n// given a set of versions and a range, create a \"simplified\" range\n// that includes the same versions that the original range does\n// If the original range is shorter than the simplified one, return that.\nconst satisfies = require('../functions/satisfies.js')\nconst compare = require('../functions/compare.js')\nmodule.exports = (versions, range, options) => {\n  const set = []\n  let first = null\n  let prev = null\n  const v = versions.sort((a, b) => compare(a, b, options))\n  for (const version of v) {\n    const included = satisfies(version, range, options)\n    if (included) {\n      prev = version\n      if (!first) {\n        first = version\n      }\n    } else {\n      if (prev) {\n        set.push([first, prev])\n      }\n      prev = null\n      first = null\n    }\n  }\n  if (first) {\n    set.push([first, null])\n  }\n\n  const ranges = []\n  for (const [min, max] of set) {\n    if (min === max) {\n      ranges.push(min)\n    } else if (!max && min === v[0]) {\n      ranges.push('*')\n    } else if (!max) {\n      ranges.push(`>=${min}`)\n    } else if (min === v[0]) {\n      ranges.push(`<=${max}`)\n    } else {\n      ranges.push(`${min} - ${max}`)\n    }\n  }\n  const simplified = ranges.join(' || ')\n  const original = typeof range.raw === 'string' ? range.raw : String(range)\n  return simplified.length < original.length ? simplified : range\n}\n", "'use strict'\n\nconst Range = require('../classes/range.js')\nconst Comparator = require('../classes/comparator.js')\nconst { ANY } = Comparator\nconst satisfies = require('../functions/satisfies.js')\nconst compare = require('../functions/compare.js')\n\n// Complex range `r1 || r2 || ...` is a subset of `R1 || R2 || ...` iff:\n// - Every simple range `r1, r2, ...` is a null set, OR\n// - Every simple range `r1, r2, ...` which is not a null set is a subset of\n//   some `R1, R2, ...`\n//\n// Simple range `c1 c2 ...` is a subset of simple range `C1 C2 ...` iff:\n// - If c is only the ANY comparator\n//   - If C is only the ANY comparator, return true\n//   - Else if in prerelease mode, return false\n//   - else replace c with `[>=0.0.0]`\n// - If C is only the ANY comparator\n//   - if in prerelease mode, return true\n//   - else replace C with `[>=0.0.0]`\n// - Let EQ be the set of = comparators in c\n// - If EQ is more than one, return true (null set)\n// - Let GT be the highest > or >= comparator in c\n// - Let LT be the lowest < or <= comparator in c\n// - If GT and LT, and GT.semver > LT.semver, return true (null set)\n// - If any C is a = range, and GT or LT are set, return false\n// - If EQ\n//   - If GT, and EQ does not satisfy GT, return true (null set)\n//   - If LT, and EQ does not satisfy LT, return true (null set)\n//   - If EQ satisfies every C, return true\n//   - Else return false\n// - If GT\n//   - If GT.semver is lower than any > or >= comp in C, return false\n//   - If GT is >=, and GT.semver does not satisfy every C, return false\n//   - If GT.semver has a prerelease, and not in prerelease mode\n//     - If no C has a prerelease and the GT.semver tuple, return false\n// - If LT\n//   - If LT.semver is greater than any < or <= comp in C, return false\n//   - If LT is <=, and LT.semver does not satisfy every C, return false\n//   - If GT.semver has a prerelease, and not in prerelease mode\n//     - If no C has a prerelease and the LT.semver tuple, return false\n// - Else return true\n\nconst subset = (sub, dom, options = {}) => {\n  if (sub === dom) {\n    return true\n  }\n\n  sub = new Range(sub, options)\n  dom = new Range(dom, options)\n  let sawNonNull = false\n\n  OUTER: for (const simpleSub of sub.set) {\n    for (const simpleDom of dom.set) {\n      const isSub = simpleSubset(simpleSub, simpleDom, options)\n      sawNonNull = sawNonNull || isSub !== null\n      if (isSub) {\n        continue OUTER\n      }\n    }\n    // the null set is a subset of everything, but null simple ranges in\n    // a complex range should be ignored.  so if we saw a non-null range,\n    // then we know this isn't a subset, but if EVERY simple range was null,\n    // then it is a subset.\n    if (sawNonNull) {\n      return false\n    }\n  }\n  return true\n}\n\nconst minimumVersionWithPreRelease = [new Comparator('>=0.0.0-0')]\nconst minimumVersion = [new Comparator('>=0.0.0')]\n\nconst simpleSubset = (sub, dom, options) => {\n  if (sub === dom) {\n    return true\n  }\n\n  if (sub.length === 1 && sub[0].semver === ANY) {\n    if (dom.length === 1 && dom[0].semver === ANY) {\n      return true\n    } else if (options.includePrerelease) {\n      sub = minimumVersionWithPreRelease\n    } else {\n      sub = minimumVersion\n    }\n  }\n\n  if (dom.length === 1 && dom[0].semver === ANY) {\n    if (options.includePrerelease) {\n      return true\n    } else {\n      dom = minimumVersion\n    }\n  }\n\n  const eqSet = new Set()\n  let gt, lt\n  for (const c of sub) {\n    if (c.operator === '>' || c.operator === '>=') {\n      gt = higherGT(gt, c, options)\n    } else if (c.operator === '<' || c.operator === '<=') {\n      lt = lowerLT(lt, c, options)\n    } else {\n      eqSet.add(c.semver)\n    }\n  }\n\n  if (eqSet.size > 1) {\n    return null\n  }\n\n  let gtltComp\n  if (gt && lt) {\n    gtltComp = compare(gt.semver, lt.semver, options)\n    if (gtltComp > 0) {\n      return null\n    } else if (gtltComp === 0 && (gt.operator !== '>=' || lt.operator !== '<=')) {\n      return null\n    }\n  }\n\n  // will iterate one or zero times\n  for (const eq of eqSet) {\n    if (gt && !satisfies(eq, String(gt), options)) {\n      return null\n    }\n\n    if (lt && !satisfies(eq, String(lt), options)) {\n      return null\n    }\n\n    for (const c of dom) {\n      if (!satisfies(eq, String(c), options)) {\n        return false\n      }\n    }\n\n    return true\n  }\n\n  let higher, lower\n  let hasDomLT, hasDomGT\n  // if the subset has a prerelease, we need a comparator in the superset\n  // with the same tuple and a prerelease, or it's not a subset\n  let needDomLTPre = lt &&\n    !options.includePrerelease &&\n    lt.semver.prerelease.length ? lt.semver : false\n  let needDomGTPre = gt &&\n    !options.includePrerelease &&\n    gt.semver.prerelease.length ? gt.semver : false\n  // exception: <1.2.3-0 is the same as <1.2.3\n  if (needDomLTPre && needDomLTPre.prerelease.length === 1 &&\n      lt.operator === '<' && needDomLTPre.prerelease[0] === 0) {\n    needDomLTPre = false\n  }\n\n  for (const c of dom) {\n    hasDomGT = hasDomGT || c.operator === '>' || c.operator === '>='\n    hasDomLT = hasDomLT || c.operator === '<' || c.operator === '<='\n    if (gt) {\n      if (needDomGTPre) {\n        if (c.semver.prerelease && c.semver.prerelease.length &&\n            c.semver.major === needDomGTPre.major &&\n            c.semver.minor === needDomGTPre.minor &&\n            c.semver.patch === needDomGTPre.patch) {\n          needDomGTPre = false\n        }\n      }\n      if (c.operator === '>' || c.operator === '>=') {\n        higher = higherGT(gt, c, options)\n        if (higher === c && higher !== gt) {\n          return false\n        }\n      } else if (gt.operator === '>=' && !satisfies(gt.semver, String(c), options)) {\n        return false\n      }\n    }\n    if (lt) {\n      if (needDomLTPre) {\n        if (c.semver.prerelease && c.semver.prerelease.length &&\n            c.semver.major === needDomLTPre.major &&\n            c.semver.minor === needDomLTPre.minor &&\n            c.semver.patch === needDomLTPre.patch) {\n          needDomLTPre = false\n        }\n      }\n      if (c.operator === '<' || c.operator === '<=') {\n        lower = lowerLT(lt, c, options)\n        if (lower === c && lower !== lt) {\n          return false\n        }\n      } else if (lt.operator === '<=' && !satisfies(lt.semver, String(c), options)) {\n        return false\n      }\n    }\n    if (!c.operator && (lt || gt) && gtltComp !== 0) {\n      return false\n    }\n  }\n\n  // if there was a < or >, and nothing in the dom, then must be false\n  // UNLESS it was limited by another range in the other direction.\n  // Eg, >1.0.0 <1.0.1 is still a subset of <2.0.0\n  if (gt && hasDomLT && !lt && gtltComp !== 0) {\n    return false\n  }\n\n  if (lt && hasDomGT && !gt && gtltComp !== 0) {\n    return false\n  }\n\n  // we needed a prerelease range in a specific tuple, but didn't get one\n  // then this isn't a subset.  eg >=1.2.3-pre is not a subset of >=1.0.0,\n  // because it includes prereleases in the 1.2.3 tuple\n  if (needDomGTPre || needDomLTPre) {\n    return false\n  }\n\n  return true\n}\n\n// >=1.2.3 is lower than >1.2.3\nconst higherGT = (a, b, options) => {\n  if (!a) {\n    return b\n  }\n  const comp = compare(a.semver, b.semver, options)\n  return comp > 0 ? a\n    : comp < 0 ? b\n    : b.operator === '>' && a.operator === '>=' ? b\n    : a\n}\n\n// <=1.2.3 is higher than <1.2.3\nconst lowerLT = (a, b, options) => {\n  if (!a) {\n    return b\n  }\n  const comp = compare(a.semver, b.semver, options)\n  return comp < 0 ? a\n    : comp > 0 ? b\n    : b.operator === '<' && a.operator === '<=' ? b\n    : a\n}\n\nmodule.exports = subset\n", "'use strict'\n\n// just pre-load all the stuff that index.js lazily exports\nconst internalRe = require('./internal/re')\nconst constants = require('./internal/constants')\nconst SemVer = require('./classes/semver')\nconst identifiers = require('./internal/identifiers')\nconst parse = require('./functions/parse')\nconst valid = require('./functions/valid')\nconst clean = require('./functions/clean')\nconst inc = require('./functions/inc')\nconst diff = require('./functions/diff')\nconst major = require('./functions/major')\nconst minor = require('./functions/minor')\nconst patch = require('./functions/patch')\nconst prerelease = require('./functions/prerelease')\nconst compare = require('./functions/compare')\nconst rcompare = require('./functions/rcompare')\nconst compareLoose = require('./functions/compare-loose')\nconst compareBuild = require('./functions/compare-build')\nconst sort = require('./functions/sort')\nconst rsort = require('./functions/rsort')\nconst gt = require('./functions/gt')\nconst lt = require('./functions/lt')\nconst eq = require('./functions/eq')\nconst neq = require('./functions/neq')\nconst gte = require('./functions/gte')\nconst lte = require('./functions/lte')\nconst cmp = require('./functions/cmp')\nconst coerce = require('./functions/coerce')\nconst Comparator = require('./classes/comparator')\nconst Range = require('./classes/range')\nconst satisfies = require('./functions/satisfies')\nconst toComparators = require('./ranges/to-comparators')\nconst maxSatisfying = require('./ranges/max-satisfying')\nconst minSatisfying = require('./ranges/min-satisfying')\nconst minVersion = require('./ranges/min-version')\nconst validRange = require('./ranges/valid')\nconst outside = require('./ranges/outside')\nconst gtr = require('./ranges/gtr')\nconst ltr = require('./ranges/ltr')\nconst intersects = require('./ranges/intersects')\nconst simplifyRange = require('./ranges/simplify')\nconst subset = require('./ranges/subset')\nmodule.exports = {\n  parse,\n  valid,\n  clean,\n  inc,\n  diff,\n  major,\n  minor,\n  patch,\n  prerelease,\n  compare,\n  rcompare,\n  compareLoose,\n  compareBuild,\n  sort,\n  rsort,\n  gt,\n  lt,\n  eq,\n  neq,\n  gte,\n  lte,\n  cmp,\n  coerce,\n  Comparator,\n  Range,\n  satisfies,\n  toComparators,\n  maxSatisfying,\n  minSatisfying,\n  minVersion,\n  validRange,\n  outside,\n  gtr,\n  ltr,\n  intersects,\n  simplifyRange,\n  subset,\n  SemVer,\n  re: internalRe.re,\n  src: internalRe.src,\n  tokens: internalRe.t,\n  SEMVER_SPEC_VERSION: constants.SEMVER_SPEC_VERSION,\n  RELEASE_TYPES: constants.RELEASE_TYPES,\n  compareIdentifiers: identifiers.compareIdentifiers,\n  rcompareIdentifiers: identifiers.rcompareIdentifiers,\n}\n", "'use strict';\n\nconst path = require('path');\nconst WIN_SLASH = '\\\\\\\\/';\nconst WIN_NO_SLASH = `[^${WIN_SLASH}]`;\n\n/**\n * Posix glob regex\n */\n\nconst DOT_LITERAL = '\\\\.';\nconst PLUS_LITERAL = '\\\\+';\nconst QMARK_LITERAL = '\\\\?';\nconst SLASH_LITERAL = '\\\\/';\nconst ONE_CHAR = '(?=.)';\nconst QMARK = '[^/]';\nconst END_ANCHOR = `(?:${SLASH_LITERAL}|$)`;\nconst START_ANCHOR = `(?:^|${SLASH_LITERAL})`;\nconst DOTS_SLASH = `${DOT_LITERAL}{1,2}${END_ANCHOR}`;\nconst NO_DOT = `(?!${DOT_LITERAL})`;\nconst NO_DOTS = `(?!${START_ANCHOR}${DOTS_SLASH})`;\nconst NO_DOT_SLASH = `(?!${DOT_LITERAL}{0,1}${END_ANCHOR})`;\nconst NO_DOTS_SLASH = `(?!${DOTS_SLASH})`;\nconst QMARK_NO_DOT = `[^.${SLASH_LITERAL}]`;\nconst STAR = `${QMARK}*?`;\n\nconst POSIX_CHARS = {\n  DOT_LITERAL,\n  PLUS_LITERAL,\n  QMARK_LITERAL,\n  SLASH_LITERAL,\n  ONE_CHAR,\n  QMARK,\n  END_ANCHOR,\n  DOTS_SLASH,\n  NO_DOT,\n  NO_DOTS,\n  NO_DOT_SLASH,\n  NO_DOTS_SLASH,\n  QMARK_NO_DOT,\n  STAR,\n  START_ANCHOR\n};\n\n/**\n * Windows glob regex\n */\n\nconst WINDOWS_CHARS = {\n  ...POSIX_CHARS,\n\n  SLASH_LITERAL: `[${WIN_SLASH}]`,\n  QMARK: WIN_NO_SLASH,\n  STAR: `${WIN_NO_SLASH}*?`,\n  DOTS_SLASH: `${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$)`,\n  NO_DOT: `(?!${DOT_LITERAL})`,\n  NO_DOTS: `(?!(?:^|[${WIN_SLASH}])${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,\n  NO_DOT_SLASH: `(?!${DOT_LITERAL}{0,1}(?:[${WIN_SLASH}]|$))`,\n  NO_DOTS_SLASH: `(?!${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,\n  QMARK_NO_DOT: `[^.${WIN_SLASH}]`,\n  START_ANCHOR: `(?:^|[${WIN_SLASH}])`,\n  END_ANCHOR: `(?:[${WIN_SLASH}]|$)`\n};\n\n/**\n * POSIX Bracket Regex\n */\n\nconst POSIX_REGEX_SOURCE = {\n  alnum: 'a-zA-Z0-9',\n  alpha: 'a-zA-Z',\n  ascii: '\\\\x00-\\\\x7F',\n  blank: ' \\\\t',\n  cntrl: '\\\\x00-\\\\x1F\\\\x7F',\n  digit: '0-9',\n  graph: '\\\\x21-\\\\x7E',\n  lower: 'a-z',\n  print: '\\\\x20-\\\\x7E ',\n  punct: '\\\\-!\"#$%&\\'()\\\\*+,./:;<=>?@[\\\\]^_`{|}~',\n  space: ' \\\\t\\\\r\\\\n\\\\v\\\\f',\n  upper: 'A-Z',\n  word: 'A-Za-z0-9_',\n  xdigit: 'A-Fa-f0-9'\n};\n\nmodule.exports = {\n  MAX_LENGTH: 1024 * 64,\n  POSIX_REGEX_SOURCE,\n\n  // regular expressions\n  REGEX_BACKSLASH: /\\\\(?![*+?^${}(|)[\\]])/g,\n  REGEX_NON_SPECIAL_CHARS: /^[^@![\\].,$*+?^{}()|\\\\/]+/,\n  REGEX_SPECIAL_CHARS: /[-*+?.^${}(|)[\\]]/,\n  REGEX_SPECIAL_CHARS_BACKREF: /(\\\\?)((\\W)(\\3*))/g,\n  REGEX_SPECIAL_CHARS_GLOBAL: /([-*+?.^${}(|)[\\]])/g,\n  REGEX_REMOVE_BACKSLASH: /(?:\\[.*?[^\\\\]\\]|\\\\(?=.))/g,\n\n  // Replace globs with equivalent patterns to reduce parsing time.\n  REPLACEMENTS: {\n    '***': '*',\n    '**/**': '**',\n    '**/**/**': '**'\n  },\n\n  // Digits\n  CHAR_0: 48, /* 0 */\n  CHAR_9: 57, /* 9 */\n\n  // Alphabet chars.\n  CHAR_UPPERCASE_A: 65, /* A */\n  CHAR_LOWERCASE_A: 97, /* a */\n  CHAR_UPPERCASE_Z: 90, /* Z */\n  CHAR_LOWERCASE_Z: 122, /* z */\n\n  CHAR_LEFT_PARENTHESES: 40, /* ( */\n  CHAR_RIGHT_PARENTHESES: 41, /* ) */\n\n  CHAR_ASTERISK: 42, /* * */\n\n  // Non-alphabetic chars.\n  CHAR_AMPERSAND: 38, /* & */\n  CHAR_AT: 64, /* @ */\n  CHAR_BACKWARD_SLASH: 92, /* \\ */\n  CHAR_CARRIAGE_RETURN: 13, /* \\r */\n  CHAR_CIRCUMFLEX_ACCENT: 94, /* ^ */\n  CHAR_COLON: 58, /* : */\n  CHAR_COMMA: 44, /* , */\n  CHAR_DOT: 46, /* . */\n  CHAR_DOUBLE_QUOTE: 34, /* \" */\n  CHAR_EQUAL: 61, /* = */\n  CHAR_EXCLAMATION_MARK: 33, /* ! */\n  CHAR_FORM_FEED: 12, /* \\f */\n  CHAR_FORWARD_SLASH: 47, /* / */\n  CHAR_GRAVE_ACCENT: 96, /* ` */\n  CHAR_HASH: 35, /* # */\n  CHAR_HYPHEN_MINUS: 45, /* - */\n  CHAR_LEFT_ANGLE_BRACKET: 60, /* < */\n  CHAR_LEFT_CURLY_BRACE: 123, /* { */\n  CHAR_LEFT_SQUARE_BRACKET: 91, /* [ */\n  CHAR_LINE_FEED: 10, /* \\n */\n  CHAR_NO_BREAK_SPACE: 160, /* \\u00A0 */\n  CHAR_PERCENT: 37, /* % */\n  CHAR_PLUS: 43, /* + */\n  CHAR_QUESTION_MARK: 63, /* ? */\n  CHAR_RIGHT_ANGLE_BRACKET: 62, /* > */\n  CHAR_RIGHT_CURLY_BRACE: 125, /* } */\n  CHAR_RIGHT_SQUARE_BRACKET: 93, /* ] */\n  CHAR_SEMICOLON: 59, /* ; */\n  CHAR_SINGLE_QUOTE: 39, /* ' */\n  CHAR_SPACE: 32, /*   */\n  CHAR_TAB: 9, /* \\t */\n  CHAR_UNDERSCORE: 95, /* _ */\n  CHAR_VERTICAL_LINE: 124, /* | */\n  CHAR_ZERO_WIDTH_NOBREAK_SPACE: 65279, /* \\uFEFF */\n\n  SEP: path.sep,\n\n  /**\n   * Create EXTGLOB_CHARS\n   */\n\n  extglobChars(chars) {\n    return {\n      '!': { type: 'negate', open: '(?:(?!(?:', close: `))${chars.STAR})` },\n      '?': { type: 'qmark', open: '(?:', close: ')?' },\n      '+': { type: 'plus', open: '(?:', close: ')+' },\n      '*': { type: 'star', open: '(?:', close: ')*' },\n      '@': { type: 'at', open: '(?:', close: ')' }\n    };\n  },\n\n  /**\n   * Create GLOB_CHARS\n   */\n\n  globChars(win32) {\n    return win32 === true ? WINDOWS_CHARS : POSIX_CHARS;\n  }\n};\n", "'use strict';\n\nconst path = require('path');\nconst win32 = process.platform === 'win32';\nconst {\n  REGEX_BACKSLASH,\n  REGEX_REMOVE_BACKSLASH,\n  REGEX_SPECIAL_CHARS,\n  REGEX_SPECIAL_CHARS_GLOBAL\n} = require('./constants');\n\nexports.isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val);\nexports.hasRegexChars = str => REGEX_SPECIAL_CHARS.test(str);\nexports.isRegexChar = str => str.length === 1 && exports.hasRegexChars(str);\nexports.escapeRegex = str => str.replace(REGEX_SPECIAL_CHARS_GLOBAL, '\\\\$1');\nexports.toPosixSlashes = str => str.replace(REGEX_BACKSLASH, '/');\n\nexports.removeBackslashes = str => {\n  return str.replace(REGEX_REMOVE_BACKSLASH, match => {\n    return match === '\\\\' ? '' : match;\n  });\n};\n\nexports.supportsLookbehinds = () => {\n  const segs = process.version.slice(1).split('.').map(Number);\n  if (segs.length === 3 && segs[0] >= 9 || (segs[0] === 8 && segs[1] >= 10)) {\n    return true;\n  }\n  return false;\n};\n\nexports.isWindows = options => {\n  if (options && typeof options.windows === 'boolean') {\n    return options.windows;\n  }\n  return win32 === true || path.sep === '\\\\';\n};\n\nexports.escapeLast = (input, char, lastIdx) => {\n  const idx = input.lastIndexOf(char, lastIdx);\n  if (idx === -1) return input;\n  if (input[idx - 1] === '\\\\') return exports.escapeLast(input, char, idx - 1);\n  return `${input.slice(0, idx)}\\\\${input.slice(idx)}`;\n};\n\nexports.removePrefix = (input, state = {}) => {\n  let output = input;\n  if (output.startsWith('./')) {\n    output = output.slice(2);\n    state.prefix = './';\n  }\n  return output;\n};\n\nexports.wrapOutput = (input, state = {}, options = {}) => {\n  const prepend = options.contains ? '' : '^';\n  const append = options.contains ? '' : '$';\n\n  let output = `${prepend}(?:${input})${append}`;\n  if (state.negated === true) {\n    output = `(?:^(?!${output}).*$)`;\n  }\n  return output;\n};\n", "'use strict';\n\nconst utils = require('./utils');\nconst {\n  CHAR_ASTERISK,             /* * */\n  CHAR_AT,                   /* @ */\n  CHAR_BACKWARD_SLASH,       /* \\ */\n  CHAR_COMMA,                /* , */\n  CHAR_DOT,                  /* . */\n  CHAR_EXCLAMATION_MARK,     /* ! */\n  CHAR_FORWARD_SLASH,        /* / */\n  CHAR_LEFT_CURLY_BRACE,     /* { */\n  CHAR_LEFT_PARENTHESES,     /* ( */\n  CHAR_LEFT_SQUARE_BRACKET,  /* [ */\n  CHAR_PLUS,                 /* + */\n  CHAR_QUESTION_MARK,        /* ? */\n  CHAR_RIGHT_CURLY_BRACE,    /* } */\n  CHAR_RIGHT_PARENTHESES,    /* ) */\n  CHAR_RIGHT_SQUARE_BRACKET  /* ] */\n} = require('./constants');\n\nconst isPathSeparator = code => {\n  return code === CHAR_FORWARD_SLASH || code === CHAR_BACKWARD_SLASH;\n};\n\nconst depth = token => {\n  if (token.isPrefix !== true) {\n    token.depth = token.isGlobstar ? Infinity : 1;\n  }\n};\n\n/**\n * Quickly scans a glob pattern and returns an object with a handful of\n * useful properties, like `isGlob`, `path` (the leading non-glob, if it exists),\n * `glob` (the actual pattern), `negated` (true if the path starts with `!` but not\n * with `!(`) and `negatedExtglob` (true if the path starts with `!(`).\n *\n * ```js\n * const pm = require('picomatch');\n * console.log(pm.scan('foo/bar/*.js'));\n * { isGlob: true, input: 'foo/bar/*.js', base: 'foo/bar', glob: '*.js' }\n * ```\n * @param {String} `str`\n * @param {Object} `options`\n * @return {Object} Returns an object with tokens and regex source string.\n * @api public\n */\n\nconst scan = (input, options) => {\n  const opts = options || {};\n\n  const length = input.length - 1;\n  const scanToEnd = opts.parts === true || opts.scanToEnd === true;\n  const slashes = [];\n  const tokens = [];\n  const parts = [];\n\n  let str = input;\n  let index = -1;\n  let start = 0;\n  let lastIndex = 0;\n  let isBrace = false;\n  let isBracket = false;\n  let isGlob = false;\n  let isExtglob = false;\n  let isGlobstar = false;\n  let braceEscaped = false;\n  let backslashes = false;\n  let negated = false;\n  let negatedExtglob = false;\n  let finished = false;\n  let braces = 0;\n  let prev;\n  let code;\n  let token = { value: '', depth: 0, isGlob: false };\n\n  const eos = () => index >= length;\n  const peek = () => str.charCodeAt(index + 1);\n  const advance = () => {\n    prev = code;\n    return str.charCodeAt(++index);\n  };\n\n  while (index < length) {\n    code = advance();\n    let next;\n\n    if (code === CHAR_BACKWARD_SLASH) {\n      backslashes = token.backslashes = true;\n      code = advance();\n\n      if (code === CHAR_LEFT_CURLY_BRACE) {\n        braceEscaped = true;\n      }\n      continue;\n    }\n\n    if (braceEscaped === true || code === CHAR_LEFT_CURLY_BRACE) {\n      braces++;\n\n      while (eos() !== true && (code = advance())) {\n        if (code === CHAR_BACKWARD_SLASH) {\n          backslashes = token.backslashes = true;\n          advance();\n          continue;\n        }\n\n        if (code === CHAR_LEFT_CURLY_BRACE) {\n          braces++;\n          continue;\n        }\n\n        if (braceEscaped !== true && code === CHAR_DOT && (code = advance()) === CHAR_DOT) {\n          isBrace = token.isBrace = true;\n          isGlob = token.isGlob = true;\n          finished = true;\n\n          if (scanToEnd === true) {\n            continue;\n          }\n\n          break;\n        }\n\n        if (braceEscaped !== true && code === CHAR_COMMA) {\n          isBrace = token.isBrace = true;\n          isGlob = token.isGlob = true;\n          finished = true;\n\n          if (scanToEnd === true) {\n            continue;\n          }\n\n          break;\n        }\n\n        if (code === CHAR_RIGHT_CURLY_BRACE) {\n          braces--;\n\n          if (braces === 0) {\n            braceEscaped = false;\n            isBrace = token.isBrace = true;\n            finished = true;\n            break;\n          }\n        }\n      }\n\n      if (scanToEnd === true) {\n        continue;\n      }\n\n      break;\n    }\n\n    if (code === CHAR_FORWARD_SLASH) {\n      slashes.push(index);\n      tokens.push(token);\n      token = { value: '', depth: 0, isGlob: false };\n\n      if (finished === true) continue;\n      if (prev === CHAR_DOT && index === (start + 1)) {\n        start += 2;\n        continue;\n      }\n\n      lastIndex = index + 1;\n      continue;\n    }\n\n    if (opts.noext !== true) {\n      const isExtglobChar = code === CHAR_PLUS\n        || code === CHAR_AT\n        || code === CHAR_ASTERISK\n        || code === CHAR_QUESTION_MARK\n        || code === CHAR_EXCLAMATION_MARK;\n\n      if (isExtglobChar === true && peek() === CHAR_LEFT_PARENTHESES) {\n        isGlob = token.isGlob = true;\n        isExtglob = token.isExtglob = true;\n        finished = true;\n        if (code === CHAR_EXCLAMATION_MARK && index === start) {\n          negatedExtglob = true;\n        }\n\n        if (scanToEnd === true) {\n          while (eos() !== true && (code = advance())) {\n            if (code === CHAR_BACKWARD_SLASH) {\n              backslashes = token.backslashes = true;\n              code = advance();\n              continue;\n            }\n\n            if (code === CHAR_RIGHT_PARENTHESES) {\n              isGlob = token.isGlob = true;\n              finished = true;\n              break;\n            }\n          }\n          continue;\n        }\n        break;\n      }\n    }\n\n    if (code === CHAR_ASTERISK) {\n      if (prev === CHAR_ASTERISK) isGlobstar = token.isGlobstar = true;\n      isGlob = token.isGlob = true;\n      finished = true;\n\n      if (scanToEnd === true) {\n        continue;\n      }\n      break;\n    }\n\n    if (code === CHAR_QUESTION_MARK) {\n      isGlob = token.isGlob = true;\n      finished = true;\n\n      if (scanToEnd === true) {\n        continue;\n      }\n      break;\n    }\n\n    if (code === CHAR_LEFT_SQUARE_BRACKET) {\n      while (eos() !== true && (next = advance())) {\n        if (next === CHAR_BACKWARD_SLASH) {\n          backslashes = token.backslashes = true;\n          advance();\n          continue;\n        }\n\n        if (next === CHAR_RIGHT_SQUARE_BRACKET) {\n          isBracket = token.isBracket = true;\n          isGlob = token.isGlob = true;\n          finished = true;\n          break;\n        }\n      }\n\n      if (scanToEnd === true) {\n        continue;\n      }\n\n      break;\n    }\n\n    if (opts.nonegate !== true && code === CHAR_EXCLAMATION_MARK && index === start) {\n      negated = token.negated = true;\n      start++;\n      continue;\n    }\n\n    if (opts.noparen !== true && code === CHAR_LEFT_PARENTHESES) {\n      isGlob = token.isGlob = true;\n\n      if (scanToEnd === true) {\n        while (eos() !== true && (code = advance())) {\n          if (code === CHAR_LEFT_PARENTHESES) {\n            backslashes = token.backslashes = true;\n            code = advance();\n            continue;\n          }\n\n          if (code === CHAR_RIGHT_PARENTHESES) {\n            finished = true;\n            break;\n          }\n        }\n        continue;\n      }\n      break;\n    }\n\n    if (isGlob === true) {\n      finished = true;\n\n      if (scanToEnd === true) {\n        continue;\n      }\n\n      break;\n    }\n  }\n\n  if (opts.noext === true) {\n    isExtglob = false;\n    isGlob = false;\n  }\n\n  let base = str;\n  let prefix = '';\n  let glob = '';\n\n  if (start > 0) {\n    prefix = str.slice(0, start);\n    str = str.slice(start);\n    lastIndex -= start;\n  }\n\n  if (base && isGlob === true && lastIndex > 0) {\n    base = str.slice(0, lastIndex);\n    glob = str.slice(lastIndex);\n  } else if (isGlob === true) {\n    base = '';\n    glob = str;\n  } else {\n    base = str;\n  }\n\n  if (base && base !== '' && base !== '/' && base !== str) {\n    if (isPathSeparator(base.charCodeAt(base.length - 1))) {\n      base = base.slice(0, -1);\n    }\n  }\n\n  if (opts.unescape === true) {\n    if (glob) glob = utils.removeBackslashes(glob);\n\n    if (base && backslashes === true) {\n      base = utils.removeBackslashes(base);\n    }\n  }\n\n  const state = {\n    prefix,\n    input,\n    start,\n    base,\n    glob,\n    isBrace,\n    isBracket,\n    isGlob,\n    isExtglob,\n    isGlobstar,\n    negated,\n    negatedExtglob\n  };\n\n  if (opts.tokens === true) {\n    state.maxDepth = 0;\n    if (!isPathSeparator(code)) {\n      tokens.push(token);\n    }\n    state.tokens = tokens;\n  }\n\n  if (opts.parts === true || opts.tokens === true) {\n    let prevIndex;\n\n    for (let idx = 0; idx < slashes.length; idx++) {\n      const n = prevIndex ? prevIndex + 1 : start;\n      const i = slashes[idx];\n      const value = input.slice(n, i);\n      if (opts.tokens) {\n        if (idx === 0 && start !== 0) {\n          tokens[idx].isPrefix = true;\n          tokens[idx].value = prefix;\n        } else {\n          tokens[idx].value = value;\n        }\n        depth(tokens[idx]);\n        state.maxDepth += tokens[idx].depth;\n      }\n      if (idx !== 0 || value !== '') {\n        parts.push(value);\n      }\n      prevIndex = i;\n    }\n\n    if (prevIndex && prevIndex + 1 < input.length) {\n      const value = input.slice(prevIndex + 1);\n      parts.push(value);\n\n      if (opts.tokens) {\n        tokens[tokens.length - 1].value = value;\n        depth(tokens[tokens.length - 1]);\n        state.maxDepth += tokens[tokens.length - 1].depth;\n      }\n    }\n\n    state.slashes = slashes;\n    state.parts = parts;\n  }\n\n  return state;\n};\n\nmodule.exports = scan;\n", "'use strict';\n\nconst constants = require('./constants');\nconst utils = require('./utils');\n\n/**\n * Constants\n */\n\nconst {\n  MAX_LENGTH,\n  POSIX_REGEX_SOURCE,\n  REGEX_NON_SPECIAL_CHARS,\n  REGEX_SPECIAL_CHARS_BACKREF,\n  REPLACEMENTS\n} = constants;\n\n/**\n * Helpers\n */\n\nconst expandRange = (args, options) => {\n  if (typeof options.expandRange === 'function') {\n    return options.expandRange(...args, options);\n  }\n\n  args.sort();\n  const value = `[${args.join('-')}]`;\n\n  try {\n    /* eslint-disable-next-line no-new */\n    new RegExp(value);\n  } catch (ex) {\n    return args.map(v => utils.escapeRegex(v)).join('..');\n  }\n\n  return value;\n};\n\n/**\n * Create the message for a syntax error\n */\n\nconst syntaxError = (type, char) => {\n  return `Missing ${type}: \"${char}\" - use \"\\\\\\\\${char}\" to match literal characters`;\n};\n\n/**\n * Parse the given input string.\n * @param {String} input\n * @param {Object} options\n * @return {Object}\n */\n\nconst parse = (input, options) => {\n  if (typeof input !== 'string') {\n    throw new TypeError('Expected a string');\n  }\n\n  input = REPLACEMENTS[input] || input;\n\n  const opts = { ...options };\n  const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;\n\n  let len = input.length;\n  if (len > max) {\n    throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);\n  }\n\n  const bos = { type: 'bos', value: '', output: opts.prepend || '' };\n  const tokens = [bos];\n\n  const capture = opts.capture ? '' : '?:';\n  const win32 = utils.isWindows(options);\n\n  // create constants based on platform, for windows or posix\n  const PLATFORM_CHARS = constants.globChars(win32);\n  const EXTGLOB_CHARS = constants.extglobChars(PLATFORM_CHARS);\n\n  const {\n    DOT_LITERAL,\n    PLUS_LITERAL,\n    SLASH_LITERAL,\n    ONE_CHAR,\n    DOTS_SLASH,\n    NO_DOT,\n    NO_DOT_SLASH,\n    NO_DOTS_SLASH,\n    QMARK,\n    QMARK_NO_DOT,\n    STAR,\n    START_ANCHOR\n  } = PLATFORM_CHARS;\n\n  const globstar = opts => {\n    return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;\n  };\n\n  const nodot = opts.dot ? '' : NO_DOT;\n  const qmarkNoDot = opts.dot ? QMARK : QMARK_NO_DOT;\n  let star = opts.bash === true ? globstar(opts) : STAR;\n\n  if (opts.capture) {\n    star = `(${star})`;\n  }\n\n  // minimatch options support\n  if (typeof opts.noext === 'boolean') {\n    opts.noextglob = opts.noext;\n  }\n\n  const state = {\n    input,\n    index: -1,\n    start: 0,\n    dot: opts.dot === true,\n    consumed: '',\n    output: '',\n    prefix: '',\n    backtrack: false,\n    negated: false,\n    brackets: 0,\n    braces: 0,\n    parens: 0,\n    quotes: 0,\n    globstar: false,\n    tokens\n  };\n\n  input = utils.removePrefix(input, state);\n  len = input.length;\n\n  const extglobs = [];\n  const braces = [];\n  const stack = [];\n  let prev = bos;\n  let value;\n\n  /**\n   * Tokenizing helpers\n   */\n\n  const eos = () => state.index === len - 1;\n  const peek = state.peek = (n = 1) => input[state.index + n];\n  const advance = state.advance = () => input[++state.index] || '';\n  const remaining = () => input.slice(state.index + 1);\n  const consume = (value = '', num = 0) => {\n    state.consumed += value;\n    state.index += num;\n  };\n\n  const append = token => {\n    state.output += token.output != null ? token.output : token.value;\n    consume(token.value);\n  };\n\n  const negate = () => {\n    let count = 1;\n\n    while (peek() === '!' && (peek(2) !== '(' || peek(3) === '?')) {\n      advance();\n      state.start++;\n      count++;\n    }\n\n    if (count % 2 === 0) {\n      return false;\n    }\n\n    state.negated = true;\n    state.start++;\n    return true;\n  };\n\n  const increment = type => {\n    state[type]++;\n    stack.push(type);\n  };\n\n  const decrement = type => {\n    state[type]--;\n    stack.pop();\n  };\n\n  /**\n   * Push tokens onto the tokens array. This helper speeds up\n   * tokenizing by 1) helping us avoid backtracking as much as possible,\n   * and 2) helping us avoid creating extra tokens when consecutive\n   * characters are plain text. This improves performance and simplifies\n   * lookbehinds.\n   */\n\n  const push = tok => {\n    if (prev.type === 'globstar') {\n      const isBrace = state.braces > 0 && (tok.type === 'comma' || tok.type === 'brace');\n      const isExtglob = tok.extglob === true || (extglobs.length && (tok.type === 'pipe' || tok.type === 'paren'));\n\n      if (tok.type !== 'slash' && tok.type !== 'paren' && !isBrace && !isExtglob) {\n        state.output = state.output.slice(0, -prev.output.length);\n        prev.type = 'star';\n        prev.value = '*';\n        prev.output = star;\n        state.output += prev.output;\n      }\n    }\n\n    if (extglobs.length && tok.type !== 'paren') {\n      extglobs[extglobs.length - 1].inner += tok.value;\n    }\n\n    if (tok.value || tok.output) append(tok);\n    if (prev && prev.type === 'text' && tok.type === 'text') {\n      prev.value += tok.value;\n      prev.output = (prev.output || '') + tok.value;\n      return;\n    }\n\n    tok.prev = prev;\n    tokens.push(tok);\n    prev = tok;\n  };\n\n  const extglobOpen = (type, value) => {\n    const token = { ...EXTGLOB_CHARS[value], conditions: 1, inner: '' };\n\n    token.prev = prev;\n    token.parens = state.parens;\n    token.output = state.output;\n    const output = (opts.capture ? '(' : '') + token.open;\n\n    increment('parens');\n    push({ type, value, output: state.output ? '' : ONE_CHAR });\n    push({ type: 'paren', extglob: true, value: advance(), output });\n    extglobs.push(token);\n  };\n\n  const extglobClose = token => {\n    let output = token.close + (opts.capture ? ')' : '');\n    let rest;\n\n    if (token.type === 'negate') {\n      let extglobStar = star;\n\n      if (token.inner && token.inner.length > 1 && token.inner.includes('/')) {\n        extglobStar = globstar(opts);\n      }\n\n      if (extglobStar !== star || eos() || /^\\)+$/.test(remaining())) {\n        output = token.close = `)$))${extglobStar}`;\n      }\n\n      if (token.inner.includes('*') && (rest = remaining()) && /^\\.[^\\\\/.]+$/.test(rest)) {\n        // Any non-magical string (`.ts`) or even nested expression (`.{ts,tsx}`) can follow after the closing parenthesis.\n        // In this case, we need to parse the string and use it in the output of the original pattern.\n        // Suitable patterns: `/!(*.d).ts`, `/!(*.d).{ts,tsx}`, `**/!(*-dbg).@(js)`.\n        //\n        // Disabling the `fastpaths` option due to a problem with parsing strings as `.ts` in the pattern like `**/!(*.d).ts`.\n        const expression = parse(rest, { ...options, fastpaths: false }).output;\n\n        output = token.close = `)${expression})${extglobStar})`;\n      }\n\n      if (token.prev.type === 'bos') {\n        state.negatedExtglob = true;\n      }\n    }\n\n    push({ type: 'paren', extglob: true, value, output });\n    decrement('parens');\n  };\n\n  /**\n   * Fast paths\n   */\n\n  if (opts.fastpaths !== false && !/(^[*!]|[/()[\\]{}\"])/.test(input)) {\n    let backslashes = false;\n\n    let output = input.replace(REGEX_SPECIAL_CHARS_BACKREF, (m, esc, chars, first, rest, index) => {\n      if (first === '\\\\') {\n        backslashes = true;\n        return m;\n      }\n\n      if (first === '?') {\n        if (esc) {\n          return esc + first + (rest ? QMARK.repeat(rest.length) : '');\n        }\n        if (index === 0) {\n          return qmarkNoDot + (rest ? QMARK.repeat(rest.length) : '');\n        }\n        return QMARK.repeat(chars.length);\n      }\n\n      if (first === '.') {\n        return DOT_LITERAL.repeat(chars.length);\n      }\n\n      if (first === '*') {\n        if (esc) {\n          return esc + first + (rest ? star : '');\n        }\n        return star;\n      }\n      return esc ? m : `\\\\${m}`;\n    });\n\n    if (backslashes === true) {\n      if (opts.unescape === true) {\n        output = output.replace(/\\\\/g, '');\n      } else {\n        output = output.replace(/\\\\+/g, m => {\n          return m.length % 2 === 0 ? '\\\\\\\\' : (m ? '\\\\' : '');\n        });\n      }\n    }\n\n    if (output === input && opts.contains === true) {\n      state.output = input;\n      return state;\n    }\n\n    state.output = utils.wrapOutput(output, state, options);\n    return state;\n  }\n\n  /**\n   * Tokenize input until we reach end-of-string\n   */\n\n  while (!eos()) {\n    value = advance();\n\n    if (value === '\\u0000') {\n      continue;\n    }\n\n    /**\n     * Escaped characters\n     */\n\n    if (value === '\\\\') {\n      const next = peek();\n\n      if (next === '/' && opts.bash !== true) {\n        continue;\n      }\n\n      if (next === '.' || next === ';') {\n        continue;\n      }\n\n      if (!next) {\n        value += '\\\\';\n        push({ type: 'text', value });\n        continue;\n      }\n\n      // collapse slashes to reduce potential for exploits\n      const match = /^\\\\+/.exec(remaining());\n      let slashes = 0;\n\n      if (match && match[0].length > 2) {\n        slashes = match[0].length;\n        state.index += slashes;\n        if (slashes % 2 !== 0) {\n          value += '\\\\';\n        }\n      }\n\n      if (opts.unescape === true) {\n        value = advance();\n      } else {\n        value += advance();\n      }\n\n      if (state.brackets === 0) {\n        push({ type: 'text', value });\n        continue;\n      }\n    }\n\n    /**\n     * If we're inside a regex character class, continue\n     * until we reach the closing bracket.\n     */\n\n    if (state.brackets > 0 && (value !== ']' || prev.value === '[' || prev.value === '[^')) {\n      if (opts.posix !== false && value === ':') {\n        const inner = prev.value.slice(1);\n        if (inner.includes('[')) {\n          prev.posix = true;\n\n          if (inner.includes(':')) {\n            const idx = prev.value.lastIndexOf('[');\n            const pre = prev.value.slice(0, idx);\n            const rest = prev.value.slice(idx + 2);\n            const posix = POSIX_REGEX_SOURCE[rest];\n            if (posix) {\n              prev.value = pre + posix;\n              state.backtrack = true;\n              advance();\n\n              if (!bos.output && tokens.indexOf(prev) === 1) {\n                bos.output = ONE_CHAR;\n              }\n              continue;\n            }\n          }\n        }\n      }\n\n      if ((value === '[' && peek() !== ':') || (value === '-' && peek() === ']')) {\n        value = `\\\\${value}`;\n      }\n\n      if (value === ']' && (prev.value === '[' || prev.value === '[^')) {\n        value = `\\\\${value}`;\n      }\n\n      if (opts.posix === true && value === '!' && prev.value === '[') {\n        value = '^';\n      }\n\n      prev.value += value;\n      append({ value });\n      continue;\n    }\n\n    /**\n     * If we're inside a quoted string, continue\n     * until we reach the closing double quote.\n     */\n\n    if (state.quotes === 1 && value !== '\"') {\n      value = utils.escapeRegex(value);\n      prev.value += value;\n      append({ value });\n      continue;\n    }\n\n    /**\n     * Double quotes\n     */\n\n    if (value === '\"') {\n      state.quotes = state.quotes === 1 ? 0 : 1;\n      if (opts.keepQuotes === true) {\n        push({ type: 'text', value });\n      }\n      continue;\n    }\n\n    /**\n     * Parentheses\n     */\n\n    if (value === '(') {\n      increment('parens');\n      push({ type: 'paren', value });\n      continue;\n    }\n\n    if (value === ')') {\n      if (state.parens === 0 && opts.strictBrackets === true) {\n        throw new SyntaxError(syntaxError('opening', '('));\n      }\n\n      const extglob = extglobs[extglobs.length - 1];\n      if (extglob && state.parens === extglob.parens + 1) {\n        extglobClose(extglobs.pop());\n        continue;\n      }\n\n      push({ type: 'paren', value, output: state.parens ? ')' : '\\\\)' });\n      decrement('parens');\n      continue;\n    }\n\n    /**\n     * Square brackets\n     */\n\n    if (value === '[') {\n      if (opts.nobracket === true || !remaining().includes(']')) {\n        if (opts.nobracket !== true && opts.strictBrackets === true) {\n          throw new SyntaxError(syntaxError('closing', ']'));\n        }\n\n        value = `\\\\${value}`;\n      } else {\n        increment('brackets');\n      }\n\n      push({ type: 'bracket', value });\n      continue;\n    }\n\n    if (value === ']') {\n      if (opts.nobracket === true || (prev && prev.type === 'bracket' && prev.value.length === 1)) {\n        push({ type: 'text', value, output: `\\\\${value}` });\n        continue;\n      }\n\n      if (state.brackets === 0) {\n        if (opts.strictBrackets === true) {\n          throw new SyntaxError(syntaxError('opening', '['));\n        }\n\n        push({ type: 'text', value, output: `\\\\${value}` });\n        continue;\n      }\n\n      decrement('brackets');\n\n      const prevValue = prev.value.slice(1);\n      if (prev.posix !== true && prevValue[0] === '^' && !prevValue.includes('/')) {\n        value = `/${value}`;\n      }\n\n      prev.value += value;\n      append({ value });\n\n      // when literal brackets are explicitly disabled\n      // assume we should match with a regex character class\n      if (opts.literalBrackets === false || utils.hasRegexChars(prevValue)) {\n        continue;\n      }\n\n      const escaped = utils.escapeRegex(prev.value);\n      state.output = state.output.slice(0, -prev.value.length);\n\n      // when literal brackets are explicitly enabled\n      // assume we should escape the brackets to match literal characters\n      if (opts.literalBrackets === true) {\n        state.output += escaped;\n        prev.value = escaped;\n        continue;\n      }\n\n      // when the user specifies nothing, try to match both\n      prev.value = `(${capture}${escaped}|${prev.value})`;\n      state.output += prev.value;\n      continue;\n    }\n\n    /**\n     * Braces\n     */\n\n    if (value === '{' && opts.nobrace !== true) {\n      increment('braces');\n\n      const open = {\n        type: 'brace',\n        value,\n        output: '(',\n        outputIndex: state.output.length,\n        tokensIndex: state.tokens.length\n      };\n\n      braces.push(open);\n      push(open);\n      continue;\n    }\n\n    if (value === '}') {\n      const brace = braces[braces.length - 1];\n\n      if (opts.nobrace === true || !brace) {\n        push({ type: 'text', value, output: value });\n        continue;\n      }\n\n      let output = ')';\n\n      if (brace.dots === true) {\n        const arr = tokens.slice();\n        const range = [];\n\n        for (let i = arr.length - 1; i >= 0; i--) {\n          tokens.pop();\n          if (arr[i].type === 'brace') {\n            break;\n          }\n          if (arr[i].type !== 'dots') {\n            range.unshift(arr[i].value);\n          }\n        }\n\n        output = expandRange(range, opts);\n        state.backtrack = true;\n      }\n\n      if (brace.comma !== true && brace.dots !== true) {\n        const out = state.output.slice(0, brace.outputIndex);\n        const toks = state.tokens.slice(brace.tokensIndex);\n        brace.value = brace.output = '\\\\{';\n        value = output = '\\\\}';\n        state.output = out;\n        for (const t of toks) {\n          state.output += (t.output || t.value);\n        }\n      }\n\n      push({ type: 'brace', value, output });\n      decrement('braces');\n      braces.pop();\n      continue;\n    }\n\n    /**\n     * Pipes\n     */\n\n    if (value === '|') {\n      if (extglobs.length > 0) {\n        extglobs[extglobs.length - 1].conditions++;\n      }\n      push({ type: 'text', value });\n      continue;\n    }\n\n    /**\n     * Commas\n     */\n\n    if (value === ',') {\n      let output = value;\n\n      const brace = braces[braces.length - 1];\n      if (brace && stack[stack.length - 1] === 'braces') {\n        brace.comma = true;\n        output = '|';\n      }\n\n      push({ type: 'comma', value, output });\n      continue;\n    }\n\n    /**\n     * Slashes\n     */\n\n    if (value === '/') {\n      // if the beginning of the glob is \"./\", advance the start\n      // to the current index, and don't add the \"./\" characters\n      // to the state. This greatly simplifies lookbehinds when\n      // checking for BOS characters like \"!\" and \".\" (not \"./\")\n      if (prev.type === 'dot' && state.index === state.start + 1) {\n        state.start = state.index + 1;\n        state.consumed = '';\n        state.output = '';\n        tokens.pop();\n        prev = bos; // reset \"prev\" to the first token\n        continue;\n      }\n\n      push({ type: 'slash', value, output: SLASH_LITERAL });\n      continue;\n    }\n\n    /**\n     * Dots\n     */\n\n    if (value === '.') {\n      if (state.braces > 0 && prev.type === 'dot') {\n        if (prev.value === '.') prev.output = DOT_LITERAL;\n        const brace = braces[braces.length - 1];\n        prev.type = 'dots';\n        prev.output += value;\n        prev.value += value;\n        brace.dots = true;\n        continue;\n      }\n\n      if ((state.braces + state.parens) === 0 && prev.type !== 'bos' && prev.type !== 'slash') {\n        push({ type: 'text', value, output: DOT_LITERAL });\n        continue;\n      }\n\n      push({ type: 'dot', value, output: DOT_LITERAL });\n      continue;\n    }\n\n    /**\n     * Question marks\n     */\n\n    if (value === '?') {\n      const isGroup = prev && prev.value === '(';\n      if (!isGroup && opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {\n        extglobOpen('qmark', value);\n        continue;\n      }\n\n      if (prev && prev.type === 'paren') {\n        const next = peek();\n        let output = value;\n\n        if (next === '<' && !utils.supportsLookbehinds()) {\n          throw new Error('Node.js v10 or higher is required for regex lookbehinds');\n        }\n\n        if ((prev.value === '(' && !/[!=<:]/.test(next)) || (next === '<' && !/<([!=]|\\w+>)/.test(remaining()))) {\n          output = `\\\\${value}`;\n        }\n\n        push({ type: 'text', value, output });\n        continue;\n      }\n\n      if (opts.dot !== true && (prev.type === 'slash' || prev.type === 'bos')) {\n        push({ type: 'qmark', value, output: QMARK_NO_DOT });\n        continue;\n      }\n\n      push({ type: 'qmark', value, output: QMARK });\n      continue;\n    }\n\n    /**\n     * Exclamation\n     */\n\n    if (value === '!') {\n      if (opts.noextglob !== true && peek() === '(') {\n        if (peek(2) !== '?' || !/[!=<:]/.test(peek(3))) {\n          extglobOpen('negate', value);\n          continue;\n        }\n      }\n\n      if (opts.nonegate !== true && state.index === 0) {\n        negate();\n        continue;\n      }\n    }\n\n    /**\n     * Plus\n     */\n\n    if (value === '+') {\n      if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {\n        extglobOpen('plus', value);\n        continue;\n      }\n\n      if ((prev && prev.value === '(') || opts.regex === false) {\n        push({ type: 'plus', value, output: PLUS_LITERAL });\n        continue;\n      }\n\n      if ((prev && (prev.type === 'bracket' || prev.type === 'paren' || prev.type === 'brace')) || state.parens > 0) {\n        push({ type: 'plus', value });\n        continue;\n      }\n\n      push({ type: 'plus', value: PLUS_LITERAL });\n      continue;\n    }\n\n    /**\n     * Plain text\n     */\n\n    if (value === '@') {\n      if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {\n        push({ type: 'at', extglob: true, value, output: '' });\n        continue;\n      }\n\n      push({ type: 'text', value });\n      continue;\n    }\n\n    /**\n     * Plain text\n     */\n\n    if (value !== '*') {\n      if (value === '$' || value === '^') {\n        value = `\\\\${value}`;\n      }\n\n      const match = REGEX_NON_SPECIAL_CHARS.exec(remaining());\n      if (match) {\n        value += match[0];\n        state.index += match[0].length;\n      }\n\n      push({ type: 'text', value });\n      continue;\n    }\n\n    /**\n     * Stars\n     */\n\n    if (prev && (prev.type === 'globstar' || prev.star === true)) {\n      prev.type = 'star';\n      prev.star = true;\n      prev.value += value;\n      prev.output = star;\n      state.backtrack = true;\n      state.globstar = true;\n      consume(value);\n      continue;\n    }\n\n    let rest = remaining();\n    if (opts.noextglob !== true && /^\\([^?]/.test(rest)) {\n      extglobOpen('star', value);\n      continue;\n    }\n\n    if (prev.type === 'star') {\n      if (opts.noglobstar === true) {\n        consume(value);\n        continue;\n      }\n\n      const prior = prev.prev;\n      const before = prior.prev;\n      const isStart = prior.type === 'slash' || prior.type === 'bos';\n      const afterStar = before && (before.type === 'star' || before.type === 'globstar');\n\n      if (opts.bash === true && (!isStart || (rest[0] && rest[0] !== '/'))) {\n        push({ type: 'star', value, output: '' });\n        continue;\n      }\n\n      const isBrace = state.braces > 0 && (prior.type === 'comma' || prior.type === 'brace');\n      const isExtglob = extglobs.length && (prior.type === 'pipe' || prior.type === 'paren');\n      if (!isStart && prior.type !== 'paren' && !isBrace && !isExtglob) {\n        push({ type: 'star', value, output: '' });\n        continue;\n      }\n\n      // strip consecutive `/**/`\n      while (rest.slice(0, 3) === '/**') {\n        const after = input[state.index + 4];\n        if (after && after !== '/') {\n          break;\n        }\n        rest = rest.slice(3);\n        consume('/**', 3);\n      }\n\n      if (prior.type === 'bos' && eos()) {\n        prev.type = 'globstar';\n        prev.value += value;\n        prev.output = globstar(opts);\n        state.output = prev.output;\n        state.globstar = true;\n        consume(value);\n        continue;\n      }\n\n      if (prior.type === 'slash' && prior.prev.type !== 'bos' && !afterStar && eos()) {\n        state.output = state.output.slice(0, -(prior.output + prev.output).length);\n        prior.output = `(?:${prior.output}`;\n\n        prev.type = 'globstar';\n        prev.output = globstar(opts) + (opts.strictSlashes ? ')' : '|$)');\n        prev.value += value;\n        state.globstar = true;\n        state.output += prior.output + prev.output;\n        consume(value);\n        continue;\n      }\n\n      if (prior.type === 'slash' && prior.prev.type !== 'bos' && rest[0] === '/') {\n        const end = rest[1] !== void 0 ? '|$' : '';\n\n        state.output = state.output.slice(0, -(prior.output + prev.output).length);\n        prior.output = `(?:${prior.output}`;\n\n        prev.type = 'globstar';\n        prev.output = `${globstar(opts)}${SLASH_LITERAL}|${SLASH_LITERAL}${end})`;\n        prev.value += value;\n\n        state.output += prior.output + prev.output;\n        state.globstar = true;\n\n        consume(value + advance());\n\n        push({ type: 'slash', value: '/', output: '' });\n        continue;\n      }\n\n      if (prior.type === 'bos' && rest[0] === '/') {\n        prev.type = 'globstar';\n        prev.value += value;\n        prev.output = `(?:^|${SLASH_LITERAL}|${globstar(opts)}${SLASH_LITERAL})`;\n        state.output = prev.output;\n        state.globstar = true;\n        consume(value + advance());\n        push({ type: 'slash', value: '/', output: '' });\n        continue;\n      }\n\n      // remove single star from output\n      state.output = state.output.slice(0, -prev.output.length);\n\n      // reset previous token to globstar\n      prev.type = 'globstar';\n      prev.output = globstar(opts);\n      prev.value += value;\n\n      // reset output with globstar\n      state.output += prev.output;\n      state.globstar = true;\n      consume(value);\n      continue;\n    }\n\n    const token = { type: 'star', value, output: star };\n\n    if (opts.bash === true) {\n      token.output = '.*?';\n      if (prev.type === 'bos' || prev.type === 'slash') {\n        token.output = nodot + token.output;\n      }\n      push(token);\n      continue;\n    }\n\n    if (prev && (prev.type === 'bracket' || prev.type === 'paren') && opts.regex === true) {\n      token.output = value;\n      push(token);\n      continue;\n    }\n\n    if (state.index === state.start || prev.type === 'slash' || prev.type === 'dot') {\n      if (prev.type === 'dot') {\n        state.output += NO_DOT_SLASH;\n        prev.output += NO_DOT_SLASH;\n\n      } else if (opts.dot === true) {\n        state.output += NO_DOTS_SLASH;\n        prev.output += NO_DOTS_SLASH;\n\n      } else {\n        state.output += nodot;\n        prev.output += nodot;\n      }\n\n      if (peek() !== '*') {\n        state.output += ONE_CHAR;\n        prev.output += ONE_CHAR;\n      }\n    }\n\n    push(token);\n  }\n\n  while (state.brackets > 0) {\n    if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ']'));\n    state.output = utils.escapeLast(state.output, '[');\n    decrement('brackets');\n  }\n\n  while (state.parens > 0) {\n    if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ')'));\n    state.output = utils.escapeLast(state.output, '(');\n    decrement('parens');\n  }\n\n  while (state.braces > 0) {\n    if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', '}'));\n    state.output = utils.escapeLast(state.output, '{');\n    decrement('braces');\n  }\n\n  if (opts.strictSlashes !== true && (prev.type === 'star' || prev.type === 'bracket')) {\n    push({ type: 'maybe_slash', value: '', output: `${SLASH_LITERAL}?` });\n  }\n\n  // rebuild the output if we had to backtrack at any point\n  if (state.backtrack === true) {\n    state.output = '';\n\n    for (const token of state.tokens) {\n      state.output += token.output != null ? token.output : token.value;\n\n      if (token.suffix) {\n        state.output += token.suffix;\n      }\n    }\n  }\n\n  return state;\n};\n\n/**\n * Fast paths for creating regular expressions for common glob patterns.\n * This can significantly speed up processing and has very little downside\n * impact when none of the fast paths match.\n */\n\nparse.fastpaths = (input, options) => {\n  const opts = { ...options };\n  const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;\n  const len = input.length;\n  if (len > max) {\n    throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);\n  }\n\n  input = REPLACEMENTS[input] || input;\n  const win32 = utils.isWindows(options);\n\n  // create constants based on platform, for windows or posix\n  const {\n    DOT_LITERAL,\n    SLASH_LITERAL,\n    ONE_CHAR,\n    DOTS_SLASH,\n    NO_DOT,\n    NO_DOTS,\n    NO_DOTS_SLASH,\n    STAR,\n    START_ANCHOR\n  } = constants.globChars(win32);\n\n  const nodot = opts.dot ? NO_DOTS : NO_DOT;\n  const slashDot = opts.dot ? NO_DOTS_SLASH : NO_DOT;\n  const capture = opts.capture ? '' : '?:';\n  const state = { negated: false, prefix: '' };\n  let star = opts.bash === true ? '.*?' : STAR;\n\n  if (opts.capture) {\n    star = `(${star})`;\n  }\n\n  const globstar = opts => {\n    if (opts.noglobstar === true) return star;\n    return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;\n  };\n\n  const create = str => {\n    switch (str) {\n      case '*':\n        return `${nodot}${ONE_CHAR}${star}`;\n\n      case '.*':\n        return `${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n      case '*.*':\n        return `${nodot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n      case '*/*':\n        return `${nodot}${star}${SLASH_LITERAL}${ONE_CHAR}${slashDot}${star}`;\n\n      case '**':\n        return nodot + globstar(opts);\n\n      case '**/*':\n        return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${ONE_CHAR}${star}`;\n\n      case '**/*.*':\n        return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n      case '**/.*':\n        return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n      default: {\n        const match = /^(.*?)\\.(\\w+)$/.exec(str);\n        if (!match) return;\n\n        const source = create(match[1]);\n        if (!source) return;\n\n        return source + DOT_LITERAL + match[2];\n      }\n    }\n  };\n\n  const output = utils.removePrefix(input, state);\n  let source = create(output);\n\n  if (source && opts.strictSlashes !== true) {\n    source += `${SLASH_LITERAL}?`;\n  }\n\n  return source;\n};\n\nmodule.exports = parse;\n", "'use strict';\n\nconst path = require('path');\nconst scan = require('./scan');\nconst parse = require('./parse');\nconst utils = require('./utils');\nconst constants = require('./constants');\nconst isObject = val => val && typeof val === 'object' && !Array.isArray(val);\n\n/**\n * Creates a matcher function from one or more glob patterns. The\n * returned function takes a string to match as its first argument,\n * and returns true if the string is a match. The returned matcher\n * function also takes a boolean as the second argument that, when true,\n * returns an object with additional information.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch(glob[, options]);\n *\n * const isMatch = picomatch('*.!(*a)');\n * console.log(isMatch('a.a')); //=> false\n * console.log(isMatch('a.b')); //=> true\n * ```\n * @name picomatch\n * @param {String|Array} `globs` One or more glob patterns.\n * @param {Object=} `options`\n * @return {Function=} Returns a matcher function.\n * @api public\n */\n\nconst picomatch = (glob, options, returnState = false) => {\n  if (Array.isArray(glob)) {\n    const fns = glob.map(input => picomatch(input, options, returnState));\n    const arrayMatcher = str => {\n      for (const isMatch of fns) {\n        const state = isMatch(str);\n        if (state) return state;\n      }\n      return false;\n    };\n    return arrayMatcher;\n  }\n\n  const isState = isObject(glob) && glob.tokens && glob.input;\n\n  if (glob === '' || (typeof glob !== 'string' && !isState)) {\n    throw new TypeError('Expected pattern to be a non-empty string');\n  }\n\n  const opts = options || {};\n  const posix = utils.isWindows(options);\n  const regex = isState\n    ? picomatch.compileRe(glob, options)\n    : picomatch.makeRe(glob, options, false, true);\n\n  const state = regex.state;\n  delete regex.state;\n\n  let isIgnored = () => false;\n  if (opts.ignore) {\n    const ignoreOpts = { ...options, ignore: null, onMatch: null, onResult: null };\n    isIgnored = picomatch(opts.ignore, ignoreOpts, returnState);\n  }\n\n  const matcher = (input, returnObject = false) => {\n    const { isMatch, match, output } = picomatch.test(input, regex, options, { glob, posix });\n    const result = { glob, state, regex, posix, input, output, match, isMatch };\n\n    if (typeof opts.onResult === 'function') {\n      opts.onResult(result);\n    }\n\n    if (isMatch === false) {\n      result.isMatch = false;\n      return returnObject ? result : false;\n    }\n\n    if (isIgnored(input)) {\n      if (typeof opts.onIgnore === 'function') {\n        opts.onIgnore(result);\n      }\n      result.isMatch = false;\n      return returnObject ? result : false;\n    }\n\n    if (typeof opts.onMatch === 'function') {\n      opts.onMatch(result);\n    }\n    return returnObject ? result : true;\n  };\n\n  if (returnState) {\n    matcher.state = state;\n  }\n\n  return matcher;\n};\n\n/**\n * Test `input` with the given `regex`. This is used by the main\n * `picomatch()` function to test the input string.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.test(input, regex[, options]);\n *\n * console.log(picomatch.test('foo/bar', /^(?:([^/]*?)\\/([^/]*?))$/));\n * // { isMatch: true, match: [ 'foo/', 'foo', 'bar' ], output: 'foo/bar' }\n * ```\n * @param {String} `input` String to test.\n * @param {RegExp} `regex`\n * @return {Object} Returns an object with matching info.\n * @api public\n */\n\npicomatch.test = (input, regex, options, { glob, posix } = {}) => {\n  if (typeof input !== 'string') {\n    throw new TypeError('Expected input to be a string');\n  }\n\n  if (input === '') {\n    return { isMatch: false, output: '' };\n  }\n\n  const opts = options || {};\n  const format = opts.format || (posix ? utils.toPosixSlashes : null);\n  let match = input === glob;\n  let output = (match && format) ? format(input) : input;\n\n  if (match === false) {\n    output = format ? format(input) : input;\n    match = output === glob;\n  }\n\n  if (match === false || opts.capture === true) {\n    if (opts.matchBase === true || opts.basename === true) {\n      match = picomatch.matchBase(input, regex, options, posix);\n    } else {\n      match = regex.exec(output);\n    }\n  }\n\n  return { isMatch: Boolean(match), match, output };\n};\n\n/**\n * Match the basename of a filepath.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.matchBase(input, glob[, options]);\n * console.log(picomatch.matchBase('foo/bar.js', '*.js'); // true\n * ```\n * @param {String} `input` String to test.\n * @param {RegExp|String} `glob` Glob pattern or regex created by [.makeRe](#makeRe).\n * @return {Boolean}\n * @api public\n */\n\npicomatch.matchBase = (input, glob, options, posix = utils.isWindows(options)) => {\n  const regex = glob instanceof RegExp ? glob : picomatch.makeRe(glob, options);\n  return regex.test(path.basename(input));\n};\n\n/**\n * Returns true if **any** of the given glob `patterns` match the specified `string`.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.isMatch(string, patterns[, options]);\n *\n * console.log(picomatch.isMatch('a.a', ['b.*', '*.a'])); //=> true\n * console.log(picomatch.isMatch('a.a', 'b.*')); //=> false\n * ```\n * @param {String|Array} str The string to test.\n * @param {String|Array} patterns One or more glob patterns to use for matching.\n * @param {Object} [options] See available [options](#options).\n * @return {Boolean} Returns true if any patterns match `str`\n * @api public\n */\n\npicomatch.isMatch = (str, patterns, options) => picomatch(patterns, options)(str);\n\n/**\n * Parse a glob pattern to create the source string for a regular\n * expression.\n *\n * ```js\n * const picomatch = require('picomatch');\n * const result = picomatch.parse(pattern[, options]);\n * ```\n * @param {String} `pattern`\n * @param {Object} `options`\n * @return {Object} Returns an object with useful properties and output to be used as a regex source string.\n * @api public\n */\n\npicomatch.parse = (pattern, options) => {\n  if (Array.isArray(pattern)) return pattern.map(p => picomatch.parse(p, options));\n  return parse(pattern, { ...options, fastpaths: false });\n};\n\n/**\n * Scan a glob pattern to separate the pattern into segments.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.scan(input[, options]);\n *\n * const result = picomatch.scan('!./foo/*.js');\n * console.log(result);\n * { prefix: '!./',\n *   input: '!./foo/*.js',\n *   start: 3,\n *   base: 'foo',\n *   glob: '*.js',\n *   isBrace: false,\n *   isBracket: false,\n *   isGlob: true,\n *   isExtglob: false,\n *   isGlobstar: false,\n *   negated: true }\n * ```\n * @param {String} `input` Glob pattern to scan.\n * @param {Object} `options`\n * @return {Object} Returns an object with\n * @api public\n */\n\npicomatch.scan = (input, options) => scan(input, options);\n\n/**\n * Compile a regular expression from the `state` object returned by the\n * [parse()](#parse) method.\n *\n * @param {Object} `state`\n * @param {Object} `options`\n * @param {Boolean} `returnOutput` Intended for implementors, this argument allows you to return the raw output from the parser.\n * @param {Boolean} `returnState` Adds the state to a `state` property on the returned regex. Useful for implementors and debugging.\n * @return {RegExp}\n * @api public\n */\n\npicomatch.compileRe = (state, options, returnOutput = false, returnState = false) => {\n  if (returnOutput === true) {\n    return state.output;\n  }\n\n  const opts = options || {};\n  const prepend = opts.contains ? '' : '^';\n  const append = opts.contains ? '' : '$';\n\n  let source = `${prepend}(?:${state.output})${append}`;\n  if (state && state.negated === true) {\n    source = `^(?!${source}).*$`;\n  }\n\n  const regex = picomatch.toRegex(source, options);\n  if (returnState === true) {\n    regex.state = state;\n  }\n\n  return regex;\n};\n\n/**\n * Create a regular expression from a parsed glob pattern.\n *\n * ```js\n * const picomatch = require('picomatch');\n * const state = picomatch.parse('*.js');\n * // picomatch.compileRe(state[, options]);\n *\n * console.log(picomatch.compileRe(state));\n * //=> /^(?:(?!\\.)(?=.)[^/]*?\\.js)$/\n * ```\n * @param {String} `state` The object returned from the `.parse` method.\n * @param {Object} `options`\n * @param {Boolean} `returnOutput` Implementors may use this argument to return the compiled output, instead of a regular expression. This is not exposed on the options to prevent end-users from mutating the result.\n * @param {Boolean} `returnState` Implementors may use this argument to return the state from the parsed glob with the returned regular expression.\n * @return {RegExp} Returns a regex created from the given pattern.\n * @api public\n */\n\npicomatch.makeRe = (input, options = {}, returnOutput = false, returnState = false) => {\n  if (!input || typeof input !== 'string') {\n    throw new TypeError('Expected a non-empty string');\n  }\n\n  let parsed = { negated: false, fastpaths: true };\n\n  if (options.fastpaths !== false && (input[0] === '.' || input[0] === '*')) {\n    parsed.output = parse.fastpaths(input, options);\n  }\n\n  if (!parsed.output) {\n    parsed = parse(input, options);\n  }\n\n  return picomatch.compileRe(parsed, options, returnOutput, returnState);\n};\n\n/**\n * Create a regular expression from the given regex source string.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.toRegex(source[, options]);\n *\n * const { output } = picomatch.parse('*.js');\n * console.log(picomatch.toRegex(output));\n * //=> /^(?:(?!\\.)(?=.)[^/]*?\\.js)$/\n * ```\n * @param {String} `source` Regular expression source string.\n * @param {Object} `options`\n * @return {RegExp}\n * @api public\n */\n\npicomatch.toRegex = (source, options) => {\n  try {\n    const opts = options || {};\n    return new RegExp(source, opts.flags || (opts.nocase ? 'i' : ''));\n  } catch (err) {\n    if (options && options.debug === true) throw err;\n    return /$^/;\n  }\n};\n\n/**\n * Picomatch constants.\n * @return {Object}\n */\n\npicomatch.constants = constants;\n\n/**\n * Expose \"picomatch\"\n */\n\nmodule.exports = picomatch;\n", "'use strict';\n\nmodule.exports = require('./lib/picomatch');\n", "'use strict';\n\nconst fs = require('fs');\nconst { Readable } = require('stream');\nconst sysPath = require('path');\nconst { promisify } = require('util');\nconst picomatch = require('picomatch');\n\nconst readdir = promisify(fs.readdir);\nconst stat = promisify(fs.stat);\nconst lstat = promisify(fs.lstat);\nconst realpath = promisify(fs.realpath);\n\n/**\n * @typedef {Object} EntryInfo\n * @property {String} path\n * @property {String} fullPath\n * @property {fs.Stats=} stats\n * @property {fs.Dirent=} dirent\n * @property {String} basename\n */\n\nconst BANG = '!';\nconst RECURSIVE_ERROR_CODE = 'READDIRP_RECURSIVE_ERROR';\nconst NORMAL_FLOW_ERRORS = new Set(['ENOENT', 'EPERM', 'EACCES', 'ELOOP', RECURSIVE_ERROR_CODE]);\nconst FILE_TYPE = 'files';\nconst DIR_TYPE = 'directories';\nconst FILE_DIR_TYPE = 'files_directories';\nconst EVERYTHING_TYPE = 'all';\nconst ALL_TYPES = [FILE_TYPE, DIR_TYPE, FILE_DIR_TYPE, EVERYTHING_TYPE];\n\nconst isNormalFlowError = error => NORMAL_FLOW_ERRORS.has(error.code);\nconst [maj, min] = process.versions.node.split('.').slice(0, 2).map(n => Number.parseInt(n, 10));\nconst wantBigintFsStats = process.platform === 'win32' && (maj > 10 || (maj === 10 && min >= 5));\n\nconst normalizeFilter = filter => {\n  if (filter === undefined) return;\n  if (typeof filter === 'function') return filter;\n\n  if (typeof filter === 'string') {\n    const glob = picomatch(filter.trim());\n    return entry => glob(entry.basename);\n  }\n\n  if (Array.isArray(filter)) {\n    const positive = [];\n    const negative = [];\n    for (const item of filter) {\n      const trimmed = item.trim();\n      if (trimmed.charAt(0) === BANG) {\n        negative.push(picomatch(trimmed.slice(1)));\n      } else {\n        positive.push(picomatch(trimmed));\n      }\n    }\n\n    if (negative.length > 0) {\n      if (positive.length > 0) {\n        return entry =>\n          positive.some(f => f(entry.basename)) && !negative.some(f => f(entry.basename));\n      }\n      return entry => !negative.some(f => f(entry.basename));\n    }\n    return entry => positive.some(f => f(entry.basename));\n  }\n};\n\nclass ReaddirpStream extends Readable {\n  static get defaultOptions() {\n    return {\n      root: '.',\n      /* eslint-disable no-unused-vars */\n      fileFilter: (path) => true,\n      directoryFilter: (path) => true,\n      /* eslint-enable no-unused-vars */\n      type: FILE_TYPE,\n      lstat: false,\n      depth: 2147483648,\n      alwaysStat: false\n    };\n  }\n\n  constructor(options = {}) {\n    super({\n      objectMode: true,\n      autoDestroy: true,\n      highWaterMark: options.highWaterMark || 4096\n    });\n    const opts = { ...ReaddirpStream.defaultOptions, ...options };\n    const { root, type } = opts;\n\n    this._fileFilter = normalizeFilter(opts.fileFilter);\n    this._directoryFilter = normalizeFilter(opts.directoryFilter);\n\n    const statMethod = opts.lstat ? lstat : stat;\n    // Use bigint stats if it's windows and stat() supports options (node 10+).\n    if (wantBigintFsStats) {\n      this._stat = path => statMethod(path, { bigint: true });\n    } else {\n      this._stat = statMethod;\n    }\n\n    this._maxDepth = opts.depth;\n    this._wantsDir = [DIR_TYPE, FILE_DIR_TYPE, EVERYTHING_TYPE].includes(type);\n    this._wantsFile = [FILE_TYPE, FILE_DIR_TYPE, EVERYTHING_TYPE].includes(type);\n    this._wantsEverything = type === EVERYTHING_TYPE;\n    this._root = sysPath.resolve(root);\n    this._isDirent = ('Dirent' in fs) && !opts.alwaysStat;\n    this._statsProp = this._isDirent ? 'dirent' : 'stats';\n    this._rdOptions = { encoding: 'utf8', withFileTypes: this._isDirent };\n\n    // Launch stream with one parent, the root dir.\n    this.parents = [this._exploreDir(root, 1)];\n    this.reading = false;\n    this.parent = undefined;\n  }\n\n  async _read(batch) {\n    if (this.reading) return;\n    this.reading = true;\n\n    try {\n      while (!this.destroyed && batch > 0) {\n        const { path, depth, files = [] } = this.parent || {};\n\n        if (files.length > 0) {\n          const slice = files.splice(0, batch).map(dirent => this._formatEntry(dirent, path));\n          for (const entry of await Promise.all(slice)) {\n            if (this.destroyed) return;\n\n            const entryType = await this._getEntryType(entry);\n            if (entryType === 'directory' && this._directoryFilter(entry)) {\n              if (depth <= this._maxDepth) {\n                this.parents.push(this._exploreDir(entry.fullPath, depth + 1));\n              }\n\n              if (this._wantsDir) {\n                this.push(entry);\n                batch--;\n              }\n            } else if ((entryType === 'file' || this._includeAsFile(entry)) && this._fileFilter(entry)) {\n              if (this._wantsFile) {\n                this.push(entry);\n                batch--;\n              }\n            }\n          }\n        } else {\n          const parent = this.parents.pop();\n          if (!parent) {\n            this.push(null);\n            break;\n          }\n          this.parent = await parent;\n          if (this.destroyed) return;\n        }\n      }\n    } catch (error) {\n      this.destroy(error);\n    } finally {\n      this.reading = false;\n    }\n  }\n\n  async _exploreDir(path, depth) {\n    let files;\n    try {\n      files = await readdir(path, this._rdOptions);\n    } catch (error) {\n      this._onError(error);\n    }\n    return { files, depth, path };\n  }\n\n  async _formatEntry(dirent, path) {\n    let entry;\n    try {\n      const basename = this._isDirent ? dirent.name : dirent;\n      const fullPath = sysPath.resolve(sysPath.join(path, basename));\n      entry = { path: sysPath.relative(this._root, fullPath), fullPath, basename };\n      entry[this._statsProp] = this._isDirent ? dirent : await this._stat(fullPath);\n    } catch (err) {\n      this._onError(err);\n    }\n    return entry;\n  }\n\n  _onError(err) {\n    if (isNormalFlowError(err) && !this.destroyed) {\n      this.emit('warn', err);\n    } else {\n      this.destroy(err);\n    }\n  }\n\n  async _getEntryType(entry) {\n    // entry may be undefined, because a warning or an error were emitted\n    // and the statsProp is undefined\n    const stats = entry && entry[this._statsProp];\n    if (!stats) {\n      return;\n    }\n    if (stats.isFile()) {\n      return 'file';\n    }\n    if (stats.isDirectory()) {\n      return 'directory';\n    }\n    if (stats && stats.isSymbolicLink()) {\n      const full = entry.fullPath;\n      try {\n        const entryRealPath = await realpath(full);\n        const entryRealPathStats = await lstat(entryRealPath);\n        if (entryRealPathStats.isFile()) {\n          return 'file';\n        }\n        if (entryRealPathStats.isDirectory()) {\n          const len = entryRealPath.length;\n          if (full.startsWith(entryRealPath) && full.substr(len, 1) === sysPath.sep) {\n            const recursiveError = new Error(\n              `Circular symlink detected: \"${full}\" points to \"${entryRealPath}\"`\n            );\n            recursiveError.code = RECURSIVE_ERROR_CODE;\n            return this._onError(recursiveError);\n          }\n          return 'directory';\n        }\n      } catch (error) {\n        this._onError(error);\n      }\n    }\n  }\n\n  _includeAsFile(entry) {\n    const stats = entry && entry[this._statsProp];\n\n    return stats && this._wantsEverything && !stats.isDirectory();\n  }\n}\n\n/**\n * @typedef {Object} ReaddirpArguments\n * @property {Function=} fileFilter\n * @property {Function=} directoryFilter\n * @property {String=} type\n * @property {Number=} depth\n * @property {String=} root\n * @property {Boolean=} lstat\n * @property {Boolean=} bigint\n */\n\n/**\n * Main function which ends up calling readdirRec and reads all files and directories in given root recursively.\n * @param {String} root Root directory\n * @param {ReaddirpArguments=} options Options to specify root (start directory), filters and recursion depth\n */\nconst readdirp = (root, options = {}) => {\n  let type = options.entryType || options.type;\n  if (type === 'both') type = FILE_DIR_TYPE; // backwards-compatibility\n  if (type) options.type = type;\n  if (!root) {\n    throw new Error('readdirp: root argument is required. Usage: readdirp(root, options)');\n  } else if (typeof root !== 'string') {\n    throw new TypeError('readdirp: root argument must be a string. Usage: readdirp(root, options)');\n  } else if (type && !ALL_TYPES.includes(type)) {\n    throw new Error(`readdirp: Invalid type passed. Use one of ${ALL_TYPES.join(', ')}`);\n  }\n\n  options.root = root;\n  return new ReaddirpStream(options);\n};\n\nconst readdirpPromise = (root, options = {}) => {\n  return new Promise((resolve, reject) => {\n    const files = [];\n    readdirp(root, options)\n      .on('data', entry => files.push(entry))\n      .on('end', () => resolve(files))\n      .on('error', error => reject(error));\n  });\n};\n\nreaddirp.promise = readdirpPromise;\nreaddirp.ReaddirpStream = ReaddirpStream;\nreaddirp.default = readdirp;\n\nmodule.exports = readdirp;\n", "/*!\n * normalize-path <https://github.com/jonschlinkert/normalize-path>\n *\n * Copyright (c) 2014-2018, Jon Schlinkert.\n * Released under the MIT License.\n */\n\nmodule.exports = function(path, stripTrailing) {\n  if (typeof path !== 'string') {\n    throw new TypeError('expected path to be a string');\n  }\n\n  if (path === '\\\\' || path === '/') return '/';\n\n  var len = path.length;\n  if (len <= 1) return path;\n\n  // ensure that win32 namespaces has two leading slashes, so that the path is\n  // handled properly by the win32 version of path.parse() after being normalized\n  // https://msdn.microsoft.com/library/windows/desktop/aa365247(v=vs.85).aspx#namespaces\n  var prefix = '';\n  if (len > 4 && path[3] === '\\\\') {\n    var ch = path[2];\n    if ((ch === '?' || ch === '.') && path.slice(0, 2) === '\\\\\\\\') {\n      path = path.slice(2);\n      prefix = '//';\n    }\n  }\n\n  var segs = path.split(/[/\\\\]+/);\n  if (stripTrailing !== false && segs[segs.length - 1] === '') {\n    segs.pop();\n  }\n  return prefix + segs.join('/');\n};\n", "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\n\nconst picomatch = require('picomatch');\nconst normalizePath = require('normalize-path');\n\n/**\n * @typedef {(testString: string) => boolean} AnymatchFn\n * @typedef {string|RegExp|AnymatchFn} AnymatchPattern\n * @typedef {AnymatchPattern|AnymatchPattern[]} AnymatchMatcher\n */\nconst BANG = '!';\nconst DEFAULT_OPTIONS = {returnIndex: false};\nconst arrify = (item) => Array.isArray(item) ? item : [item];\n\n/**\n * @param {AnymatchPattern} matcher\n * @param {object} options\n * @returns {AnymatchFn}\n */\nconst createPattern = (matcher, options) => {\n  if (typeof matcher === 'function') {\n    return matcher;\n  }\n  if (typeof matcher === 'string') {\n    const glob = picomatch(matcher, options);\n    return (string) => matcher === string || glob(string);\n  }\n  if (matcher instanceof RegExp) {\n    return (string) => matcher.test(string);\n  }\n  return (string) => false;\n};\n\n/**\n * @param {Array<Function>} patterns\n * @param {Array<Function>} negPatterns\n * @param {String|Array} args\n * @param {Boolean} returnIndex\n * @returns {boolean|number}\n */\nconst matchPatterns = (patterns, negPatterns, args, returnIndex) => {\n  const isList = Array.isArray(args);\n  const _path = isList ? args[0] : args;\n  if (!isList && typeof _path !== 'string') {\n    throw new TypeError('anymatch: second argument must be a string: got ' +\n      Object.prototype.toString.call(_path))\n  }\n  const path = normalizePath(_path, false);\n\n  for (let index = 0; index < negPatterns.length; index++) {\n    const nglob = negPatterns[index];\n    if (nglob(path)) {\n      return returnIndex ? -1 : false;\n    }\n  }\n\n  const applied = isList && [path].concat(args.slice(1));\n  for (let index = 0; index < patterns.length; index++) {\n    const pattern = patterns[index];\n    if (isList ? pattern(...applied) : pattern(path)) {\n      return returnIndex ? index : true;\n    }\n  }\n\n  return returnIndex ? -1 : false;\n};\n\n/**\n * @param {AnymatchMatcher} matchers\n * @param {Array|string} testString\n * @param {object} options\n * @returns {boolean|number|Function}\n */\nconst anymatch = (matchers, testString, options = DEFAULT_OPTIONS) => {\n  if (matchers == null) {\n    throw new TypeError('anymatch: specify first argument');\n  }\n  const opts = typeof options === 'boolean' ? {returnIndex: options} : options;\n  const returnIndex = opts.returnIndex || false;\n\n  // Early cache for matchers.\n  const mtchers = arrify(matchers);\n  const negatedGlobs = mtchers\n    .filter(item => typeof item === 'string' && item.charAt(0) === BANG)\n    .map(item => item.slice(1))\n    .map(item => picomatch(item, opts));\n  const patterns = mtchers\n    .filter(item => typeof item !== 'string' || (typeof item === 'string' && item.charAt(0) !== BANG))\n    .map(matcher => createPattern(matcher, opts));\n\n  if (testString == null) {\n    return (testString, ri = false) => {\n      const returnIndex = typeof ri === 'boolean' ? ri : false;\n      return matchPatterns(patterns, negatedGlobs, testString, returnIndex);\n    }\n  }\n\n  return matchPatterns(patterns, negatedGlobs, testString, returnIndex);\n};\n\nanymatch.default = anymatch;\nmodule.exports = anymatch;\n", "/*!\n * is-extglob <https://github.com/jonschlinkert/is-extglob>\n *\n * Copyright (c) 2014-2016, Jon Schlinkert.\n * Licensed under the MIT License.\n */\n\nmodule.exports = function isExtglob(str) {\n  if (typeof str !== 'string' || str === '') {\n    return false;\n  }\n\n  var match;\n  while ((match = /(\\\\).|([@?!+*]\\(.*\\))/g.exec(str))) {\n    if (match[2]) return true;\n    str = str.slice(match.index + match[0].length);\n  }\n\n  return false;\n};\n", "/*!\n * is-glob <https://github.com/jonschlinkert/is-glob>\n *\n * Copyright (c) 2014-2017, Jon Schlinkert.\n * Released under the MIT License.\n */\n\nvar isExtglob = require('is-extglob');\nvar chars = { '{': '}', '(': ')', '[': ']'};\nvar strictCheck = function(str) {\n  if (str[0] === '!') {\n    return true;\n  }\n  var index = 0;\n  var pipeIndex = -2;\n  var closeSquareIndex = -2;\n  var closeCurlyIndex = -2;\n  var closeParenIndex = -2;\n  var backSlashIndex = -2;\n  while (index < str.length) {\n    if (str[index] === '*') {\n      return true;\n    }\n\n    if (str[index + 1] === '?' && /[\\].+)]/.test(str[index])) {\n      return true;\n    }\n\n    if (closeSquareIndex !== -1 && str[index] === '[' && str[index + 1] !== ']') {\n      if (closeSquareIndex < index) {\n        closeSquareIndex = str.indexOf(']', index);\n      }\n      if (closeSquareIndex > index) {\n        if (backSlashIndex === -1 || backSlashIndex > closeSquareIndex) {\n          return true;\n        }\n        backSlashIndex = str.indexOf('\\\\', index);\n        if (backSlashIndex === -1 || backSlashIndex > closeSquareIndex) {\n          return true;\n        }\n      }\n    }\n\n    if (closeCurlyIndex !== -1 && str[index] === '{' && str[index + 1] !== '}') {\n      closeCurlyIndex = str.indexOf('}', index);\n      if (closeCurlyIndex > index) {\n        backSlashIndex = str.indexOf('\\\\', index);\n        if (backSlashIndex === -1 || backSlashIndex > closeCurlyIndex) {\n          return true;\n        }\n      }\n    }\n\n    if (closeParenIndex !== -1 && str[index] === '(' && str[index + 1] === '?' && /[:!=]/.test(str[index + 2]) && str[index + 3] !== ')') {\n      closeParenIndex = str.indexOf(')', index);\n      if (closeParenIndex > index) {\n        backSlashIndex = str.indexOf('\\\\', index);\n        if (backSlashIndex === -1 || backSlashIndex > closeParenIndex) {\n          return true;\n        }\n      }\n    }\n\n    if (pipeIndex !== -1 && str[index] === '(' && str[index + 1] !== '|') {\n      if (pipeIndex < index) {\n        pipeIndex = str.indexOf('|', index);\n      }\n      if (pipeIndex !== -1 && str[pipeIndex + 1] !== ')') {\n        closeParenIndex = str.indexOf(')', pipeIndex);\n        if (closeParenIndex > pipeIndex) {\n          backSlashIndex = str.indexOf('\\\\', pipeIndex);\n          if (backSlashIndex === -1 || backSlashIndex > closeParenIndex) {\n            return true;\n          }\n        }\n      }\n    }\n\n    if (str[index] === '\\\\') {\n      var open = str[index + 1];\n      index += 2;\n      var close = chars[open];\n\n      if (close) {\n        var n = str.indexOf(close, index);\n        if (n !== -1) {\n          index = n + 1;\n        }\n      }\n\n      if (str[index] === '!') {\n        return true;\n      }\n    } else {\n      index++;\n    }\n  }\n  return false;\n};\n\nvar relaxedCheck = function(str) {\n  if (str[0] === '!') {\n    return true;\n  }\n  var index = 0;\n  while (index < str.length) {\n    if (/[*?{}()[\\]]/.test(str[index])) {\n      return true;\n    }\n\n    if (str[index] === '\\\\') {\n      var open = str[index + 1];\n      index += 2;\n      var close = chars[open];\n\n      if (close) {\n        var n = str.indexOf(close, index);\n        if (n !== -1) {\n          index = n + 1;\n        }\n      }\n\n      if (str[index] === '!') {\n        return true;\n      }\n    } else {\n      index++;\n    }\n  }\n  return false;\n};\n\nmodule.exports = function isGlob(str, options) {\n  if (typeof str !== 'string' || str === '') {\n    return false;\n  }\n\n  if (isExtglob(str)) {\n    return true;\n  }\n\n  var check = strictCheck;\n\n  // optionally relax check\n  if (options && options.strict === false) {\n    check = relaxedCheck;\n  }\n\n  return check(str);\n};\n", "'use strict';\n\nvar isGlob = require('is-glob');\nvar pathPosixDirname = require('path').posix.dirname;\nvar isWin32 = require('os').platform() === 'win32';\n\nvar slash = '/';\nvar backslash = /\\\\/g;\nvar enclosure = /[\\{\\[].*[\\}\\]]$/;\nvar globby = /(^|[^\\\\])([\\{\\[]|\\([^\\)]+$)/;\nvar escaped = /\\\\([\\!\\*\\?\\|\\[\\]\\(\\)\\{\\}])/g;\n\n/**\n * @param {string} str\n * @param {Object} opts\n * @param {boolean} [opts.flipBackslashes=true]\n * @returns {string}\n */\nmodule.exports = function globParent(str, opts) {\n  var options = Object.assign({ flipBackslashes: true }, opts);\n\n  // flip windows path separators\n  if (options.flipBackslashes && isWin32 && str.indexOf(slash) < 0) {\n    str = str.replace(backslash, slash);\n  }\n\n  // special case for strings ending in enclosure containing path separator\n  if (enclosure.test(str)) {\n    str += slash;\n  }\n\n  // preserves full path in case of trailing path separator\n  str += 'a';\n\n  // remove path parts that are globby\n  do {\n    str = pathPosixDirname(str);\n  } while (isGlob(str) || globby.test(str));\n\n  // remove escape chars and return result\n  return str.replace(escaped, '$1');\n};\n", "'use strict';\n\nexports.isInteger = num => {\n  if (typeof num === 'number') {\n    return Number.isInteger(num);\n  }\n  if (typeof num === 'string' && num.trim() !== '') {\n    return Number.isInteger(Number(num));\n  }\n  return false;\n};\n\n/**\n * Find a node of the given type\n */\n\nexports.find = (node, type) => node.nodes.find(node => node.type === type);\n\n/**\n * Find a node of the given type\n */\n\nexports.exceedsLimit = (min, max, step = 1, limit) => {\n  if (limit === false) return false;\n  if (!exports.isInteger(min) || !exports.isInteger(max)) return false;\n  return ((Number(max) - Number(min)) / Number(step)) >= limit;\n};\n\n/**\n * Escape the given node with '\\\\' before node.value\n */\n\nexports.escapeNode = (block, n = 0, type) => {\n  const node = block.nodes[n];\n  if (!node) return;\n\n  if ((type && node.type === type) || node.type === 'open' || node.type === 'close') {\n    if (node.escaped !== true) {\n      node.value = '\\\\' + node.value;\n      node.escaped = true;\n    }\n  }\n};\n\n/**\n * Returns true if the given brace node should be enclosed in literal braces\n */\n\nexports.encloseBrace = node => {\n  if (node.type !== 'brace') return false;\n  if ((node.commas >> 0 + node.ranges >> 0) === 0) {\n    node.invalid = true;\n    return true;\n  }\n  return false;\n};\n\n/**\n * Returns true if a brace node is invalid.\n */\n\nexports.isInvalidBrace = block => {\n  if (block.type !== 'brace') return false;\n  if (block.invalid === true || block.dollar) return true;\n  if ((block.commas >> 0 + block.ranges >> 0) === 0) {\n    block.invalid = true;\n    return true;\n  }\n  if (block.open !== true || block.close !== true) {\n    block.invalid = true;\n    return true;\n  }\n  return false;\n};\n\n/**\n * Returns true if a node is an open or close node\n */\n\nexports.isOpenOrClose = node => {\n  if (node.type === 'open' || node.type === 'close') {\n    return true;\n  }\n  return node.open === true || node.close === true;\n};\n\n/**\n * Reduce an array of text nodes.\n */\n\nexports.reduce = nodes => nodes.reduce((acc, node) => {\n  if (node.type === 'text') acc.push(node.value);\n  if (node.type === 'range') node.type = 'text';\n  return acc;\n}, []);\n\n/**\n * Flatten an array\n */\n\nexports.flatten = (...args) => {\n  const result = [];\n\n  const flat = arr => {\n    for (let i = 0; i < arr.length; i++) {\n      const ele = arr[i];\n\n      if (Array.isArray(ele)) {\n        flat(ele);\n        continue;\n      }\n\n      if (ele !== undefined) {\n        result.push(ele);\n      }\n    }\n    return result;\n  };\n\n  flat(args);\n  return result;\n};\n", "'use strict';\n\nconst utils = require('./utils');\n\nmodule.exports = (ast, options = {}) => {\n  const stringify = (node, parent = {}) => {\n    const invalidBlock = options.escapeInvalid && utils.isInvalidBrace(parent);\n    const invalidNode = node.invalid === true && options.escapeInvalid === true;\n    let output = '';\n\n    if (node.value) {\n      if ((invalidBlock || invalidNode) && utils.isOpenOrClose(node)) {\n        return '\\\\' + node.value;\n      }\n      return node.value;\n    }\n\n    if (node.value) {\n      return node.value;\n    }\n\n    if (node.nodes) {\n      for (const child of node.nodes) {\n        output += stringify(child);\n      }\n    }\n    return output;\n  };\n\n  return stringify(ast);\n};\n\n", "/*!\n * is-number <https://github.com/jonschlinkert/is-number>\n *\n * Copyright (c) 2014-present, Jon Schlinkert.\n * Released under the MIT License.\n */\n\n'use strict';\n\nmodule.exports = function(num) {\n  if (typeof num === 'number') {\n    return num - num === 0;\n  }\n  if (typeof num === 'string' && num.trim() !== '') {\n    return Number.isFinite ? Number.isFinite(+num) : isFinite(+num);\n  }\n  return false;\n};\n", "/*!\n * to-regex-range <https://github.com/micromatch/to-regex-range>\n *\n * Copyright (c) 2015-present, Jon Schlinkert.\n * Released under the MIT License.\n */\n\n'use strict';\n\nconst isNumber = require('is-number');\n\nconst toRegexRange = (min, max, options) => {\n  if (isNumber(min) === false) {\n    throw new TypeError('toRegexRange: expected the first argument to be a number');\n  }\n\n  if (max === void 0 || min === max) {\n    return String(min);\n  }\n\n  if (isNumber(max) === false) {\n    throw new TypeError('toRegexRange: expected the second argument to be a number.');\n  }\n\n  let opts = { relaxZeros: true, ...options };\n  if (typeof opts.strictZeros === 'boolean') {\n    opts.relaxZeros = opts.strictZeros === false;\n  }\n\n  let relax = String(opts.relaxZeros);\n  let shorthand = String(opts.shorthand);\n  let capture = String(opts.capture);\n  let wrap = String(opts.wrap);\n  let cacheKey = min + ':' + max + '=' + relax + shorthand + capture + wrap;\n\n  if (toRegexRange.cache.hasOwnProperty(cacheKey)) {\n    return toRegexRange.cache[cacheKey].result;\n  }\n\n  let a = Math.min(min, max);\n  let b = Math.max(min, max);\n\n  if (Math.abs(a - b) === 1) {\n    let result = min + '|' + max;\n    if (opts.capture) {\n      return `(${result})`;\n    }\n    if (opts.wrap === false) {\n      return result;\n    }\n    return `(?:${result})`;\n  }\n\n  let isPadded = hasPadding(min) || hasPadding(max);\n  let state = { min, max, a, b };\n  let positives = [];\n  let negatives = [];\n\n  if (isPadded) {\n    state.isPadded = isPadded;\n    state.maxLen = String(state.max).length;\n  }\n\n  if (a < 0) {\n    let newMin = b < 0 ? Math.abs(b) : 1;\n    negatives = splitToPatterns(newMin, Math.abs(a), state, opts);\n    a = state.a = 0;\n  }\n\n  if (b >= 0) {\n    positives = splitToPatterns(a, b, state, opts);\n  }\n\n  state.negatives = negatives;\n  state.positives = positives;\n  state.result = collatePatterns(negatives, positives, opts);\n\n  if (opts.capture === true) {\n    state.result = `(${state.result})`;\n  } else if (opts.wrap !== false && (positives.length + negatives.length) > 1) {\n    state.result = `(?:${state.result})`;\n  }\n\n  toRegexRange.cache[cacheKey] = state;\n  return state.result;\n};\n\nfunction collatePatterns(neg, pos, options) {\n  let onlyNegative = filterPatterns(neg, pos, '-', false, options) || [];\n  let onlyPositive = filterPatterns(pos, neg, '', false, options) || [];\n  let intersected = filterPatterns(neg, pos, '-?', true, options) || [];\n  let subpatterns = onlyNegative.concat(intersected).concat(onlyPositive);\n  return subpatterns.join('|');\n}\n\nfunction splitToRanges(min, max) {\n  let nines = 1;\n  let zeros = 1;\n\n  let stop = countNines(min, nines);\n  let stops = new Set([max]);\n\n  while (min <= stop && stop <= max) {\n    stops.add(stop);\n    nines += 1;\n    stop = countNines(min, nines);\n  }\n\n  stop = countZeros(max + 1, zeros) - 1;\n\n  while (min < stop && stop <= max) {\n    stops.add(stop);\n    zeros += 1;\n    stop = countZeros(max + 1, zeros) - 1;\n  }\n\n  stops = [...stops];\n  stops.sort(compare);\n  return stops;\n}\n\n/**\n * Convert a range to a regex pattern\n * @param {Number} `start`\n * @param {Number} `stop`\n * @return {String}\n */\n\nfunction rangeToPattern(start, stop, options) {\n  if (start === stop) {\n    return { pattern: start, count: [], digits: 0 };\n  }\n\n  let zipped = zip(start, stop);\n  let digits = zipped.length;\n  let pattern = '';\n  let count = 0;\n\n  for (let i = 0; i < digits; i++) {\n    let [startDigit, stopDigit] = zipped[i];\n\n    if (startDigit === stopDigit) {\n      pattern += startDigit;\n\n    } else if (startDigit !== '0' || stopDigit !== '9') {\n      pattern += toCharacterClass(startDigit, stopDigit, options);\n\n    } else {\n      count++;\n    }\n  }\n\n  if (count) {\n    pattern += options.shorthand === true ? '\\\\d' : '[0-9]';\n  }\n\n  return { pattern, count: [count], digits };\n}\n\nfunction splitToPatterns(min, max, tok, options) {\n  let ranges = splitToRanges(min, max);\n  let tokens = [];\n  let start = min;\n  let prev;\n\n  for (let i = 0; i < ranges.length; i++) {\n    let max = ranges[i];\n    let obj = rangeToPattern(String(start), String(max), options);\n    let zeros = '';\n\n    if (!tok.isPadded && prev && prev.pattern === obj.pattern) {\n      if (prev.count.length > 1) {\n        prev.count.pop();\n      }\n\n      prev.count.push(obj.count[0]);\n      prev.string = prev.pattern + toQuantifier(prev.count);\n      start = max + 1;\n      continue;\n    }\n\n    if (tok.isPadded) {\n      zeros = padZeros(max, tok, options);\n    }\n\n    obj.string = zeros + obj.pattern + toQuantifier(obj.count);\n    tokens.push(obj);\n    start = max + 1;\n    prev = obj;\n  }\n\n  return tokens;\n}\n\nfunction filterPatterns(arr, comparison, prefix, intersection, options) {\n  let result = [];\n\n  for (let ele of arr) {\n    let { string } = ele;\n\n    // only push if _both_ are negative...\n    if (!intersection && !contains(comparison, 'string', string)) {\n      result.push(prefix + string);\n    }\n\n    // or _both_ are positive\n    if (intersection && contains(comparison, 'string', string)) {\n      result.push(prefix + string);\n    }\n  }\n  return result;\n}\n\n/**\n * Zip strings\n */\n\nfunction zip(a, b) {\n  let arr = [];\n  for (let i = 0; i < a.length; i++) arr.push([a[i], b[i]]);\n  return arr;\n}\n\nfunction compare(a, b) {\n  return a > b ? 1 : b > a ? -1 : 0;\n}\n\nfunction contains(arr, key, val) {\n  return arr.some(ele => ele[key] === val);\n}\n\nfunction countNines(min, len) {\n  return Number(String(min).slice(0, -len) + '9'.repeat(len));\n}\n\nfunction countZeros(integer, zeros) {\n  return integer - (integer % Math.pow(10, zeros));\n}\n\nfunction toQuantifier(digits) {\n  let [start = 0, stop = ''] = digits;\n  if (stop || start > 1) {\n    return `{${start + (stop ? ',' + stop : '')}}`;\n  }\n  return '';\n}\n\nfunction toCharacterClass(a, b, options) {\n  return `[${a}${(b - a === 1) ? '' : '-'}${b}]`;\n}\n\nfunction hasPadding(str) {\n  return /^-?(0+)\\d/.test(str);\n}\n\nfunction padZeros(value, tok, options) {\n  if (!tok.isPadded) {\n    return value;\n  }\n\n  let diff = Math.abs(tok.maxLen - String(value).length);\n  let relax = options.relaxZeros !== false;\n\n  switch (diff) {\n    case 0:\n      return '';\n    case 1:\n      return relax ? '0?' : '0';\n    case 2:\n      return relax ? '0{0,2}' : '00';\n    default: {\n      return relax ? `0{0,${diff}}` : `0{${diff}}`;\n    }\n  }\n}\n\n/**\n * Cache\n */\n\ntoRegexRange.cache = {};\ntoRegexRange.clearCache = () => (toRegexRange.cache = {});\n\n/**\n * Expose `toRegexRange`\n */\n\nmodule.exports = toRegexRange;\n", "/*!\n * fill-range <https://github.com/jonschlinkert/fill-range>\n *\n * Copyright (c) 2014-present, Jon Schlinkert.\n * Licensed under the MIT License.\n */\n\n'use strict';\n\nconst util = require('util');\nconst toRegexRange = require('to-regex-range');\n\nconst isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val);\n\nconst transform = toNumber => {\n  return value => toNumber === true ? Number(value) : String(value);\n};\n\nconst isValidValue = value => {\n  return typeof value === 'number' || (typeof value === 'string' && value !== '');\n};\n\nconst isNumber = num => Number.isInteger(+num);\n\nconst zeros = input => {\n  let value = `${input}`;\n  let index = -1;\n  if (value[0] === '-') value = value.slice(1);\n  if (value === '0') return false;\n  while (value[++index] === '0');\n  return index > 0;\n};\n\nconst stringify = (start, end, options) => {\n  if (typeof start === 'string' || typeof end === 'string') {\n    return true;\n  }\n  return options.stringify === true;\n};\n\nconst pad = (input, maxLength, toNumber) => {\n  if (maxLength > 0) {\n    let dash = input[0] === '-' ? '-' : '';\n    if (dash) input = input.slice(1);\n    input = (dash + input.padStart(dash ? maxLength - 1 : maxLength, '0'));\n  }\n  if (toNumber === false) {\n    return String(input);\n  }\n  return input;\n};\n\nconst toMaxLen = (input, maxLength) => {\n  let negative = input[0] === '-' ? '-' : '';\n  if (negative) {\n    input = input.slice(1);\n    maxLength--;\n  }\n  while (input.length < maxLength) input = '0' + input;\n  return negative ? ('-' + input) : input;\n};\n\nconst toSequence = (parts, options, maxLen) => {\n  parts.negatives.sort((a, b) => a < b ? -1 : a > b ? 1 : 0);\n  parts.positives.sort((a, b) => a < b ? -1 : a > b ? 1 : 0);\n\n  let prefix = options.capture ? '' : '?:';\n  let positives = '';\n  let negatives = '';\n  let result;\n\n  if (parts.positives.length) {\n    positives = parts.positives.map(v => toMaxLen(String(v), maxLen)).join('|');\n  }\n\n  if (parts.negatives.length) {\n    negatives = `-(${prefix}${parts.negatives.map(v => toMaxLen(String(v), maxLen)).join('|')})`;\n  }\n\n  if (positives && negatives) {\n    result = `${positives}|${negatives}`;\n  } else {\n    result = positives || negatives;\n  }\n\n  if (options.wrap) {\n    return `(${prefix}${result})`;\n  }\n\n  return result;\n};\n\nconst toRange = (a, b, isNumbers, options) => {\n  if (isNumbers) {\n    return toRegexRange(a, b, { wrap: false, ...options });\n  }\n\n  let start = String.fromCharCode(a);\n  if (a === b) return start;\n\n  let stop = String.fromCharCode(b);\n  return `[${start}-${stop}]`;\n};\n\nconst toRegex = (start, end, options) => {\n  if (Array.isArray(start)) {\n    let wrap = options.wrap === true;\n    let prefix = options.capture ? '' : '?:';\n    return wrap ? `(${prefix}${start.join('|')})` : start.join('|');\n  }\n  return toRegexRange(start, end, options);\n};\n\nconst rangeError = (...args) => {\n  return new RangeError('Invalid range arguments: ' + util.inspect(...args));\n};\n\nconst invalidRange = (start, end, options) => {\n  if (options.strictRanges === true) throw rangeError([start, end]);\n  return [];\n};\n\nconst invalidStep = (step, options) => {\n  if (options.strictRanges === true) {\n    throw new TypeError(`Expected step \"${step}\" to be a number`);\n  }\n  return [];\n};\n\nconst fillNumbers = (start, end, step = 1, options = {}) => {\n  let a = Number(start);\n  let b = Number(end);\n\n  if (!Number.isInteger(a) || !Number.isInteger(b)) {\n    if (options.strictRanges === true) throw rangeError([start, end]);\n    return [];\n  }\n\n  // fix negative zero\n  if (a === 0) a = 0;\n  if (b === 0) b = 0;\n\n  let descending = a > b;\n  let startString = String(start);\n  let endString = String(end);\n  let stepString = String(step);\n  step = Math.max(Math.abs(step), 1);\n\n  let padded = zeros(startString) || zeros(endString) || zeros(stepString);\n  let maxLen = padded ? Math.max(startString.length, endString.length, stepString.length) : 0;\n  let toNumber = padded === false && stringify(start, end, options) === false;\n  let format = options.transform || transform(toNumber);\n\n  if (options.toRegex && step === 1) {\n    return toRange(toMaxLen(start, maxLen), toMaxLen(end, maxLen), true, options);\n  }\n\n  let parts = { negatives: [], positives: [] };\n  let push = num => parts[num < 0 ? 'negatives' : 'positives'].push(Math.abs(num));\n  let range = [];\n  let index = 0;\n\n  while (descending ? a >= b : a <= b) {\n    if (options.toRegex === true && step > 1) {\n      push(a);\n    } else {\n      range.push(pad(format(a, index), maxLen, toNumber));\n    }\n    a = descending ? a - step : a + step;\n    index++;\n  }\n\n  if (options.toRegex === true) {\n    return step > 1\n      ? toSequence(parts, options, maxLen)\n      : toRegex(range, null, { wrap: false, ...options });\n  }\n\n  return range;\n};\n\nconst fillLetters = (start, end, step = 1, options = {}) => {\n  if ((!isNumber(start) && start.length > 1) || (!isNumber(end) && end.length > 1)) {\n    return invalidRange(start, end, options);\n  }\n\n  let format = options.transform || (val => String.fromCharCode(val));\n  let a = `${start}`.charCodeAt(0);\n  let b = `${end}`.charCodeAt(0);\n\n  let descending = a > b;\n  let min = Math.min(a, b);\n  let max = Math.max(a, b);\n\n  if (options.toRegex && step === 1) {\n    return toRange(min, max, false, options);\n  }\n\n  let range = [];\n  let index = 0;\n\n  while (descending ? a >= b : a <= b) {\n    range.push(format(a, index));\n    a = descending ? a - step : a + step;\n    index++;\n  }\n\n  if (options.toRegex === true) {\n    return toRegex(range, null, { wrap: false, options });\n  }\n\n  return range;\n};\n\nconst fill = (start, end, step, options = {}) => {\n  if (end == null && isValidValue(start)) {\n    return [start];\n  }\n\n  if (!isValidValue(start) || !isValidValue(end)) {\n    return invalidRange(start, end, options);\n  }\n\n  if (typeof step === 'function') {\n    return fill(start, end, 1, { transform: step });\n  }\n\n  if (isObject(step)) {\n    return fill(start, end, 0, step);\n  }\n\n  let opts = { ...options };\n  if (opts.capture === true) opts.wrap = true;\n  step = step || opts.step || 1;\n\n  if (!isNumber(step)) {\n    if (step != null && !isObject(step)) return invalidStep(step, opts);\n    return fill(start, end, 1, step);\n  }\n\n  if (isNumber(start) && isNumber(end)) {\n    return fillNumbers(start, end, step, opts);\n  }\n\n  return fillLetters(start, end, Math.max(Math.abs(step), 1), opts);\n};\n\nmodule.exports = fill;\n", "'use strict';\n\nconst fill = require('fill-range');\nconst utils = require('./utils');\n\nconst compile = (ast, options = {}) => {\n  const walk = (node, parent = {}) => {\n    const invalidBlock = utils.isInvalidBrace(parent);\n    const invalidNode = node.invalid === true && options.escapeInvalid === true;\n    const invalid = invalidBlock === true || invalidNode === true;\n    const prefix = options.escapeInvalid === true ? '\\\\' : '';\n    let output = '';\n\n    if (node.isOpen === true) {\n      return prefix + node.value;\n    }\n\n    if (node.isClose === true) {\n      console.log('node.isClose', prefix, node.value);\n      return prefix + node.value;\n    }\n\n    if (node.type === 'open') {\n      return invalid ? prefix + node.value : '(';\n    }\n\n    if (node.type === 'close') {\n      return invalid ? prefix + node.value : ')';\n    }\n\n    if (node.type === 'comma') {\n      return node.prev.type === 'comma' ? '' : invalid ? node.value : '|';\n    }\n\n    if (node.value) {\n      return node.value;\n    }\n\n    if (node.nodes && node.ranges > 0) {\n      const args = utils.reduce(node.nodes);\n      const range = fill(...args, { ...options, wrap: false, toRegex: true, strictZeros: true });\n\n      if (range.length !== 0) {\n        return args.length > 1 && range.length > 1 ? `(${range})` : range;\n      }\n    }\n\n    if (node.nodes) {\n      for (const child of node.nodes) {\n        output += walk(child, node);\n      }\n    }\n\n    return output;\n  };\n\n  return walk(ast);\n};\n\nmodule.exports = compile;\n", "'use strict';\n\nconst fill = require('fill-range');\nconst stringify = require('./stringify');\nconst utils = require('./utils');\n\nconst append = (queue = '', stash = '', enclose = false) => {\n  const result = [];\n\n  queue = [].concat(queue);\n  stash = [].concat(stash);\n\n  if (!stash.length) return queue;\n  if (!queue.length) {\n    return enclose ? utils.flatten(stash).map(ele => `{${ele}}`) : stash;\n  }\n\n  for (const item of queue) {\n    if (Array.isArray(item)) {\n      for (const value of item) {\n        result.push(append(value, stash, enclose));\n      }\n    } else {\n      for (let ele of stash) {\n        if (enclose === true && typeof ele === 'string') ele = `{${ele}}`;\n        result.push(Array.isArray(ele) ? append(item, ele, enclose) : item + ele);\n      }\n    }\n  }\n  return utils.flatten(result);\n};\n\nconst expand = (ast, options = {}) => {\n  const rangeLimit = options.rangeLimit === undefined ? 1000 : options.rangeLimit;\n\n  const walk = (node, parent = {}) => {\n    node.queue = [];\n\n    let p = parent;\n    let q = parent.queue;\n\n    while (p.type !== 'brace' && p.type !== 'root' && p.parent) {\n      p = p.parent;\n      q = p.queue;\n    }\n\n    if (node.invalid || node.dollar) {\n      q.push(append(q.pop(), stringify(node, options)));\n      return;\n    }\n\n    if (node.type === 'brace' && node.invalid !== true && node.nodes.length === 2) {\n      q.push(append(q.pop(), ['{}']));\n      return;\n    }\n\n    if (node.nodes && node.ranges > 0) {\n      const args = utils.reduce(node.nodes);\n\n      if (utils.exceedsLimit(...args, options.step, rangeLimit)) {\n        throw new RangeError('expanded array length exceeds range limit. Use options.rangeLimit to increase or disable the limit.');\n      }\n\n      let range = fill(...args, options);\n      if (range.length === 0) {\n        range = stringify(node, options);\n      }\n\n      q.push(append(q.pop(), range));\n      node.nodes = [];\n      return;\n    }\n\n    const enclose = utils.encloseBrace(node);\n    let queue = node.queue;\n    let block = node;\n\n    while (block.type !== 'brace' && block.type !== 'root' && block.parent) {\n      block = block.parent;\n      queue = block.queue;\n    }\n\n    for (let i = 0; i < node.nodes.length; i++) {\n      const child = node.nodes[i];\n\n      if (child.type === 'comma' && node.type === 'brace') {\n        if (i === 1) queue.push('');\n        queue.push('');\n        continue;\n      }\n\n      if (child.type === 'close') {\n        q.push(append(q.pop(), queue, enclose));\n        continue;\n      }\n\n      if (child.value && child.type !== 'open') {\n        queue.push(append(queue.pop(), child.value));\n        continue;\n      }\n\n      if (child.nodes) {\n        walk(child, node);\n      }\n    }\n\n    return queue;\n  };\n\n  return utils.flatten(walk(ast));\n};\n\nmodule.exports = expand;\n", "'use strict';\n\nmodule.exports = {\n  MAX_LENGTH: 10000,\n\n  // Digits\n  CHAR_0: '0', /* 0 */\n  CHAR_9: '9', /* 9 */\n\n  // Alphabet chars.\n  CHAR_UPPERCASE_A: 'A', /* A */\n  CHAR_LOWERCASE_A: 'a', /* a */\n  CHAR_UPPERCASE_Z: 'Z', /* Z */\n  CHAR_LOWERCASE_Z: 'z', /* z */\n\n  CHAR_LEFT_PARENTHESES: '(', /* ( */\n  CHAR_RIGHT_PARENTHESES: ')', /* ) */\n\n  CHAR_ASTERISK: '*', /* * */\n\n  // Non-alphabetic chars.\n  CHAR_AMPERSAND: '&', /* & */\n  CHAR_AT: '@', /* @ */\n  CHAR_BACKSLASH: '\\\\', /* \\ */\n  CHAR_BACKTICK: '`', /* ` */\n  CHAR_CARRIAGE_RETURN: '\\r', /* \\r */\n  CHAR_CIRCUMFLEX_ACCENT: '^', /* ^ */\n  CHAR_COLON: ':', /* : */\n  CHAR_COMMA: ',', /* , */\n  CHAR_DOLLAR: '$', /* . */\n  CHAR_DOT: '.', /* . */\n  CHAR_DOUBLE_QUOTE: '\"', /* \" */\n  CHAR_EQUAL: '=', /* = */\n  CHAR_EXCLAMATION_MARK: '!', /* ! */\n  CHAR_FORM_FEED: '\\f', /* \\f */\n  CHAR_FORWARD_SLASH: '/', /* / */\n  CHAR_HASH: '#', /* # */\n  CHAR_HYPHEN_MINUS: '-', /* - */\n  CHAR_LEFT_ANGLE_BRACKET: '<', /* < */\n  CHAR_LEFT_CURLY_BRACE: '{', /* { */\n  CHAR_LEFT_SQUARE_BRACKET: '[', /* [ */\n  CHAR_LINE_FEED: '\\n', /* \\n */\n  CHAR_NO_BREAK_SPACE: '\\u00A0', /* \\u00A0 */\n  CHAR_PERCENT: '%', /* % */\n  CHAR_PLUS: '+', /* + */\n  CHAR_QUESTION_MARK: '?', /* ? */\n  CHAR_RIGHT_ANGLE_BRACKET: '>', /* > */\n  CHAR_RIGHT_CURLY_BRACE: '}', /* } */\n  CHAR_RIGHT_SQUARE_BRACKET: ']', /* ] */\n  CHAR_SEMICOLON: ';', /* ; */\n  CHAR_SINGLE_QUOTE: '\\'', /* ' */\n  CHAR_SPACE: ' ', /*   */\n  CHAR_TAB: '\\t', /* \\t */\n  CHAR_UNDERSCORE: '_', /* _ */\n  CHAR_VERTICAL_LINE: '|', /* | */\n  CHAR_ZERO_WIDTH_NOBREAK_SPACE: '\\uFEFF' /* \\uFEFF */\n};\n", "'use strict';\n\nconst stringify = require('./stringify');\n\n/**\n * Constants\n */\n\nconst {\n  MAX_LENGTH,\n  CHAR_BACKSLASH, /* \\ */\n  CHAR_BACKTICK, /* ` */\n  CHAR_COMMA, /* , */\n  CHAR_DOT, /* . */\n  CHAR_LEFT_PARENTHESES, /* ( */\n  CHAR_RIGHT_PARENTHESES, /* ) */\n  CHAR_LEFT_CURLY_BRACE, /* { */\n  CHAR_RIGHT_CURLY_BRACE, /* } */\n  CHAR_LEFT_SQUARE_BRACKET, /* [ */\n  CHAR_RIGHT_SQUARE_BRACKET, /* ] */\n  CHAR_DOUBLE_QUOTE, /* \" */\n  CHAR_SINGLE_QUOTE, /* ' */\n  CHAR_NO_BREAK_SPACE,\n  CHAR_ZERO_WIDTH_NOBREAK_SPACE\n} = require('./constants');\n\n/**\n * parse\n */\n\nconst parse = (input, options = {}) => {\n  if (typeof input !== 'string') {\n    throw new TypeError('Expected a string');\n  }\n\n  const opts = options || {};\n  const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;\n  if (input.length > max) {\n    throw new SyntaxError(`Input length (${input.length}), exceeds max characters (${max})`);\n  }\n\n  const ast = { type: 'root', input, nodes: [] };\n  const stack = [ast];\n  let block = ast;\n  let prev = ast;\n  let brackets = 0;\n  const length = input.length;\n  let index = 0;\n  let depth = 0;\n  let value;\n\n  /**\n   * Helpers\n   */\n\n  const advance = () => input[index++];\n  const push = node => {\n    if (node.type === 'text' && prev.type === 'dot') {\n      prev.type = 'text';\n    }\n\n    if (prev && prev.type === 'text' && node.type === 'text') {\n      prev.value += node.value;\n      return;\n    }\n\n    block.nodes.push(node);\n    node.parent = block;\n    node.prev = prev;\n    prev = node;\n    return node;\n  };\n\n  push({ type: 'bos' });\n\n  while (index < length) {\n    block = stack[stack.length - 1];\n    value = advance();\n\n    /**\n     * Invalid chars\n     */\n\n    if (value === CHAR_ZERO_WIDTH_NOBREAK_SPACE || value === CHAR_NO_BREAK_SPACE) {\n      continue;\n    }\n\n    /**\n     * Escaped chars\n     */\n\n    if (value === CHAR_BACKSLASH) {\n      push({ type: 'text', value: (options.keepEscaping ? value : '') + advance() });\n      continue;\n    }\n\n    /**\n     * Right square bracket (literal): ']'\n     */\n\n    if (value === CHAR_RIGHT_SQUARE_BRACKET) {\n      push({ type: 'text', value: '\\\\' + value });\n      continue;\n    }\n\n    /**\n     * Left square bracket: '['\n     */\n\n    if (value === CHAR_LEFT_SQUARE_BRACKET) {\n      brackets++;\n\n      let next;\n\n      while (index < length && (next = advance())) {\n        value += next;\n\n        if (next === CHAR_LEFT_SQUARE_BRACKET) {\n          brackets++;\n          continue;\n        }\n\n        if (next === CHAR_BACKSLASH) {\n          value += advance();\n          continue;\n        }\n\n        if (next === CHAR_RIGHT_SQUARE_BRACKET) {\n          brackets--;\n\n          if (brackets === 0) {\n            break;\n          }\n        }\n      }\n\n      push({ type: 'text', value });\n      continue;\n    }\n\n    /**\n     * Parentheses\n     */\n\n    if (value === CHAR_LEFT_PARENTHESES) {\n      block = push({ type: 'paren', nodes: [] });\n      stack.push(block);\n      push({ type: 'text', value });\n      continue;\n    }\n\n    if (value === CHAR_RIGHT_PARENTHESES) {\n      if (block.type !== 'paren') {\n        push({ type: 'text', value });\n        continue;\n      }\n      block = stack.pop();\n      push({ type: 'text', value });\n      block = stack[stack.length - 1];\n      continue;\n    }\n\n    /**\n     * Quotes: '|\"|`\n     */\n\n    if (value === CHAR_DOUBLE_QUOTE || value === CHAR_SINGLE_QUOTE || value === CHAR_BACKTICK) {\n      const open = value;\n      let next;\n\n      if (options.keepQuotes !== true) {\n        value = '';\n      }\n\n      while (index < length && (next = advance())) {\n        if (next === CHAR_BACKSLASH) {\n          value += next + advance();\n          continue;\n        }\n\n        if (next === open) {\n          if (options.keepQuotes === true) value += next;\n          break;\n        }\n\n        value += next;\n      }\n\n      push({ type: 'text', value });\n      continue;\n    }\n\n    /**\n     * Left curly brace: '{'\n     */\n\n    if (value === CHAR_LEFT_CURLY_BRACE) {\n      depth++;\n\n      const dollar = prev.value && prev.value.slice(-1) === '$' || block.dollar === true;\n      const brace = {\n        type: 'brace',\n        open: true,\n        close: false,\n        dollar,\n        depth,\n        commas: 0,\n        ranges: 0,\n        nodes: []\n      };\n\n      block = push(brace);\n      stack.push(block);\n      push({ type: 'open', value });\n      continue;\n    }\n\n    /**\n     * Right curly brace: '}'\n     */\n\n    if (value === CHAR_RIGHT_CURLY_BRACE) {\n      if (block.type !== 'brace') {\n        push({ type: 'text', value });\n        continue;\n      }\n\n      const type = 'close';\n      block = stack.pop();\n      block.close = true;\n\n      push({ type, value });\n      depth--;\n\n      block = stack[stack.length - 1];\n      continue;\n    }\n\n    /**\n     * Comma: ','\n     */\n\n    if (value === CHAR_COMMA && depth > 0) {\n      if (block.ranges > 0) {\n        block.ranges = 0;\n        const open = block.nodes.shift();\n        block.nodes = [open, { type: 'text', value: stringify(block) }];\n      }\n\n      push({ type: 'comma', value });\n      block.commas++;\n      continue;\n    }\n\n    /**\n     * Dot: '.'\n     */\n\n    if (value === CHAR_DOT && depth > 0 && block.commas === 0) {\n      const siblings = block.nodes;\n\n      if (depth === 0 || siblings.length === 0) {\n        push({ type: 'text', value });\n        continue;\n      }\n\n      if (prev.type === 'dot') {\n        block.range = [];\n        prev.value += value;\n        prev.type = 'range';\n\n        if (block.nodes.length !== 3 && block.nodes.length !== 5) {\n          block.invalid = true;\n          block.ranges = 0;\n          prev.type = 'text';\n          continue;\n        }\n\n        block.ranges++;\n        block.args = [];\n        continue;\n      }\n\n      if (prev.type === 'range') {\n        siblings.pop();\n\n        const before = siblings[siblings.length - 1];\n        before.value += prev.value + value;\n        prev = before;\n        block.ranges--;\n        continue;\n      }\n\n      push({ type: 'dot', value });\n      continue;\n    }\n\n    /**\n     * Text\n     */\n\n    push({ type: 'text', value });\n  }\n\n  // Mark imbalanced braces and brackets as invalid\n  do {\n    block = stack.pop();\n\n    if (block.type !== 'root') {\n      block.nodes.forEach(node => {\n        if (!node.nodes) {\n          if (node.type === 'open') node.isOpen = true;\n          if (node.type === 'close') node.isClose = true;\n          if (!node.nodes) node.type = 'text';\n          node.invalid = true;\n        }\n      });\n\n      // get the location of the block on parent.nodes (block's siblings)\n      const parent = stack[stack.length - 1];\n      const index = parent.nodes.indexOf(block);\n      // replace the (invalid) block with it's nodes\n      parent.nodes.splice(index, 1, ...block.nodes);\n    }\n  } while (stack.length > 0);\n\n  push({ type: 'eos' });\n  return ast;\n};\n\nmodule.exports = parse;\n", "'use strict';\n\nconst stringify = require('./lib/stringify');\nconst compile = require('./lib/compile');\nconst expand = require('./lib/expand');\nconst parse = require('./lib/parse');\n\n/**\n * Expand the given pattern or create a regex-compatible string.\n *\n * ```js\n * const braces = require('braces');\n * console.log(braces('{a,b,c}', { compile: true })); //=> ['(a|b|c)']\n * console.log(braces('{a,b,c}')); //=> ['a', 'b', 'c']\n * ```\n * @param {String} `str`\n * @param {Object} `options`\n * @return {String}\n * @api public\n */\n\nconst braces = (input, options = {}) => {\n  let output = [];\n\n  if (Array.isArray(input)) {\n    for (const pattern of input) {\n      const result = braces.create(pattern, options);\n      if (Array.isArray(result)) {\n        output.push(...result);\n      } else {\n        output.push(result);\n      }\n    }\n  } else {\n    output = [].concat(braces.create(input, options));\n  }\n\n  if (options && options.expand === true && options.nodupes === true) {\n    output = [...new Set(output)];\n  }\n  return output;\n};\n\n/**\n * Parse the given `str` with the given `options`.\n *\n * ```js\n * // braces.parse(pattern, [, options]);\n * const ast = braces.parse('a/{b,c}/d');\n * console.log(ast);\n * ```\n * @param {String} pattern Brace pattern to parse\n * @param {Object} options\n * @return {Object} Returns an AST\n * @api public\n */\n\nbraces.parse = (input, options = {}) => parse(input, options);\n\n/**\n * Creates a braces string from an AST, or an AST node.\n *\n * ```js\n * const braces = require('braces');\n * let ast = braces.parse('foo/{a,b}/bar');\n * console.log(stringify(ast.nodes[2])); //=> '{a,b}'\n * ```\n * @param {String} `input` Brace pattern or AST.\n * @param {Object} `options`\n * @return {Array} Returns an array of expanded values.\n * @api public\n */\n\nbraces.stringify = (input, options = {}) => {\n  if (typeof input === 'string') {\n    return stringify(braces.parse(input, options), options);\n  }\n  return stringify(input, options);\n};\n\n/**\n * Compiles a brace pattern into a regex-compatible, optimized string.\n * This method is called by the main [braces](#braces) function by default.\n *\n * ```js\n * const braces = require('braces');\n * console.log(braces.compile('a/{b,c}/d'));\n * //=> ['a/(b|c)/d']\n * ```\n * @param {String} `input` Brace pattern or AST.\n * @param {Object} `options`\n * @return {Array} Returns an array of expanded values.\n * @api public\n */\n\nbraces.compile = (input, options = {}) => {\n  if (typeof input === 'string') {\n    input = braces.parse(input, options);\n  }\n  return compile(input, options);\n};\n\n/**\n * Expands a brace pattern into an array. This method is called by the\n * main [braces](#braces) function when `options.expand` is true. Before\n * using this method it's recommended that you read the [performance notes](#performance))\n * and advantages of using [.compile](#compile) instead.\n *\n * ```js\n * const braces = require('braces');\n * console.log(braces.expand('a/{b,c}/d'));\n * //=> ['a/b/d', 'a/c/d'];\n * ```\n * @param {String} `pattern` Brace pattern\n * @param {Object} `options`\n * @return {Array} Returns an array of expanded values.\n * @api public\n */\n\nbraces.expand = (input, options = {}) => {\n  if (typeof input === 'string') {\n    input = braces.parse(input, options);\n  }\n\n  let result = expand(input, options);\n\n  // filter out empty strings if specified\n  if (options.noempty === true) {\n    result = result.filter(Boolean);\n  }\n\n  // filter out duplicates if specified\n  if (options.nodupes === true) {\n    result = [...new Set(result)];\n  }\n\n  return result;\n};\n\n/**\n * Processes a brace pattern and returns either an expanded array\n * (if `options.expand` is true), a highly optimized regex-compatible string.\n * This method is called by the main [braces](#braces) function.\n *\n * ```js\n * const braces = require('braces');\n * console.log(braces.create('user-{200..300}/project-{a,b,c}-{1..10}'))\n * //=> 'user-(20[0-9]|2[1-9][0-9]|300)/project-(a|b|c)-([1-9]|10)'\n * ```\n * @param {String} `pattern` Brace pattern\n * @param {Object} `options`\n * @return {Array} Returns an array of expanded values.\n * @api public\n */\n\nbraces.create = (input, options = {}) => {\n  if (input === '' || input.length < 3) {\n    return [input];\n  }\n\n  return options.expand !== true\n    ? braces.compile(input, options)\n    : braces.expand(input, options);\n};\n\n/**\n * Expose \"braces\"\n */\n\nmodule.exports = braces;\n", "[\n\t\"3dm\",\n\t\"3ds\",\n\t\"3g2\",\n\t\"3gp\",\n\t\"7z\",\n\t\"a\",\n\t\"aac\",\n\t\"adp\",\n\t\"afdesign\",\n\t\"afphoto\",\n\t\"afpub\",\n\t\"ai\",\n\t\"aif\",\n\t\"aiff\",\n\t\"alz\",\n\t\"ape\",\n\t\"apk\",\n\t\"appimage\",\n\t\"ar\",\n\t\"arj\",\n\t\"asf\",\n\t\"au\",\n\t\"avi\",\n\t\"bak\",\n\t\"baml\",\n\t\"bh\",\n\t\"bin\",\n\t\"bk\",\n\t\"bmp\",\n\t\"btif\",\n\t\"bz2\",\n\t\"bzip2\",\n\t\"cab\",\n\t\"caf\",\n\t\"cgm\",\n\t\"class\",\n\t\"cmx\",\n\t\"cpio\",\n\t\"cr2\",\n\t\"cur\",\n\t\"dat\",\n\t\"dcm\",\n\t\"deb\",\n\t\"dex\",\n\t\"djvu\",\n\t\"dll\",\n\t\"dmg\",\n\t\"dng\",\n\t\"doc\",\n\t\"docm\",\n\t\"docx\",\n\t\"dot\",\n\t\"dotm\",\n\t\"dra\",\n\t\"DS_Store\",\n\t\"dsk\",\n\t\"dts\",\n\t\"dtshd\",\n\t\"dvb\",\n\t\"dwg\",\n\t\"dxf\",\n\t\"ecelp4800\",\n\t\"ecelp7470\",\n\t\"ecelp9600\",\n\t\"egg\",\n\t\"eol\",\n\t\"eot\",\n\t\"epub\",\n\t\"exe\",\n\t\"f4v\",\n\t\"fbs\",\n\t\"fh\",\n\t\"fla\",\n\t\"flac\",\n\t\"flatpak\",\n\t\"fli\",\n\t\"flv\",\n\t\"fpx\",\n\t\"fst\",\n\t\"fvt\",\n\t\"g3\",\n\t\"gh\",\n\t\"gif\",\n\t\"graffle\",\n\t\"gz\",\n\t\"gzip\",\n\t\"h261\",\n\t\"h263\",\n\t\"h264\",\n\t\"icns\",\n\t\"ico\",\n\t\"ief\",\n\t\"img\",\n\t\"ipa\",\n\t\"iso\",\n\t\"jar\",\n\t\"jpeg\",\n\t\"jpg\",\n\t\"jpgv\",\n\t\"jpm\",\n\t\"jxr\",\n\t\"key\",\n\t\"ktx\",\n\t\"lha\",\n\t\"lib\",\n\t\"lvp\",\n\t\"lz\",\n\t\"lzh\",\n\t\"lzma\",\n\t\"lzo\",\n\t\"m3u\",\n\t\"m4a\",\n\t\"m4v\",\n\t\"mar\",\n\t\"mdi\",\n\t\"mht\",\n\t\"mid\",\n\t\"midi\",\n\t\"mj2\",\n\t\"mka\",\n\t\"mkv\",\n\t\"mmr\",\n\t\"mng\",\n\t\"mobi\",\n\t\"mov\",\n\t\"movie\",\n\t\"mp3\",\n\t\"mp4\",\n\t\"mp4a\",\n\t\"mpeg\",\n\t\"mpg\",\n\t\"mpga\",\n\t\"mxu\",\n\t\"nef\",\n\t\"npx\",\n\t\"numbers\",\n\t\"nupkg\",\n\t\"o\",\n\t\"odp\",\n\t\"ods\",\n\t\"odt\",\n\t\"oga\",\n\t\"ogg\",\n\t\"ogv\",\n\t\"otf\",\n\t\"ott\",\n\t\"pages\",\n\t\"pbm\",\n\t\"pcx\",\n\t\"pdb\",\n\t\"pdf\",\n\t\"pea\",\n\t\"pgm\",\n\t\"pic\",\n\t\"png\",\n\t\"pnm\",\n\t\"pot\",\n\t\"potm\",\n\t\"potx\",\n\t\"ppa\",\n\t\"ppam\",\n\t\"ppm\",\n\t\"pps\",\n\t\"ppsm\",\n\t\"ppsx\",\n\t\"ppt\",\n\t\"pptm\",\n\t\"pptx\",\n\t\"psd\",\n\t\"pya\",\n\t\"pyc\",\n\t\"pyo\",\n\t\"pyv\",\n\t\"qt\",\n\t\"rar\",\n\t\"ras\",\n\t\"raw\",\n\t\"resources\",\n\t\"rgb\",\n\t\"rip\",\n\t\"rlc\",\n\t\"rmf\",\n\t\"rmvb\",\n\t\"rpm\",\n\t\"rtf\",\n\t\"rz\",\n\t\"s3m\",\n\t\"s7z\",\n\t\"scpt\",\n\t\"sgi\",\n\t\"shar\",\n\t\"snap\",\n\t\"sil\",\n\t\"sketch\",\n\t\"slk\",\n\t\"smv\",\n\t\"snk\",\n\t\"so\",\n\t\"stl\",\n\t\"suo\",\n\t\"sub\",\n\t\"swf\",\n\t\"tar\",\n\t\"tbz\",\n\t\"tbz2\",\n\t\"tga\",\n\t\"tgz\",\n\t\"thmx\",\n\t\"tif\",\n\t\"tiff\",\n\t\"tlz\",\n\t\"ttc\",\n\t\"ttf\",\n\t\"txz\",\n\t\"udf\",\n\t\"uvh\",\n\t\"uvi\",\n\t\"uvm\",\n\t\"uvp\",\n\t\"uvs\",\n\t\"uvu\",\n\t\"viv\",\n\t\"vob\",\n\t\"war\",\n\t\"wav\",\n\t\"wax\",\n\t\"wbmp\",\n\t\"wdp\",\n\t\"weba\",\n\t\"webm\",\n\t\"webp\",\n\t\"whl\",\n\t\"wim\",\n\t\"wm\",\n\t\"wma\",\n\t\"wmv\",\n\t\"wmx\",\n\t\"woff\",\n\t\"woff2\",\n\t\"wrm\",\n\t\"wvx\",\n\t\"xbm\",\n\t\"xif\",\n\t\"xla\",\n\t\"xlam\",\n\t\"xls\",\n\t\"xlsb\",\n\t\"xlsm\",\n\t\"xlsx\",\n\t\"xlt\",\n\t\"xltm\",\n\t\"xltx\",\n\t\"xm\",\n\t\"xmind\",\n\t\"xpi\",\n\t\"xpm\",\n\t\"xwd\",\n\t\"xz\",\n\t\"z\",\n\t\"zip\",\n\t\"zipx\"\n]\n", "module.exports = require('./binary-extensions.json');\n", "'use strict';\nconst path = require('path');\nconst binaryExtensions = require('binary-extensions');\n\nconst extensions = new Set(binaryExtensions);\n\nmodule.exports = filePath => extensions.has(path.extname(filePath).slice(1).toLowerCase());\n", "'use strict';\n\nconst {sep} = require('path');\nconst {platform} = process;\nconst os = require('os');\n\nexports.EV_ALL = 'all';\nexports.EV_READY = 'ready';\nexports.EV_ADD = 'add';\nexports.EV_CHANGE = 'change';\nexports.EV_ADD_DIR = 'addDir';\nexports.EV_UNLINK = 'unlink';\nexports.EV_UNLINK_DIR = 'unlinkDir';\nexports.EV_RAW = 'raw';\nexports.EV_ERROR = 'error';\n\nexports.STR_DATA = 'data';\nexports.STR_END = 'end';\nexports.STR_CLOSE = 'close';\n\nexports.FSEVENT_CREATED = 'created';\nexports.FSEVENT_MODIFIED = 'modified';\nexports.FSEVENT_DELETED = 'deleted';\nexports.FSEVENT_MOVED = 'moved';\nexports.FSEVENT_CLONED = 'cloned';\nexports.FSEVENT_UNKNOWN = 'unknown';\nexports.FSEVENT_FLAG_MUST_SCAN_SUBDIRS = 1;\nexports.FSEVENT_TYPE_FILE = 'file';\nexports.FSEVENT_TYPE_DIRECTORY = 'directory';\nexports.FSEVENT_TYPE_SYMLINK = 'symlink';\n\nexports.KEY_LISTENERS = 'listeners';\nexports.KEY_ERR = 'errHandlers';\nexports.KEY_RAW = 'rawEmitters';\nexports.HANDLER_KEYS = [exports.KEY_LISTENERS, exports.KEY_ERR, exports.KEY_RAW];\n\nexports.DOT_SLASH = `.${sep}`;\n\nexports.BACK_SLASH_RE = /\\\\/g;\nexports.DOUBLE_SLASH_RE = /\\/\\//;\nexports.SLASH_OR_BACK_SLASH_RE = /[/\\\\]/;\nexports.DOT_RE = /\\..*\\.(sw[px])$|~$|\\.subl.*\\.tmp/;\nexports.REPLACER_RE = /^\\.[/\\\\]/;\n\nexports.SLASH = '/';\nexports.SLASH_SLASH = '//';\nexports.BRACE_START = '{';\nexports.BANG = '!';\nexports.ONE_DOT = '.';\nexports.TWO_DOTS = '..';\nexports.STAR = '*';\nexports.GLOBSTAR = '**';\nexports.ROOT_GLOBSTAR = '/**/*';\nexports.SLASH_GLOBSTAR = '/**';\nexports.DIR_SUFFIX = 'Dir';\nexports.ANYMATCH_OPTS = {dot: true};\nexports.STRING_TYPE = 'string';\nexports.FUNCTION_TYPE = 'function';\nexports.EMPTY_STR = '';\nexports.EMPTY_FN = () => {};\nexports.IDENTITY_FN = val => val;\n\nexports.isWindows = platform === 'win32';\nexports.isMacos = platform === 'darwin';\nexports.isLinux = platform === 'linux';\nexports.isIBMi = os.type() === 'OS400';\n", "'use strict';\n\nconst fs = require('fs');\nconst sysPath = require('path');\nconst { promisify } = require('util');\nconst isBinaryPath = require('is-binary-path');\nconst {\n  isWindows,\n  isLinux,\n  EMPTY_FN,\n  EMPTY_STR,\n  KEY_LISTENERS,\n  KEY_ERR,\n  KEY_RAW,\n  HANDLER_KEYS,\n  EV_CHANGE,\n  EV_ADD,\n  EV_ADD_DIR,\n  EV_ERROR,\n  STR_DATA,\n  STR_END,\n  BRACE_START,\n  STAR\n} = require('./constants');\n\nconst THROTTLE_MODE_WATCH = 'watch';\n\nconst open = promisify(fs.open);\nconst stat = promisify(fs.stat);\nconst lstat = promisify(fs.lstat);\nconst close = promisify(fs.close);\nconst fsrealpath = promisify(fs.realpath);\n\nconst statMethods = { lstat, stat };\n\n// TODO: emit errors properly. Example: EMFILE on Macos.\nconst foreach = (val, fn) => {\n  if (val instanceof Set) {\n    val.forEach(fn);\n  } else {\n    fn(val);\n  }\n};\n\nconst addAndConvert = (main, prop, item) => {\n  let container = main[prop];\n  if (!(container instanceof Set)) {\n    main[prop] = container = new Set([container]);\n  }\n  container.add(item);\n};\n\nconst clearItem = cont => key => {\n  const set = cont[key];\n  if (set instanceof Set) {\n    set.clear();\n  } else {\n    delete cont[key];\n  }\n};\n\nconst delFromSet = (main, prop, item) => {\n  const container = main[prop];\n  if (container instanceof Set) {\n    container.delete(item);\n  } else if (container === item) {\n    delete main[prop];\n  }\n};\n\nconst isEmptySet = (val) => val instanceof Set ? val.size === 0 : !val;\n\n/**\n * @typedef {String} Path\n */\n\n// fs_watch helpers\n\n// object to hold per-process fs_watch instances\n// (may be shared across chokidar FSWatcher instances)\n\n/**\n * @typedef {Object} FsWatchContainer\n * @property {Set} listeners\n * @property {Set} errHandlers\n * @property {Set} rawEmitters\n * @property {fs.FSWatcher=} watcher\n * @property {Boolean=} watcherUnusable\n */\n\n/**\n * @type {Map<String,FsWatchContainer>}\n */\nconst FsWatchInstances = new Map();\n\n/**\n * Instantiates the fs_watch interface\n * @param {String} path to be watched\n * @param {Object} options to be passed to fs_watch\n * @param {Function} listener main event handler\n * @param {Function} errHandler emits info about errors\n * @param {Function} emitRaw emits raw event data\n * @returns {fs.FSWatcher} new fsevents instance\n */\nfunction createFsWatchInstance(path, options, listener, errHandler, emitRaw) {\n  const handleEvent = (rawEvent, evPath) => {\n    listener(path);\n    emitRaw(rawEvent, evPath, {watchedPath: path});\n\n    // emit based on events occurring for files from a directory's watcher in\n    // case the file's watcher misses it (and rely on throttling to de-dupe)\n    if (evPath && path !== evPath) {\n      fsWatchBroadcast(\n        sysPath.resolve(path, evPath), KEY_LISTENERS, sysPath.join(path, evPath)\n      );\n    }\n  };\n  try {\n    return fs.watch(path, options, handleEvent);\n  } catch (error) {\n    errHandler(error);\n  }\n}\n\n/**\n * Helper for passing fs_watch event data to a collection of listeners\n * @param {Path} fullPath absolute path bound to fs_watch instance\n * @param {String} type listener type\n * @param {*=} val1 arguments to be passed to listeners\n * @param {*=} val2\n * @param {*=} val3\n */\nconst fsWatchBroadcast = (fullPath, type, val1, val2, val3) => {\n  const cont = FsWatchInstances.get(fullPath);\n  if (!cont) return;\n  foreach(cont[type], (listener) => {\n    listener(val1, val2, val3);\n  });\n};\n\n/**\n * Instantiates the fs_watch interface or binds listeners\n * to an existing one covering the same file system entry\n * @param {String} path\n * @param {String} fullPath absolute path\n * @param {Object} options to be passed to fs_watch\n * @param {Object} handlers container for event listener functions\n */\nconst setFsWatchListener = (path, fullPath, options, handlers) => {\n  const {listener, errHandler, rawEmitter} = handlers;\n  let cont = FsWatchInstances.get(fullPath);\n\n  /** @type {fs.FSWatcher=} */\n  let watcher;\n  if (!options.persistent) {\n    watcher = createFsWatchInstance(\n      path, options, listener, errHandler, rawEmitter\n    );\n    return watcher.close.bind(watcher);\n  }\n  if (cont) {\n    addAndConvert(cont, KEY_LISTENERS, listener);\n    addAndConvert(cont, KEY_ERR, errHandler);\n    addAndConvert(cont, KEY_RAW, rawEmitter);\n  } else {\n    watcher = createFsWatchInstance(\n      path,\n      options,\n      fsWatchBroadcast.bind(null, fullPath, KEY_LISTENERS),\n      errHandler, // no need to use broadcast here\n      fsWatchBroadcast.bind(null, fullPath, KEY_RAW)\n    );\n    if (!watcher) return;\n    watcher.on(EV_ERROR, async (error) => {\n      const broadcastErr = fsWatchBroadcast.bind(null, fullPath, KEY_ERR);\n      cont.watcherUnusable = true; // documented since Node 10.4.1\n      // Workaround for https://github.com/joyent/node/issues/4337\n      if (isWindows && error.code === 'EPERM') {\n        try {\n          const fd = await open(path, 'r');\n          await close(fd);\n          broadcastErr(error);\n        } catch (err) {}\n      } else {\n        broadcastErr(error);\n      }\n    });\n    cont = {\n      listeners: listener,\n      errHandlers: errHandler,\n      rawEmitters: rawEmitter,\n      watcher\n    };\n    FsWatchInstances.set(fullPath, cont);\n  }\n  // const index = cont.listeners.indexOf(listener);\n\n  // removes this instance's listeners and closes the underlying fs_watch\n  // instance if there are no more listeners left\n  return () => {\n    delFromSet(cont, KEY_LISTENERS, listener);\n    delFromSet(cont, KEY_ERR, errHandler);\n    delFromSet(cont, KEY_RAW, rawEmitter);\n    if (isEmptySet(cont.listeners)) {\n      // Check to protect against issue gh-730.\n      // if (cont.watcherUnusable) {\n      cont.watcher.close();\n      // }\n      FsWatchInstances.delete(fullPath);\n      HANDLER_KEYS.forEach(clearItem(cont));\n      cont.watcher = undefined;\n      Object.freeze(cont);\n    }\n  };\n};\n\n// fs_watchFile helpers\n\n// object to hold per-process fs_watchFile instances\n// (may be shared across chokidar FSWatcher instances)\nconst FsWatchFileInstances = new Map();\n\n/**\n * Instantiates the fs_watchFile interface or binds listeners\n * to an existing one covering the same file system entry\n * @param {String} path to be watched\n * @param {String} fullPath absolute path\n * @param {Object} options options to be passed to fs_watchFile\n * @param {Object} handlers container for event listener functions\n * @returns {Function} closer\n */\nconst setFsWatchFileListener = (path, fullPath, options, handlers) => {\n  const {listener, rawEmitter} = handlers;\n  let cont = FsWatchFileInstances.get(fullPath);\n\n  /* eslint-disable no-unused-vars, prefer-destructuring */\n  let listeners = new Set();\n  let rawEmitters = new Set();\n\n  const copts = cont && cont.options;\n  if (copts && (copts.persistent < options.persistent || copts.interval > options.interval)) {\n    // \"Upgrade\" the watcher to persistence or a quicker interval.\n    // This creates some unlikely edge case issues if the user mixes\n    // settings in a very weird way, but solving for those cases\n    // doesn't seem worthwhile for the added complexity.\n    listeners = cont.listeners;\n    rawEmitters = cont.rawEmitters;\n    fs.unwatchFile(fullPath);\n    cont = undefined;\n  }\n\n  /* eslint-enable no-unused-vars, prefer-destructuring */\n\n  if (cont) {\n    addAndConvert(cont, KEY_LISTENERS, listener);\n    addAndConvert(cont, KEY_RAW, rawEmitter);\n  } else {\n    // TODO\n    // listeners.add(listener);\n    // rawEmitters.add(rawEmitter);\n    cont = {\n      listeners: listener,\n      rawEmitters: rawEmitter,\n      options,\n      watcher: fs.watchFile(fullPath, options, (curr, prev) => {\n        foreach(cont.rawEmitters, (rawEmitter) => {\n          rawEmitter(EV_CHANGE, fullPath, {curr, prev});\n        });\n        const currmtime = curr.mtimeMs;\n        if (curr.size !== prev.size || currmtime > prev.mtimeMs || currmtime === 0) {\n          foreach(cont.listeners, (listener) => listener(path, curr));\n        }\n      })\n    };\n    FsWatchFileInstances.set(fullPath, cont);\n  }\n  // const index = cont.listeners.indexOf(listener);\n\n  // Removes this instance's listeners and closes the underlying fs_watchFile\n  // instance if there are no more listeners left.\n  return () => {\n    delFromSet(cont, KEY_LISTENERS, listener);\n    delFromSet(cont, KEY_RAW, rawEmitter);\n    if (isEmptySet(cont.listeners)) {\n      FsWatchFileInstances.delete(fullPath);\n      fs.unwatchFile(fullPath);\n      cont.options = cont.watcher = undefined;\n      Object.freeze(cont);\n    }\n  };\n};\n\n/**\n * @mixin\n */\nclass NodeFsHandler {\n\n/**\n * @param {import(\"../index\").FSWatcher} fsW\n */\nconstructor(fsW) {\n  this.fsw = fsW;\n  this._boundHandleError = (error) => fsW._handleError(error);\n}\n\n/**\n * Watch file for changes with fs_watchFile or fs_watch.\n * @param {String} path to file or dir\n * @param {Function} listener on fs change\n * @returns {Function} closer for the watcher instance\n */\n_watchWithNodeFs(path, listener) {\n  const opts = this.fsw.options;\n  const directory = sysPath.dirname(path);\n  const basename = sysPath.basename(path);\n  const parent = this.fsw._getWatchedDir(directory);\n  parent.add(basename);\n  const absolutePath = sysPath.resolve(path);\n  const options = {persistent: opts.persistent};\n  if (!listener) listener = EMPTY_FN;\n\n  let closer;\n  if (opts.usePolling) {\n    options.interval = opts.enableBinaryInterval && isBinaryPath(basename) ?\n      opts.binaryInterval : opts.interval;\n    closer = setFsWatchFileListener(path, absolutePath, options, {\n      listener,\n      rawEmitter: this.fsw._emitRaw\n    });\n  } else {\n    closer = setFsWatchListener(path, absolutePath, options, {\n      listener,\n      errHandler: this._boundHandleError,\n      rawEmitter: this.fsw._emitRaw\n    });\n  }\n  return closer;\n}\n\n/**\n * Watch a file and emit add event if warranted.\n * @param {Path} file Path\n * @param {fs.Stats} stats result of fs_stat\n * @param {Boolean} initialAdd was the file added at watch instantiation?\n * @returns {Function} closer for the watcher instance\n */\n_handleFile(file, stats, initialAdd) {\n  if (this.fsw.closed) {\n    return;\n  }\n  const dirname = sysPath.dirname(file);\n  const basename = sysPath.basename(file);\n  const parent = this.fsw._getWatchedDir(dirname);\n  // stats is always present\n  let prevStats = stats;\n\n  // if the file is already being watched, do nothing\n  if (parent.has(basename)) return;\n\n  const listener = async (path, newStats) => {\n    if (!this.fsw._throttle(THROTTLE_MODE_WATCH, file, 5)) return;\n    if (!newStats || newStats.mtimeMs === 0) {\n      try {\n        const newStats = await stat(file);\n        if (this.fsw.closed) return;\n        // Check that change event was not fired because of changed only accessTime.\n        const at = newStats.atimeMs;\n        const mt = newStats.mtimeMs;\n        if (!at || at <= mt || mt !== prevStats.mtimeMs) {\n          this.fsw._emit(EV_CHANGE, file, newStats);\n        }\n        if (isLinux && prevStats.ino !== newStats.ino) {\n          this.fsw._closeFile(path)\n          prevStats = newStats;\n          this.fsw._addPathCloser(path, this._watchWithNodeFs(file, listener));\n        } else {\n          prevStats = newStats;\n        }\n      } catch (error) {\n        // Fix issues where mtime is null but file is still present\n        this.fsw._remove(dirname, basename);\n      }\n      // add is about to be emitted if file not already tracked in parent\n    } else if (parent.has(basename)) {\n      // Check that change event was not fired because of changed only accessTime.\n      const at = newStats.atimeMs;\n      const mt = newStats.mtimeMs;\n      if (!at || at <= mt || mt !== prevStats.mtimeMs) {\n        this.fsw._emit(EV_CHANGE, file, newStats);\n      }\n      prevStats = newStats;\n    }\n  }\n  // kick off the watcher\n  const closer = this._watchWithNodeFs(file, listener);\n\n  // emit an add event if we're supposed to\n  if (!(initialAdd && this.fsw.options.ignoreInitial) && this.fsw._isntIgnored(file)) {\n    if (!this.fsw._throttle(EV_ADD, file, 0)) return;\n    this.fsw._emit(EV_ADD, file, stats);\n  }\n\n  return closer;\n}\n\n/**\n * Handle symlinks encountered while reading a dir.\n * @param {Object} entry returned by readdirp\n * @param {String} directory path of dir being read\n * @param {String} path of this item\n * @param {String} item basename of this item\n * @returns {Promise<Boolean>} true if no more processing is needed for this entry.\n */\nasync _handleSymlink(entry, directory, path, item) {\n  if (this.fsw.closed) {\n    return;\n  }\n  const full = entry.fullPath;\n  const dir = this.fsw._getWatchedDir(directory);\n\n  if (!this.fsw.options.followSymlinks) {\n    // watch symlink directly (don't follow) and detect changes\n    this.fsw._incrReadyCount();\n\n    let linkPath;\n    try {\n      linkPath = await fsrealpath(path);\n    } catch (e) {\n      this.fsw._emitReady();\n      return true;\n    }\n\n    if (this.fsw.closed) return;\n    if (dir.has(item)) {\n      if (this.fsw._symlinkPaths.get(full) !== linkPath) {\n        this.fsw._symlinkPaths.set(full, linkPath);\n        this.fsw._emit(EV_CHANGE, path, entry.stats);\n      }\n    } else {\n      dir.add(item);\n      this.fsw._symlinkPaths.set(full, linkPath);\n      this.fsw._emit(EV_ADD, path, entry.stats);\n    }\n    this.fsw._emitReady();\n    return true;\n  }\n\n  // don't follow the same symlink more than once\n  if (this.fsw._symlinkPaths.has(full)) {\n    return true;\n  }\n\n  this.fsw._symlinkPaths.set(full, true);\n}\n\n_handleRead(directory, initialAdd, wh, target, dir, depth, throttler) {\n  // Normalize the directory name on Windows\n  directory = sysPath.join(directory, EMPTY_STR);\n\n  if (!wh.hasGlob) {\n    throttler = this.fsw._throttle('readdir', directory, 1000);\n    if (!throttler) return;\n  }\n\n  const previous = this.fsw._getWatchedDir(wh.path);\n  const current = new Set();\n\n  let stream = this.fsw._readdirp(directory, {\n    fileFilter: entry => wh.filterPath(entry),\n    directoryFilter: entry => wh.filterDir(entry),\n    depth: 0\n  }).on(STR_DATA, async (entry) => {\n    if (this.fsw.closed) {\n      stream = undefined;\n      return;\n    }\n    const item = entry.path;\n    let path = sysPath.join(directory, item);\n    current.add(item);\n\n    if (entry.stats.isSymbolicLink() && await this._handleSymlink(entry, directory, path, item)) {\n      return;\n    }\n\n    if (this.fsw.closed) {\n      stream = undefined;\n      return;\n    }\n    // Files that present in current directory snapshot\n    // but absent in previous are added to watch list and\n    // emit `add` event.\n    if (item === target || !target && !previous.has(item)) {\n      this.fsw._incrReadyCount();\n\n      // ensure relativeness of path is preserved in case of watcher reuse\n      path = sysPath.join(dir, sysPath.relative(dir, path));\n\n      this._addToNodeFs(path, initialAdd, wh, depth + 1);\n    }\n  }).on(EV_ERROR, this._boundHandleError);\n\n  return new Promise(resolve =>\n    stream.once(STR_END, () => {\n      if (this.fsw.closed) {\n        stream = undefined;\n        return;\n      }\n      const wasThrottled = throttler ? throttler.clear() : false;\n\n      resolve();\n\n      // Files that absent in current directory snapshot\n      // but present in previous emit `remove` event\n      // and are removed from @watched[directory].\n      previous.getChildren().filter((item) => {\n        return item !== directory &&\n          !current.has(item) &&\n          // in case of intersecting globs;\n          // a path may have been filtered out of this readdir, but\n          // shouldn't be removed because it matches a different glob\n          (!wh.hasGlob || wh.filterPath({\n            fullPath: sysPath.resolve(directory, item)\n          }));\n      }).forEach((item) => {\n        this.fsw._remove(directory, item);\n      });\n\n      stream = undefined;\n\n      // one more time for any missed in case changes came in extremely quickly\n      if (wasThrottled) this._handleRead(directory, false, wh, target, dir, depth, throttler);\n    })\n  );\n}\n\n/**\n * Read directory to add / remove files from `@watched` list and re-read it on change.\n * @param {String} dir fs path\n * @param {fs.Stats} stats\n * @param {Boolean} initialAdd\n * @param {Number} depth relative to user-supplied path\n * @param {String} target child path targeted for watch\n * @param {Object} wh Common watch helpers for this path\n * @param {String} realpath\n * @returns {Promise<Function>} closer for the watcher instance.\n */\nasync _handleDir(dir, stats, initialAdd, depth, target, wh, realpath) {\n  const parentDir = this.fsw._getWatchedDir(sysPath.dirname(dir));\n  const tracked = parentDir.has(sysPath.basename(dir));\n  if (!(initialAdd && this.fsw.options.ignoreInitial) && !target && !tracked) {\n    if (!wh.hasGlob || wh.globFilter(dir)) this.fsw._emit(EV_ADD_DIR, dir, stats);\n  }\n\n  // ensure dir is tracked (harmless if redundant)\n  parentDir.add(sysPath.basename(dir));\n  this.fsw._getWatchedDir(dir);\n  let throttler;\n  let closer;\n\n  const oDepth = this.fsw.options.depth;\n  if ((oDepth == null || depth <= oDepth) && !this.fsw._symlinkPaths.has(realpath)) {\n    if (!target) {\n      await this._handleRead(dir, initialAdd, wh, target, dir, depth, throttler);\n      if (this.fsw.closed) return;\n    }\n\n    closer = this._watchWithNodeFs(dir, (dirPath, stats) => {\n      // if current directory is removed, do nothing\n      if (stats && stats.mtimeMs === 0) return;\n\n      this._handleRead(dirPath, false, wh, target, dir, depth, throttler);\n    });\n  }\n  return closer;\n}\n\n/**\n * Handle added file, directory, or glob pattern.\n * Delegates call to _handleFile / _handleDir after checks.\n * @param {String} path to file or ir\n * @param {Boolean} initialAdd was the file added at watch instantiation?\n * @param {Object} priorWh depth relative to user-supplied path\n * @param {Number} depth Child path actually targeted for watch\n * @param {String=} target Child path actually targeted for watch\n * @returns {Promise}\n */\nasync _addToNodeFs(path, initialAdd, priorWh, depth, target) {\n  const ready = this.fsw._emitReady;\n  if (this.fsw._isIgnored(path) || this.fsw.closed) {\n    ready();\n    return false;\n  }\n\n  const wh = this.fsw._getWatchHelpers(path, depth);\n  if (!wh.hasGlob && priorWh) {\n    wh.hasGlob = priorWh.hasGlob;\n    wh.globFilter = priorWh.globFilter;\n    wh.filterPath = entry => priorWh.filterPath(entry);\n    wh.filterDir = entry => priorWh.filterDir(entry);\n  }\n\n  // evaluate what is at the path we're being asked to watch\n  try {\n    const stats = await statMethods[wh.statMethod](wh.watchPath);\n    if (this.fsw.closed) return;\n    if (this.fsw._isIgnored(wh.watchPath, stats)) {\n      ready();\n      return false;\n    }\n\n    const follow = this.fsw.options.followSymlinks && !path.includes(STAR) && !path.includes(BRACE_START);\n    let closer;\n    if (stats.isDirectory()) {\n      const absPath = sysPath.resolve(path);\n      const targetPath = follow ? await fsrealpath(path) : path;\n      if (this.fsw.closed) return;\n      closer = await this._handleDir(wh.watchPath, stats, initialAdd, depth, target, wh, targetPath);\n      if (this.fsw.closed) return;\n      // preserve this symlink's target path\n      if (absPath !== targetPath && targetPath !== undefined) {\n        this.fsw._symlinkPaths.set(absPath, targetPath);\n      }\n    } else if (stats.isSymbolicLink()) {\n      const targetPath = follow ? await fsrealpath(path) : path;\n      if (this.fsw.closed) return;\n      const parent = sysPath.dirname(wh.watchPath);\n      this.fsw._getWatchedDir(parent).add(wh.watchPath);\n      this.fsw._emit(EV_ADD, wh.watchPath, stats);\n      closer = await this._handleDir(parent, stats, initialAdd, depth, path, wh, targetPath);\n      if (this.fsw.closed) return;\n\n      // preserve this symlink's target path\n      if (targetPath !== undefined) {\n        this.fsw._symlinkPaths.set(sysPath.resolve(path), targetPath);\n      }\n    } else {\n      closer = this._handleFile(wh.watchPath, stats, initialAdd);\n    }\n    ready();\n\n    this.fsw._addPathCloser(path, closer);\n    return false;\n\n  } catch (error) {\n    if (this.fsw._handleError(error)) {\n      ready();\n      return path;\n    }\n  }\n}\n\n}\n\nmodule.exports = NodeFsHandler;\n", "'use strict';\n\nconst fs = require('fs');\nconst sysPath = require('path');\nconst { promisify } = require('util');\n\nlet fsevents;\ntry {\n  fsevents = require('fsevents');\n} catch (error) {\n  if (process.env.CHOKIDAR_PRINT_FSEVENTS_REQUIRE_ERROR) console.error(error);\n}\n\nif (fsevents) {\n  // TODO: real check\n  const mtch = process.version.match(/v(\\d+)\\.(\\d+)/);\n  if (mtch && mtch[1] && mtch[2]) {\n    const maj = Number.parseInt(mtch[1], 10);\n    const min = Number.parseInt(mtch[2], 10);\n    if (maj === 8 && min < 16) {\n      fsevents = undefined;\n    }\n  }\n}\n\nconst {\n  EV_ADD,\n  EV_CHANGE,\n  EV_ADD_DIR,\n  EV_UNLINK,\n  EV_ERROR,\n  STR_DATA,\n  STR_END,\n  FSEVENT_CREATED,\n  FSEVENT_MODIFIED,\n  FSEVENT_DELETED,\n  FSEVENT_MOVED,\n  // FSEVENT_CLONED,\n  FSEVENT_UNKNOWN,\n  FSEVENT_FLAG_MUST_SCAN_SUBDIRS,\n  FSEVENT_TYPE_FILE,\n  FSEVENT_TYPE_DIRECTORY,\n  FSEVENT_TYPE_SYMLINK,\n\n  ROOT_GLOBSTAR,\n  DIR_SUFFIX,\n  DOT_SLASH,\n  FUNCTION_TYPE,\n  EMPTY_FN,\n  IDENTITY_FN\n} = require('./constants');\n\nconst Depth = (value) => isNaN(value) ? {} : {depth: value};\n\nconst stat = promisify(fs.stat);\nconst lstat = promisify(fs.lstat);\nconst realpath = promisify(fs.realpath);\n\nconst statMethods = { stat, lstat };\n\n/**\n * @typedef {String} Path\n */\n\n/**\n * @typedef {Object} FsEventsWatchContainer\n * @property {Set<Function>} listeners\n * @property {Function} rawEmitter\n * @property {{stop: Function}} watcher\n */\n\n// fsevents instance helper functions\n/**\n * Object to hold per-process fsevents instances (may be shared across chokidar FSWatcher instances)\n * @type {Map<Path,FsEventsWatchContainer>}\n */\nconst FSEventsWatchers = new Map();\n\n// Threshold of duplicate path prefixes at which to start\n// consolidating going forward\nconst consolidateThreshhold = 10;\n\nconst wrongEventFlags = new Set([\n  69888, 70400, 71424, 72704, 73472, 131328, 131840, 262912\n]);\n\n/**\n * Instantiates the fsevents interface\n * @param {Path} path path to be watched\n * @param {Function} callback called when fsevents is bound and ready\n * @returns {{stop: Function}} new fsevents instance\n */\nconst createFSEventsInstance = (path, callback) => {\n  const stop = fsevents.watch(path, callback);\n  return {stop};\n};\n\n/**\n * Instantiates the fsevents interface or binds listeners to an existing one covering\n * the same file tree.\n * @param {Path} path           - to be watched\n * @param {Path} realPath       - real path for symlinks\n * @param {Function} listener   - called when fsevents emits events\n * @param {Function} rawEmitter - passes data to listeners of the 'raw' event\n * @returns {Function} closer\n */\nfunction setFSEventsListener(path, realPath, listener, rawEmitter) {\n  let watchPath = sysPath.extname(realPath) ? sysPath.dirname(realPath) : realPath;\n\n  const parentPath = sysPath.dirname(watchPath);\n  let cont = FSEventsWatchers.get(watchPath);\n\n  // If we've accumulated a substantial number of paths that\n  // could have been consolidated by watching one directory\n  // above the current one, create a watcher on the parent\n  // path instead, so that we do consolidate going forward.\n  if (couldConsolidate(parentPath)) {\n    watchPath = parentPath;\n  }\n\n  const resolvedPath = sysPath.resolve(path);\n  const hasSymlink = resolvedPath !== realPath;\n\n  const filteredListener = (fullPath, flags, info) => {\n    if (hasSymlink) fullPath = fullPath.replace(realPath, resolvedPath);\n    if (\n      fullPath === resolvedPath ||\n      !fullPath.indexOf(resolvedPath + sysPath.sep)\n    ) listener(fullPath, flags, info);\n  };\n\n  // check if there is already a watcher on a parent path\n  // modifies `watchPath` to the parent path when it finds a match\n  let watchedParent = false;\n  for (const watchedPath of FSEventsWatchers.keys()) {\n    if (realPath.indexOf(sysPath.resolve(watchedPath) + sysPath.sep) === 0) {\n      watchPath = watchedPath;\n      cont = FSEventsWatchers.get(watchPath);\n      watchedParent = true;\n      break;\n    }\n  }\n\n  if (cont || watchedParent) {\n    cont.listeners.add(filteredListener);\n  } else {\n    cont = {\n      listeners: new Set([filteredListener]),\n      rawEmitter,\n      watcher: createFSEventsInstance(watchPath, (fullPath, flags) => {\n        if (!cont.listeners.size) return;\n        if (flags & FSEVENT_FLAG_MUST_SCAN_SUBDIRS) return;\n        const info = fsevents.getInfo(fullPath, flags);\n        cont.listeners.forEach(list => {\n          list(fullPath, flags, info);\n        });\n\n        cont.rawEmitter(info.event, fullPath, info);\n      })\n    };\n    FSEventsWatchers.set(watchPath, cont);\n  }\n\n  // removes this instance's listeners and closes the underlying fsevents\n  // instance if there are no more listeners left\n  return () => {\n    const lst = cont.listeners;\n\n    lst.delete(filteredListener);\n    if (!lst.size) {\n      FSEventsWatchers.delete(watchPath);\n      if (cont.watcher) return cont.watcher.stop().then(() => {\n        cont.rawEmitter = cont.watcher = undefined;\n        Object.freeze(cont);\n      });\n    }\n  };\n}\n\n// Decide whether or not we should start a new higher-level\n// parent watcher\nconst couldConsolidate = (path) => {\n  let count = 0;\n  for (const watchPath of FSEventsWatchers.keys()) {\n    if (watchPath.indexOf(path) === 0) {\n      count++;\n      if (count >= consolidateThreshhold) {\n        return true;\n      }\n    }\n  }\n\n  return false;\n};\n\n// returns boolean indicating whether fsevents can be used\nconst canUse = () => fsevents && FSEventsWatchers.size < 128;\n\n// determines subdirectory traversal levels from root to path\nconst calcDepth = (path, root) => {\n  let i = 0;\n  while (!path.indexOf(root) && (path = sysPath.dirname(path)) !== root) i++;\n  return i;\n};\n\n// returns boolean indicating whether the fsevents' event info has the same type\n// as the one returned by fs.stat\nconst sameTypes = (info, stats) => (\n  info.type === FSEVENT_TYPE_DIRECTORY && stats.isDirectory() ||\n  info.type === FSEVENT_TYPE_SYMLINK && stats.isSymbolicLink() ||\n  info.type === FSEVENT_TYPE_FILE && stats.isFile()\n)\n\n/**\n * @mixin\n */\nclass FsEventsHandler {\n\n/**\n * @param {import('../index').FSWatcher} fsw\n */\nconstructor(fsw) {\n  this.fsw = fsw;\n}\ncheckIgnored(path, stats) {\n  const ipaths = this.fsw._ignoredPaths;\n  if (this.fsw._isIgnored(path, stats)) {\n    ipaths.add(path);\n    if (stats && stats.isDirectory()) {\n      ipaths.add(path + ROOT_GLOBSTAR);\n    }\n    return true;\n  }\n\n  ipaths.delete(path);\n  ipaths.delete(path + ROOT_GLOBSTAR);\n}\n\naddOrChange(path, fullPath, realPath, parent, watchedDir, item, info, opts) {\n  const event = watchedDir.has(item) ? EV_CHANGE : EV_ADD;\n  this.handleEvent(event, path, fullPath, realPath, parent, watchedDir, item, info, opts);\n}\n\nasync checkExists(path, fullPath, realPath, parent, watchedDir, item, info, opts) {\n  try {\n    const stats = await stat(path)\n    if (this.fsw.closed) return;\n    if (sameTypes(info, stats)) {\n      this.addOrChange(path, fullPath, realPath, parent, watchedDir, item, info, opts);\n    } else {\n      this.handleEvent(EV_UNLINK, path, fullPath, realPath, parent, watchedDir, item, info, opts);\n    }\n  } catch (error) {\n    if (error.code === 'EACCES') {\n      this.addOrChange(path, fullPath, realPath, parent, watchedDir, item, info, opts);\n    } else {\n      this.handleEvent(EV_UNLINK, path, fullPath, realPath, parent, watchedDir, item, info, opts);\n    }\n  }\n}\n\nhandleEvent(event, path, fullPath, realPath, parent, watchedDir, item, info, opts) {\n  if (this.fsw.closed || this.checkIgnored(path)) return;\n\n  if (event === EV_UNLINK) {\n    const isDirectory = info.type === FSEVENT_TYPE_DIRECTORY\n    // suppress unlink events on never before seen files\n    if (isDirectory || watchedDir.has(item)) {\n      this.fsw._remove(parent, item, isDirectory);\n    }\n  } else {\n    if (event === EV_ADD) {\n      // track new directories\n      if (info.type === FSEVENT_TYPE_DIRECTORY) this.fsw._getWatchedDir(path);\n\n      if (info.type === FSEVENT_TYPE_SYMLINK && opts.followSymlinks) {\n        // push symlinks back to the top of the stack to get handled\n        const curDepth = opts.depth === undefined ?\n          undefined : calcDepth(fullPath, realPath) + 1;\n        return this._addToFsEvents(path, false, true, curDepth);\n      }\n\n      // track new paths\n      // (other than symlinks being followed, which will be tracked soon)\n      this.fsw._getWatchedDir(parent).add(item);\n    }\n    /**\n     * @type {'add'|'addDir'|'unlink'|'unlinkDir'}\n     */\n    const eventName = info.type === FSEVENT_TYPE_DIRECTORY ? event + DIR_SUFFIX : event;\n    this.fsw._emit(eventName, path);\n    if (eventName === EV_ADD_DIR) this._addToFsEvents(path, false, true);\n  }\n}\n\n/**\n * Handle symlinks encountered during directory scan\n * @param {String} watchPath  - file/dir path to be watched with fsevents\n * @param {String} realPath   - real path (in case of symlinks)\n * @param {Function} transform  - path transformer\n * @param {Function} globFilter - path filter in case a glob pattern was provided\n * @returns {Function} closer for the watcher instance\n*/\n_watchWithFsEvents(watchPath, realPath, transform, globFilter) {\n  if (this.fsw.closed || this.fsw._isIgnored(watchPath)) return;\n  const opts = this.fsw.options;\n  const watchCallback = async (fullPath, flags, info) => {\n    if (this.fsw.closed) return;\n    if (\n      opts.depth !== undefined &&\n      calcDepth(fullPath, realPath) > opts.depth\n    ) return;\n    const path = transform(sysPath.join(\n      watchPath, sysPath.relative(watchPath, fullPath)\n    ));\n    if (globFilter && !globFilter(path)) return;\n    // ensure directories are tracked\n    const parent = sysPath.dirname(path);\n    const item = sysPath.basename(path);\n    const watchedDir = this.fsw._getWatchedDir(\n      info.type === FSEVENT_TYPE_DIRECTORY ? path : parent\n    );\n\n    // correct for wrong events emitted\n    if (wrongEventFlags.has(flags) || info.event === FSEVENT_UNKNOWN) {\n      if (typeof opts.ignored === FUNCTION_TYPE) {\n        let stats;\n        try {\n          stats = await stat(path);\n        } catch (error) {}\n        if (this.fsw.closed) return;\n        if (this.checkIgnored(path, stats)) return;\n        if (sameTypes(info, stats)) {\n          this.addOrChange(path, fullPath, realPath, parent, watchedDir, item, info, opts);\n        } else {\n          this.handleEvent(EV_UNLINK, path, fullPath, realPath, parent, watchedDir, item, info, opts);\n        }\n      } else {\n        this.checkExists(path, fullPath, realPath, parent, watchedDir, item, info, opts);\n      }\n    } else {\n      switch (info.event) {\n      case FSEVENT_CREATED:\n      case FSEVENT_MODIFIED:\n        return this.addOrChange(path, fullPath, realPath, parent, watchedDir, item, info, opts);\n      case FSEVENT_DELETED:\n      case FSEVENT_MOVED:\n        return this.checkExists(path, fullPath, realPath, parent, watchedDir, item, info, opts);\n      }\n    }\n  };\n\n  const closer = setFSEventsListener(\n    watchPath,\n    realPath,\n    watchCallback,\n    this.fsw._emitRaw\n  );\n\n  this.fsw._emitReady();\n  return closer;\n}\n\n/**\n * Handle symlinks encountered during directory scan\n * @param {String} linkPath path to symlink\n * @param {String} fullPath absolute path to the symlink\n * @param {Function} transform pre-existing path transformer\n * @param {Number} curDepth level of subdirectories traversed to where symlink is\n * @returns {Promise<void>}\n */\nasync _handleFsEventsSymlink(linkPath, fullPath, transform, curDepth) {\n  // don't follow the same symlink more than once\n  if (this.fsw.closed || this.fsw._symlinkPaths.has(fullPath)) return;\n\n  this.fsw._symlinkPaths.set(fullPath, true);\n  this.fsw._incrReadyCount();\n\n  try {\n    const linkTarget = await realpath(linkPath);\n    if (this.fsw.closed) return;\n    if (this.fsw._isIgnored(linkTarget)) {\n      return this.fsw._emitReady();\n    }\n\n    this.fsw._incrReadyCount();\n\n    // add the linkTarget for watching with a wrapper for transform\n    // that causes emitted paths to incorporate the link's path\n    this._addToFsEvents(linkTarget || linkPath, (path) => {\n      let aliasedPath = linkPath;\n      if (linkTarget && linkTarget !== DOT_SLASH) {\n        aliasedPath = path.replace(linkTarget, linkPath);\n      } else if (path !== DOT_SLASH) {\n        aliasedPath = sysPath.join(linkPath, path);\n      }\n      return transform(aliasedPath);\n    }, false, curDepth);\n  } catch(error) {\n    if (this.fsw._handleError(error)) {\n      return this.fsw._emitReady();\n    }\n  }\n}\n\n/**\n *\n * @param {Path} newPath\n * @param {fs.Stats} stats\n */\nemitAdd(newPath, stats, processPath, opts, forceAdd) {\n  const pp = processPath(newPath);\n  const isDir = stats.isDirectory();\n  const dirObj = this.fsw._getWatchedDir(sysPath.dirname(pp));\n  const base = sysPath.basename(pp);\n\n  // ensure empty dirs get tracked\n  if (isDir) this.fsw._getWatchedDir(pp);\n  if (dirObj.has(base)) return;\n  dirObj.add(base);\n\n  if (!opts.ignoreInitial || forceAdd === true) {\n    this.fsw._emit(isDir ? EV_ADD_DIR : EV_ADD, pp, stats);\n  }\n}\n\ninitWatch(realPath, path, wh, processPath) {\n  if (this.fsw.closed) return;\n  const closer = this._watchWithFsEvents(\n    wh.watchPath,\n    sysPath.resolve(realPath || wh.watchPath),\n    processPath,\n    wh.globFilter\n  );\n  this.fsw._addPathCloser(path, closer);\n}\n\n/**\n * Handle added path with fsevents\n * @param {String} path file/dir path or glob pattern\n * @param {Function|Boolean=} transform converts working path to what the user expects\n * @param {Boolean=} forceAdd ensure add is emitted\n * @param {Number=} priorDepth Level of subdirectories already traversed.\n * @returns {Promise<void>}\n */\nasync _addToFsEvents(path, transform, forceAdd, priorDepth) {\n  if (this.fsw.closed) {\n    return;\n  }\n  const opts = this.fsw.options;\n  const processPath = typeof transform === FUNCTION_TYPE ? transform : IDENTITY_FN;\n\n  const wh = this.fsw._getWatchHelpers(path);\n\n  // evaluate what is at the path we're being asked to watch\n  try {\n    const stats = await statMethods[wh.statMethod](wh.watchPath);\n    if (this.fsw.closed) return;\n    if (this.fsw._isIgnored(wh.watchPath, stats)) {\n      throw null;\n    }\n    if (stats.isDirectory()) {\n      // emit addDir unless this is a glob parent\n      if (!wh.globFilter) this.emitAdd(processPath(path), stats, processPath, opts, forceAdd);\n\n      // don't recurse further if it would exceed depth setting\n      if (priorDepth && priorDepth > opts.depth) return;\n\n      // scan the contents of the dir\n      this.fsw._readdirp(wh.watchPath, {\n        fileFilter: entry => wh.filterPath(entry),\n        directoryFilter: entry => wh.filterDir(entry),\n        ...Depth(opts.depth - (priorDepth || 0))\n      }).on(STR_DATA, (entry) => {\n        // need to check filterPath on dirs b/c filterDir is less restrictive\n        if (this.fsw.closed) {\n          return;\n        }\n        if (entry.stats.isDirectory() && !wh.filterPath(entry)) return;\n\n        const joinedPath = sysPath.join(wh.watchPath, entry.path);\n        const {fullPath} = entry;\n\n        if (wh.followSymlinks && entry.stats.isSymbolicLink()) {\n          // preserve the current depth here since it can't be derived from\n          // real paths past the symlink\n          const curDepth = opts.depth === undefined ?\n            undefined : calcDepth(joinedPath, sysPath.resolve(wh.watchPath)) + 1;\n\n          this._handleFsEventsSymlink(joinedPath, fullPath, processPath, curDepth);\n        } else {\n          this.emitAdd(joinedPath, entry.stats, processPath, opts, forceAdd);\n        }\n      }).on(EV_ERROR, EMPTY_FN).on(STR_END, () => {\n        this.fsw._emitReady();\n      });\n    } else {\n      this.emitAdd(wh.watchPath, stats, processPath, opts, forceAdd);\n      this.fsw._emitReady();\n    }\n  } catch (error) {\n    if (!error || this.fsw._handleError(error)) {\n      // TODO: Strange thing: \"should not choke on an ignored watch path\" will be failed without 2 ready calls -__-\n      this.fsw._emitReady();\n      this.fsw._emitReady();\n    }\n  }\n\n  if (opts.persistent && forceAdd !== true) {\n    if (typeof transform === FUNCTION_TYPE) {\n      // realpath has already been resolved\n      this.initWatch(undefined, path, wh, processPath);\n    } else {\n      let realPath;\n      try {\n        realPath = await realpath(wh.watchPath);\n      } catch (e) {}\n      this.initWatch(realPath, path, wh, processPath);\n    }\n  }\n}\n\n}\n\nmodule.exports = FsEventsHandler;\nmodule.exports.canUse = canUse;\n", "'use strict';\n\nconst { EventEmitter } = require('events');\nconst fs = require('fs');\nconst sysPath = require('path');\nconst { promisify } = require('util');\nconst readdirp = require('readdirp');\nconst anymatch = require('anymatch').default;\nconst globParent = require('glob-parent');\nconst isGlob = require('is-glob');\nconst braces = require('braces');\nconst normalizePath = require('normalize-path');\n\nconst NodeFsHandler = require('./lib/nodefs-handler');\nconst FsEventsHandler = require('./lib/fsevents-handler');\nconst {\n  EV_ALL,\n  EV_READY,\n  EV_ADD,\n  EV_CHANGE,\n  EV_UNLINK,\n  EV_ADD_DIR,\n  EV_UNLINK_DIR,\n  EV_RAW,\n  EV_ERROR,\n\n  STR_CLOSE,\n  STR_END,\n\n  BACK_SLASH_RE,\n  DOUBLE_SLASH_RE,\n  SLASH_OR_BACK_SLASH_RE,\n  DOT_RE,\n  REPLACER_RE,\n\n  SLASH,\n  SLASH_SLASH,\n  BRACE_START,\n  BANG,\n  ONE_DOT,\n  TWO_DOTS,\n  GLOBSTAR,\n  SLASH_GLOBSTAR,\n  ANYMATCH_OPTS,\n  STRING_TYPE,\n  FUNCTION_TYPE,\n  EMPTY_STR,\n  EMPTY_FN,\n\n  isWindows,\n  isMacos,\n  isIBMi\n} = require('./lib/constants');\n\nconst stat = promisify(fs.stat);\nconst readdir = promisify(fs.readdir);\n\n/**\n * @typedef {String} Path\n * @typedef {'all'|'add'|'addDir'|'change'|'unlink'|'unlinkDir'|'raw'|'error'|'ready'} EventName\n * @typedef {'readdir'|'watch'|'add'|'remove'|'change'} ThrottleType\n */\n\n/**\n *\n * @typedef {Object} WatchHelpers\n * @property {Boolean} followSymlinks\n * @property {'stat'|'lstat'} statMethod\n * @property {Path} path\n * @property {Path} watchPath\n * @property {Function} entryPath\n * @property {Boolean} hasGlob\n * @property {Object} globFilter\n * @property {Function} filterPath\n * @property {Function} filterDir\n */\n\nconst arrify = (value = []) => Array.isArray(value) ? value : [value];\nconst flatten = (list, result = []) => {\n  list.forEach(item => {\n    if (Array.isArray(item)) {\n      flatten(item, result);\n    } else {\n      result.push(item);\n    }\n  });\n  return result;\n};\n\nconst unifyPaths = (paths_) => {\n  /**\n   * @type {Array<String>}\n   */\n  const paths = flatten(arrify(paths_));\n  if (!paths.every(p => typeof p === STRING_TYPE)) {\n    throw new TypeError(`Non-string provided as watch path: ${paths}`);\n  }\n  return paths.map(normalizePathToUnix);\n};\n\n// If SLASH_SLASH occurs at the beginning of path, it is not replaced\n//     because \"//StoragePC/DrivePool/Movies\" is a valid network path\nconst toUnix = (string) => {\n  let str = string.replace(BACK_SLASH_RE, SLASH);\n  let prepend = false;\n  if (str.startsWith(SLASH_SLASH)) {\n    prepend = true;\n  }\n  while (str.match(DOUBLE_SLASH_RE)) {\n    str = str.replace(DOUBLE_SLASH_RE, SLASH);\n  }\n  if (prepend) {\n    str = SLASH + str;\n  }\n  return str;\n};\n\n// Our version of upath.normalize\n// TODO: this is not equal to path-normalize module - investigate why\nconst normalizePathToUnix = (path) => toUnix(sysPath.normalize(toUnix(path)));\n\nconst normalizeIgnored = (cwd = EMPTY_STR) => (path) => {\n  if (typeof path !== STRING_TYPE) return path;\n  return normalizePathToUnix(sysPath.isAbsolute(path) ? path : sysPath.join(cwd, path));\n};\n\nconst getAbsolutePath = (path, cwd) => {\n  if (sysPath.isAbsolute(path)) {\n    return path;\n  }\n  if (path.startsWith(BANG)) {\n    return BANG + sysPath.join(cwd, path.slice(1));\n  }\n  return sysPath.join(cwd, path);\n};\n\nconst undef = (opts, key) => opts[key] === undefined;\n\n/**\n * Directory entry.\n * @property {Path} path\n * @property {Set<Path>} items\n */\nclass DirEntry {\n  /**\n   * @param {Path} dir\n   * @param {Function} removeWatcher\n   */\n  constructor(dir, removeWatcher) {\n    this.path = dir;\n    this._removeWatcher = removeWatcher;\n    /** @type {Set<Path>} */\n    this.items = new Set();\n  }\n\n  add(item) {\n    const {items} = this;\n    if (!items) return;\n    if (item !== ONE_DOT && item !== TWO_DOTS) items.add(item);\n  }\n\n  async remove(item) {\n    const {items} = this;\n    if (!items) return;\n    items.delete(item);\n    if (items.size > 0) return;\n\n    const dir = this.path;\n    try {\n      await readdir(dir);\n    } catch (err) {\n      if (this._removeWatcher) {\n        this._removeWatcher(sysPath.dirname(dir), sysPath.basename(dir));\n      }\n    }\n  }\n\n  has(item) {\n    const {items} = this;\n    if (!items) return;\n    return items.has(item);\n  }\n\n  /**\n   * @returns {Array<String>}\n   */\n  getChildren() {\n    const {items} = this;\n    if (!items) return;\n    return [...items.values()];\n  }\n\n  dispose() {\n    this.items.clear();\n    delete this.path;\n    delete this._removeWatcher;\n    delete this.items;\n    Object.freeze(this);\n  }\n}\n\nconst STAT_METHOD_F = 'stat';\nconst STAT_METHOD_L = 'lstat';\nclass WatchHelper {\n  constructor(path, watchPath, follow, fsw) {\n    this.fsw = fsw;\n    this.path = path = path.replace(REPLACER_RE, EMPTY_STR);\n    this.watchPath = watchPath;\n    this.fullWatchPath = sysPath.resolve(watchPath);\n    this.hasGlob = watchPath !== path;\n    /** @type {object|boolean} */\n    if (path === EMPTY_STR) this.hasGlob = false;\n    this.globSymlink = this.hasGlob && follow ? undefined : false;\n    this.globFilter = this.hasGlob ? anymatch(path, undefined, ANYMATCH_OPTS) : false;\n    this.dirParts = this.getDirParts(path);\n    this.dirParts.forEach((parts) => {\n      if (parts.length > 1) parts.pop();\n    });\n    this.followSymlinks = follow;\n    this.statMethod = follow ? STAT_METHOD_F : STAT_METHOD_L;\n  }\n\n  checkGlobSymlink(entry) {\n    // only need to resolve once\n    // first entry should always have entry.parentDir === EMPTY_STR\n    if (this.globSymlink === undefined) {\n      this.globSymlink = entry.fullParentDir === this.fullWatchPath ?\n        false : {realPath: entry.fullParentDir, linkPath: this.fullWatchPath};\n    }\n\n    if (this.globSymlink) {\n      return entry.fullPath.replace(this.globSymlink.realPath, this.globSymlink.linkPath);\n    }\n\n    return entry.fullPath;\n  }\n\n  entryPath(entry) {\n    return sysPath.join(this.watchPath,\n      sysPath.relative(this.watchPath, this.checkGlobSymlink(entry))\n    );\n  }\n\n  filterPath(entry) {\n    const {stats} = entry;\n    if (stats && stats.isSymbolicLink()) return this.filterDir(entry);\n    const resolvedPath = this.entryPath(entry);\n    const matchesGlob = this.hasGlob && typeof this.globFilter === FUNCTION_TYPE ?\n      this.globFilter(resolvedPath) : true;\n    return matchesGlob &&\n      this.fsw._isntIgnored(resolvedPath, stats) &&\n      this.fsw._hasReadPermissions(stats);\n  }\n\n  getDirParts(path) {\n    if (!this.hasGlob) return [];\n    const parts = [];\n    const expandedPath = path.includes(BRACE_START) ? braces.expand(path) : [path];\n    expandedPath.forEach((path) => {\n      parts.push(sysPath.relative(this.watchPath, path).split(SLASH_OR_BACK_SLASH_RE));\n    });\n    return parts;\n  }\n\n  filterDir(entry) {\n    if (this.hasGlob) {\n      const entryParts = this.getDirParts(this.checkGlobSymlink(entry));\n      let globstar = false;\n      this.unmatchedGlob = !this.dirParts.some((parts) => {\n        return parts.every((part, i) => {\n          if (part === GLOBSTAR) globstar = true;\n          return globstar || !entryParts[0][i] || anymatch(part, entryParts[0][i], ANYMATCH_OPTS);\n        });\n      });\n    }\n    return !this.unmatchedGlob && this.fsw._isntIgnored(this.entryPath(entry), entry.stats);\n  }\n}\n\n/**\n * Watches files & directories for changes. Emitted events:\n * `add`, `addDir`, `change`, `unlink`, `unlinkDir`, `all`, `error`\n *\n *     new FSWatcher()\n *       .add(directories)\n *       .on('add', path => log('File', path, 'was added'))\n */\nclass FSWatcher extends EventEmitter {\n// Not indenting methods for history sake; for now.\nconstructor(_opts) {\n  super();\n\n  const opts = {};\n  if (_opts) Object.assign(opts, _opts); // for frozen objects\n\n  /** @type {Map<String, DirEntry>} */\n  this._watched = new Map();\n  /** @type {Map<String, Array>} */\n  this._closers = new Map();\n  /** @type {Set<String>} */\n  this._ignoredPaths = new Set();\n\n  /** @type {Map<ThrottleType, Map>} */\n  this._throttled = new Map();\n\n  /** @type {Map<Path, String|Boolean>} */\n  this._symlinkPaths = new Map();\n\n  this._streams = new Set();\n  this.closed = false;\n\n  // Set up default options.\n  if (undef(opts, 'persistent')) opts.persistent = true;\n  if (undef(opts, 'ignoreInitial')) opts.ignoreInitial = false;\n  if (undef(opts, 'ignorePermissionErrors')) opts.ignorePermissionErrors = false;\n  if (undef(opts, 'interval')) opts.interval = 100;\n  if (undef(opts, 'binaryInterval')) opts.binaryInterval = 300;\n  if (undef(opts, 'disableGlobbing')) opts.disableGlobbing = false;\n  opts.enableBinaryInterval = opts.binaryInterval !== opts.interval;\n\n  // Enable fsevents on OS X when polling isn't explicitly enabled.\n  if (undef(opts, 'useFsEvents')) opts.useFsEvents = !opts.usePolling;\n\n  // If we can't use fsevents, ensure the options reflect it's disabled.\n  const canUseFsEvents = FsEventsHandler.canUse();\n  if (!canUseFsEvents) opts.useFsEvents = false;\n\n  // Use polling on Mac if not using fsevents.\n  // Other platforms use non-polling fs_watch.\n  if (undef(opts, 'usePolling') && !opts.useFsEvents) {\n    opts.usePolling = isMacos;\n  }\n\n  // Always default to polling on IBM i because fs.watch() is not available on IBM i.\n  if(isIBMi) {\n    opts.usePolling = true;\n  }\n\n  // Global override (useful for end-developers that need to force polling for all\n  // instances of chokidar, regardless of usage/dependency depth)\n  const envPoll = process.env.CHOKIDAR_USEPOLLING;\n  if (envPoll !== undefined) {\n    const envLower = envPoll.toLowerCase();\n\n    if (envLower === 'false' || envLower === '0') {\n      opts.usePolling = false;\n    } else if (envLower === 'true' || envLower === '1') {\n      opts.usePolling = true;\n    } else {\n      opts.usePolling = !!envLower;\n    }\n  }\n  const envInterval = process.env.CHOKIDAR_INTERVAL;\n  if (envInterval) {\n    opts.interval = Number.parseInt(envInterval, 10);\n  }\n\n  // Editor atomic write normalization enabled by default with fs.watch\n  if (undef(opts, 'atomic')) opts.atomic = !opts.usePolling && !opts.useFsEvents;\n  if (opts.atomic) this._pendingUnlinks = new Map();\n\n  if (undef(opts, 'followSymlinks')) opts.followSymlinks = true;\n\n  if (undef(opts, 'awaitWriteFinish')) opts.awaitWriteFinish = false;\n  if (opts.awaitWriteFinish === true) opts.awaitWriteFinish = {};\n  const awf = opts.awaitWriteFinish;\n  if (awf) {\n    if (!awf.stabilityThreshold) awf.stabilityThreshold = 2000;\n    if (!awf.pollInterval) awf.pollInterval = 100;\n    this._pendingWrites = new Map();\n  }\n  if (opts.ignored) opts.ignored = arrify(opts.ignored);\n\n  let readyCalls = 0;\n  this._emitReady = () => {\n    readyCalls++;\n    if (readyCalls >= this._readyCount) {\n      this._emitReady = EMPTY_FN;\n      this._readyEmitted = true;\n      // use process.nextTick to allow time for listener to be bound\n      process.nextTick(() => this.emit(EV_READY));\n    }\n  };\n  this._emitRaw = (...args) => this.emit(EV_RAW, ...args);\n  this._readyEmitted = false;\n  this.options = opts;\n\n  // Initialize with proper watcher.\n  if (opts.useFsEvents) {\n    this._fsEventsHandler = new FsEventsHandler(this);\n  } else {\n    this._nodeFsHandler = new NodeFsHandler(this);\n  }\n\n  // You\u2019re frozen when your heart\u2019s not open.\n  Object.freeze(opts);\n}\n\n// Public methods\n\n/**\n * Adds paths to be watched on an existing FSWatcher instance\n * @param {Path|Array<Path>} paths_\n * @param {String=} _origAdd private; for handling non-existent paths to be watched\n * @param {Boolean=} _internal private; indicates a non-user add\n * @returns {FSWatcher} for chaining\n */\nadd(paths_, _origAdd, _internal) {\n  const {cwd, disableGlobbing} = this.options;\n  this.closed = false;\n  let paths = unifyPaths(paths_);\n  if (cwd) {\n    paths = paths.map((path) => {\n      const absPath = getAbsolutePath(path, cwd);\n\n      // Check `path` instead of `absPath` because the cwd portion can't be a glob\n      if (disableGlobbing || !isGlob(path)) {\n        return absPath;\n      }\n      return normalizePath(absPath);\n    });\n  }\n\n  // set aside negated glob strings\n  paths = paths.filter((path) => {\n    if (path.startsWith(BANG)) {\n      this._ignoredPaths.add(path.slice(1));\n      return false;\n    }\n\n    // if a path is being added that was previously ignored, stop ignoring it\n    this._ignoredPaths.delete(path);\n    this._ignoredPaths.delete(path + SLASH_GLOBSTAR);\n\n    // reset the cached userIgnored anymatch fn\n    // to make ignoredPaths changes effective\n    this._userIgnored = undefined;\n\n    return true;\n  });\n\n  if (this.options.useFsEvents && this._fsEventsHandler) {\n    if (!this._readyCount) this._readyCount = paths.length;\n    if (this.options.persistent) this._readyCount += paths.length;\n    paths.forEach((path) => this._fsEventsHandler._addToFsEvents(path));\n  } else {\n    if (!this._readyCount) this._readyCount = 0;\n    this._readyCount += paths.length;\n    Promise.all(\n      paths.map(async path => {\n        const res = await this._nodeFsHandler._addToNodeFs(path, !_internal, 0, 0, _origAdd);\n        if (res) this._emitReady();\n        return res;\n      })\n    ).then(results => {\n      if (this.closed) return;\n      results.filter(item => item).forEach(item => {\n        this.add(sysPath.dirname(item), sysPath.basename(_origAdd || item));\n      });\n    });\n  }\n\n  return this;\n}\n\n/**\n * Close watchers or start ignoring events from specified paths.\n * @param {Path|Array<Path>} paths_ - string or array of strings, file/directory paths and/or globs\n * @returns {FSWatcher} for chaining\n*/\nunwatch(paths_) {\n  if (this.closed) return this;\n  const paths = unifyPaths(paths_);\n  const {cwd} = this.options;\n\n  paths.forEach((path) => {\n    // convert to absolute path unless relative path already matches\n    if (!sysPath.isAbsolute(path) && !this._closers.has(path)) {\n      if (cwd) path = sysPath.join(cwd, path);\n      path = sysPath.resolve(path);\n    }\n\n    this._closePath(path);\n\n    this._ignoredPaths.add(path);\n    if (this._watched.has(path)) {\n      this._ignoredPaths.add(path + SLASH_GLOBSTAR);\n    }\n\n    // reset the cached userIgnored anymatch fn\n    // to make ignoredPaths changes effective\n    this._userIgnored = undefined;\n  });\n\n  return this;\n}\n\n/**\n * Close watchers and remove all listeners from watched paths.\n * @returns {Promise<void>}.\n*/\nclose() {\n  if (this.closed) return this._closePromise;\n  this.closed = true;\n\n  // Memory management.\n  this.removeAllListeners();\n  const closers = [];\n  this._closers.forEach(closerList => closerList.forEach(closer => {\n    const promise = closer();\n    if (promise instanceof Promise) closers.push(promise);\n  }));\n  this._streams.forEach(stream => stream.destroy());\n  this._userIgnored = undefined;\n  this._readyCount = 0;\n  this._readyEmitted = false;\n  this._watched.forEach(dirent => dirent.dispose());\n  ['closers', 'watched', 'streams', 'symlinkPaths', 'throttled'].forEach(key => {\n    this[`_${key}`].clear();\n  });\n\n  this._closePromise = closers.length ? Promise.all(closers).then(() => undefined) : Promise.resolve();\n  return this._closePromise;\n}\n\n/**\n * Expose list of watched paths\n * @returns {Object} for chaining\n*/\ngetWatched() {\n  const watchList = {};\n  this._watched.forEach((entry, dir) => {\n    const key = this.options.cwd ? sysPath.relative(this.options.cwd, dir) : dir;\n    watchList[key || ONE_DOT] = entry.getChildren().sort();\n  });\n  return watchList;\n}\n\nemitWithAll(event, args) {\n  this.emit(...args);\n  if (event !== EV_ERROR) this.emit(EV_ALL, ...args);\n}\n\n// Common helpers\n// --------------\n\n/**\n * Normalize and emit events.\n * Calling _emit DOES NOT MEAN emit() would be called!\n * @param {EventName} event Type of event\n * @param {Path} path File or directory path\n * @param {*=} val1 arguments to be passed with event\n * @param {*=} val2\n * @param {*=} val3\n * @returns the error if defined, otherwise the value of the FSWatcher instance's `closed` flag\n */\nasync _emit(event, path, val1, val2, val3) {\n  if (this.closed) return;\n\n  const opts = this.options;\n  if (isWindows) path = sysPath.normalize(path);\n  if (opts.cwd) path = sysPath.relative(opts.cwd, path);\n  /** @type Array<any> */\n  const args = [event, path];\n  if (val3 !== undefined) args.push(val1, val2, val3);\n  else if (val2 !== undefined) args.push(val1, val2);\n  else if (val1 !== undefined) args.push(val1);\n\n  const awf = opts.awaitWriteFinish;\n  let pw;\n  if (awf && (pw = this._pendingWrites.get(path))) {\n    pw.lastChange = new Date();\n    return this;\n  }\n\n  if (opts.atomic) {\n    if (event === EV_UNLINK) {\n      this._pendingUnlinks.set(path, args);\n      setTimeout(() => {\n        this._pendingUnlinks.forEach((entry, path) => {\n          this.emit(...entry);\n          this.emit(EV_ALL, ...entry);\n          this._pendingUnlinks.delete(path);\n        });\n      }, typeof opts.atomic === 'number' ? opts.atomic : 100);\n      return this;\n    }\n    if (event === EV_ADD && this._pendingUnlinks.has(path)) {\n      event = args[0] = EV_CHANGE;\n      this._pendingUnlinks.delete(path);\n    }\n  }\n\n  if (awf && (event === EV_ADD || event === EV_CHANGE) && this._readyEmitted) {\n    const awfEmit = (err, stats) => {\n      if (err) {\n        event = args[0] = EV_ERROR;\n        args[1] = err;\n        this.emitWithAll(event, args);\n      } else if (stats) {\n        // if stats doesn't exist the file must have been deleted\n        if (args.length > 2) {\n          args[2] = stats;\n        } else {\n          args.push(stats);\n        }\n        this.emitWithAll(event, args);\n      }\n    };\n\n    this._awaitWriteFinish(path, awf.stabilityThreshold, event, awfEmit);\n    return this;\n  }\n\n  if (event === EV_CHANGE) {\n    const isThrottled = !this._throttle(EV_CHANGE, path, 50);\n    if (isThrottled) return this;\n  }\n\n  if (opts.alwaysStat && val1 === undefined &&\n    (event === EV_ADD || event === EV_ADD_DIR || event === EV_CHANGE)\n  ) {\n    const fullPath = opts.cwd ? sysPath.join(opts.cwd, path) : path;\n    let stats;\n    try {\n      stats = await stat(fullPath);\n    } catch (err) {}\n    // Suppress event when fs_stat fails, to avoid sending undefined 'stat'\n    if (!stats || this.closed) return;\n    args.push(stats);\n  }\n  this.emitWithAll(event, args);\n\n  return this;\n}\n\n/**\n * Common handler for errors\n * @param {Error} error\n * @returns {Error|Boolean} The error if defined, otherwise the value of the FSWatcher instance's `closed` flag\n */\n_handleError(error) {\n  const code = error && error.code;\n  if (error && code !== 'ENOENT' && code !== 'ENOTDIR' &&\n    (!this.options.ignorePermissionErrors || (code !== 'EPERM' && code !== 'EACCES'))\n  ) {\n    this.emit(EV_ERROR, error);\n  }\n  return error || this.closed;\n}\n\n/**\n * Helper utility for throttling\n * @param {ThrottleType} actionType type being throttled\n * @param {Path} path being acted upon\n * @param {Number} timeout duration of time to suppress duplicate actions\n * @returns {Object|false} tracking object or false if action should be suppressed\n */\n_throttle(actionType, path, timeout) {\n  if (!this._throttled.has(actionType)) {\n    this._throttled.set(actionType, new Map());\n  }\n\n  /** @type {Map<Path, Object>} */\n  const action = this._throttled.get(actionType);\n  /** @type {Object} */\n  const actionPath = action.get(path);\n\n  if (actionPath) {\n    actionPath.count++;\n    return false;\n  }\n\n  let timeoutObject;\n  const clear = () => {\n    const item = action.get(path);\n    const count = item ? item.count : 0;\n    action.delete(path);\n    clearTimeout(timeoutObject);\n    if (item) clearTimeout(item.timeoutObject);\n    return count;\n  };\n  timeoutObject = setTimeout(clear, timeout);\n  const thr = {timeoutObject, clear, count: 0};\n  action.set(path, thr);\n  return thr;\n}\n\n_incrReadyCount() {\n  return this._readyCount++;\n}\n\n/**\n * Awaits write operation to finish.\n * Polls a newly created file for size variations. When files size does not change for 'threshold' milliseconds calls callback.\n * @param {Path} path being acted upon\n * @param {Number} threshold Time in milliseconds a file size must be fixed before acknowledging write OP is finished\n * @param {EventName} event\n * @param {Function} awfEmit Callback to be called when ready for event to be emitted.\n */\n_awaitWriteFinish(path, threshold, event, awfEmit) {\n  let timeoutHandler;\n\n  let fullPath = path;\n  if (this.options.cwd && !sysPath.isAbsolute(path)) {\n    fullPath = sysPath.join(this.options.cwd, path);\n  }\n\n  const now = new Date();\n\n  const awaitWriteFinish = (prevStat) => {\n    fs.stat(fullPath, (err, curStat) => {\n      if (err || !this._pendingWrites.has(path)) {\n        if (err && err.code !== 'ENOENT') awfEmit(err);\n        return;\n      }\n\n      const now = Number(new Date());\n\n      if (prevStat && curStat.size !== prevStat.size) {\n        this._pendingWrites.get(path).lastChange = now;\n      }\n      const pw = this._pendingWrites.get(path);\n      const df = now - pw.lastChange;\n\n      if (df >= threshold) {\n        this._pendingWrites.delete(path);\n        awfEmit(undefined, curStat);\n      } else {\n        timeoutHandler = setTimeout(\n          awaitWriteFinish,\n          this.options.awaitWriteFinish.pollInterval,\n          curStat\n        );\n      }\n    });\n  };\n\n  if (!this._pendingWrites.has(path)) {\n    this._pendingWrites.set(path, {\n      lastChange: now,\n      cancelWait: () => {\n        this._pendingWrites.delete(path);\n        clearTimeout(timeoutHandler);\n        return event;\n      }\n    });\n    timeoutHandler = setTimeout(\n      awaitWriteFinish,\n      this.options.awaitWriteFinish.pollInterval\n    );\n  }\n}\n\n_getGlobIgnored() {\n  return [...this._ignoredPaths.values()];\n}\n\n/**\n * Determines whether user has asked to ignore this path.\n * @param {Path} path filepath or dir\n * @param {fs.Stats=} stats result of fs.stat\n * @returns {Boolean}\n */\n_isIgnored(path, stats) {\n  if (this.options.atomic && DOT_RE.test(path)) return true;\n  if (!this._userIgnored) {\n    const {cwd} = this.options;\n    const ign = this.options.ignored;\n\n    const ignored = ign && ign.map(normalizeIgnored(cwd));\n    const paths = arrify(ignored)\n      .filter((path) => typeof path === STRING_TYPE && !isGlob(path))\n      .map((path) => path + SLASH_GLOBSTAR);\n    const list = this._getGlobIgnored().map(normalizeIgnored(cwd)).concat(ignored, paths);\n    this._userIgnored = anymatch(list, undefined, ANYMATCH_OPTS);\n  }\n\n  return this._userIgnored([path, stats]);\n}\n\n_isntIgnored(path, stat) {\n  return !this._isIgnored(path, stat);\n}\n\n/**\n * Provides a set of common helpers and properties relating to symlink and glob handling.\n * @param {Path} path file, directory, or glob pattern being watched\n * @param {Number=} depth at any depth > 0, this isn't a glob\n * @returns {WatchHelper} object containing helpers for this path\n */\n_getWatchHelpers(path, depth) {\n  const watchPath = depth || this.options.disableGlobbing || !isGlob(path) ? path : globParent(path);\n  const follow = this.options.followSymlinks;\n\n  return new WatchHelper(path, watchPath, follow, this);\n}\n\n// Directory helpers\n// -----------------\n\n/**\n * Provides directory tracking objects\n * @param {String} directory path of the directory\n * @returns {DirEntry} the directory's tracking object\n */\n_getWatchedDir(directory) {\n  if (!this._boundRemove) this._boundRemove = this._remove.bind(this);\n  const dir = sysPath.resolve(directory);\n  if (!this._watched.has(dir)) this._watched.set(dir, new DirEntry(dir, this._boundRemove));\n  return this._watched.get(dir);\n}\n\n// File helpers\n// ------------\n\n/**\n * Check for read permissions.\n * Based on this answer on SO: https://stackoverflow.com/a/11781404/1358405\n * @param {fs.Stats} stats - object, result of fs_stat\n * @returns {Boolean} indicates whether the file can be read\n*/\n_hasReadPermissions(stats) {\n  if (this.options.ignorePermissionErrors) return true;\n\n  // stats.mode may be bigint\n  const md = stats && Number.parseInt(stats.mode, 10);\n  const st = md & 0o777;\n  const it = Number.parseInt(st.toString(8)[0], 10);\n  return Boolean(4 & it);\n}\n\n/**\n * Handles emitting unlink events for\n * files and directories, and via recursion, for\n * files and directories within directories that are unlinked\n * @param {String} directory within which the following item is located\n * @param {String} item      base path of item/directory\n * @returns {void}\n*/\n_remove(directory, item, isDirectory) {\n  // if what is being deleted is a directory, get that directory's paths\n  // for recursive deleting and cleaning of watched object\n  // if it is not a directory, nestedDirectoryChildren will be empty array\n  const path = sysPath.join(directory, item);\n  const fullPath = sysPath.resolve(path);\n  isDirectory = isDirectory != null\n    ? isDirectory\n    : this._watched.has(path) || this._watched.has(fullPath);\n\n  // prevent duplicate handling in case of arriving here nearly simultaneously\n  // via multiple paths (such as _handleFile and _handleDir)\n  if (!this._throttle('remove', path, 100)) return;\n\n  // if the only watched file is removed, watch for its return\n  if (!isDirectory && !this.options.useFsEvents && this._watched.size === 1) {\n    this.add(directory, item, true);\n  }\n\n  // This will create a new entry in the watched object in either case\n  // so we got to do the directory check beforehand\n  const wp = this._getWatchedDir(path);\n  const nestedDirectoryChildren = wp.getChildren();\n\n  // Recursively remove children directories / files.\n  nestedDirectoryChildren.forEach(nested => this._remove(path, nested));\n\n  // Check if item was on the watched list and remove it\n  const parent = this._getWatchedDir(directory);\n  const wasTracked = parent.has(item);\n  parent.remove(item);\n\n  // Fixes issue #1042 -> Relative paths were detected and added as symlinks\n  // (https://github.com/paulmillr/chokidar/blob/e1753ddbc9571bdc33b4a4af172d52cb6e611c10/lib/nodefs-handler.js#L612),\n  // but never removed from the map in case the path was deleted.\n  // This leads to an incorrect state if the path was recreated:\n  // https://github.com/paulmillr/chokidar/blob/e1753ddbc9571bdc33b4a4af172d52cb6e611c10/lib/nodefs-handler.js#L553\n  if (this._symlinkPaths.has(fullPath)) {\n    this._symlinkPaths.delete(fullPath);\n  }\n\n  // If we wait for this file to be fully written, cancel the wait.\n  let relPath = path;\n  if (this.options.cwd) relPath = sysPath.relative(this.options.cwd, path);\n  if (this.options.awaitWriteFinish && this._pendingWrites.has(relPath)) {\n    const event = this._pendingWrites.get(relPath).cancelWait();\n    if (event === EV_ADD) return;\n  }\n\n  // The Entry will either be a directory that just got removed\n  // or a bogus entry to a file, in either case we have to remove it\n  this._watched.delete(path);\n  this._watched.delete(fullPath);\n  const eventName = isDirectory ? EV_UNLINK_DIR : EV_UNLINK;\n  if (wasTracked && !this._isIgnored(path)) this._emit(eventName, path);\n\n  // Avoid conflicts if we later create another file with the same name\n  if (!this.options.useFsEvents) {\n    this._closePath(path);\n  }\n}\n\n/**\n * Closes all watchers for a path\n * @param {Path} path\n */\n_closePath(path) {\n  this._closeFile(path)\n  const dir = sysPath.dirname(path);\n  this._getWatchedDir(dir).remove(sysPath.basename(path));\n}\n\n/**\n * Closes only file-specific watchers\n * @param {Path} path\n */\n_closeFile(path) {\n  const closers = this._closers.get(path);\n  if (!closers) return;\n  closers.forEach(closer => closer());\n  this._closers.delete(path);\n}\n\n/**\n *\n * @param {Path} path\n * @param {Function} closer\n */\n_addPathCloser(path, closer) {\n  if (!closer) return;\n  let list = this._closers.get(path);\n  if (!list) {\n    list = [];\n    this._closers.set(path, list);\n  }\n  list.push(closer);\n}\n\n_readdirp(root, opts) {\n  if (this.closed) return;\n  const options = {type: EV_ALL, alwaysStat: true, lstat: true, ...opts};\n  let stream = readdirp(root, options);\n  this._streams.add(stream);\n  stream.once(STR_CLOSE, () => {\n    stream = undefined;\n  });\n  stream.once(STR_END, () => {\n    if (stream) {\n      this._streams.delete(stream);\n      stream = undefined;\n    }\n  });\n  return stream;\n}\n\n}\n\n// Export FSWatcher class\nexports.FSWatcher = FSWatcher;\n\n/**\n * Instantiates watcher with paths to be tracked.\n * @param {String|Array<String>} paths file/directory paths and/or globs\n * @param {Object=} options chokidar opts\n * @returns an instance of FSWatcher for chaining.\n */\nconst watch = (paths, options) => {\n  const watcher = new FSWatcher(options);\n  watcher.add(paths);\n  return watcher;\n};\n\nexports.watch = watch;\n", "/* ! The MIT License (MIT) Copyright (c) 2014 Scott Corgan */\n\n// This is adopted from https://github.com/scottcorgan/glob-slash/\n\nconst path = require('path');\nconst normalize = value => path.posix.normalize(path.posix.join('/', value));\n\nmodule.exports = value => (value.charAt(0) === '!' ? `!${normalize(value.substr(1))}` : normalize(value));\nmodule.exports.normalize = normalize;\n", "module.exports = function (xs, fn) {\n    var res = [];\n    for (var i = 0; i < xs.length; i++) {\n        var x = fn(xs[i], i);\n        if (isArray(x)) res.push.apply(res, x);\n        else res.push(x);\n    }\n    return res;\n};\n\nvar isArray = Array.isArray || function (xs) {\n    return Object.prototype.toString.call(xs) === '[object Array]';\n};\n", "'use strict';\nmodule.exports = balanced;\nfunction balanced(a, b, str) {\n  if (a instanceof RegExp) a = maybeMatch(a, str);\n  if (b instanceof RegExp) b = maybeMatch(b, str);\n\n  var r = range(a, b, str);\n\n  return r && {\n    start: r[0],\n    end: r[1],\n    pre: str.slice(0, r[0]),\n    body: str.slice(r[0] + a.length, r[1]),\n    post: str.slice(r[1] + b.length)\n  };\n}\n\nfunction maybeMatch(reg, str) {\n  var m = str.match(reg);\n  return m ? m[0] : null;\n}\n\nbalanced.range = range;\nfunction range(a, b, str) {\n  var begs, beg, left, right, result;\n  var ai = str.indexOf(a);\n  var bi = str.indexOf(b, ai + 1);\n  var i = ai;\n\n  if (ai >= 0 && bi > 0) {\n    if(a===b) {\n      return [ai, bi];\n    }\n    begs = [];\n    left = str.length;\n\n    while (i >= 0 && !result) {\n      if (i == ai) {\n        begs.push(i);\n        ai = str.indexOf(a, i + 1);\n      } else if (begs.length == 1) {\n        result = [ begs.pop(), bi ];\n      } else {\n        beg = begs.pop();\n        if (beg < left) {\n          left = beg;\n          right = bi;\n        }\n\n        bi = str.indexOf(b, i + 1);\n      }\n\n      i = ai < bi && ai >= 0 ? ai : bi;\n    }\n\n    if (begs.length) {\n      result = [ left, right ];\n    }\n  }\n\n  return result;\n}\n", "var concatMap = require('concat-map');\nvar balanced = require('balanced-match');\n\nmodule.exports = expandTop;\n\nvar escSlash = '\\0SLASH'+Math.random()+'\\0';\nvar escOpen = '\\0OPEN'+Math.random()+'\\0';\nvar escClose = '\\0CLOSE'+Math.random()+'\\0';\nvar escComma = '\\0COMMA'+Math.random()+'\\0';\nvar escPeriod = '\\0PERIOD'+Math.random()+'\\0';\n\nfunction numeric(str) {\n  return parseInt(str, 10) == str\n    ? parseInt(str, 10)\n    : str.charCodeAt(0);\n}\n\nfunction escapeBraces(str) {\n  return str.split('\\\\\\\\').join(escSlash)\n            .split('\\\\{').join(escOpen)\n            .split('\\\\}').join(escClose)\n            .split('\\\\,').join(escComma)\n            .split('\\\\.').join(escPeriod);\n}\n\nfunction unescapeBraces(str) {\n  return str.split(escSlash).join('\\\\')\n            .split(escOpen).join('{')\n            .split(escClose).join('}')\n            .split(escComma).join(',')\n            .split(escPeriod).join('.');\n}\n\n\n// Basically just str.split(\",\"), but handling cases\n// where we have nested braced sections, which should be\n// treated as individual members, like {a,{b,c},d}\nfunction parseCommaParts(str) {\n  if (!str)\n    return [''];\n\n  var parts = [];\n  var m = balanced('{', '}', str);\n\n  if (!m)\n    return str.split(',');\n\n  var pre = m.pre;\n  var body = m.body;\n  var post = m.post;\n  var p = pre.split(',');\n\n  p[p.length-1] += '{' + body + '}';\n  var postParts = parseCommaParts(post);\n  if (post.length) {\n    p[p.length-1] += postParts.shift();\n    p.push.apply(p, postParts);\n  }\n\n  parts.push.apply(parts, p);\n\n  return parts;\n}\n\nfunction expandTop(str) {\n  if (!str)\n    return [];\n\n  // I don't know why Bash 4.3 does this, but it does.\n  // Anything starting with {} will have the first two bytes preserved\n  // but *only* at the top level, so {},a}b will not expand to anything,\n  // but a{},b}c will be expanded to [a}c,abc].\n  // One could argue that this is a bug in Bash, but since the goal of\n  // this module is to match Bash's rules, we escape a leading {}\n  if (str.substr(0, 2) === '{}') {\n    str = '\\\\{\\\\}' + str.substr(2);\n  }\n\n  return expand(escapeBraces(str), true).map(unescapeBraces);\n}\n\nfunction identity(e) {\n  return e;\n}\n\nfunction embrace(str) {\n  return '{' + str + '}';\n}\nfunction isPadded(el) {\n  return /^-?0\\d/.test(el);\n}\n\nfunction lte(i, y) {\n  return i <= y;\n}\nfunction gte(i, y) {\n  return i >= y;\n}\n\nfunction expand(str, isTop) {\n  var expansions = [];\n\n  var m = balanced('{', '}', str);\n  if (!m || /\\$$/.test(m.pre)) return [str];\n\n  var isNumericSequence = /^-?\\d+\\.\\.-?\\d+(?:\\.\\.-?\\d+)?$/.test(m.body);\n  var isAlphaSequence = /^[a-zA-Z]\\.\\.[a-zA-Z](?:\\.\\.-?\\d+)?$/.test(m.body);\n  var isSequence = isNumericSequence || isAlphaSequence;\n  var isOptions = m.body.indexOf(',') >= 0;\n  if (!isSequence && !isOptions) {\n    // {a},b}\n    if (m.post.match(/,(?!,).*\\}/)) {\n      str = m.pre + '{' + m.body + escClose + m.post;\n      return expand(str);\n    }\n    return [str];\n  }\n\n  var n;\n  if (isSequence) {\n    n = m.body.split(/\\.\\./);\n  } else {\n    n = parseCommaParts(m.body);\n    if (n.length === 1) {\n      // x{{a,b}}y ==> x{a}y x{b}y\n      n = expand(n[0], false).map(embrace);\n      if (n.length === 1) {\n        var post = m.post.length\n          ? expand(m.post, false)\n          : [''];\n        return post.map(function(p) {\n          return m.pre + n[0] + p;\n        });\n      }\n    }\n  }\n\n  // at this point, n is the parts, and we know it's not a comma set\n  // with a single entry.\n\n  // no need to expand pre, since it is guaranteed to be free of brace-sets\n  var pre = m.pre;\n  var post = m.post.length\n    ? expand(m.post, false)\n    : [''];\n\n  var N;\n\n  if (isSequence) {\n    var x = numeric(n[0]);\n    var y = numeric(n[1]);\n    var width = Math.max(n[0].length, n[1].length)\n    var incr = n.length == 3\n      ? Math.abs(numeric(n[2]))\n      : 1;\n    var test = lte;\n    var reverse = y < x;\n    if (reverse) {\n      incr *= -1;\n      test = gte;\n    }\n    var pad = n.some(isPadded);\n\n    N = [];\n\n    for (var i = x; test(i, y); i += incr) {\n      var c;\n      if (isAlphaSequence) {\n        c = String.fromCharCode(i);\n        if (c === '\\\\')\n          c = '';\n      } else {\n        c = String(i);\n        if (pad) {\n          var need = width - c.length;\n          if (need > 0) {\n            var z = new Array(need + 1).join('0');\n            if (i < 0)\n              c = '-' + z + c.slice(1);\n            else\n              c = z + c;\n          }\n        }\n      }\n      N.push(c);\n    }\n  } else {\n    N = concatMap(n, function(el) { return expand(el, false) });\n  }\n\n  for (var j = 0; j < N.length; j++) {\n    for (var k = 0; k < post.length; k++) {\n      var expansion = pre + N[j] + post[k];\n      if (!isTop || isSequence || expansion)\n        expansions.push(expansion);\n    }\n  }\n\n  return expansions;\n}\n\n", "module.exports = minimatch\nminimatch.Minimatch = Minimatch\n\nvar path = (function () { try { return require('path') } catch (e) {}}()) || {\n  sep: '/'\n}\nminimatch.sep = path.sep\n\nvar GLOBSTAR = minimatch.GLOBSTAR = Minimatch.GLOBSTAR = {}\nvar expand = require('brace-expansion')\n\nvar plTypes = {\n  '!': { open: '(?:(?!(?:', close: '))[^/]*?)'},\n  '?': { open: '(?:', close: ')?' },\n  '+': { open: '(?:', close: ')+' },\n  '*': { open: '(?:', close: ')*' },\n  '@': { open: '(?:', close: ')' }\n}\n\n// any single thing other than /\n// don't need to escape / when using new RegExp()\nvar qmark = '[^/]'\n\n// * => any number of characters\nvar star = qmark + '*?'\n\n// ** when dots are allowed.  Anything goes, except .. and .\n// not (^ or / followed by one or two dots followed by $ or /),\n// followed by anything, any number of times.\nvar twoStarDot = '(?:(?!(?:\\\\\\/|^)(?:\\\\.{1,2})($|\\\\\\/)).)*?'\n\n// not a ^ or / followed by a dot,\n// followed by anything, any number of times.\nvar twoStarNoDot = '(?:(?!(?:\\\\\\/|^)\\\\.).)*?'\n\n// characters that need to be escaped in RegExp.\nvar reSpecials = charSet('().*{}+?[]^$\\\\!')\n\n// \"abc\" -> { a:true, b:true, c:true }\nfunction charSet (s) {\n  return s.split('').reduce(function (set, c) {\n    set[c] = true\n    return set\n  }, {})\n}\n\n// normalizes slashes.\nvar slashSplit = /\\/+/\n\nminimatch.filter = filter\nfunction filter (pattern, options) {\n  options = options || {}\n  return function (p, i, list) {\n    return minimatch(p, pattern, options)\n  }\n}\n\nfunction ext (a, b) {\n  b = b || {}\n  var t = {}\n  Object.keys(a).forEach(function (k) {\n    t[k] = a[k]\n  })\n  Object.keys(b).forEach(function (k) {\n    t[k] = b[k]\n  })\n  return t\n}\n\nminimatch.defaults = function (def) {\n  if (!def || typeof def !== 'object' || !Object.keys(def).length) {\n    return minimatch\n  }\n\n  var orig = minimatch\n\n  var m = function minimatch (p, pattern, options) {\n    return orig(p, pattern, ext(def, options))\n  }\n\n  m.Minimatch = function Minimatch (pattern, options) {\n    return new orig.Minimatch(pattern, ext(def, options))\n  }\n  m.Minimatch.defaults = function defaults (options) {\n    return orig.defaults(ext(def, options)).Minimatch\n  }\n\n  m.filter = function filter (pattern, options) {\n    return orig.filter(pattern, ext(def, options))\n  }\n\n  m.defaults = function defaults (options) {\n    return orig.defaults(ext(def, options))\n  }\n\n  m.makeRe = function makeRe (pattern, options) {\n    return orig.makeRe(pattern, ext(def, options))\n  }\n\n  m.braceExpand = function braceExpand (pattern, options) {\n    return orig.braceExpand(pattern, ext(def, options))\n  }\n\n  m.match = function (list, pattern, options) {\n    return orig.match(list, pattern, ext(def, options))\n  }\n\n  return m\n}\n\nMinimatch.defaults = function (def) {\n  return minimatch.defaults(def).Minimatch\n}\n\nfunction minimatch (p, pattern, options) {\n  assertValidPattern(pattern)\n\n  if (!options) options = {}\n\n  // shortcut: comments match nothing.\n  if (!options.nocomment && pattern.charAt(0) === '#') {\n    return false\n  }\n\n  return new Minimatch(pattern, options).match(p)\n}\n\nfunction Minimatch (pattern, options) {\n  if (!(this instanceof Minimatch)) {\n    return new Minimatch(pattern, options)\n  }\n\n  assertValidPattern(pattern)\n\n  if (!options) options = {}\n\n  pattern = pattern.trim()\n\n  // windows support: need to use /, not \\\n  if (!options.allowWindowsEscape && path.sep !== '/') {\n    pattern = pattern.split(path.sep).join('/')\n  }\n\n  this.options = options\n  this.maxGlobstarRecursion = options.maxGlobstarRecursion !== undefined\n    ? options.maxGlobstarRecursion : 200\n  this.set = []\n  this.pattern = pattern\n  this.regexp = null\n  this.negate = false\n  this.comment = false\n  this.empty = false\n  this.partial = !!options.partial\n\n  // make the set of regexps etc.\n  this.make()\n}\n\nMinimatch.prototype.debug = function () {}\n\nMinimatch.prototype.make = make\nfunction make () {\n  var pattern = this.pattern\n  var options = this.options\n\n  // empty patterns and comments match nothing.\n  if (!options.nocomment && pattern.charAt(0) === '#') {\n    this.comment = true\n    return\n  }\n  if (!pattern) {\n    this.empty = true\n    return\n  }\n\n  // step 1: figure out negation, etc.\n  this.parseNegate()\n\n  // step 2: expand braces\n  var set = this.globSet = this.braceExpand()\n\n  if (options.debug) this.debug = function debug() { console.error.apply(console, arguments) }\n\n  this.debug(this.pattern, set)\n\n  // step 3: now we have a set, so turn each one into a series of path-portion\n  // matching patterns.\n  // These will be regexps, except in the case of \"**\", which is\n  // set to the GLOBSTAR object for globstar behavior,\n  // and will not contain any / characters\n  set = this.globParts = set.map(function (s) {\n    return s.split(slashSplit)\n  })\n\n  this.debug(this.pattern, set)\n\n  // glob --> regexps\n  set = set.map(function (s, si, set) {\n    return s.map(this.parse, this)\n  }, this)\n\n  this.debug(this.pattern, set)\n\n  // filter out everything that didn't compile properly.\n  set = set.filter(function (s) {\n    return s.indexOf(false) === -1\n  })\n\n  this.debug(this.pattern, set)\n\n  this.set = set\n}\n\nMinimatch.prototype.parseNegate = parseNegate\nfunction parseNegate () {\n  var pattern = this.pattern\n  var negate = false\n  var options = this.options\n  var negateOffset = 0\n\n  if (options.nonegate) return\n\n  for (var i = 0, l = pattern.length\n    ; i < l && pattern.charAt(i) === '!'\n    ; i++) {\n    negate = !negate\n    negateOffset++\n  }\n\n  if (negateOffset) this.pattern = pattern.substr(negateOffset)\n  this.negate = negate\n}\n\n// Brace expansion:\n// a{b,c}d -> abd acd\n// a{b,}c -> abc ac\n// a{0..3}d -> a0d a1d a2d a3d\n// a{b,c{d,e}f}g -> abg acdfg acefg\n// a{b,c}d{e,f}g -> abdeg acdeg abdeg abdfg\n//\n// Invalid sets are not expanded.\n// a{2..}b -> a{2..}b\n// a{b}c -> a{b}c\nminimatch.braceExpand = function (pattern, options) {\n  return braceExpand(pattern, options)\n}\n\nMinimatch.prototype.braceExpand = braceExpand\n\nfunction braceExpand (pattern, options) {\n  if (!options) {\n    if (this instanceof Minimatch) {\n      options = this.options\n    } else {\n      options = {}\n    }\n  }\n\n  pattern = typeof pattern === 'undefined'\n    ? this.pattern : pattern\n\n  assertValidPattern(pattern)\n\n  // Thanks to Yeting Li <https://github.com/yetingli> for\n  // improving this regexp to avoid a ReDOS vulnerability.\n  if (options.nobrace || !/\\{(?:(?!\\{).)*\\}/.test(pattern)) {\n    // shortcut. no need to expand.\n    return [pattern]\n  }\n\n  return expand(pattern)\n}\n\nvar MAX_PATTERN_LENGTH = 1024 * 64\nvar assertValidPattern = function (pattern) {\n  if (typeof pattern !== 'string') {\n    throw new TypeError('invalid pattern')\n  }\n\n  if (pattern.length > MAX_PATTERN_LENGTH) {\n    throw new TypeError('pattern is too long')\n  }\n}\n\n// parse a component of the expanded set.\n// At this point, no pattern may contain \"/\" in it\n// so we're going to return a 2d array, where each entry is the full\n// pattern, split on '/', and then turned into a regular expression.\n// A regexp is made at the end which joins each array with an\n// escaped /, and another full one which joins each regexp with |.\n//\n// Following the lead of Bash 4.1, note that \"**\" only has special meaning\n// when it is the *only* thing in a path portion.  Otherwise, any series\n// of * is equivalent to a single *.  Globstar behavior is enabled by\n// default, and can be disabled by setting options.noglobstar.\nMinimatch.prototype.parse = parse\nvar SUBPARSE = {}\nfunction parse (pattern, isSub) {\n  assertValidPattern(pattern)\n\n  var options = this.options\n\n  // shortcuts\n  if (pattern === '**') {\n    if (!options.noglobstar)\n      return GLOBSTAR\n    else\n      pattern = '*'\n  }\n  if (pattern === '') return ''\n\n  var re = ''\n  var hasMagic = !!options.nocase\n  var escaping = false\n  // ? => one single character\n  var patternListStack = []\n  var negativeLists = []\n  var stateChar\n  var inClass = false\n  var reClassStart = -1\n  var classStart = -1\n  // . and .. never match anything that doesn't start with .,\n  // even when options.dot is set.\n  var patternStart = pattern.charAt(0) === '.' ? '' // anything\n  // not (start or / followed by . or .. followed by / or end)\n  : options.dot ? '(?!(?:^|\\\\\\/)\\\\.{1,2}(?:$|\\\\\\/))'\n  : '(?!\\\\.)'\n  var self = this\n\n  function clearStateChar () {\n    if (stateChar) {\n      // we had some state-tracking character\n      // that wasn't consumed by this pass.\n      switch (stateChar) {\n        case '*':\n          re += star\n          hasMagic = true\n        break\n        case '?':\n          re += qmark\n          hasMagic = true\n        break\n        default:\n          re += '\\\\' + stateChar\n        break\n      }\n      self.debug('clearStateChar %j %j', stateChar, re)\n      stateChar = false\n    }\n  }\n\n  for (var i = 0, len = pattern.length, c\n    ; (i < len) && (c = pattern.charAt(i))\n    ; i++) {\n    this.debug('%s\\t%s %s %j', pattern, i, re, c)\n\n    // skip over any that are escaped.\n    if (escaping && reSpecials[c]) {\n      re += '\\\\' + c\n      escaping = false\n      continue\n    }\n\n    switch (c) {\n      /* istanbul ignore next */\n      case '/': {\n        // completely not allowed, even escaped.\n        // Should already be path-split by now.\n        return false\n      }\n\n      case '\\\\':\n        clearStateChar()\n        escaping = true\n      continue\n\n      // the various stateChar values\n      // for the \"extglob\" stuff.\n      case '?':\n      case '*':\n      case '+':\n      case '@':\n      case '!':\n        this.debug('%s\\t%s %s %j <-- stateChar', pattern, i, re, c)\n\n        // all of those are literals inside a class, except that\n        // the glob [!a] means [^a] in regexp\n        if (inClass) {\n          this.debug('  in class')\n          if (c === '!' && i === classStart + 1) c = '^'\n          re += c\n          continue\n        }\n\n        // coalesce consecutive non-globstar * characters\n        if (c === '*' && stateChar === '*') continue\n\n        // if we already have a stateChar, then it means\n        // that there was something like ** or +? in there.\n        // Handle the stateChar, then proceed with this one.\n        self.debug('call clearStateChar %j', stateChar)\n        clearStateChar()\n        stateChar = c\n        // if extglob is disabled, then +(asdf|foo) isn't a thing.\n        // just clear the statechar *now*, rather than even diving into\n        // the patternList stuff.\n        if (options.noext) clearStateChar()\n      continue\n\n      case '(':\n        if (inClass) {\n          re += '('\n          continue\n        }\n\n        if (!stateChar) {\n          re += '\\\\('\n          continue\n        }\n\n        patternListStack.push({\n          type: stateChar,\n          start: i - 1,\n          reStart: re.length,\n          open: plTypes[stateChar].open,\n          close: plTypes[stateChar].close\n        })\n        // negation is (?:(?!js)[^/]*)\n        re += stateChar === '!' ? '(?:(?!(?:' : '(?:'\n        this.debug('plType %j %j', stateChar, re)\n        stateChar = false\n      continue\n\n      case ')':\n        if (inClass || !patternListStack.length) {\n          re += '\\\\)'\n          continue\n        }\n\n        clearStateChar()\n        hasMagic = true\n        var pl = patternListStack.pop()\n        // negation is (?:(?!js)[^/]*)\n        // The others are (?:<pattern>)<type>\n        re += pl.close\n        if (pl.type === '!') {\n          negativeLists.push(pl)\n        }\n        pl.reEnd = re.length\n      continue\n\n      case '|':\n        if (inClass || !patternListStack.length || escaping) {\n          re += '\\\\|'\n          escaping = false\n          continue\n        }\n\n        clearStateChar()\n        re += '|'\n      continue\n\n      // these are mostly the same in regexp and glob\n      case '[':\n        // swallow any state-tracking char before the [\n        clearStateChar()\n\n        if (inClass) {\n          re += '\\\\' + c\n          continue\n        }\n\n        inClass = true\n        classStart = i\n        reClassStart = re.length\n        re += c\n      continue\n\n      case ']':\n        //  a right bracket shall lose its special\n        //  meaning and represent itself in\n        //  a bracket expression if it occurs\n        //  first in the list.  -- POSIX.2 2.8.3.2\n        if (i === classStart + 1 || !inClass) {\n          re += '\\\\' + c\n          escaping = false\n          continue\n        }\n\n        // handle the case where we left a class open.\n        // \"[z-a]\" is valid, equivalent to \"\\[z-a\\]\"\n        // split where the last [ was, make sure we don't have\n        // an invalid re. if so, re-walk the contents of the\n        // would-be class to re-translate any characters that\n        // were passed through as-is\n        // TODO: It would probably be faster to determine this\n        // without a try/catch and a new RegExp, but it's tricky\n        // to do safely.  For now, this is safe and works.\n        var cs = pattern.substring(classStart + 1, i)\n        try {\n          RegExp('[' + cs + ']')\n        } catch (er) {\n          // not a valid class!\n          var sp = this.parse(cs, SUBPARSE)\n          re = re.substr(0, reClassStart) + '\\\\[' + sp[0] + '\\\\]'\n          hasMagic = hasMagic || sp[1]\n          inClass = false\n          continue\n        }\n\n        // finish up the class.\n        hasMagic = true\n        inClass = false\n        re += c\n      continue\n\n      default:\n        // swallow any state char that wasn't consumed\n        clearStateChar()\n\n        if (escaping) {\n          // no need\n          escaping = false\n        } else if (reSpecials[c]\n          && !(c === '^' && inClass)) {\n          re += '\\\\'\n        }\n\n        re += c\n\n    } // switch\n  } // for\n\n  // handle the case where we left a class open.\n  // \"[abc\" is valid, equivalent to \"\\[abc\"\n  if (inClass) {\n    // split where the last [ was, and escape it\n    // this is a huge pita.  We now have to re-walk\n    // the contents of the would-be class to re-translate\n    // any characters that were passed through as-is\n    cs = pattern.substr(classStart + 1)\n    sp = this.parse(cs, SUBPARSE)\n    re = re.substr(0, reClassStart) + '\\\\[' + sp[0]\n    hasMagic = hasMagic || sp[1]\n  }\n\n  // handle the case where we had a +( thing at the *end*\n  // of the pattern.\n  // each pattern list stack adds 3 chars, and we need to go through\n  // and escape any | chars that were passed through as-is for the regexp.\n  // Go through and escape them, taking care not to double-escape any\n  // | chars that were already escaped.\n  for (pl = patternListStack.pop(); pl; pl = patternListStack.pop()) {\n    var tail = re.slice(pl.reStart + pl.open.length)\n    this.debug('setting tail', re, pl)\n    // maybe some even number of \\, then maybe 1 \\, followed by a |\n    tail = tail.replace(/((?:\\\\{2}){0,64})(\\\\?)\\|/g, function (_, $1, $2) {\n      if (!$2) {\n        // the | isn't already escaped, so escape it.\n        $2 = '\\\\'\n      }\n\n      // need to escape all those slashes *again*, without escaping the\n      // one that we need for escaping the | character.  As it works out,\n      // escaping an even number of slashes can be done by simply repeating\n      // it exactly after itself.  That's why this trick works.\n      //\n      // I am sorry that you have to see this.\n      return $1 + $1 + $2 + '|'\n    })\n\n    this.debug('tail=%j\\n   %s', tail, tail, pl, re)\n    var t = pl.type === '*' ? star\n      : pl.type === '?' ? qmark\n      : '\\\\' + pl.type\n\n    hasMagic = true\n    re = re.slice(0, pl.reStart) + t + '\\\\(' + tail\n  }\n\n  // handle trailing things that only matter at the very end.\n  clearStateChar()\n  if (escaping) {\n    // trailing \\\\\n    re += '\\\\\\\\'\n  }\n\n  // only need to apply the nodot start if the re starts with\n  // something that could conceivably capture a dot\n  var addPatternStart = false\n  switch (re.charAt(0)) {\n    case '[': case '.': case '(': addPatternStart = true\n  }\n\n  // Hack to work around lack of negative lookbehind in JS\n  // A pattern like: *.!(x).!(y|z) needs to ensure that a name\n  // like 'a.xyz.yz' doesn't match.  So, the first negative\n  // lookahead, has to look ALL the way ahead, to the end of\n  // the pattern.\n  for (var n = negativeLists.length - 1; n > -1; n--) {\n    var nl = negativeLists[n]\n\n    var nlBefore = re.slice(0, nl.reStart)\n    var nlFirst = re.slice(nl.reStart, nl.reEnd - 8)\n    var nlLast = re.slice(nl.reEnd - 8, nl.reEnd)\n    var nlAfter = re.slice(nl.reEnd)\n\n    nlLast += nlAfter\n\n    // Handle nested stuff like *(*.js|!(*.json)), where open parens\n    // mean that we should *not* include the ) in the bit that is considered\n    // \"after\" the negated section.\n    var openParensBefore = nlBefore.split('(').length - 1\n    var cleanAfter = nlAfter\n    for (i = 0; i < openParensBefore; i++) {\n      cleanAfter = cleanAfter.replace(/\\)[+*?]?/, '')\n    }\n    nlAfter = cleanAfter\n\n    var dollar = ''\n    if (nlAfter === '' && isSub !== SUBPARSE) {\n      dollar = '$'\n    }\n    var newRe = nlBefore + nlFirst + nlAfter + dollar + nlLast\n    re = newRe\n  }\n\n  // if the re is not \"\" at this point, then we need to make sure\n  // it doesn't match against an empty path part.\n  // Otherwise a/* will match a/, which it should not.\n  if (re !== '' && hasMagic) {\n    re = '(?=.)' + re\n  }\n\n  if (addPatternStart) {\n    re = patternStart + re\n  }\n\n  // parsing just a piece of a larger pattern.\n  if (isSub === SUBPARSE) {\n    return [re, hasMagic]\n  }\n\n  // skip the regexp for non-magical patterns\n  // unescape anything in it, though, so that it'll be\n  // an exact match against a file etc.\n  if (!hasMagic) {\n    return globUnescape(pattern)\n  }\n\n  var flags = options.nocase ? 'i' : ''\n  try {\n    var regExp = new RegExp('^' + re + '$', flags)\n  } catch (er) /* istanbul ignore next - should be impossible */ {\n    // If it was an invalid regular expression, then it can't match\n    // anything.  This trick looks for a character after the end of\n    // the string, which is of course impossible, except in multi-line\n    // mode, but it's not a /m regex.\n    return new RegExp('$.')\n  }\n\n  regExp._glob = pattern\n  regExp._src = re\n\n  return regExp\n}\n\nminimatch.makeRe = function (pattern, options) {\n  return new Minimatch(pattern, options || {}).makeRe()\n}\n\nMinimatch.prototype.makeRe = makeRe\nfunction makeRe () {\n  if (this.regexp || this.regexp === false) return this.regexp\n\n  // at this point, this.set is a 2d array of partial\n  // pattern strings, or \"**\".\n  //\n  // It's better to use .match().  This function shouldn't\n  // be used, really, but it's pretty convenient sometimes,\n  // when you just want to work with a regex.\n  var set = this.set\n\n  if (!set.length) {\n    this.regexp = false\n    return this.regexp\n  }\n  var options = this.options\n\n  var twoStar = options.noglobstar ? star\n    : options.dot ? twoStarDot\n    : twoStarNoDot\n  var flags = options.nocase ? 'i' : ''\n\n  var re = set.map(function (pattern) {\n    return pattern.map(function (p) {\n      return (p === GLOBSTAR) ? twoStar\n      : (typeof p === 'string') ? regExpEscape(p)\n      : p._src\n    }).join('\\\\\\/')\n  }).join('|')\n\n  // must match entire pattern\n  // ending in a * or ** will make it less strict.\n  re = '^(?:' + re + ')$'\n\n  // can match anything, as long as it's not this.\n  if (this.negate) re = '^(?!' + re + ').*$'\n\n  try {\n    this.regexp = new RegExp(re, flags)\n  } catch (ex) /* istanbul ignore next - should be impossible */ {\n    this.regexp = false\n  }\n  return this.regexp\n}\n\nminimatch.match = function (list, pattern, options) {\n  options = options || {}\n  var mm = new Minimatch(pattern, options)\n  list = list.filter(function (f) {\n    return mm.match(f)\n  })\n  if (mm.options.nonull && !list.length) {\n    list.push(pattern)\n  }\n  return list\n}\n\nMinimatch.prototype.match = function match (f, partial) {\n  if (typeof partial === 'undefined') partial = this.partial\n  this.debug('match', f, this.pattern)\n  // short-circuit in the case of busted things.\n  // comments, etc.\n  if (this.comment) return false\n  if (this.empty) return f === ''\n\n  if (f === '/' && partial) return true\n\n  var options = this.options\n\n  // windows: need to use /, not \\\n  if (path.sep !== '/') {\n    f = f.split(path.sep).join('/')\n  }\n\n  // treat the test path as a set of pathparts.\n  f = f.split(slashSplit)\n  this.debug(this.pattern, 'split', f)\n\n  // just ONE of the pattern sets in this.set needs to match\n  // in order for it to be valid.  If negating, then just one\n  // match means that we have failed.\n  // Either way, return on the first hit.\n\n  var set = this.set\n  this.debug(this.pattern, 'set', set)\n\n  // Find the basename of the path by looking for the last non-empty segment\n  var filename\n  var i\n  for (i = f.length - 1; i >= 0; i--) {\n    filename = f[i]\n    if (filename) break\n  }\n\n  for (i = 0; i < set.length; i++) {\n    var pattern = set[i]\n    var file = f\n    if (options.matchBase && pattern.length === 1) {\n      file = [filename]\n    }\n    var hit = this.matchOne(file, pattern, partial)\n    if (hit) {\n      if (options.flipNegate) return true\n      return !this.negate\n    }\n  }\n\n  // didn't get any hits.  this is success if it's a negative\n  // pattern, failure otherwise.\n  if (options.flipNegate) return false\n  return this.negate\n}\n\n// set partial to true to test if, for example,\n// \"/a/b\" matches the start of \"/*/b/*/d\"\n// Partial means, if you run out of file before you run\n// out of pattern, then that's fine, as long as all\n// the parts match.\nMinimatch.prototype.matchOne = function (file, pattern, partial) {\n  if (pattern.indexOf(GLOBSTAR) !== -1) {\n    return this._matchGlobstar(file, pattern, partial, 0, 0)\n  }\n  return this._matchOne(file, pattern, partial, 0, 0)\n}\n\nMinimatch.prototype._matchGlobstar = function (file, pattern, partial, fileIndex, patternIndex) {\n  var i\n\n  // find first globstar from patternIndex\n  var firstgs = -1\n  for (i = patternIndex; i < pattern.length; i++) {\n    if (pattern[i] === GLOBSTAR) { firstgs = i; break }\n  }\n\n  // find last globstar\n  var lastgs = -1\n  for (i = pattern.length - 1; i >= 0; i--) {\n    if (pattern[i] === GLOBSTAR) { lastgs = i; break }\n  }\n\n  var head = pattern.slice(patternIndex, firstgs)\n  var body = partial ? pattern.slice(firstgs + 1) : pattern.slice(firstgs + 1, lastgs)\n  var tail = partial ? [] : pattern.slice(lastgs + 1)\n\n  // check the head\n  if (head.length) {\n    var fileHead = file.slice(fileIndex, fileIndex + head.length)\n    if (!this._matchOne(fileHead, head, partial, 0, 0)) {\n      return false\n    }\n    fileIndex += head.length\n  }\n\n  // check the tail\n  var fileTailMatch = 0\n  if (tail.length) {\n    if (tail.length + fileIndex > file.length) return false\n\n    var tailStart = file.length - tail.length\n    if (this._matchOne(file, tail, partial, tailStart, 0)) {\n      fileTailMatch = tail.length\n    } else {\n      // affordance for stuff like a/**/* matching a/b/\n      if (file[file.length - 1] !== '' ||\n          fileIndex + tail.length === file.length) {\n        return false\n      }\n      tailStart--\n      if (!this._matchOne(file, tail, partial, tailStart, 0)) {\n        return false\n      }\n      fileTailMatch = tail.length + 1\n    }\n  }\n\n  // if body is empty (single ** between head and tail)\n  if (!body.length) {\n    var sawSome = !!fileTailMatch\n    for (i = fileIndex; i < file.length - fileTailMatch; i++) {\n      var f = String(file[i])\n      sawSome = true\n      if (f === '.' || f === '..' ||\n          (!this.options.dot && f.charAt(0) === '.')) {\n        return false\n      }\n    }\n    return partial || sawSome\n  }\n\n  // split body into segments at each GLOBSTAR\n  var bodySegments = [[[], 0]]\n  var currentBody = bodySegments[0]\n  var nonGsParts = 0\n  var nonGsPartsSums = [0]\n  for (var bi = 0; bi < body.length; bi++) {\n    var b = body[bi]\n    if (b === GLOBSTAR) {\n      nonGsPartsSums.push(nonGsParts)\n      currentBody = [[], 0]\n      bodySegments.push(currentBody)\n    } else {\n      currentBody[0].push(b)\n      nonGsParts++\n    }\n  }\n\n  var idx = bodySegments.length - 1\n  var fileLength = file.length - fileTailMatch\n  for (var si = 0; si < bodySegments.length; si++) {\n    bodySegments[si][1] = fileLength -\n      (nonGsPartsSums[idx--] + bodySegments[si][0].length)\n  }\n\n  return !!this._matchGlobStarBodySections(\n    file, bodySegments, fileIndex, 0, partial, 0, !!fileTailMatch\n  )\n}\n\n// return false for \"nope, not matching\"\n// return null for \"not matching, cannot keep trying\"\nMinimatch.prototype._matchGlobStarBodySections = function (\n  file, bodySegments, fileIndex, bodyIndex, partial, globStarDepth, sawTail\n) {\n  var bs = bodySegments[bodyIndex]\n  if (!bs) {\n    // just make sure there are no bad dots\n    for (var i = fileIndex; i < file.length; i++) {\n      sawTail = true\n      var f = file[i]\n      if (f === '.' || f === '..' ||\n          (!this.options.dot && f.charAt(0) === '.')) {\n        return false\n      }\n    }\n    return sawTail\n  }\n\n  var body = bs[0]\n  var after = bs[1]\n  while (fileIndex <= after) {\n    var m = this._matchOne(\n      file.slice(0, fileIndex + body.length),\n      body,\n      partial,\n      fileIndex,\n      0\n    )\n    // if limit exceeded, no match. intentional false negative,\n    // acceptable break in correctness for security.\n    if (m && globStarDepth < this.maxGlobstarRecursion) {\n      var sub = this._matchGlobStarBodySections(\n        file, bodySegments,\n        fileIndex + body.length, bodyIndex + 1,\n        partial, globStarDepth + 1, sawTail\n      )\n      if (sub !== false) {\n        return sub\n      }\n    }\n    var f = file[fileIndex]\n    if (f === '.' || f === '..' ||\n        (!this.options.dot && f.charAt(0) === '.')) {\n      return false\n    }\n    fileIndex++\n  }\n  return partial || null\n}\n\nMinimatch.prototype._matchOne = function (file, pattern, partial, fileIndex, patternIndex) {\n  var fi, pi, fl, pl\n  for (\n    fi = fileIndex, pi = patternIndex, fl = file.length, pl = pattern.length\n    ; (fi < fl) && (pi < pl)\n    ; fi++, pi++\n  ) {\n    this.debug('matchOne loop')\n    var p = pattern[pi]\n    var f = file[fi]\n\n    this.debug(pattern, p, f)\n\n    // should be impossible.\n    // some invalid regexp stuff in the set.\n    /* istanbul ignore if */\n    if (p === false || p === GLOBSTAR) return false\n\n    // something other than **\n    // non-magic patterns just have to match exactly\n    // patterns with magic have been turned into regexps.\n    var hit\n    if (typeof p === 'string') {\n      hit = f === p\n      this.debug('string match', p, f, hit)\n    } else {\n      hit = f.match(p)\n      this.debug('pattern match', p, f, hit)\n    }\n\n    if (!hit) return false\n  }\n\n  // now either we fell off the end of the pattern, or we're done.\n  if (fi === fl && pi === pl) {\n    // ran out of pattern and filename at the same time.\n    // an exact hit!\n    return true\n  } else if (fi === fl) {\n    // ran out of file, but still had pattern left.\n    // this is ok if we're doing the match as part of\n    // a glob fs traversal.\n    return partial\n  } else /* istanbul ignore else */ if (pi === pl) {\n    // ran out of pattern, still have file left.\n    // this is only acceptable if we're on the very last\n    // empty segment of a file with a trailing slash.\n    // a/* should match a/b/\n    return (fi === fl - 1) && (file[fi] === '')\n  }\n\n  // should be unreachable.\n  /* istanbul ignore next */\n  throw new Error('wtf?')\n}\n\n// replace stuff like \\* with *\nfunction globUnescape (s) {\n  return s.replace(/\\\\(.)/g, '$1')\n}\n\nfunction regExpEscape (s) {\n  return s.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&')\n}\n", "/**\n * Expose `pathToRegexp`.\n */\nmodule.exports = pathToRegexp\nmodule.exports.match = match\nmodule.exports.regexpToFunction = regexpToFunction\nmodule.exports.parse = parse\nmodule.exports.compile = compile\nmodule.exports.tokensToFunction = tokensToFunction\nmodule.exports.tokensToRegExp = tokensToRegExp\n\n/**\n * Default configs.\n */\nvar DEFAULT_DELIMITER = '/'\n\n/**\n * The main path matching regexp utility.\n *\n * @type {RegExp}\n */\nvar PATH_REGEXP = new RegExp([\n  // Match escaped characters that would otherwise appear in future matches.\n  // This allows the user to escape special characters that won't transform.\n  '(\\\\\\\\.)',\n  // Match Express-style parameters and un-named parameters with a prefix\n  // and optional suffixes. Matches appear as:\n  //\n  // \":test(\\\\d+)?\" => [\"test\", \"\\d+\", undefined, \"?\"]\n  // \"(\\\\d+)\"  => [undefined, undefined, \"\\d+\", undefined]\n  '(?:\\\\:(\\\\w+)(?:\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))?|\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))([+*?])?'\n].join('|'), 'g')\n\n/**\n * Parse a string for the raw tokens.\n *\n * @param  {string}  str\n * @param  {Object=} options\n * @return {!Array}\n */\nfunction parse (str, options) {\n  var tokens = []\n  var key = 0\n  var index = 0\n  var path = ''\n  var defaultDelimiter = (options && options.delimiter) || DEFAULT_DELIMITER\n  var whitelist = (options && options.whitelist) || undefined\n  var pathEscaped = false\n  var res\n\n  while ((res = PATH_REGEXP.exec(str)) !== null) {\n    var m = res[0]\n    var escaped = res[1]\n    var offset = res.index\n    path += str.slice(index, offset)\n    index = offset + m.length\n\n    // Ignore already escaped sequences.\n    if (escaped) {\n      path += escaped[1]\n      pathEscaped = true\n      continue\n    }\n\n    var prev = ''\n    var name = res[2]\n    var capture = res[3]\n    var group = res[4]\n    var modifier = res[5]\n\n    if (!pathEscaped && path.length) {\n      var k = path.length - 1\n      var c = path[k]\n      var matches = whitelist ? whitelist.indexOf(c) > -1 : true\n\n      if (matches) {\n        prev = c\n        path = path.slice(0, k)\n      }\n    }\n\n    // Push the current path onto the tokens.\n    if (path) {\n      tokens.push(path)\n      path = ''\n      pathEscaped = false\n    }\n\n    var repeat = modifier === '+' || modifier === '*'\n    var optional = modifier === '?' || modifier === '*'\n    var pattern = capture || group\n    var delimiter = prev || defaultDelimiter\n    var prevText = prev || (typeof tokens[tokens.length - 1] === 'string' ? tokens[tokens.length - 1] : '')\n\n    tokens.push({\n      name: name || key++,\n      prefix: prev,\n      delimiter: delimiter,\n      optional: optional,\n      repeat: repeat,\n      pattern: pattern\n        ? escapeGroup(pattern)\n        : restrictBacktrack(delimiter, defaultDelimiter, prevText)\n    })\n  }\n\n  // Push any remaining characters.\n  if (path || index < str.length) {\n    tokens.push(path + str.substr(index))\n  }\n\n  return tokens\n}\n\nfunction restrictBacktrack (delimiter, defaultDelimiter, prevText) {\n  var charGroup = '[^' + escapeString(delimiter === defaultDelimiter ? delimiter : (delimiter + defaultDelimiter)) + ']'\n\n  if (!prevText || prevText.indexOf(delimiter) > -1 || prevText.indexOf(defaultDelimiter) > -1) {\n    return charGroup + '+?'\n  }\n\n  return escapeString(prevText) + '|(?:(?!' + escapeString(prevText) + ')' + charGroup + ')+?'\n}\n\n/**\n * Compile a string to a template function for the path.\n *\n * @param  {string}             str\n * @param  {Object=}            options\n * @return {!function(Object=, Object=)}\n */\nfunction compile (str, options) {\n  return tokensToFunction(parse(str, options), options)\n}\n\n/**\n * Create path match function from `path-to-regexp` spec.\n */\nfunction match (str, options) {\n  var keys = []\n  var re = pathToRegexp(str, keys, options)\n  return regexpToFunction(re, keys)\n}\n\n/**\n * Create a path match function from `path-to-regexp` output.\n */\nfunction regexpToFunction (re, keys) {\n  return function (pathname, options) {\n    var m = re.exec(pathname)\n    if (!m) return false\n\n    var path = m[0]\n    var index = m.index\n    var params = {}\n    var decode = (options && options.decode) || decodeURIComponent\n\n    for (var i = 1; i < m.length; i++) {\n      if (m[i] === undefined) continue\n\n      var key = keys[i - 1]\n\n      if (key.repeat) {\n        params[key.name] = m[i].split(key.delimiter).map(function (value) {\n          return decode(value, key)\n        })\n      } else {\n        params[key.name] = decode(m[i], key)\n      }\n    }\n\n    return { path: path, index: index, params: params }\n  }\n}\n\n/**\n * Expose a method for transforming tokens into the path function.\n */\nfunction tokensToFunction (tokens, options) {\n  // Compile all the tokens into regexps.\n  var matches = new Array(tokens.length)\n\n  // Compile all the patterns before compilation.\n  for (var i = 0; i < tokens.length; i++) {\n    if (typeof tokens[i] === 'object') {\n      matches[i] = new RegExp('^(?:' + tokens[i].pattern + ')$', flags(options))\n    }\n  }\n\n  return function (data, options) {\n    var path = ''\n    var encode = (options && options.encode) || encodeURIComponent\n    var validate = options ? options.validate !== false : true\n\n    for (var i = 0; i < tokens.length; i++) {\n      var token = tokens[i]\n\n      if (typeof token === 'string') {\n        path += token\n        continue\n      }\n\n      var value = data ? data[token.name] : undefined\n      var segment\n\n      if (Array.isArray(value)) {\n        if (!token.repeat) {\n          throw new TypeError('Expected \"' + token.name + '\" to not repeat, but got array')\n        }\n\n        if (value.length === 0) {\n          if (token.optional) continue\n\n          throw new TypeError('Expected \"' + token.name + '\" to not be empty')\n        }\n\n        for (var j = 0; j < value.length; j++) {\n          segment = encode(value[j], token)\n\n          if (validate && !matches[i].test(segment)) {\n            throw new TypeError('Expected all \"' + token.name + '\" to match \"' + token.pattern + '\"')\n          }\n\n          path += (j === 0 ? token.prefix : token.delimiter) + segment\n        }\n\n        continue\n      }\n\n      if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n        segment = encode(String(value), token)\n\n        if (validate && !matches[i].test(segment)) {\n          throw new TypeError('Expected \"' + token.name + '\" to match \"' + token.pattern + '\", but got \"' + segment + '\"')\n        }\n\n        path += token.prefix + segment\n        continue\n      }\n\n      if (token.optional) continue\n\n      throw new TypeError('Expected \"' + token.name + '\" to be ' + (token.repeat ? 'an array' : 'a string'))\n    }\n\n    return path\n  }\n}\n\n/**\n * Escape a regular expression string.\n *\n * @param  {string} str\n * @return {string}\n */\nfunction escapeString (str) {\n  return str.replace(/([.+*?=^!:${}()[\\]|/\\\\])/g, '\\\\$1')\n}\n\n/**\n * Escape the capturing group by escaping special characters and meaning.\n *\n * @param  {string} group\n * @return {string}\n */\nfunction escapeGroup (group) {\n  return group.replace(/([=!:$/()])/g, '\\\\$1')\n}\n\n/**\n * Get the flags for a regexp from the options.\n *\n * @param  {Object} options\n * @return {string}\n */\nfunction flags (options) {\n  return options && options.sensitive ? '' : 'i'\n}\n\n/**\n * Pull out keys from a regexp.\n *\n * @param  {!RegExp} path\n * @param  {Array=}  keys\n * @return {!RegExp}\n */\nfunction regexpToRegexp (path, keys) {\n  if (!keys) return path\n\n  // Use a negative lookahead to match only capturing groups.\n  var groups = path.source.match(/\\((?!\\?)/g)\n\n  if (groups) {\n    for (var i = 0; i < groups.length; i++) {\n      keys.push({\n        name: i,\n        prefix: null,\n        delimiter: null,\n        optional: false,\n        repeat: false,\n        pattern: null\n      })\n    }\n  }\n\n  return path\n}\n\n/**\n * Transform an array into a regexp.\n *\n * @param  {!Array}  path\n * @param  {Array=}  keys\n * @param  {Object=} options\n * @return {!RegExp}\n */\nfunction arrayToRegexp (path, keys, options) {\n  var parts = []\n\n  for (var i = 0; i < path.length; i++) {\n    parts.push(pathToRegexp(path[i], keys, options).source)\n  }\n\n  return new RegExp('(?:' + parts.join('|') + ')', flags(options))\n}\n\n/**\n * Create a path regexp from string input.\n *\n * @param  {string}  path\n * @param  {Array=}  keys\n * @param  {Object=} options\n * @return {!RegExp}\n */\nfunction stringToRegexp (path, keys, options) {\n  return tokensToRegExp(parse(path, options), keys, options)\n}\n\n/**\n * Expose a function for taking tokens and returning a RegExp.\n *\n * @param  {!Array}  tokens\n * @param  {Array=}  keys\n * @param  {Object=} options\n * @return {!RegExp}\n */\nfunction tokensToRegExp (tokens, keys, options) {\n  options = options || {}\n\n  var strict = options.strict\n  var start = options.start !== false\n  var end = options.end !== false\n  var delimiter = options.delimiter || DEFAULT_DELIMITER\n  var endsWith = [].concat(options.endsWith || []).map(escapeString).concat('$').join('|')\n  var route = start ? '^' : ''\n\n  // Iterate over the tokens and create our regexp string.\n  for (var i = 0; i < tokens.length; i++) {\n    var token = tokens[i]\n\n    if (typeof token === 'string') {\n      route += escapeString(token)\n    } else {\n      var capture = token.repeat\n        ? '(?:' + token.pattern + ')(?:' + escapeString(token.delimiter) + '(?:' + token.pattern + '))*'\n        : token.pattern\n\n      if (keys) keys.push(token)\n\n      if (token.optional) {\n        if (!token.prefix) {\n          route += '(' + capture + ')?'\n        } else {\n          route += '(?:' + escapeString(token.prefix) + '(' + capture + '))?'\n        }\n      } else {\n        route += escapeString(token.prefix) + '(' + capture + ')'\n      }\n    }\n  }\n\n  if (end) {\n    if (!strict) route += '(?:' + escapeString(delimiter) + ')?'\n\n    route += endsWith === '$' ? '$' : '(?=' + endsWith + ')'\n  } else {\n    var endToken = tokens[tokens.length - 1]\n    var isEndDelimited = typeof endToken === 'string'\n      ? endToken[endToken.length - 1] === delimiter\n      : endToken === undefined\n\n    if (!strict) route += '(?:' + escapeString(delimiter) + '(?=' + endsWith + '))?'\n    if (!isEndDelimited) route += '(?=' + escapeString(delimiter) + '|' + endsWith + ')'\n  }\n\n  return new RegExp(route, flags(options))\n}\n\n/**\n * Normalize the given path string, returning a regular expression.\n *\n * An empty array can be passed in for the keys, which will hold the\n * placeholder key descriptions. For example, using `/user/:id`, `keys` will\n * contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`.\n *\n * @param  {(string|RegExp|Array)} path\n * @param  {Array=}                keys\n * @param  {Object=}               options\n * @return {!RegExp}\n */\nfunction pathToRegexp (path, keys, options) {\n  if (path instanceof RegExp) {\n    return regexpToRegexp(path, keys)\n  }\n\n  if (Array.isArray(path)) {\n    return arrayToRegexp(/** @type {!Array} */ (path), keys, options)\n  }\n\n  return stringToRegexp(/** @type {string} */ (path), keys, options)\n}\n", "{\n  \"application/1d-interleaved-parityfec\": {\n    \"source\": \"iana\"\n  },\n  \"application/3gpdash-qoe-report+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/3gpp-ims+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/a2l\": {\n    \"source\": \"iana\"\n  },\n  \"application/activemessage\": {\n    \"source\": \"iana\"\n  },\n  \"application/alto-costmap+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-costmapfilter+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-directory+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-endpointcost+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-endpointcostparams+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-endpointprop+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-endpointpropparams+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-error+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-networkmap+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-networkmapfilter+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/aml\": {\n    \"source\": \"iana\"\n  },\n  \"application/andrew-inset\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ez\"]\n  },\n  \"application/applefile\": {\n    \"source\": \"iana\"\n  },\n  \"application/applixware\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"aw\"]\n  },\n  \"application/atf\": {\n    \"source\": \"iana\"\n  },\n  \"application/atfx\": {\n    \"source\": \"iana\"\n  },\n  \"application/atom+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"atom\"]\n  },\n  \"application/atomcat+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"atomcat\"]\n  },\n  \"application/atomdeleted+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/atomicmail\": {\n    \"source\": \"iana\"\n  },\n  \"application/atomsvc+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"atomsvc\"]\n  },\n  \"application/atxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/auth-policy+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/bacnet-xdd+zip\": {\n    \"source\": \"iana\"\n  },\n  \"application/batch-smtp\": {\n    \"source\": \"iana\"\n  },\n  \"application/bdoc\": {\n    \"compressible\": false,\n    \"extensions\": [\"bdoc\"]\n  },\n  \"application/beep+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/calendar+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/calendar+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/call-completion\": {\n    \"source\": \"iana\"\n  },\n  \"application/cals-1840\": {\n    \"source\": \"iana\"\n  },\n  \"application/cbor\": {\n    \"source\": \"iana\"\n  },\n  \"application/cccex\": {\n    \"source\": \"iana\"\n  },\n  \"application/ccmp+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/ccxml+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ccxml\"]\n  },\n  \"application/cdfx+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/cdmi-capability\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cdmia\"]\n  },\n  \"application/cdmi-container\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cdmic\"]\n  },\n  \"application/cdmi-domain\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cdmid\"]\n  },\n  \"application/cdmi-object\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cdmio\"]\n  },\n  \"application/cdmi-queue\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cdmiq\"]\n  },\n  \"application/cdni\": {\n    \"source\": \"iana\"\n  },\n  \"application/cea\": {\n    \"source\": \"iana\"\n  },\n  \"application/cea-2018+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/cellml+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/cfw\": {\n    \"source\": \"iana\"\n  },\n  \"application/clue_info+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/cms\": {\n    \"source\": \"iana\"\n  },\n  \"application/cnrp+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/coap-group+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/coap-payload\": {\n    \"source\": \"iana\"\n  },\n  \"application/commonground\": {\n    \"source\": \"iana\"\n  },\n  \"application/conference-info+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/cose\": {\n    \"source\": \"iana\"\n  },\n  \"application/cose-key\": {\n    \"source\": \"iana\"\n  },\n  \"application/cose-key-set\": {\n    \"source\": \"iana\"\n  },\n  \"application/cpl+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/csrattrs\": {\n    \"source\": \"iana\"\n  },\n  \"application/csta+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/cstadata+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/csvm+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/cu-seeme\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cu\"]\n  },\n  \"application/cybercash\": {\n    \"source\": \"iana\"\n  },\n  \"application/dart\": {\n    \"compressible\": true\n  },\n  \"application/dash+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mpd\"]\n  },\n  \"application/dashdelta\": {\n    \"source\": \"iana\"\n  },\n  \"application/davmount+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"davmount\"]\n  },\n  \"application/dca-rft\": {\n    \"source\": \"iana\"\n  },\n  \"application/dcd\": {\n    \"source\": \"iana\"\n  },\n  \"application/dec-dx\": {\n    \"source\": \"iana\"\n  },\n  \"application/dialog-info+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/dicom\": {\n    \"source\": \"iana\"\n  },\n  \"application/dicom+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/dicom+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/dii\": {\n    \"source\": \"iana\"\n  },\n  \"application/dit\": {\n    \"source\": \"iana\"\n  },\n  \"application/dns\": {\n    \"source\": \"iana\"\n  },\n  \"application/docbook+xml\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"dbk\"]\n  },\n  \"application/dskpp+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/dssc+der\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dssc\"]\n  },\n  \"application/dssc+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xdssc\"]\n  },\n  \"application/dvcs\": {\n    \"source\": \"iana\"\n  },\n  \"application/ecmascript\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"ecma\"]\n  },\n  \"application/edi-consent\": {\n    \"source\": \"iana\"\n  },\n  \"application/edi-x12\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/edifact\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/efi\": {\n    \"source\": \"iana\"\n  },\n  \"application/emergencycalldata.comment+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/emergencycalldata.control+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/emergencycalldata.deviceinfo+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/emergencycalldata.ecall.msd\": {\n    \"source\": \"iana\"\n  },\n  \"application/emergencycalldata.providerinfo+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/emergencycalldata.serviceinfo+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/emergencycalldata.subscriberinfo+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/emergencycalldata.veds+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/emma+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"emma\"]\n  },\n  \"application/emotionml+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/encaprtp\": {\n    \"source\": \"iana\"\n  },\n  \"application/epp+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/epub+zip\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"epub\"]\n  },\n  \"application/eshop\": {\n    \"source\": \"iana\"\n  },\n  \"application/exi\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"exi\"]\n  },\n  \"application/fastinfoset\": {\n    \"source\": \"iana\"\n  },\n  \"application/fastsoap\": {\n    \"source\": \"iana\"\n  },\n  \"application/fdt+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/fhir+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/fido.trusted-apps+json\": {\n    \"compressible\": true\n  },\n  \"application/fits\": {\n    \"source\": \"iana\"\n  },\n  \"application/font-sfnt\": {\n    \"source\": \"iana\"\n  },\n  \"application/font-tdpfr\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pfr\"]\n  },\n  \"application/font-woff\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"woff\"]\n  },\n  \"application/framework-attributes+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/geo+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"geojson\"]\n  },\n  \"application/geo+json-seq\": {\n    \"source\": \"iana\"\n  },\n  \"application/geoxacml+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/gml+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gml\"]\n  },\n  \"application/gpx+xml\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"gpx\"]\n  },\n  \"application/gxf\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"gxf\"]\n  },\n  \"application/gzip\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"gz\"]\n  },\n  \"application/h224\": {\n    \"source\": \"iana\"\n  },\n  \"application/held+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/hjson\": {\n    \"extensions\": [\"hjson\"]\n  },\n  \"application/http\": {\n    \"source\": \"iana\"\n  },\n  \"application/hyperstudio\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"stk\"]\n  },\n  \"application/ibe-key-request+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/ibe-pkg-reply+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/ibe-pp-data\": {\n    \"source\": \"iana\"\n  },\n  \"application/iges\": {\n    \"source\": \"iana\"\n  },\n  \"application/im-iscomposing+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/index\": {\n    \"source\": \"iana\"\n  },\n  \"application/index.cmd\": {\n    \"source\": \"iana\"\n  },\n  \"application/index.obj\": {\n    \"source\": \"iana\"\n  },\n  \"application/index.response\": {\n    \"source\": \"iana\"\n  },\n  \"application/index.vnd\": {\n    \"source\": \"iana\"\n  },\n  \"application/inkml+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ink\",\"inkml\"]\n  },\n  \"application/iotp\": {\n    \"source\": \"iana\"\n  },\n  \"application/ipfix\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ipfix\"]\n  },\n  \"application/ipp\": {\n    \"source\": \"iana\"\n  },\n  \"application/isup\": {\n    \"source\": \"iana\"\n  },\n  \"application/its+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/java-archive\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"jar\",\"war\",\"ear\"]\n  },\n  \"application/java-serialized-object\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"ser\"]\n  },\n  \"application/java-vm\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"class\"]\n  },\n  \"application/javascript\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true,\n    \"extensions\": [\"js\",\"mjs\"]\n  },\n  \"application/jf2feed+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/jose\": {\n    \"source\": \"iana\"\n  },\n  \"application/jose+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/jrd+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/json\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true,\n    \"extensions\": [\"json\",\"map\"]\n  },\n  \"application/json-patch+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/json-seq\": {\n    \"source\": \"iana\"\n  },\n  \"application/json5\": {\n    \"extensions\": [\"json5\"]\n  },\n  \"application/jsonml+json\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"jsonml\"]\n  },\n  \"application/jwk+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/jwk-set+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/jwt\": {\n    \"source\": \"iana\"\n  },\n  \"application/kpml-request+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/kpml-response+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/ld+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"jsonld\"]\n  },\n  \"application/lgr+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/link-format\": {\n    \"source\": \"iana\"\n  },\n  \"application/load-control+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/lost+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"lostxml\"]\n  },\n  \"application/lostsync+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/lxf\": {\n    \"source\": \"iana\"\n  },\n  \"application/mac-binhex40\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"hqx\"]\n  },\n  \"application/mac-compactpro\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cpt\"]\n  },\n  \"application/macwriteii\": {\n    \"source\": \"iana\"\n  },\n  \"application/mads+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mads\"]\n  },\n  \"application/manifest+json\": {\n    \"charset\": \"UTF-8\",\n    \"compressible\": true,\n    \"extensions\": [\"webmanifest\"]\n  },\n  \"application/marc\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mrc\"]\n  },\n  \"application/marcxml+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mrcx\"]\n  },\n  \"application/mathematica\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ma\",\"nb\",\"mb\"]\n  },\n  \"application/mathml+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mathml\"]\n  },\n  \"application/mathml-content+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/mathml-presentation+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/mbms-associated-procedure-description+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/mbms-deregister+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/mbms-envelope+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/mbms-msk+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/mbms-msk-response+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/mbms-protection-description+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/mbms-reception-report+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/mbms-register+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/mbms-register-response+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/mbms-schedule+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/mbms-user-service-description+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/mbox\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mbox\"]\n  },\n  \"application/media-policy-dataset+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/media_control+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/mediaservercontrol+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mscml\"]\n  },\n  \"application/merge-patch+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/metalink+xml\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"metalink\"]\n  },\n  \"application/metalink4+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"meta4\"]\n  },\n  \"application/mets+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mets\"]\n  },\n  \"application/mf4\": {\n    \"source\": \"iana\"\n  },\n  \"application/mikey\": {\n    \"source\": \"iana\"\n  },\n  \"application/mmt-usd+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/mods+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mods\"]\n  },\n  \"application/moss-keys\": {\n    \"source\": \"iana\"\n  },\n  \"application/moss-signature\": {\n    \"source\": \"iana\"\n  },\n  \"application/mosskey-data\": {\n    \"source\": \"iana\"\n  },\n  \"application/mosskey-request\": {\n    \"source\": \"iana\"\n  },\n  \"application/mp21\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"m21\",\"mp21\"]\n  },\n  \"application/mp4\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mp4s\",\"m4p\"]\n  },\n  \"application/mpeg4-generic\": {\n    \"source\": \"iana\"\n  },\n  \"application/mpeg4-iod\": {\n    \"source\": \"iana\"\n  },\n  \"application/mpeg4-iod-xmt\": {\n    \"source\": \"iana\"\n  },\n  \"application/mrb-consumer+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/mrb-publish+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/msc-ivr+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/msc-mixer+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/msword\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"doc\",\"dot\"]\n  },\n  \"application/mud+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mxf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mxf\"]\n  },\n  \"application/n-quads\": {\n    \"source\": \"iana\"\n  },\n  \"application/n-triples\": {\n    \"source\": \"iana\"\n  },\n  \"application/nasdata\": {\n    \"source\": \"iana\"\n  },\n  \"application/news-checkgroups\": {\n    \"source\": \"iana\"\n  },\n  \"application/news-groupinfo\": {\n    \"source\": \"iana\"\n  },\n  \"application/news-transmission\": {\n    \"source\": \"iana\"\n  },\n  \"application/nlsml+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/node\": {\n    \"source\": \"iana\"\n  },\n  \"application/nss\": {\n    \"source\": \"iana\"\n  },\n  \"application/ocsp-request\": {\n    \"source\": \"iana\"\n  },\n  \"application/ocsp-response\": {\n    \"source\": \"iana\"\n  },\n  \"application/octet-stream\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"bin\",\"dms\",\"lrf\",\"mar\",\"so\",\"dist\",\"distz\",\"pkg\",\"bpk\",\"dump\",\"elc\",\"deploy\",\"exe\",\"dll\",\"deb\",\"dmg\",\"iso\",\"img\",\"msi\",\"msp\",\"msm\",\"buffer\"]\n  },\n  \"application/oda\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"oda\"]\n  },\n  \"application/odx\": {\n    \"source\": \"iana\"\n  },\n  \"application/oebps-package+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"opf\"]\n  },\n  \"application/ogg\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"ogx\"]\n  },\n  \"application/omdoc+xml\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"omdoc\"]\n  },\n  \"application/onenote\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"onetoc\",\"onetoc2\",\"onetmp\",\"onepkg\"]\n  },\n  \"application/oxps\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"oxps\"]\n  },\n  \"application/p2p-overlay+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/parityfec\": {\n    \"source\": \"iana\"\n  },\n  \"application/passport\": {\n    \"source\": \"iana\"\n  },\n  \"application/patch-ops-error+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xer\"]\n  },\n  \"application/pdf\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"pdf\"]\n  },\n  \"application/pdx\": {\n    \"source\": \"iana\"\n  },\n  \"application/pgp-encrypted\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"pgp\"]\n  },\n  \"application/pgp-keys\": {\n    \"source\": \"iana\"\n  },\n  \"application/pgp-signature\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"asc\",\"sig\"]\n  },\n  \"application/pics-rules\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"prf\"]\n  },\n  \"application/pidf+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/pidf-diff+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/pkcs10\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"p10\"]\n  },\n  \"application/pkcs12\": {\n    \"source\": \"iana\"\n  },\n  \"application/pkcs7-mime\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"p7m\",\"p7c\"]\n  },\n  \"application/pkcs7-signature\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"p7s\"]\n  },\n  \"application/pkcs8\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"p8\"]\n  },\n  \"application/pkcs8-encrypted\": {\n    \"source\": \"iana\"\n  },\n  \"application/pkix-attr-cert\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ac\"]\n  },\n  \"application/pkix-cert\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cer\"]\n  },\n  \"application/pkix-crl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"crl\"]\n  },\n  \"application/pkix-pkipath\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pkipath\"]\n  },\n  \"application/pkixcmp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pki\"]\n  },\n  \"application/pls+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pls\"]\n  },\n  \"application/poc-settings+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/postscript\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"ai\",\"eps\",\"ps\"]\n  },\n  \"application/ppsp-tracker+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/problem+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/problem+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/provenance+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/prs.alvestrand.titrax-sheet\": {\n    \"source\": \"iana\"\n  },\n  \"application/prs.cww\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cww\"]\n  },\n  \"application/prs.hpub+zip\": {\n    \"source\": \"iana\"\n  },\n  \"application/prs.nprend\": {\n    \"source\": \"iana\"\n  },\n  \"application/prs.plucker\": {\n    \"source\": \"iana\"\n  },\n  \"application/prs.rdf-xml-crypt\": {\n    \"source\": \"iana\"\n  },\n  \"application/prs.xsf+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/pskc+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pskcxml\"]\n  },\n  \"application/qsig\": {\n    \"source\": \"iana\"\n  },\n  \"application/raml+yaml\": {\n    \"compressible\": true,\n    \"extensions\": [\"raml\"]\n  },\n  \"application/raptorfec\": {\n    \"source\": \"iana\"\n  },\n  \"application/rdap+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/rdf+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"rdf\"]\n  },\n  \"application/reginfo+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rif\"]\n  },\n  \"application/relax-ng-compact-syntax\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rnc\"]\n  },\n  \"application/remote-printing\": {\n    \"source\": \"iana\"\n  },\n  \"application/reputon+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/resource-lists+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rl\"]\n  },\n  \"application/resource-lists-diff+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rld\"]\n  },\n  \"application/rfc+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/riscos\": {\n    \"source\": \"iana\"\n  },\n  \"application/rlmi+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/rls-services+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rs\"]\n  },\n  \"application/route-apd+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/route-s-tsid+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/route-usd+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/rpki-ghostbusters\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gbr\"]\n  },\n  \"application/rpki-manifest\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mft\"]\n  },\n  \"application/rpki-publication\": {\n    \"source\": \"iana\"\n  },\n  \"application/rpki-roa\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"roa\"]\n  },\n  \"application/rpki-updown\": {\n    \"source\": \"iana\"\n  },\n  \"application/rsd+xml\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"rsd\"]\n  },\n  \"application/rss+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"rss\"]\n  },\n  \"application/rtf\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"rtf\"]\n  },\n  \"application/rtploopback\": {\n    \"source\": \"iana\"\n  },\n  \"application/rtx\": {\n    \"source\": \"iana\"\n  },\n  \"application/samlassertion+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/samlmetadata+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/sbml+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sbml\"]\n  },\n  \"application/scaip+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/scim+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/scvp-cv-request\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"scq\"]\n  },\n  \"application/scvp-cv-response\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"scs\"]\n  },\n  \"application/scvp-vp-request\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"spq\"]\n  },\n  \"application/scvp-vp-response\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"spp\"]\n  },\n  \"application/sdp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sdp\"]\n  },\n  \"application/sep+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/sep-exi\": {\n    \"source\": \"iana\"\n  },\n  \"application/session-info\": {\n    \"source\": \"iana\"\n  },\n  \"application/set-payment\": {\n    \"source\": \"iana\"\n  },\n  \"application/set-payment-initiation\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"setpay\"]\n  },\n  \"application/set-registration\": {\n    \"source\": \"iana\"\n  },\n  \"application/set-registration-initiation\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"setreg\"]\n  },\n  \"application/sgml\": {\n    \"source\": \"iana\"\n  },\n  \"application/sgml-open-catalog\": {\n    \"source\": \"iana\"\n  },\n  \"application/shf+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"shf\"]\n  },\n  \"application/sieve\": {\n    \"source\": \"iana\"\n  },\n  \"application/simple-filter+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/simple-message-summary\": {\n    \"source\": \"iana\"\n  },\n  \"application/simplesymbolcontainer\": {\n    \"source\": \"iana\"\n  },\n  \"application/slate\": {\n    \"source\": \"iana\"\n  },\n  \"application/smil\": {\n    \"source\": \"iana\"\n  },\n  \"application/smil+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"smi\",\"smil\"]\n  },\n  \"application/smpte336m\": {\n    \"source\": \"iana\"\n  },\n  \"application/soap+fastinfoset\": {\n    \"source\": \"iana\"\n  },\n  \"application/soap+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/sparql-query\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rq\"]\n  },\n  \"application/sparql-results+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"srx\"]\n  },\n  \"application/spirits-event+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/sql\": {\n    \"source\": \"iana\"\n  },\n  \"application/srgs\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gram\"]\n  },\n  \"application/srgs+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"grxml\"]\n  },\n  \"application/sru+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sru\"]\n  },\n  \"application/ssdl+xml\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"ssdl\"]\n  },\n  \"application/ssml+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ssml\"]\n  },\n  \"application/tamp-apex-update\": {\n    \"source\": \"iana\"\n  },\n  \"application/tamp-apex-update-confirm\": {\n    \"source\": \"iana\"\n  },\n  \"application/tamp-community-update\": {\n    \"source\": \"iana\"\n  },\n  \"application/tamp-community-update-confirm\": {\n    \"source\": \"iana\"\n  },\n  \"application/tamp-error\": {\n    \"source\": \"iana\"\n  },\n  \"application/tamp-sequence-adjust\": {\n    \"source\": \"iana\"\n  },\n  \"application/tamp-sequence-adjust-confirm\": {\n    \"source\": \"iana\"\n  },\n  \"application/tamp-status-query\": {\n    \"source\": \"iana\"\n  },\n  \"application/tamp-status-response\": {\n    \"source\": \"iana\"\n  },\n  \"application/tamp-update\": {\n    \"source\": \"iana\"\n  },\n  \"application/tamp-update-confirm\": {\n    \"source\": \"iana\"\n  },\n  \"application/tar\": {\n    \"compressible\": true\n  },\n  \"application/tei+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"tei\",\"teicorpus\"]\n  },\n  \"application/thraud+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"tfi\"]\n  },\n  \"application/timestamp-query\": {\n    \"source\": \"iana\"\n  },\n  \"application/timestamp-reply\": {\n    \"source\": \"iana\"\n  },\n  \"application/timestamped-data\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"tsd\"]\n  },\n  \"application/tnauthlist\": {\n    \"source\": \"iana\"\n  },\n  \"application/trig\": {\n    \"source\": \"iana\"\n  },\n  \"application/ttml+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/tve-trigger\": {\n    \"source\": \"iana\"\n  },\n  \"application/ulpfec\": {\n    \"source\": \"iana\"\n  },\n  \"application/urc-grpsheet+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/urc-ressheet+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/urc-targetdesc+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/urc-uisocketdesc+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vcard+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vcard+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vemmi\": {\n    \"source\": \"iana\"\n  },\n  \"application/vividence.scriptfile\": {\n    \"source\": \"apache\"\n  },\n  \"application/vnd.1000minds.decision-model+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp-prose+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp-prose-pc3ch+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp-v2x-local-service-information\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.access-transfer-events+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.bsf+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.gmop+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.mcptt-affiliation-command+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.mcptt-floor-request+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.mcptt-info+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.mcptt-location-info+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.mcptt-mbms-usage-info+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.mcptt-signed+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.mid-call+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.pic-bw-large\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"plb\"]\n  },\n  \"application/vnd.3gpp.pic-bw-small\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"psb\"]\n  },\n  \"application/vnd.3gpp.pic-bw-var\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pvb\"]\n  },\n  \"application/vnd.3gpp.sms\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.sms+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.srvcc-ext+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.srvcc-info+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.state-and-event-info+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.ussd+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp2.bcmcsinfo+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp2.sms\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp2.tcap\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"tcap\"]\n  },\n  \"application/vnd.3lightssoftware.imagescal\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3m.post-it-notes\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pwn\"]\n  },\n  \"application/vnd.accpac.simply.aso\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"aso\"]\n  },\n  \"application/vnd.accpac.simply.imp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"imp\"]\n  },\n  \"application/vnd.acucobol\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"acu\"]\n  },\n  \"application/vnd.acucorp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"atc\",\"acutc\"]\n  },\n  \"application/vnd.adobe.air-application-installer-package+zip\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"air\"]\n  },\n  \"application/vnd.adobe.flash.movie\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.adobe.formscentral.fcdt\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fcdt\"]\n  },\n  \"application/vnd.adobe.fxp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fxp\",\"fxpl\"]\n  },\n  \"application/vnd.adobe.partial-upload\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.adobe.xdp+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xdp\"]\n  },\n  \"application/vnd.adobe.xfdf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xfdf\"]\n  },\n  \"application/vnd.aether.imp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ah-barcode\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ahead.space\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ahead\"]\n  },\n  \"application/vnd.airzip.filesecure.azf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"azf\"]\n  },\n  \"application/vnd.airzip.filesecure.azs\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"azs\"]\n  },\n  \"application/vnd.amadeus+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.amazon.ebook\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"azw\"]\n  },\n  \"application/vnd.amazon.mobi8-ebook\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.americandynamics.acc\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"acc\"]\n  },\n  \"application/vnd.amiga.ami\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ami\"]\n  },\n  \"application/vnd.amundsen.maze+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.android.package-archive\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"apk\"]\n  },\n  \"application/vnd.anki\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.anser-web-certificate-issue-initiation\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cii\"]\n  },\n  \"application/vnd.anser-web-funds-transfer-initiation\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"fti\"]\n  },\n  \"application/vnd.antix.game-component\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"atx\"]\n  },\n  \"application/vnd.apache.thrift.binary\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.apache.thrift.compact\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.apache.thrift.json\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.api+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.apothekende.reservation+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.apple.installer+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mpkg\"]\n  },\n  \"application/vnd.apple.mpegurl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"m3u8\"]\n  },\n  \"application/vnd.apple.pkpass\": {\n    \"compressible\": false,\n    \"extensions\": [\"pkpass\"]\n  },\n  \"application/vnd.arastra.swi\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.aristanetworks.swi\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"swi\"]\n  },\n  \"application/vnd.artsquare\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.astraea-software.iota\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"iota\"]\n  },\n  \"application/vnd.audiograph\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"aep\"]\n  },\n  \"application/vnd.autopackage\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.avalon+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.avistar+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.balsamiq.bmml+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.balsamiq.bmpr\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.bbf.usp.msg\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.bbf.usp.msg+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.bekitzur-stech+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.bint.med-content\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.biopax.rdf+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.blink-idb-value-wrapper\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.blueice.multipass\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mpm\"]\n  },\n  \"application/vnd.bluetooth.ep.oob\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.bluetooth.le.oob\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.bmi\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"bmi\"]\n  },\n  \"application/vnd.businessobjects\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rep\"]\n  },\n  \"application/vnd.cab-jscript\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.canon-cpdl\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.canon-lips\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.capasystems-pg+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.cendio.thinlinc.clientconf\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.century-systems.tcp_stream\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.chemdraw+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cdxml\"]\n  },\n  \"application/vnd.chess-pgn\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.chipnuts.karaoke-mmd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mmd\"]\n  },\n  \"application/vnd.cinderella\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cdy\"]\n  },\n  \"application/vnd.cirpack.isdn-ext\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.citationstyles.style+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.claymore\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cla\"]\n  },\n  \"application/vnd.cloanto.rp9\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rp9\"]\n  },\n  \"application/vnd.clonk.c4group\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"c4g\",\"c4d\",\"c4f\",\"c4p\",\"c4u\"]\n  },\n  \"application/vnd.cluetrust.cartomobile-config\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"c11amc\"]\n  },\n  \"application/vnd.cluetrust.cartomobile-config-pkg\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"c11amz\"]\n  },\n  \"application/vnd.coffeescript\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.collabio.xodocuments.document\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.collabio.xodocuments.document-template\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.collabio.xodocuments.presentation\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.collabio.xodocuments.presentation-template\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.collabio.xodocuments.spreadsheet\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.collabio.xodocuments.spreadsheet-template\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.collection+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.collection.doc+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.collection.next+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.comicbook+zip\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.comicbook-rar\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.commerce-battelle\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.commonspace\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"csp\"]\n  },\n  \"application/vnd.contact.cmsg\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cdbcmsg\"]\n  },\n  \"application/vnd.coreos.ignition+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.cosmocaller\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cmc\"]\n  },\n  \"application/vnd.crick.clicker\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"clkx\"]\n  },\n  \"application/vnd.crick.clicker.keyboard\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"clkk\"]\n  },\n  \"application/vnd.crick.clicker.palette\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"clkp\"]\n  },\n  \"application/vnd.crick.clicker.template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"clkt\"]\n  },\n  \"application/vnd.crick.clicker.wordbank\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"clkw\"]\n  },\n  \"application/vnd.criticaltools.wbs+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wbs\"]\n  },\n  \"application/vnd.ctc-posml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pml\"]\n  },\n  \"application/vnd.ctct.ws+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.cups-pdf\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.cups-postscript\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.cups-ppd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ppd\"]\n  },\n  \"application/vnd.cups-raster\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.cups-raw\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.curl\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.curl.car\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"car\"]\n  },\n  \"application/vnd.curl.pcurl\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"pcurl\"]\n  },\n  \"application/vnd.cyan.dean.root+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.cybank\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.d2l.coursepackage1p0+zip\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dart\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"dart\"]\n  },\n  \"application/vnd.data-vision.rdz\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rdz\"]\n  },\n  \"application/vnd.datapackage+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.dataresource+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.debian.binary-package\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dece.data\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uvf\",\"uvvf\",\"uvd\",\"uvvd\"]\n  },\n  \"application/vnd.dece.ttml+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uvt\",\"uvvt\"]\n  },\n  \"application/vnd.dece.unspecified\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uvx\",\"uvvx\"]\n  },\n  \"application/vnd.dece.zip\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uvz\",\"uvvz\"]\n  },\n  \"application/vnd.denovo.fcselayout-link\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fe_launch\"]\n  },\n  \"application/vnd.desmume-movie\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.desmume.movie\": {\n    \"source\": \"apache\"\n  },\n  \"application/vnd.dir-bi.plate-dl-nosuffix\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dm.delegation+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dna\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dna\"]\n  },\n  \"application/vnd.document+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.dolby.mlp\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"mlp\"]\n  },\n  \"application/vnd.dolby.mobile.1\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dolby.mobile.2\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.doremir.scorecloud-binary-document\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dpgraph\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dpg\"]\n  },\n  \"application/vnd.dreamfactory\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dfac\"]\n  },\n  \"application/vnd.drive+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ds-keypoint\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"kpxx\"]\n  },\n  \"application/vnd.dtg.local\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dtg.local.flash\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dtg.local.html\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.ait\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ait\"]\n  },\n  \"application/vnd.dvb.dvbj\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.esgcontainer\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.ipdcdftnotifaccess\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.ipdcesgaccess\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.ipdcesgaccess2\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.ipdcesgpdd\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.ipdcroaming\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.iptv.alfec-base\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.iptv.alfec-enhancement\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.notif-aggregate-root+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.notif-container+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.notif-generic+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.notif-ia-msglist+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.notif-ia-registration-request+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.notif-ia-registration-response+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.notif-init+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.pfr\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.service\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"svc\"]\n  },\n  \"application/vnd.dxr\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dynageo\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"geo\"]\n  },\n  \"application/vnd.dzr\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.easykaraoke.cdgdownload\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ecdis-update\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ecip.rlp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ecowin.chart\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mag\"]\n  },\n  \"application/vnd.ecowin.filerequest\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ecowin.fileupdate\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ecowin.series\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ecowin.seriesrequest\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ecowin.seriesupdate\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.efi.img\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.efi.iso\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.emclient.accessrequest+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.enliven\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"nml\"]\n  },\n  \"application/vnd.enphase.envoy\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.eprints.data+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.epson.esf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"esf\"]\n  },\n  \"application/vnd.epson.msf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"msf\"]\n  },\n  \"application/vnd.epson.quickanime\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"qam\"]\n  },\n  \"application/vnd.epson.salt\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"slt\"]\n  },\n  \"application/vnd.epson.ssf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ssf\"]\n  },\n  \"application/vnd.ericsson.quickcall\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.espass-espass+zip\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.eszigno3+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"es3\",\"et3\"]\n  },\n  \"application/vnd.etsi.aoc+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.etsi.asic-e+zip\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.etsi.asic-s+zip\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.etsi.cug+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.etsi.iptvcommand+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.etsi.iptvdiscovery+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.etsi.iptvprofile+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.etsi.iptvsad-bc+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.etsi.iptvsad-cod+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.etsi.iptvsad-npvr+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.etsi.iptvservice+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.etsi.iptvsync+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.etsi.iptvueprofile+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.etsi.mcid+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.etsi.mheg5\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.etsi.overload-control-policy-dataset+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.etsi.pstn+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.etsi.sci+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.etsi.simservs+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.etsi.timestamp-token\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.etsi.tsl+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.etsi.tsl.der\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.eudora.data\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.evolv.ecig.profile\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.evolv.ecig.settings\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.evolv.ecig.theme\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ezpix-album\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ez2\"]\n  },\n  \"application/vnd.ezpix-package\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ez3\"]\n  },\n  \"application/vnd.f-secure.mobile\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.fastcopy-disk-image\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.fdf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fdf\"]\n  },\n  \"application/vnd.fdsn.mseed\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mseed\"]\n  },\n  \"application/vnd.fdsn.seed\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"seed\",\"dataless\"]\n  },\n  \"application/vnd.ffsns\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.filmit.zfc\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.fints\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.firemonkeys.cloudcell\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.flographit\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gph\"]\n  },\n  \"application/vnd.fluxtime.clip\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ftc\"]\n  },\n  \"application/vnd.font-fontforge-sfd\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.framemaker\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fm\",\"frame\",\"maker\",\"book\"]\n  },\n  \"application/vnd.frogans.fnc\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fnc\"]\n  },\n  \"application/vnd.frogans.ltf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ltf\"]\n  },\n  \"application/vnd.fsc.weblaunch\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fsc\"]\n  },\n  \"application/vnd.fujitsu.oasys\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"oas\"]\n  },\n  \"application/vnd.fujitsu.oasys2\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"oa2\"]\n  },\n  \"application/vnd.fujitsu.oasys3\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"oa3\"]\n  },\n  \"application/vnd.fujitsu.oasysgp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fg5\"]\n  },\n  \"application/vnd.fujitsu.oasysprs\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"bh2\"]\n  },\n  \"application/vnd.fujixerox.art-ex\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.fujixerox.art4\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.fujixerox.ddd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ddd\"]\n  },\n  \"application/vnd.fujixerox.docuworks\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xdw\"]\n  },\n  \"application/vnd.fujixerox.docuworks.binder\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xbd\"]\n  },\n  \"application/vnd.fujixerox.docuworks.container\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.fujixerox.hbpl\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.fut-misnet\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.fuzzysheet\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fzs\"]\n  },\n  \"application/vnd.genomatix.tuxedo\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"txd\"]\n  },\n  \"application/vnd.geo+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.geocube+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.geogebra.file\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ggb\"]\n  },\n  \"application/vnd.geogebra.tool\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ggt\"]\n  },\n  \"application/vnd.geometry-explorer\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gex\",\"gre\"]\n  },\n  \"application/vnd.geonext\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gxt\"]\n  },\n  \"application/vnd.geoplan\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"g2w\"]\n  },\n  \"application/vnd.geospace\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"g3w\"]\n  },\n  \"application/vnd.gerber\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.globalplatform.card-content-mgt\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.globalplatform.card-content-mgt-response\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.gmx\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gmx\"]\n  },\n  \"application/vnd.google-apps.document\": {\n    \"compressible\": false,\n    \"extensions\": [\"gdoc\"]\n  },\n  \"application/vnd.google-apps.presentation\": {\n    \"compressible\": false,\n    \"extensions\": [\"gslides\"]\n  },\n  \"application/vnd.google-apps.spreadsheet\": {\n    \"compressible\": false,\n    \"extensions\": [\"gsheet\"]\n  },\n  \"application/vnd.google-earth.kml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"kml\"]\n  },\n  \"application/vnd.google-earth.kmz\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"kmz\"]\n  },\n  \"application/vnd.gov.sk.e-form+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.gov.sk.e-form+zip\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.gov.sk.xmldatacontainer+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.grafeq\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gqf\",\"gqs\"]\n  },\n  \"application/vnd.gridmp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.groove-account\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gac\"]\n  },\n  \"application/vnd.groove-help\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ghf\"]\n  },\n  \"application/vnd.groove-identity-message\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gim\"]\n  },\n  \"application/vnd.groove-injector\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"grv\"]\n  },\n  \"application/vnd.groove-tool-message\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gtm\"]\n  },\n  \"application/vnd.groove-tool-template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"tpl\"]\n  },\n  \"application/vnd.groove-vcard\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"vcg\"]\n  },\n  \"application/vnd.hal+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.hal+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"hal\"]\n  },\n  \"application/vnd.handheld-entertainment+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"zmm\"]\n  },\n  \"application/vnd.hbci\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"hbci\"]\n  },\n  \"application/vnd.hc+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.hcl-bireports\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.hdt\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.heroku+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.hhe.lesson-player\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"les\"]\n  },\n  \"application/vnd.hp-hpgl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"hpgl\"]\n  },\n  \"application/vnd.hp-hpid\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"hpid\"]\n  },\n  \"application/vnd.hp-hps\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"hps\"]\n  },\n  \"application/vnd.hp-jlyt\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jlt\"]\n  },\n  \"application/vnd.hp-pcl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pcl\"]\n  },\n  \"application/vnd.hp-pclxl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pclxl\"]\n  },\n  \"application/vnd.httphone\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.hydrostatix.sof-data\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sfd-hdstx\"]\n  },\n  \"application/vnd.hyper-item+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.hyperdrive+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.hzn-3d-crossword\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ibm.afplinedata\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ibm.electronic-media\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ibm.minipay\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mpy\"]\n  },\n  \"application/vnd.ibm.modcap\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"afp\",\"listafp\",\"list3820\"]\n  },\n  \"application/vnd.ibm.rights-management\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"irm\"]\n  },\n  \"application/vnd.ibm.secure-container\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sc\"]\n  },\n  \"application/vnd.iccprofile\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"icc\",\"icm\"]\n  },\n  \"application/vnd.ieee.1905\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.igloader\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"igl\"]\n  },\n  \"application/vnd.imagemeter.folder+zip\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.imagemeter.image+zip\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.immervision-ivp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ivp\"]\n  },\n  \"application/vnd.immervision-ivu\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ivu\"]\n  },\n  \"application/vnd.ims.imsccv1p1\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ims.imsccv1p2\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ims.imsccv1p3\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ims.lis.v2.result+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ims.lti.v2.toolconsumerprofile+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ims.lti.v2.toolproxy+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ims.lti.v2.toolproxy.id+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ims.lti.v2.toolsettings+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ims.lti.v2.toolsettings.simple+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.informedcontrol.rms+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.informix-visionary\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.infotech.project\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.infotech.project+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.innopath.wamp.notification\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.insors.igm\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"igm\"]\n  },\n  \"application/vnd.intercon.formnet\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xpw\",\"xpx\"]\n  },\n  \"application/vnd.intergeo\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"i2g\"]\n  },\n  \"application/vnd.intertrust.digibox\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.intertrust.nncp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.intu.qbo\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"qbo\"]\n  },\n  \"application/vnd.intu.qfx\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"qfx\"]\n  },\n  \"application/vnd.iptc.g2.catalogitem+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.iptc.g2.conceptitem+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.iptc.g2.knowledgeitem+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.iptc.g2.newsitem+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.iptc.g2.newsmessage+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.iptc.g2.packageitem+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.iptc.g2.planningitem+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ipunplugged.rcprofile\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rcprofile\"]\n  },\n  \"application/vnd.irepository.package+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"irp\"]\n  },\n  \"application/vnd.is-xpr\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xpr\"]\n  },\n  \"application/vnd.isac.fcs\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fcs\"]\n  },\n  \"application/vnd.jam\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jam\"]\n  },\n  \"application/vnd.japannet-directory-service\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.japannet-jpnstore-wakeup\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.japannet-payment-wakeup\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.japannet-registration\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.japannet-registration-wakeup\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.japannet-setstore-wakeup\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.japannet-verification\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.japannet-verification-wakeup\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.jcp.javame.midlet-rms\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rms\"]\n  },\n  \"application/vnd.jisp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jisp\"]\n  },\n  \"application/vnd.joost.joda-archive\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"joda\"]\n  },\n  \"application/vnd.jsk.isdn-ngn\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.kahootz\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ktz\",\"ktr\"]\n  },\n  \"application/vnd.kde.karbon\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"karbon\"]\n  },\n  \"application/vnd.kde.kchart\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"chrt\"]\n  },\n  \"application/vnd.kde.kformula\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"kfo\"]\n  },\n  \"application/vnd.kde.kivio\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"flw\"]\n  },\n  \"application/vnd.kde.kontour\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"kon\"]\n  },\n  \"application/vnd.kde.kpresenter\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"kpr\",\"kpt\"]\n  },\n  \"application/vnd.kde.kspread\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ksp\"]\n  },\n  \"application/vnd.kde.kword\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"kwd\",\"kwt\"]\n  },\n  \"application/vnd.kenameaapp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"htke\"]\n  },\n  \"application/vnd.kidspiration\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"kia\"]\n  },\n  \"application/vnd.kinar\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"kne\",\"knp\"]\n  },\n  \"application/vnd.koan\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"skp\",\"skd\",\"skt\",\"skm\"]\n  },\n  \"application/vnd.kodak-descriptor\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sse\"]\n  },\n  \"application/vnd.las.las+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.las.las+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"lasxml\"]\n  },\n  \"application/vnd.liberty-request+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.llamagraphics.life-balance.desktop\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"lbd\"]\n  },\n  \"application/vnd.llamagraphics.life-balance.exchange+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"lbe\"]\n  },\n  \"application/vnd.lotus-1-2-3\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"123\"]\n  },\n  \"application/vnd.lotus-approach\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"apr\"]\n  },\n  \"application/vnd.lotus-freelance\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pre\"]\n  },\n  \"application/vnd.lotus-notes\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"nsf\"]\n  },\n  \"application/vnd.lotus-organizer\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"org\"]\n  },\n  \"application/vnd.lotus-screencam\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"scm\"]\n  },\n  \"application/vnd.lotus-wordpro\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"lwp\"]\n  },\n  \"application/vnd.macports.portpkg\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"portpkg\"]\n  },\n  \"application/vnd.mapbox-vector-tile\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.marlin.drm.actiontoken+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.marlin.drm.conftoken+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.marlin.drm.license+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.marlin.drm.mdcf\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.mason+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.maxmind.maxmind-db\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.mcd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mcd\"]\n  },\n  \"application/vnd.medcalcdata\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mc1\"]\n  },\n  \"application/vnd.mediastation.cdkey\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cdkey\"]\n  },\n  \"application/vnd.meridian-slingshot\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.mfer\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mwf\"]\n  },\n  \"application/vnd.mfmp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mfm\"]\n  },\n  \"application/vnd.micro+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.micrografx.flo\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"flo\"]\n  },\n  \"application/vnd.micrografx.igx\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"igx\"]\n  },\n  \"application/vnd.microsoft.portable-executable\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.microsoft.windows.thumbnail-cache\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.miele+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.mif\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mif\"]\n  },\n  \"application/vnd.minisoft-hp3000-save\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.mitsubishi.misty-guard.trustweb\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.mobius.daf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"daf\"]\n  },\n  \"application/vnd.mobius.dis\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dis\"]\n  },\n  \"application/vnd.mobius.mbk\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mbk\"]\n  },\n  \"application/vnd.mobius.mqy\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mqy\"]\n  },\n  \"application/vnd.mobius.msl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"msl\"]\n  },\n  \"application/vnd.mobius.plc\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"plc\"]\n  },\n  \"application/vnd.mobius.txf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"txf\"]\n  },\n  \"application/vnd.mophun.application\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mpn\"]\n  },\n  \"application/vnd.mophun.certificate\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mpc\"]\n  },\n  \"application/vnd.motorola.flexsuite\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.motorola.flexsuite.adsi\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.motorola.flexsuite.fis\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.motorola.flexsuite.gotap\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.motorola.flexsuite.kmr\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.motorola.flexsuite.ttc\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.motorola.flexsuite.wem\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.motorola.iprm\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.mozilla.xul+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xul\"]\n  },\n  \"application/vnd.ms-3mfdocument\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-artgalry\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cil\"]\n  },\n  \"application/vnd.ms-asf\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-cab-compressed\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cab\"]\n  },\n  \"application/vnd.ms-color.iccprofile\": {\n    \"source\": \"apache\"\n  },\n  \"application/vnd.ms-excel\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"xls\",\"xlm\",\"xla\",\"xlc\",\"xlt\",\"xlw\"]\n  },\n  \"application/vnd.ms-excel.addin.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xlam\"]\n  },\n  \"application/vnd.ms-excel.sheet.binary.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xlsb\"]\n  },\n  \"application/vnd.ms-excel.sheet.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xlsm\"]\n  },\n  \"application/vnd.ms-excel.template.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xltm\"]\n  },\n  \"application/vnd.ms-fontobject\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"eot\"]\n  },\n  \"application/vnd.ms-htmlhelp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"chm\"]\n  },\n  \"application/vnd.ms-ims\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ims\"]\n  },\n  \"application/vnd.ms-lrm\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"lrm\"]\n  },\n  \"application/vnd.ms-office.activex+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-officetheme\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"thmx\"]\n  },\n  \"application/vnd.ms-opentype\": {\n    \"source\": \"apache\",\n    \"compressible\": true\n  },\n  \"application/vnd.ms-outlook\": {\n    \"compressible\": false,\n    \"extensions\": [\"msg\"]\n  },\n  \"application/vnd.ms-package.obfuscated-opentype\": {\n    \"source\": \"apache\"\n  },\n  \"application/vnd.ms-pki.seccat\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cat\"]\n  },\n  \"application/vnd.ms-pki.stl\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"stl\"]\n  },\n  \"application/vnd.ms-playready.initiator+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-powerpoint\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"ppt\",\"pps\",\"pot\"]\n  },\n  \"application/vnd.ms-powerpoint.addin.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ppam\"]\n  },\n  \"application/vnd.ms-powerpoint.presentation.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pptm\"]\n  },\n  \"application/vnd.ms-powerpoint.slide.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sldm\"]\n  },\n  \"application/vnd.ms-powerpoint.slideshow.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ppsm\"]\n  },\n  \"application/vnd.ms-powerpoint.template.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"potm\"]\n  },\n  \"application/vnd.ms-printdevicecapabilities+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-printing.printticket+xml\": {\n    \"source\": \"apache\"\n  },\n  \"application/vnd.ms-printschematicket+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-project\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mpp\",\"mpt\"]\n  },\n  \"application/vnd.ms-tnef\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-windows.devicepairing\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-windows.nwprinting.oob\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-windows.printerpairing\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-windows.wsd.oob\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-wmdrm.lic-chlg-req\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-wmdrm.lic-resp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-wmdrm.meter-chlg-req\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-wmdrm.meter-resp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-word.document.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"docm\"]\n  },\n  \"application/vnd.ms-word.template.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dotm\"]\n  },\n  \"application/vnd.ms-works\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wps\",\"wks\",\"wcm\",\"wdb\"]\n  },\n  \"application/vnd.ms-wpl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wpl\"]\n  },\n  \"application/vnd.ms-xpsdocument\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"xps\"]\n  },\n  \"application/vnd.msa-disk-image\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.mseq\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mseq\"]\n  },\n  \"application/vnd.msign\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.multiad.creator\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.multiad.creator.cif\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.music-niff\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.musician\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mus\"]\n  },\n  \"application/vnd.muvee.style\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"msty\"]\n  },\n  \"application/vnd.mynfc\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"taglet\"]\n  },\n  \"application/vnd.ncd.control\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ncd.reference\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nearst.inv+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.nervana\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.netfpx\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.neurolanguage.nlu\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"nlu\"]\n  },\n  \"application/vnd.nintendo.nitro.rom\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nintendo.snes.rom\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nitf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ntf\",\"nitf\"]\n  },\n  \"application/vnd.noblenet-directory\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"nnd\"]\n  },\n  \"application/vnd.noblenet-sealer\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"nns\"]\n  },\n  \"application/vnd.noblenet-web\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"nnw\"]\n  },\n  \"application/vnd.nokia.catalogs\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nokia.conml+wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nokia.conml+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nokia.iptv.config+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nokia.isds-radio-presets\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nokia.landmark+wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nokia.landmark+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nokia.landmarkcollection+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nokia.n-gage.ac+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nokia.n-gage.data\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ngdat\"]\n  },\n  \"application/vnd.nokia.n-gage.symbian.install\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"n-gage\"]\n  },\n  \"application/vnd.nokia.ncd\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nokia.pcd+wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nokia.pcd+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nokia.radio-preset\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rpst\"]\n  },\n  \"application/vnd.nokia.radio-presets\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rpss\"]\n  },\n  \"application/vnd.novadigm.edm\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"edm\"]\n  },\n  \"application/vnd.novadigm.edx\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"edx\"]\n  },\n  \"application/vnd.novadigm.ext\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ext\"]\n  },\n  \"application/vnd.ntt-local.content-share\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ntt-local.file-transfer\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ntt-local.ogw_remote-access\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ntt-local.sip-ta_remote\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ntt-local.sip-ta_tcp_stream\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oasis.opendocument.chart\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"odc\"]\n  },\n  \"application/vnd.oasis.opendocument.chart-template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"otc\"]\n  },\n  \"application/vnd.oasis.opendocument.database\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"odb\"]\n  },\n  \"application/vnd.oasis.opendocument.formula\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"odf\"]\n  },\n  \"application/vnd.oasis.opendocument.formula-template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"odft\"]\n  },\n  \"application/vnd.oasis.opendocument.graphics\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"odg\"]\n  },\n  \"application/vnd.oasis.opendocument.graphics-template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"otg\"]\n  },\n  \"application/vnd.oasis.opendocument.image\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"odi\"]\n  },\n  \"application/vnd.oasis.opendocument.image-template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"oti\"]\n  },\n  \"application/vnd.oasis.opendocument.presentation\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"odp\"]\n  },\n  \"application/vnd.oasis.opendocument.presentation-template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"otp\"]\n  },\n  \"application/vnd.oasis.opendocument.spreadsheet\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"ods\"]\n  },\n  \"application/vnd.oasis.opendocument.spreadsheet-template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ots\"]\n  },\n  \"application/vnd.oasis.opendocument.text\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"odt\"]\n  },\n  \"application/vnd.oasis.opendocument.text-master\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"odm\"]\n  },\n  \"application/vnd.oasis.opendocument.text-template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ott\"]\n  },\n  \"application/vnd.oasis.opendocument.text-web\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"oth\"]\n  },\n  \"application/vnd.obn\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ocf+cbor\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oftn.l10n+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oipf.contentaccessdownload+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oipf.contentaccessstreaming+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oipf.cspg-hexbinary\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oipf.dae.svg+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oipf.dae.xhtml+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oipf.mippvcontrolmessage+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oipf.pae.gem\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oipf.spdiscovery+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oipf.spdlist+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oipf.ueprofile+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oipf.userprofile+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.olpc-sugar\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xo\"]\n  },\n  \"application/vnd.oma-scws-config\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma-scws-http-request\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma-scws-http-response\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.bcast.associated-procedure-parameter+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.bcast.drm-trigger+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.bcast.imd+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.bcast.ltkm\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.bcast.notification+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.bcast.provisioningtrigger\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.bcast.sgboot\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.bcast.sgdd+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.bcast.sgdu\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.bcast.simple-symbol-container\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.bcast.smartcard-trigger+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.bcast.sprov+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.bcast.stkm\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.cab-address-book+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.cab-feature-handler+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.cab-pcc+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.cab-subs-invite+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.cab-user-prefs+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.dcd\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.dcdc\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.dd2+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dd2\"]\n  },\n  \"application/vnd.oma.drm.risd+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.group-usage-list+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.lwm2m+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.lwm2m+tlv\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.pal+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.poc.detailed-progress-report+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.poc.final-report+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.poc.groups+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.poc.invocation-descriptor+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.poc.optimized-progress-report+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.push\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.scidm.messages+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.xcap-directory+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.omads-email+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.omads-file+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.omads-folder+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.omaloc-supl-init\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.onepager\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.onepagertamp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.onepagertamx\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.onepagertat\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.onepagertatp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.onepagertatx\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openblox.game+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openblox.game-binary\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openeye.oeb\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openofficeorg.extension\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"oxt\"]\n  },\n  \"application/vnd.openstreetmap.data+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.custom-properties+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.customxmlproperties+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.drawing+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.drawingml.chart+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.extended-properties+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.comments+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.presentation\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"pptx\"]\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.presprops+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.slide\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sldx\"]\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.slide+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.slideshow\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ppsx\"]\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.tags+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"potx\"]\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.template.main+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"xlsx\"]\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xltx\"]\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.theme+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.themeoverride+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.vmldrawing\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"docx\"]\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dotx\"]\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-package.core-properties+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-package.relationships+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oracle.resource+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.orange.indata\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.osa.netdeploy\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.osgeo.mapguide.package\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mgp\"]\n  },\n  \"application/vnd.osgi.bundle\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.osgi.dp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dp\"]\n  },\n  \"application/vnd.osgi.subsystem\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"esa\"]\n  },\n  \"application/vnd.otps.ct-kip+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oxli.countgraph\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.pagerduty+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.palm\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pdb\",\"pqa\",\"oprc\"]\n  },\n  \"application/vnd.panoply\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.paos+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.paos.xml\": {\n    \"source\": \"apache\"\n  },\n  \"application/vnd.patentdive\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.pawaafile\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"paw\"]\n  },\n  \"application/vnd.pcos\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.pg.format\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"str\"]\n  },\n  \"application/vnd.pg.osasli\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ei6\"]\n  },\n  \"application/vnd.piaccess.application-licence\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.picsel\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"efif\"]\n  },\n  \"application/vnd.pmi.widget\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wg\"]\n  },\n  \"application/vnd.poc.group-advertisement+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.pocketlearn\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"plf\"]\n  },\n  \"application/vnd.powerbuilder6\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pbd\"]\n  },\n  \"application/vnd.powerbuilder6-s\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.powerbuilder7\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.powerbuilder7-s\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.powerbuilder75\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.powerbuilder75-s\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.preminet\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.previewsystems.box\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"box\"]\n  },\n  \"application/vnd.proteus.magazine\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mgz\"]\n  },\n  \"application/vnd.publishare-delta-tree\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"qps\"]\n  },\n  \"application/vnd.pvi.ptid1\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ptid\"]\n  },\n  \"application/vnd.pwg-multiplexed\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.pwg-xhtml-print+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.qualcomm.brew-app-res\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.quarantainenet\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.quark.quarkxpress\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"qxd\",\"qxt\",\"qwd\",\"qwt\",\"qxl\",\"qxb\"]\n  },\n  \"application/vnd.quobject-quoxdocument\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.radisys.moml+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.radisys.msml+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.radisys.msml-audit+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.radisys.msml-audit-conf+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.radisys.msml-audit-conn+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.radisys.msml-audit-dialog+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.radisys.msml-audit-stream+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.radisys.msml-conf+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.radisys.msml-dialog+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.radisys.msml-dialog-base+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.radisys.msml-dialog-fax-detect+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.radisys.msml-dialog-fax-sendrecv+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.radisys.msml-dialog-group+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.radisys.msml-dialog-speech+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.radisys.msml-dialog-transform+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.rainstor.data\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.rapid\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.rar\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.realvnc.bed\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"bed\"]\n  },\n  \"application/vnd.recordare.musicxml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mxl\"]\n  },\n  \"application/vnd.recordare.musicxml+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"musicxml\"]\n  },\n  \"application/vnd.renlearn.rlprint\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.restful+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.rig.cryptonote\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cryptonote\"]\n  },\n  \"application/vnd.rim.cod\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cod\"]\n  },\n  \"application/vnd.rn-realmedia\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"rm\"]\n  },\n  \"application/vnd.rn-realmedia-vbr\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"rmvb\"]\n  },\n  \"application/vnd.route66.link66+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"link66\"]\n  },\n  \"application/vnd.rs-274x\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ruckus.download\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.s3sms\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sailingtracker.track\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"st\"]\n  },\n  \"application/vnd.sbm.cid\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sbm.mid2\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.scribus\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealed.3df\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealed.csf\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealed.doc\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealed.eml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealed.mht\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealed.net\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealed.ppt\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealed.tiff\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealed.xls\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealedmedia.softseal.html\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealedmedia.softseal.pdf\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.seemail\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"see\"]\n  },\n  \"application/vnd.sema\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sema\"]\n  },\n  \"application/vnd.semd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"semd\"]\n  },\n  \"application/vnd.semf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"semf\"]\n  },\n  \"application/vnd.shana.informed.formdata\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ifm\"]\n  },\n  \"application/vnd.shana.informed.formtemplate\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"itp\"]\n  },\n  \"application/vnd.shana.informed.interchange\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"iif\"]\n  },\n  \"application/vnd.shana.informed.package\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ipk\"]\n  },\n  \"application/vnd.sigrok.session\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.simtech-mindmapper\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"twd\",\"twds\"]\n  },\n  \"application/vnd.siren+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.smaf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mmf\"]\n  },\n  \"application/vnd.smart.notebook\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.smart.teacher\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"teacher\"]\n  },\n  \"application/vnd.software602.filler.form+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.software602.filler.form-xml-zip\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.solent.sdkm+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sdkm\",\"sdkd\"]\n  },\n  \"application/vnd.spotfire.dxp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dxp\"]\n  },\n  \"application/vnd.spotfire.sfs\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sfs\"]\n  },\n  \"application/vnd.sqlite3\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sss-cod\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sss-dtf\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sss-ntf\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.stardivision.calc\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sdc\"]\n  },\n  \"application/vnd.stardivision.draw\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sda\"]\n  },\n  \"application/vnd.stardivision.impress\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sdd\"]\n  },\n  \"application/vnd.stardivision.math\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"smf\"]\n  },\n  \"application/vnd.stardivision.writer\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sdw\",\"vor\"]\n  },\n  \"application/vnd.stardivision.writer-global\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sgl\"]\n  },\n  \"application/vnd.stepmania.package\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"smzip\"]\n  },\n  \"application/vnd.stepmania.stepchart\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sm\"]\n  },\n  \"application/vnd.street-stream\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sun.wadl+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"wadl\"]\n  },\n  \"application/vnd.sun.xml.calc\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sxc\"]\n  },\n  \"application/vnd.sun.xml.calc.template\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"stc\"]\n  },\n  \"application/vnd.sun.xml.draw\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sxd\"]\n  },\n  \"application/vnd.sun.xml.draw.template\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"std\"]\n  },\n  \"application/vnd.sun.xml.impress\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sxi\"]\n  },\n  \"application/vnd.sun.xml.impress.template\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sti\"]\n  },\n  \"application/vnd.sun.xml.math\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sxm\"]\n  },\n  \"application/vnd.sun.xml.writer\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sxw\"]\n  },\n  \"application/vnd.sun.xml.writer.global\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sxg\"]\n  },\n  \"application/vnd.sun.xml.writer.template\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"stw\"]\n  },\n  \"application/vnd.sus-calendar\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sus\",\"susp\"]\n  },\n  \"application/vnd.svd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"svd\"]\n  },\n  \"application/vnd.swiftview-ics\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.symbian.install\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sis\",\"sisx\"]\n  },\n  \"application/vnd.syncml+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xsm\"]\n  },\n  \"application/vnd.syncml.dm+wbxml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"bdm\"]\n  },\n  \"application/vnd.syncml.dm+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xdm\"]\n  },\n  \"application/vnd.syncml.dm.notification\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.syncml.dmddf+wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.syncml.dmddf+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.syncml.dmtnds+wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.syncml.dmtnds+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.syncml.ds.notification\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.tableschema+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.tao.intent-module-archive\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"tao\"]\n  },\n  \"application/vnd.tcpdump.pcap\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pcap\",\"cap\",\"dmp\"]\n  },\n  \"application/vnd.tmd.mediaflex.api+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.tml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.tmobile-livetv\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"tmo\"]\n  },\n  \"application/vnd.tri.onesource\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.trid.tpt\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"tpt\"]\n  },\n  \"application/vnd.triscape.mxs\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mxs\"]\n  },\n  \"application/vnd.trueapp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"tra\"]\n  },\n  \"application/vnd.truedoc\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ubisoft.webplayer\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ufdl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ufd\",\"ufdl\"]\n  },\n  \"application/vnd.uiq.theme\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"utz\"]\n  },\n  \"application/vnd.umajin\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"umj\"]\n  },\n  \"application/vnd.unity\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"unityweb\"]\n  },\n  \"application/vnd.uoml+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uoml\"]\n  },\n  \"application/vnd.uplanet.alert\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.alert-wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.bearer-choice\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.bearer-choice-wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.cacheop\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.cacheop-wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.channel\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.channel-wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.list\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.list-wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.listcmd\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.listcmd-wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.signal\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uri-map\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.valve.source.material\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.vcx\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"vcx\"]\n  },\n  \"application/vnd.vd-study\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.vectorworks\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.vel+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.verimatrix.vcas\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.vidsoft.vidconference\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.visio\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"vsd\",\"vst\",\"vss\",\"vsw\"]\n  },\n  \"application/vnd.visionary\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"vis\"]\n  },\n  \"application/vnd.vividence.scriptfile\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.vsf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"vsf\"]\n  },\n  \"application/vnd.wap.sic\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wap.slc\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wap.wbxml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wbxml\"]\n  },\n  \"application/vnd.wap.wmlc\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wmlc\"]\n  },\n  \"application/vnd.wap.wmlscriptc\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wmlsc\"]\n  },\n  \"application/vnd.webturbo\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wtb\"]\n  },\n  \"application/vnd.wfa.p2p\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wfa.wsc\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.windows.devicepairing\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wmc\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wmf.bootstrap\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wolfram.mathematica\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wolfram.mathematica.package\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wolfram.player\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"nbp\"]\n  },\n  \"application/vnd.wordperfect\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wpd\"]\n  },\n  \"application/vnd.wqd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wqd\"]\n  },\n  \"application/vnd.wrq-hp3000-labelled\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wt.stf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"stf\"]\n  },\n  \"application/vnd.wv.csp+wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wv.csp+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wv.ssp+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.xacml+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.xara\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xar\"]\n  },\n  \"application/vnd.xfdl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xfdl\"]\n  },\n  \"application/vnd.xfdl.webform\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.xmi+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.xmpie.cpkg\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.xmpie.dpkg\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.xmpie.plan\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.xmpie.ppkg\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.xmpie.xlim\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.yamaha.hv-dic\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"hvd\"]\n  },\n  \"application/vnd.yamaha.hv-script\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"hvs\"]\n  },\n  \"application/vnd.yamaha.hv-voice\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"hvp\"]\n  },\n  \"application/vnd.yamaha.openscoreformat\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"osf\"]\n  },\n  \"application/vnd.yamaha.openscoreformat.osfpvg+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"osfpvg\"]\n  },\n  \"application/vnd.yamaha.remote-setup\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.yamaha.smaf-audio\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"saf\"]\n  },\n  \"application/vnd.yamaha.smaf-phrase\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"spf\"]\n  },\n  \"application/vnd.yamaha.through-ngn\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.yamaha.tunnel-udpencap\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.yaoweme\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.yellowriver-custom-menu\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cmp\"]\n  },\n  \"application/vnd.youtube.yt\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.zul\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"zir\",\"zirz\"]\n  },\n  \"application/vnd.zzazz.deck+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"zaz\"]\n  },\n  \"application/voicexml+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"vxml\"]\n  },\n  \"application/voucher-cms+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vq-rtcpxr\": {\n    \"source\": \"iana\"\n  },\n  \"application/wasm\": {\n    \"compressible\": true,\n    \"extensions\": [\"wasm\"]\n  },\n  \"application/watcherinfo+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/webpush-options+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/whoispp-query\": {\n    \"source\": \"iana\"\n  },\n  \"application/whoispp-response\": {\n    \"source\": \"iana\"\n  },\n  \"application/widget\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wgt\"]\n  },\n  \"application/winhlp\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"hlp\"]\n  },\n  \"application/wita\": {\n    \"source\": \"iana\"\n  },\n  \"application/wordperfect5.1\": {\n    \"source\": \"iana\"\n  },\n  \"application/wsdl+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wsdl\"]\n  },\n  \"application/wspolicy+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wspolicy\"]\n  },\n  \"application/x-7z-compressed\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"7z\"]\n  },\n  \"application/x-abiword\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"abw\"]\n  },\n  \"application/x-ace-compressed\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"ace\"]\n  },\n  \"application/x-amf\": {\n    \"source\": \"apache\"\n  },\n  \"application/x-apple-diskimage\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"dmg\"]\n  },\n  \"application/x-arj\": {\n    \"compressible\": false,\n    \"extensions\": [\"arj\"]\n  },\n  \"application/x-authorware-bin\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"aab\",\"x32\",\"u32\",\"vox\"]\n  },\n  \"application/x-authorware-map\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"aam\"]\n  },\n  \"application/x-authorware-seg\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"aas\"]\n  },\n  \"application/x-bcpio\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"bcpio\"]\n  },\n  \"application/x-bdoc\": {\n    \"compressible\": false,\n    \"extensions\": [\"bdoc\"]\n  },\n  \"application/x-bittorrent\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"torrent\"]\n  },\n  \"application/x-blorb\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"blb\",\"blorb\"]\n  },\n  \"application/x-bzip\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"bz\"]\n  },\n  \"application/x-bzip2\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"bz2\",\"boz\"]\n  },\n  \"application/x-cbr\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cbr\",\"cba\",\"cbt\",\"cbz\",\"cb7\"]\n  },\n  \"application/x-cdlink\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"vcd\"]\n  },\n  \"application/x-cfs-compressed\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cfs\"]\n  },\n  \"application/x-chat\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"chat\"]\n  },\n  \"application/x-chess-pgn\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"pgn\"]\n  },\n  \"application/x-chrome-extension\": {\n    \"extensions\": [\"crx\"]\n  },\n  \"application/x-cocoa\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"cco\"]\n  },\n  \"application/x-compress\": {\n    \"source\": \"apache\"\n  },\n  \"application/x-conference\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"nsc\"]\n  },\n  \"application/x-cpio\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cpio\"]\n  },\n  \"application/x-csh\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"csh\"]\n  },\n  \"application/x-deb\": {\n    \"compressible\": false\n  },\n  \"application/x-debian-package\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"deb\",\"udeb\"]\n  },\n  \"application/x-dgc-compressed\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"dgc\"]\n  },\n  \"application/x-director\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"dir\",\"dcr\",\"dxr\",\"cst\",\"cct\",\"cxt\",\"w3d\",\"fgd\",\"swa\"]\n  },\n  \"application/x-doom\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wad\"]\n  },\n  \"application/x-dtbncx+xml\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"ncx\"]\n  },\n  \"application/x-dtbook+xml\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"dtb\"]\n  },\n  \"application/x-dtbresource+xml\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"res\"]\n  },\n  \"application/x-dvi\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"dvi\"]\n  },\n  \"application/x-envoy\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"evy\"]\n  },\n  \"application/x-eva\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"eva\"]\n  },\n  \"application/x-font-bdf\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"bdf\"]\n  },\n  \"application/x-font-dos\": {\n    \"source\": \"apache\"\n  },\n  \"application/x-font-framemaker\": {\n    \"source\": \"apache\"\n  },\n  \"application/x-font-ghostscript\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"gsf\"]\n  },\n  \"application/x-font-libgrx\": {\n    \"source\": \"apache\"\n  },\n  \"application/x-font-linux-psf\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"psf\"]\n  },\n  \"application/x-font-pcf\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"pcf\"]\n  },\n  \"application/x-font-snf\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"snf\"]\n  },\n  \"application/x-font-speedo\": {\n    \"source\": \"apache\"\n  },\n  \"application/x-font-sunos-news\": {\n    \"source\": \"apache\"\n  },\n  \"application/x-font-type1\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"pfa\",\"pfb\",\"pfm\",\"afm\"]\n  },\n  \"application/x-font-vfont\": {\n    \"source\": \"apache\"\n  },\n  \"application/x-freearc\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"arc\"]\n  },\n  \"application/x-futuresplash\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"spl\"]\n  },\n  \"application/x-gca-compressed\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"gca\"]\n  },\n  \"application/x-glulx\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"ulx\"]\n  },\n  \"application/x-gnumeric\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"gnumeric\"]\n  },\n  \"application/x-gramps-xml\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"gramps\"]\n  },\n  \"application/x-gtar\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"gtar\"]\n  },\n  \"application/x-gzip\": {\n    \"source\": \"apache\"\n  },\n  \"application/x-hdf\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"hdf\"]\n  },\n  \"application/x-httpd-php\": {\n    \"compressible\": true,\n    \"extensions\": [\"php\"]\n  },\n  \"application/x-install-instructions\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"install\"]\n  },\n  \"application/x-iso9660-image\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"iso\"]\n  },\n  \"application/x-java-archive-diff\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"jardiff\"]\n  },\n  \"application/x-java-jnlp-file\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"jnlp\"]\n  },\n  \"application/x-javascript\": {\n    \"compressible\": true\n  },\n  \"application/x-latex\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"latex\"]\n  },\n  \"application/x-lua-bytecode\": {\n    \"extensions\": [\"luac\"]\n  },\n  \"application/x-lzh-compressed\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"lzh\",\"lha\"]\n  },\n  \"application/x-makeself\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"run\"]\n  },\n  \"application/x-mie\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"mie\"]\n  },\n  \"application/x-mobipocket-ebook\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"prc\",\"mobi\"]\n  },\n  \"application/x-mpegurl\": {\n    \"compressible\": false\n  },\n  \"application/x-ms-application\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"application\"]\n  },\n  \"application/x-ms-shortcut\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"lnk\"]\n  },\n  \"application/x-ms-wmd\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wmd\"]\n  },\n  \"application/x-ms-wmz\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wmz\"]\n  },\n  \"application/x-ms-xbap\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"xbap\"]\n  },\n  \"application/x-msaccess\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"mdb\"]\n  },\n  \"application/x-msbinder\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"obd\"]\n  },\n  \"application/x-mscardfile\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"crd\"]\n  },\n  \"application/x-msclip\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"clp\"]\n  },\n  \"application/x-msdos-program\": {\n    \"extensions\": [\"exe\"]\n  },\n  \"application/x-msdownload\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"exe\",\"dll\",\"com\",\"bat\",\"msi\"]\n  },\n  \"application/x-msmediaview\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"mvb\",\"m13\",\"m14\"]\n  },\n  \"application/x-msmetafile\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wmf\",\"wmz\",\"emf\",\"emz\"]\n  },\n  \"application/x-msmoney\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"mny\"]\n  },\n  \"application/x-mspublisher\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"pub\"]\n  },\n  \"application/x-msschedule\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"scd\"]\n  },\n  \"application/x-msterminal\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"trm\"]\n  },\n  \"application/x-mswrite\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wri\"]\n  },\n  \"application/x-netcdf\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"nc\",\"cdf\"]\n  },\n  \"application/x-ns-proxy-autoconfig\": {\n    \"compressible\": true,\n    \"extensions\": [\"pac\"]\n  },\n  \"application/x-nzb\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"nzb\"]\n  },\n  \"application/x-perl\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"pl\",\"pm\"]\n  },\n  \"application/x-pilot\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"prc\",\"pdb\"]\n  },\n  \"application/x-pkcs12\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"p12\",\"pfx\"]\n  },\n  \"application/x-pkcs7-certificates\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"p7b\",\"spc\"]\n  },\n  \"application/x-pkcs7-certreqresp\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"p7r\"]\n  },\n  \"application/x-rar-compressed\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"rar\"]\n  },\n  \"application/x-redhat-package-manager\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"rpm\"]\n  },\n  \"application/x-research-info-systems\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"ris\"]\n  },\n  \"application/x-sea\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"sea\"]\n  },\n  \"application/x-sh\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"sh\"]\n  },\n  \"application/x-shar\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"shar\"]\n  },\n  \"application/x-shockwave-flash\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"swf\"]\n  },\n  \"application/x-silverlight-app\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"xap\"]\n  },\n  \"application/x-sql\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sql\"]\n  },\n  \"application/x-stuffit\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"sit\"]\n  },\n  \"application/x-stuffitx\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sitx\"]\n  },\n  \"application/x-subrip\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"srt\"]\n  },\n  \"application/x-sv4cpio\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sv4cpio\"]\n  },\n  \"application/x-sv4crc\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sv4crc\"]\n  },\n  \"application/x-t3vm-image\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"t3\"]\n  },\n  \"application/x-tads\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"gam\"]\n  },\n  \"application/x-tar\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"tar\"]\n  },\n  \"application/x-tcl\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"tcl\",\"tk\"]\n  },\n  \"application/x-tex\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"tex\"]\n  },\n  \"application/x-tex-tfm\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"tfm\"]\n  },\n  \"application/x-texinfo\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"texinfo\",\"texi\"]\n  },\n  \"application/x-tgif\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"obj\"]\n  },\n  \"application/x-ustar\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"ustar\"]\n  },\n  \"application/x-virtualbox-hdd\": {\n    \"compressible\": true,\n    \"extensions\": [\"hdd\"]\n  },\n  \"application/x-virtualbox-ova\": {\n    \"compressible\": true,\n    \"extensions\": [\"ova\"]\n  },\n  \"application/x-virtualbox-ovf\": {\n    \"compressible\": true,\n    \"extensions\": [\"ovf\"]\n  },\n  \"application/x-virtualbox-vbox\": {\n    \"compressible\": true,\n    \"extensions\": [\"vbox\"]\n  },\n  \"application/x-virtualbox-vbox-extpack\": {\n    \"compressible\": false,\n    \"extensions\": [\"vbox-extpack\"]\n  },\n  \"application/x-virtualbox-vdi\": {\n    \"compressible\": true,\n    \"extensions\": [\"vdi\"]\n  },\n  \"application/x-virtualbox-vhd\": {\n    \"compressible\": true,\n    \"extensions\": [\"vhd\"]\n  },\n  \"application/x-virtualbox-vmdk\": {\n    \"compressible\": true,\n    \"extensions\": [\"vmdk\"]\n  },\n  \"application/x-wais-source\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"src\"]\n  },\n  \"application/x-web-app-manifest+json\": {\n    \"compressible\": true,\n    \"extensions\": [\"webapp\"]\n  },\n  \"application/x-www-form-urlencoded\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/x-x509-ca-cert\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"der\",\"crt\",\"pem\"]\n  },\n  \"application/x-xfig\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"fig\"]\n  },\n  \"application/x-xliff+xml\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"xlf\"]\n  },\n  \"application/x-xpinstall\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"xpi\"]\n  },\n  \"application/x-xz\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"xz\"]\n  },\n  \"application/x-zmachine\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"z1\",\"z2\",\"z3\",\"z4\",\"z5\",\"z6\",\"z7\",\"z8\"]\n  },\n  \"application/x400-bp\": {\n    \"source\": \"iana\"\n  },\n  \"application/xacml+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/xaml+xml\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"xaml\"]\n  },\n  \"application/xcap-att+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/xcap-caps+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/xcap-diff+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xdf\"]\n  },\n  \"application/xcap-el+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/xcap-error+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/xcap-ns+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/xcon-conference-info+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/xcon-conference-info-diff+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/xenc+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xenc\"]\n  },\n  \"application/xhtml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xhtml\",\"xht\"]\n  },\n  \"application/xhtml-voice+xml\": {\n    \"source\": \"apache\"\n  },\n  \"application/xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xml\",\"xsl\",\"xsd\",\"rng\"]\n  },\n  \"application/xml-dtd\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"dtd\"]\n  },\n  \"application/xml-external-parsed-entity\": {\n    \"source\": \"iana\"\n  },\n  \"application/xml-patch+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/xmpp+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/xop+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xop\"]\n  },\n  \"application/xproc+xml\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"xpl\"]\n  },\n  \"application/xslt+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xslt\"]\n  },\n  \"application/xspf+xml\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"xspf\"]\n  },\n  \"application/xv+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mxml\",\"xhvml\",\"xvml\",\"xvm\"]\n  },\n  \"application/yang\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"yang\"]\n  },\n  \"application/yang-data+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/yang-data+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/yang-patch+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/yang-patch+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/yin+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"yin\"]\n  },\n  \"application/zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"zip\"]\n  },\n  \"application/zlib\": {\n    \"source\": \"iana\"\n  },\n  \"audio/1d-interleaved-parityfec\": {\n    \"source\": \"iana\"\n  },\n  \"audio/32kadpcm\": {\n    \"source\": \"iana\"\n  },\n  \"audio/3gpp\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"3gpp\"]\n  },\n  \"audio/3gpp2\": {\n    \"source\": \"iana\"\n  },\n  \"audio/ac3\": {\n    \"source\": \"iana\"\n  },\n  \"audio/adpcm\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"adp\"]\n  },\n  \"audio/amr\": {\n    \"source\": \"iana\"\n  },\n  \"audio/amr-wb\": {\n    \"source\": \"iana\"\n  },\n  \"audio/amr-wb+\": {\n    \"source\": \"iana\"\n  },\n  \"audio/aptx\": {\n    \"source\": \"iana\"\n  },\n  \"audio/asc\": {\n    \"source\": \"iana\"\n  },\n  \"audio/atrac-advanced-lossless\": {\n    \"source\": \"iana\"\n  },\n  \"audio/atrac-x\": {\n    \"source\": \"iana\"\n  },\n  \"audio/atrac3\": {\n    \"source\": \"iana\"\n  },\n  \"audio/basic\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"au\",\"snd\"]\n  },\n  \"audio/bv16\": {\n    \"source\": \"iana\"\n  },\n  \"audio/bv32\": {\n    \"source\": \"iana\"\n  },\n  \"audio/clearmode\": {\n    \"source\": \"iana\"\n  },\n  \"audio/cn\": {\n    \"source\": \"iana\"\n  },\n  \"audio/dat12\": {\n    \"source\": \"iana\"\n  },\n  \"audio/dls\": {\n    \"source\": \"iana\"\n  },\n  \"audio/dsr-es201108\": {\n    \"source\": \"iana\"\n  },\n  \"audio/dsr-es202050\": {\n    \"source\": \"iana\"\n  },\n  \"audio/dsr-es202211\": {\n    \"source\": \"iana\"\n  },\n  \"audio/dsr-es202212\": {\n    \"source\": \"iana\"\n  },\n  \"audio/dv\": {\n    \"source\": \"iana\"\n  },\n  \"audio/dvi4\": {\n    \"source\": \"iana\"\n  },\n  \"audio/eac3\": {\n    \"source\": \"iana\"\n  },\n  \"audio/encaprtp\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrc\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrc-qcp\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrc0\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrc1\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrcb\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrcb0\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrcb1\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrcnw\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrcnw0\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrcnw1\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrcwb\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrcwb0\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrcwb1\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evs\": {\n    \"source\": \"iana\"\n  },\n  \"audio/fwdred\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g711-0\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g719\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g722\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g7221\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g723\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g726-16\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g726-24\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g726-32\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g726-40\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g728\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g729\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g7291\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g729d\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g729e\": {\n    \"source\": \"iana\"\n  },\n  \"audio/gsm\": {\n    \"source\": \"iana\"\n  },\n  \"audio/gsm-efr\": {\n    \"source\": \"iana\"\n  },\n  \"audio/gsm-hr-08\": {\n    \"source\": \"iana\"\n  },\n  \"audio/ilbc\": {\n    \"source\": \"iana\"\n  },\n  \"audio/ip-mr_v2.5\": {\n    \"source\": \"iana\"\n  },\n  \"audio/isac\": {\n    \"source\": \"apache\"\n  },\n  \"audio/l16\": {\n    \"source\": \"iana\"\n  },\n  \"audio/l20\": {\n    \"source\": \"iana\"\n  },\n  \"audio/l24\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"audio/l8\": {\n    \"source\": \"iana\"\n  },\n  \"audio/lpc\": {\n    \"source\": \"iana\"\n  },\n  \"audio/melp\": {\n    \"source\": \"iana\"\n  },\n  \"audio/melp1200\": {\n    \"source\": \"iana\"\n  },\n  \"audio/melp2400\": {\n    \"source\": \"iana\"\n  },\n  \"audio/melp600\": {\n    \"source\": \"iana\"\n  },\n  \"audio/midi\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"mid\",\"midi\",\"kar\",\"rmi\"]\n  },\n  \"audio/mobile-xmf\": {\n    \"source\": \"iana\"\n  },\n  \"audio/mp3\": {\n    \"compressible\": false,\n    \"extensions\": [\"mp3\"]\n  },\n  \"audio/mp4\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"m4a\",\"mp4a\"]\n  },\n  \"audio/mp4a-latm\": {\n    \"source\": \"iana\"\n  },\n  \"audio/mpa\": {\n    \"source\": \"iana\"\n  },\n  \"audio/mpa-robust\": {\n    \"source\": \"iana\"\n  },\n  \"audio/mpeg\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"mpga\",\"mp2\",\"mp2a\",\"mp3\",\"m2a\",\"m3a\"]\n  },\n  \"audio/mpeg4-generic\": {\n    \"source\": \"iana\"\n  },\n  \"audio/musepack\": {\n    \"source\": \"apache\"\n  },\n  \"audio/ogg\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"oga\",\"ogg\",\"spx\"]\n  },\n  \"audio/opus\": {\n    \"source\": \"iana\"\n  },\n  \"audio/parityfec\": {\n    \"source\": \"iana\"\n  },\n  \"audio/pcma\": {\n    \"source\": \"iana\"\n  },\n  \"audio/pcma-wb\": {\n    \"source\": \"iana\"\n  },\n  \"audio/pcmu\": {\n    \"source\": \"iana\"\n  },\n  \"audio/pcmu-wb\": {\n    \"source\": \"iana\"\n  },\n  \"audio/prs.sid\": {\n    \"source\": \"iana\"\n  },\n  \"audio/qcelp\": {\n    \"source\": \"iana\"\n  },\n  \"audio/raptorfec\": {\n    \"source\": \"iana\"\n  },\n  \"audio/red\": {\n    \"source\": \"iana\"\n  },\n  \"audio/rtp-enc-aescm128\": {\n    \"source\": \"iana\"\n  },\n  \"audio/rtp-midi\": {\n    \"source\": \"iana\"\n  },\n  \"audio/rtploopback\": {\n    \"source\": \"iana\"\n  },\n  \"audio/rtx\": {\n    \"source\": \"iana\"\n  },\n  \"audio/s3m\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"s3m\"]\n  },\n  \"audio/silk\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sil\"]\n  },\n  \"audio/smv\": {\n    \"source\": \"iana\"\n  },\n  \"audio/smv-qcp\": {\n    \"source\": \"iana\"\n  },\n  \"audio/smv0\": {\n    \"source\": \"iana\"\n  },\n  \"audio/sp-midi\": {\n    \"source\": \"iana\"\n  },\n  \"audio/speex\": {\n    \"source\": \"iana\"\n  },\n  \"audio/t140c\": {\n    \"source\": \"iana\"\n  },\n  \"audio/t38\": {\n    \"source\": \"iana\"\n  },\n  \"audio/telephone-event\": {\n    \"source\": \"iana\"\n  },\n  \"audio/tone\": {\n    \"source\": \"iana\"\n  },\n  \"audio/uemclip\": {\n    \"source\": \"iana\"\n  },\n  \"audio/ulpfec\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vdvi\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vmr-wb\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.3gpp.iufp\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.4sb\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.audiokoz\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.celp\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.cisco.nse\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.cmles.radio-events\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.cns.anp1\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.cns.inf1\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dece.audio\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uva\",\"uvva\"]\n  },\n  \"audio/vnd.digital-winds\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"eol\"]\n  },\n  \"audio/vnd.dlna.adts\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dolby.heaac.1\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dolby.heaac.2\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dolby.mlp\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dolby.mps\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dolby.pl2\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dolby.pl2x\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dolby.pl2z\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dolby.pulse.1\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dra\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dra\"]\n  },\n  \"audio/vnd.dts\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dts\"]\n  },\n  \"audio/vnd.dts.hd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dtshd\"]\n  },\n  \"audio/vnd.dvb.file\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.everad.plj\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.hns.audio\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.lucent.voice\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"lvp\"]\n  },\n  \"audio/vnd.ms-playready.media.pya\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pya\"]\n  },\n  \"audio/vnd.nokia.mobile-xmf\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.nortel.vbk\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.nuera.ecelp4800\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ecelp4800\"]\n  },\n  \"audio/vnd.nuera.ecelp7470\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ecelp7470\"]\n  },\n  \"audio/vnd.nuera.ecelp9600\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ecelp9600\"]\n  },\n  \"audio/vnd.octel.sbc\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.presonus.multitrack\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.qcelp\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.rhetorex.32kadpcm\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.rip\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rip\"]\n  },\n  \"audio/vnd.rn-realaudio\": {\n    \"compressible\": false\n  },\n  \"audio/vnd.sealedmedia.softseal.mpeg\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.vmx.cvsd\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.wave\": {\n    \"compressible\": false\n  },\n  \"audio/vorbis\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"audio/vorbis-config\": {\n    \"source\": \"iana\"\n  },\n  \"audio/wav\": {\n    \"compressible\": false,\n    \"extensions\": [\"wav\"]\n  },\n  \"audio/wave\": {\n    \"compressible\": false,\n    \"extensions\": [\"wav\"]\n  },\n  \"audio/webm\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"weba\"]\n  },\n  \"audio/x-aac\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"aac\"]\n  },\n  \"audio/x-aiff\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"aif\",\"aiff\",\"aifc\"]\n  },\n  \"audio/x-caf\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"caf\"]\n  },\n  \"audio/x-flac\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"flac\"]\n  },\n  \"audio/x-m4a\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"m4a\"]\n  },\n  \"audio/x-matroska\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"mka\"]\n  },\n  \"audio/x-mpegurl\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"m3u\"]\n  },\n  \"audio/x-ms-wax\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wax\"]\n  },\n  \"audio/x-ms-wma\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wma\"]\n  },\n  \"audio/x-pn-realaudio\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"ram\",\"ra\"]\n  },\n  \"audio/x-pn-realaudio-plugin\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"rmp\"]\n  },\n  \"audio/x-realaudio\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"ra\"]\n  },\n  \"audio/x-tta\": {\n    \"source\": \"apache\"\n  },\n  \"audio/x-wav\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wav\"]\n  },\n  \"audio/xm\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"xm\"]\n  },\n  \"chemical/x-cdx\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cdx\"]\n  },\n  \"chemical/x-cif\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cif\"]\n  },\n  \"chemical/x-cmdf\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cmdf\"]\n  },\n  \"chemical/x-cml\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cml\"]\n  },\n  \"chemical/x-csml\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"csml\"]\n  },\n  \"chemical/x-pdb\": {\n    \"source\": \"apache\"\n  },\n  \"chemical/x-xyz\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"xyz\"]\n  },\n  \"font/collection\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ttc\"]\n  },\n  \"font/otf\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"otf\"]\n  },\n  \"font/sfnt\": {\n    \"source\": \"iana\"\n  },\n  \"font/ttf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ttf\"]\n  },\n  \"font/woff\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"woff\"]\n  },\n  \"font/woff2\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"woff2\"]\n  },\n  \"image/aces\": {\n    \"source\": \"iana\"\n  },\n  \"image/apng\": {\n    \"compressible\": false,\n    \"extensions\": [\"apng\"]\n  },\n  \"image/bmp\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"bmp\"]\n  },\n  \"image/cgm\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cgm\"]\n  },\n  \"image/dicom-rle\": {\n    \"source\": \"iana\"\n  },\n  \"image/emf\": {\n    \"source\": \"iana\"\n  },\n  \"image/fits\": {\n    \"source\": \"iana\"\n  },\n  \"image/g3fax\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"g3\"]\n  },\n  \"image/gif\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"gif\"]\n  },\n  \"image/ief\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ief\"]\n  },\n  \"image/jls\": {\n    \"source\": \"iana\"\n  },\n  \"image/jp2\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"jp2\",\"jpg2\"]\n  },\n  \"image/jpeg\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"jpeg\",\"jpg\",\"jpe\"]\n  },\n  \"image/jpm\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"jpm\"]\n  },\n  \"image/jpx\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"jpx\",\"jpf\"]\n  },\n  \"image/ktx\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ktx\"]\n  },\n  \"image/naplps\": {\n    \"source\": \"iana\"\n  },\n  \"image/pjpeg\": {\n    \"compressible\": false\n  },\n  \"image/png\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"png\"]\n  },\n  \"image/prs.btif\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"btif\"]\n  },\n  \"image/prs.pti\": {\n    \"source\": \"iana\"\n  },\n  \"image/pwg-raster\": {\n    \"source\": \"iana\"\n  },\n  \"image/sgi\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sgi\"]\n  },\n  \"image/svg+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"svg\",\"svgz\"]\n  },\n  \"image/t38\": {\n    \"source\": \"iana\"\n  },\n  \"image/tiff\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"tiff\",\"tif\"]\n  },\n  \"image/tiff-fx\": {\n    \"source\": \"iana\"\n  },\n  \"image/vnd.adobe.photoshop\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"psd\"]\n  },\n  \"image/vnd.airzip.accelerator.azv\": {\n    \"source\": \"iana\"\n  },\n  \"image/vnd.cns.inf2\": {\n    \"source\": \"iana\"\n  },\n  \"image/vnd.dece.graphic\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uvi\",\"uvvi\",\"uvg\",\"uvvg\"]\n  },\n  \"image/vnd.djvu\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"djvu\",\"djv\"]\n  },\n  \"image/vnd.dvb.subtitle\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sub\"]\n  },\n  \"image/vnd.dwg\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dwg\"]\n  },\n  \"image/vnd.dxf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dxf\"]\n  },\n  \"image/vnd.fastbidsheet\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fbs\"]\n  },\n  \"image/vnd.fpx\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fpx\"]\n  },\n  \"image/vnd.fst\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fst\"]\n  },\n  \"image/vnd.fujixerox.edmics-mmr\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mmr\"]\n  },\n  \"image/vnd.fujixerox.edmics-rlc\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rlc\"]\n  },\n  \"image/vnd.globalgraphics.pgb\": {\n    \"source\": \"iana\"\n  },\n  \"image/vnd.microsoft.icon\": {\n    \"source\": \"iana\"\n  },\n  \"image/vnd.mix\": {\n    \"source\": \"iana\"\n  },\n  \"image/vnd.mozilla.apng\": {\n    \"source\": \"iana\"\n  },\n  \"image/vnd.ms-modi\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mdi\"]\n  },\n  \"image/vnd.ms-photo\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wdp\"]\n  },\n  \"image/vnd.net-fpx\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"npx\"]\n  },\n  \"image/vnd.radiance\": {\n    \"source\": \"iana\"\n  },\n  \"image/vnd.sealed.png\": {\n    \"source\": \"iana\"\n  },\n  \"image/vnd.sealedmedia.softseal.gif\": {\n    \"source\": \"iana\"\n  },\n  \"image/vnd.sealedmedia.softseal.jpg\": {\n    \"source\": \"iana\"\n  },\n  \"image/vnd.svf\": {\n    \"source\": \"iana\"\n  },\n  \"image/vnd.tencent.tap\": {\n    \"source\": \"iana\"\n  },\n  \"image/vnd.valve.source.texture\": {\n    \"source\": \"iana\"\n  },\n  \"image/vnd.wap.wbmp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wbmp\"]\n  },\n  \"image/vnd.xiff\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xif\"]\n  },\n  \"image/vnd.zbrush.pcx\": {\n    \"source\": \"iana\"\n  },\n  \"image/webp\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"webp\"]\n  },\n  \"image/wmf\": {\n    \"source\": \"iana\"\n  },\n  \"image/x-3ds\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"3ds\"]\n  },\n  \"image/x-cmu-raster\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"ras\"]\n  },\n  \"image/x-cmx\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cmx\"]\n  },\n  \"image/x-freehand\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"fh\",\"fhc\",\"fh4\",\"fh5\",\"fh7\"]\n  },\n  \"image/x-icon\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"ico\"]\n  },\n  \"image/x-jng\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"jng\"]\n  },\n  \"image/x-mrsid-image\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sid\"]\n  },\n  \"image/x-ms-bmp\": {\n    \"source\": \"nginx\",\n    \"compressible\": true,\n    \"extensions\": [\"bmp\"]\n  },\n  \"image/x-pcx\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"pcx\"]\n  },\n  \"image/x-pict\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"pic\",\"pct\"]\n  },\n  \"image/x-portable-anymap\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"pnm\"]\n  },\n  \"image/x-portable-bitmap\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"pbm\"]\n  },\n  \"image/x-portable-graymap\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"pgm\"]\n  },\n  \"image/x-portable-pixmap\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"ppm\"]\n  },\n  \"image/x-rgb\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"rgb\"]\n  },\n  \"image/x-tga\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"tga\"]\n  },\n  \"image/x-xbitmap\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"xbm\"]\n  },\n  \"image/x-xcf\": {\n    \"compressible\": false\n  },\n  \"image/x-xpixmap\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"xpm\"]\n  },\n  \"image/x-xwindowdump\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"xwd\"]\n  },\n  \"message/cpim\": {\n    \"source\": \"iana\"\n  },\n  \"message/delivery-status\": {\n    \"source\": \"iana\"\n  },\n  \"message/disposition-notification\": {\n    \"source\": \"iana\",\n    \"extensions\": [\n      \"disposition-notification\"\n    ]\n  },\n  \"message/external-body\": {\n    \"source\": \"iana\"\n  },\n  \"message/feedback-report\": {\n    \"source\": \"iana\"\n  },\n  \"message/global\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"u8msg\"]\n  },\n  \"message/global-delivery-status\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"u8dsn\"]\n  },\n  \"message/global-disposition-notification\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"u8mdn\"]\n  },\n  \"message/global-headers\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"u8hdr\"]\n  },\n  \"message/http\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"message/imdn+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"message/news\": {\n    \"source\": \"iana\"\n  },\n  \"message/partial\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"message/rfc822\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"eml\",\"mime\"]\n  },\n  \"message/s-http\": {\n    \"source\": \"iana\"\n  },\n  \"message/sip\": {\n    \"source\": \"iana\"\n  },\n  \"message/sipfrag\": {\n    \"source\": \"iana\"\n  },\n  \"message/tracking-status\": {\n    \"source\": \"iana\"\n  },\n  \"message/vnd.si.simp\": {\n    \"source\": \"iana\"\n  },\n  \"message/vnd.wfa.wsc\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wsc\"]\n  },\n  \"model/3mf\": {\n    \"source\": \"iana\"\n  },\n  \"model/gltf+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"gltf\"]\n  },\n  \"model/gltf-binary\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"glb\"]\n  },\n  \"model/iges\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"igs\",\"iges\"]\n  },\n  \"model/mesh\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"msh\",\"mesh\",\"silo\"]\n  },\n  \"model/vnd.collada+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dae\"]\n  },\n  \"model/vnd.dwf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dwf\"]\n  },\n  \"model/vnd.flatland.3dml\": {\n    \"source\": \"iana\"\n  },\n  \"model/vnd.gdl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gdl\"]\n  },\n  \"model/vnd.gs-gdl\": {\n    \"source\": \"apache\"\n  },\n  \"model/vnd.gs.gdl\": {\n    \"source\": \"iana\"\n  },\n  \"model/vnd.gtw\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gtw\"]\n  },\n  \"model/vnd.moml+xml\": {\n    \"source\": \"iana\"\n  },\n  \"model/vnd.mts\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mts\"]\n  },\n  \"model/vnd.opengex\": {\n    \"source\": \"iana\"\n  },\n  \"model/vnd.parasolid.transmit.binary\": {\n    \"source\": \"iana\"\n  },\n  \"model/vnd.parasolid.transmit.text\": {\n    \"source\": \"iana\"\n  },\n  \"model/vnd.rosette.annotated-data-model\": {\n    \"source\": \"iana\"\n  },\n  \"model/vnd.valve.source.compiled-map\": {\n    \"source\": \"iana\"\n  },\n  \"model/vnd.vtu\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"vtu\"]\n  },\n  \"model/vrml\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"wrl\",\"vrml\"]\n  },\n  \"model/x3d+binary\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"x3db\",\"x3dbz\"]\n  },\n  \"model/x3d+fastinfoset\": {\n    \"source\": \"iana\"\n  },\n  \"model/x3d+vrml\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"x3dv\",\"x3dvz\"]\n  },\n  \"model/x3d+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"x3d\",\"x3dz\"]\n  },\n  \"model/x3d-vrml\": {\n    \"source\": \"iana\"\n  },\n  \"multipart/alternative\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"multipart/appledouble\": {\n    \"source\": \"iana\"\n  },\n  \"multipart/byteranges\": {\n    \"source\": \"iana\"\n  },\n  \"multipart/digest\": {\n    \"source\": \"iana\"\n  },\n  \"multipart/encrypted\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"multipart/form-data\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"multipart/header-set\": {\n    \"source\": \"iana\"\n  },\n  \"multipart/mixed\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"multipart/multilingual\": {\n    \"source\": \"iana\"\n  },\n  \"multipart/parallel\": {\n    \"source\": \"iana\"\n  },\n  \"multipart/related\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"multipart/report\": {\n    \"source\": \"iana\"\n  },\n  \"multipart/signed\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"multipart/vnd.bint.med-plus\": {\n    \"source\": \"iana\"\n  },\n  \"multipart/voice-message\": {\n    \"source\": \"iana\"\n  },\n  \"multipart/x-mixed-replace\": {\n    \"source\": \"iana\"\n  },\n  \"text/1d-interleaved-parityfec\": {\n    \"source\": \"iana\"\n  },\n  \"text/cache-manifest\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"appcache\",\"manifest\"]\n  },\n  \"text/calendar\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ics\",\"ifb\"]\n  },\n  \"text/calender\": {\n    \"compressible\": true\n  },\n  \"text/cmd\": {\n    \"compressible\": true\n  },\n  \"text/coffeescript\": {\n    \"extensions\": [\"coffee\",\"litcoffee\"]\n  },\n  \"text/css\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true,\n    \"extensions\": [\"css\"]\n  },\n  \"text/csv\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"csv\"]\n  },\n  \"text/csv-schema\": {\n    \"source\": \"iana\"\n  },\n  \"text/directory\": {\n    \"source\": \"iana\"\n  },\n  \"text/dns\": {\n    \"source\": \"iana\"\n  },\n  \"text/ecmascript\": {\n    \"source\": \"iana\"\n  },\n  \"text/encaprtp\": {\n    \"source\": \"iana\"\n  },\n  \"text/enriched\": {\n    \"source\": \"iana\"\n  },\n  \"text/fwdred\": {\n    \"source\": \"iana\"\n  },\n  \"text/grammar-ref-list\": {\n    \"source\": \"iana\"\n  },\n  \"text/html\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"html\",\"htm\",\"shtml\"]\n  },\n  \"text/jade\": {\n    \"extensions\": [\"jade\"]\n  },\n  \"text/javascript\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"text/jcr-cnd\": {\n    \"source\": \"iana\"\n  },\n  \"text/jsx\": {\n    \"compressible\": true,\n    \"extensions\": [\"jsx\"]\n  },\n  \"text/less\": {\n    \"extensions\": [\"less\"]\n  },\n  \"text/markdown\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"markdown\",\"md\"]\n  },\n  \"text/mathml\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"mml\"]\n  },\n  \"text/mizar\": {\n    \"source\": \"iana\"\n  },\n  \"text/n3\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"n3\"]\n  },\n  \"text/parameters\": {\n    \"source\": \"iana\"\n  },\n  \"text/parityfec\": {\n    \"source\": \"iana\"\n  },\n  \"text/plain\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"txt\",\"text\",\"conf\",\"def\",\"list\",\"log\",\"in\",\"ini\"]\n  },\n  \"text/provenance-notation\": {\n    \"source\": \"iana\"\n  },\n  \"text/prs.fallenstein.rst\": {\n    \"source\": \"iana\"\n  },\n  \"text/prs.lines.tag\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dsc\"]\n  },\n  \"text/prs.prop.logic\": {\n    \"source\": \"iana\"\n  },\n  \"text/raptorfec\": {\n    \"source\": \"iana\"\n  },\n  \"text/red\": {\n    \"source\": \"iana\"\n  },\n  \"text/rfc822-headers\": {\n    \"source\": \"iana\"\n  },\n  \"text/richtext\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"rtx\"]\n  },\n  \"text/rtf\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"rtf\"]\n  },\n  \"text/rtp-enc-aescm128\": {\n    \"source\": \"iana\"\n  },\n  \"text/rtploopback\": {\n    \"source\": \"iana\"\n  },\n  \"text/rtx\": {\n    \"source\": \"iana\"\n  },\n  \"text/sgml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sgml\",\"sgm\"]\n  },\n  \"text/shex\": {\n    \"extensions\": [\"shex\"]\n  },\n  \"text/slim\": {\n    \"extensions\": [\"slim\",\"slm\"]\n  },\n  \"text/strings\": {\n    \"source\": \"iana\"\n  },\n  \"text/stylus\": {\n    \"extensions\": [\"stylus\",\"styl\"]\n  },\n  \"text/t140\": {\n    \"source\": \"iana\"\n  },\n  \"text/tab-separated-values\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"tsv\"]\n  },\n  \"text/troff\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"t\",\"tr\",\"roff\",\"man\",\"me\",\"ms\"]\n  },\n  \"text/turtle\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ttl\"]\n  },\n  \"text/ulpfec\": {\n    \"source\": \"iana\"\n  },\n  \"text/uri-list\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"uri\",\"uris\",\"urls\"]\n  },\n  \"text/vcard\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"vcard\"]\n  },\n  \"text/vnd.a\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.abc\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.ascii-art\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.curl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"curl\"]\n  },\n  \"text/vnd.curl.dcurl\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"dcurl\"]\n  },\n  \"text/vnd.curl.mcurl\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"mcurl\"]\n  },\n  \"text/vnd.curl.scurl\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"scurl\"]\n  },\n  \"text/vnd.debian.copyright\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.dmclientscript\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.dvb.subtitle\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sub\"]\n  },\n  \"text/vnd.esmertec.theme-descriptor\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.fly\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fly\"]\n  },\n  \"text/vnd.fmi.flexstor\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"flx\"]\n  },\n  \"text/vnd.graphviz\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gv\"]\n  },\n  \"text/vnd.in3d.3dml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"3dml\"]\n  },\n  \"text/vnd.in3d.spot\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"spot\"]\n  },\n  \"text/vnd.iptc.newsml\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.iptc.nitf\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.latex-z\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.motorola.reflex\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.ms-mediapackage\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.net2phone.commcenter.command\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.radisys.msml-basic-layout\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.si.uricatalogue\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.sun.j2me.app-descriptor\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jad\"]\n  },\n  \"text/vnd.trolltech.linguist\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.wap.si\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.wap.sl\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.wap.wml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wml\"]\n  },\n  \"text/vnd.wap.wmlscript\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wmls\"]\n  },\n  \"text/vtt\": {\n    \"charset\": \"UTF-8\",\n    \"compressible\": true,\n    \"extensions\": [\"vtt\"]\n  },\n  \"text/x-asm\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"s\",\"asm\"]\n  },\n  \"text/x-c\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"c\",\"cc\",\"cxx\",\"cpp\",\"h\",\"hh\",\"dic\"]\n  },\n  \"text/x-component\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"htc\"]\n  },\n  \"text/x-fortran\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"f\",\"for\",\"f77\",\"f90\"]\n  },\n  \"text/x-gwt-rpc\": {\n    \"compressible\": true\n  },\n  \"text/x-handlebars-template\": {\n    \"extensions\": [\"hbs\"]\n  },\n  \"text/x-java-source\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"java\"]\n  },\n  \"text/x-jquery-tmpl\": {\n    \"compressible\": true\n  },\n  \"text/x-lua\": {\n    \"extensions\": [\"lua\"]\n  },\n  \"text/x-markdown\": {\n    \"compressible\": true,\n    \"extensions\": [\"mkd\"]\n  },\n  \"text/x-nfo\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"nfo\"]\n  },\n  \"text/x-opml\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"opml\"]\n  },\n  \"text/x-org\": {\n    \"compressible\": true,\n    \"extensions\": [\"org\"]\n  },\n  \"text/x-pascal\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"p\",\"pas\"]\n  },\n  \"text/x-processing\": {\n    \"compressible\": true,\n    \"extensions\": [\"pde\"]\n  },\n  \"text/x-sass\": {\n    \"extensions\": [\"sass\"]\n  },\n  \"text/x-scss\": {\n    \"extensions\": [\"scss\"]\n  },\n  \"text/x-setext\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"etx\"]\n  },\n  \"text/x-sfv\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sfv\"]\n  },\n  \"text/x-suse-ymp\": {\n    \"compressible\": true,\n    \"extensions\": [\"ymp\"]\n  },\n  \"text/x-uuencode\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"uu\"]\n  },\n  \"text/x-vcalendar\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"vcs\"]\n  },\n  \"text/x-vcard\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"vcf\"]\n  },\n  \"text/xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xml\"]\n  },\n  \"text/xml-external-parsed-entity\": {\n    \"source\": \"iana\"\n  },\n  \"text/yaml\": {\n    \"extensions\": [\"yaml\",\"yml\"]\n  },\n  \"video/1d-interleaved-parityfec\": {\n    \"source\": \"iana\"\n  },\n  \"video/3gpp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"3gp\",\"3gpp\"]\n  },\n  \"video/3gpp-tt\": {\n    \"source\": \"iana\"\n  },\n  \"video/3gpp2\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"3g2\"]\n  },\n  \"video/bmpeg\": {\n    \"source\": \"iana\"\n  },\n  \"video/bt656\": {\n    \"source\": \"iana\"\n  },\n  \"video/celb\": {\n    \"source\": \"iana\"\n  },\n  \"video/dv\": {\n    \"source\": \"iana\"\n  },\n  \"video/encaprtp\": {\n    \"source\": \"iana\"\n  },\n  \"video/h261\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"h261\"]\n  },\n  \"video/h263\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"h263\"]\n  },\n  \"video/h263-1998\": {\n    \"source\": \"iana\"\n  },\n  \"video/h263-2000\": {\n    \"source\": \"iana\"\n  },\n  \"video/h264\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"h264\"]\n  },\n  \"video/h264-rcdo\": {\n    \"source\": \"iana\"\n  },\n  \"video/h264-svc\": {\n    \"source\": \"iana\"\n  },\n  \"video/h265\": {\n    \"source\": \"iana\"\n  },\n  \"video/iso.segment\": {\n    \"source\": \"iana\"\n  },\n  \"video/jpeg\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jpgv\"]\n  },\n  \"video/jpeg2000\": {\n    \"source\": \"iana\"\n  },\n  \"video/jpm\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"jpm\",\"jpgm\"]\n  },\n  \"video/mj2\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mj2\",\"mjp2\"]\n  },\n  \"video/mp1s\": {\n    \"source\": \"iana\"\n  },\n  \"video/mp2p\": {\n    \"source\": \"iana\"\n  },\n  \"video/mp2t\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ts\"]\n  },\n  \"video/mp4\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"mp4\",\"mp4v\",\"mpg4\"]\n  },\n  \"video/mp4v-es\": {\n    \"source\": \"iana\"\n  },\n  \"video/mpeg\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"mpeg\",\"mpg\",\"mpe\",\"m1v\",\"m2v\"]\n  },\n  \"video/mpeg4-generic\": {\n    \"source\": \"iana\"\n  },\n  \"video/mpv\": {\n    \"source\": \"iana\"\n  },\n  \"video/nv\": {\n    \"source\": \"iana\"\n  },\n  \"video/ogg\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"ogv\"]\n  },\n  \"video/parityfec\": {\n    \"source\": \"iana\"\n  },\n  \"video/pointer\": {\n    \"source\": \"iana\"\n  },\n  \"video/quicktime\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"qt\",\"mov\"]\n  },\n  \"video/raptorfec\": {\n    \"source\": \"iana\"\n  },\n  \"video/raw\": {\n    \"source\": \"iana\"\n  },\n  \"video/rtp-enc-aescm128\": {\n    \"source\": \"iana\"\n  },\n  \"video/rtploopback\": {\n    \"source\": \"iana\"\n  },\n  \"video/rtx\": {\n    \"source\": \"iana\"\n  },\n  \"video/smpte291\": {\n    \"source\": \"iana\"\n  },\n  \"video/smpte292m\": {\n    \"source\": \"iana\"\n  },\n  \"video/ulpfec\": {\n    \"source\": \"iana\"\n  },\n  \"video/vc1\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.cctv\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.dece.hd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uvh\",\"uvvh\"]\n  },\n  \"video/vnd.dece.mobile\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uvm\",\"uvvm\"]\n  },\n  \"video/vnd.dece.mp4\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.dece.pd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uvp\",\"uvvp\"]\n  },\n  \"video/vnd.dece.sd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uvs\",\"uvvs\"]\n  },\n  \"video/vnd.dece.video\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uvv\",\"uvvv\"]\n  },\n  \"video/vnd.directv.mpeg\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.directv.mpeg-tts\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.dlna.mpeg-tts\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.dvb.file\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dvb\"]\n  },\n  \"video/vnd.fvt\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fvt\"]\n  },\n  \"video/vnd.hns.video\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.iptvforum.1dparityfec-1010\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.iptvforum.1dparityfec-2005\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.iptvforum.2dparityfec-1010\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.iptvforum.2dparityfec-2005\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.iptvforum.ttsavc\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.iptvforum.ttsmpeg2\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.motorola.video\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.motorola.videop\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.mpegurl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mxu\",\"m4u\"]\n  },\n  \"video/vnd.ms-playready.media.pyv\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pyv\"]\n  },\n  \"video/vnd.nokia.interleaved-multimedia\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.nokia.mp4vr\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.nokia.videovoip\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.objectvideo\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.radgamettools.bink\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.radgamettools.smacker\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.sealed.mpeg1\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.sealed.mpeg4\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.sealed.swf\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.sealedmedia.softseal.mov\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.uvvu.mp4\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uvu\",\"uvvu\"]\n  },\n  \"video/vnd.vivo\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"viv\"]\n  },\n  \"video/vp8\": {\n    \"source\": \"iana\"\n  },\n  \"video/webm\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"webm\"]\n  },\n  \"video/x-f4v\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"f4v\"]\n  },\n  \"video/x-fli\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"fli\"]\n  },\n  \"video/x-flv\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"flv\"]\n  },\n  \"video/x-m4v\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"m4v\"]\n  },\n  \"video/x-matroska\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"mkv\",\"mk3d\",\"mks\"]\n  },\n  \"video/x-mng\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"mng\"]\n  },\n  \"video/x-ms-asf\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"asf\",\"asx\"]\n  },\n  \"video/x-ms-vob\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"vob\"]\n  },\n  \"video/x-ms-wm\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wm\"]\n  },\n  \"video/x-ms-wmv\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"wmv\"]\n  },\n  \"video/x-ms-wmx\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wmx\"]\n  },\n  \"video/x-ms-wvx\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wvx\"]\n  },\n  \"video/x-msvideo\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"avi\"]\n  },\n  \"video/x-sgi-movie\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"movie\"]\n  },\n  \"video/x-smv\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"smv\"]\n  },\n  \"x-conference/x-cooltalk\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"ice\"]\n  },\n  \"x-shader/x-fragment\": {\n    \"compressible\": true\n  },\n  \"x-shader/x-vertex\": {\n    \"compressible\": true\n  }\n}\n", "/*!\n * mime-db\n * Copyright(c) 2014 Jonathan Ong\n * MIT Licensed\n */\n\n/**\n * Module exports.\n */\n\nmodule.exports = require('./db.json')\n", "/*!\n * mime-types\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar db = require('mime-db')\nvar extname = require('path').extname\n\n/**\n * Module variables.\n * @private\n */\n\nvar EXTRACT_TYPE_REGEXP = /^\\s*([^;\\s]*)(?:;|\\s|$)/\nvar TEXT_TYPE_REGEXP = /^text\\//i\n\n/**\n * Module exports.\n * @public\n */\n\nexports.charset = charset\nexports.charsets = { lookup: charset }\nexports.contentType = contentType\nexports.extension = extension\nexports.extensions = Object.create(null)\nexports.lookup = lookup\nexports.types = Object.create(null)\n\n// Populate the extensions/types maps\npopulateMaps(exports.extensions, exports.types)\n\n/**\n * Get the default charset for a MIME type.\n *\n * @param {string} type\n * @return {boolean|string}\n */\n\nfunction charset (type) {\n  if (!type || typeof type !== 'string') {\n    return false\n  }\n\n  // TODO: use media-typer\n  var match = EXTRACT_TYPE_REGEXP.exec(type)\n  var mime = match && db[match[1].toLowerCase()]\n\n  if (mime && mime.charset) {\n    return mime.charset\n  }\n\n  // default text/* to utf-8\n  if (match && TEXT_TYPE_REGEXP.test(match[1])) {\n    return 'UTF-8'\n  }\n\n  return false\n}\n\n/**\n * Create a full Content-Type header given a MIME type or extension.\n *\n * @param {string} str\n * @return {boolean|string}\n */\n\nfunction contentType (str) {\n  // TODO: should this even be in this module?\n  if (!str || typeof str !== 'string') {\n    return false\n  }\n\n  var mime = str.indexOf('/') === -1\n    ? exports.lookup(str)\n    : str\n\n  if (!mime) {\n    return false\n  }\n\n  // TODO: use content-type or other module\n  if (mime.indexOf('charset') === -1) {\n    var charset = exports.charset(mime)\n    if (charset) mime += '; charset=' + charset.toLowerCase()\n  }\n\n  return mime\n}\n\n/**\n * Get the default extension for a MIME type.\n *\n * @param {string} type\n * @return {boolean|string}\n */\n\nfunction extension (type) {\n  if (!type || typeof type !== 'string') {\n    return false\n  }\n\n  // TODO: use media-typer\n  var match = EXTRACT_TYPE_REGEXP.exec(type)\n\n  // get extensions\n  var exts = match && exports.extensions[match[1].toLowerCase()]\n\n  if (!exts || !exts.length) {\n    return false\n  }\n\n  return exts[0]\n}\n\n/**\n * Lookup the MIME type for a file path/extension.\n *\n * @param {string} path\n * @return {boolean|string}\n */\n\nfunction lookup (path) {\n  if (!path || typeof path !== 'string') {\n    return false\n  }\n\n  // get the extension (\"ext\" or \".ext\" or full path)\n  var extension = extname('x.' + path)\n    .toLowerCase()\n    .substr(1)\n\n  if (!extension) {\n    return false\n  }\n\n  return exports.types[extension] || false\n}\n\n/**\n * Populate the extensions and types maps.\n * @private\n */\n\nfunction populateMaps (extensions, types) {\n  // source preference (least -> most)\n  var preference = ['nginx', 'apache', undefined, 'iana']\n\n  Object.keys(db).forEach(function forEachMimeType (type) {\n    var mime = db[type]\n    var exts = mime.extensions\n\n    if (!exts || !exts.length) {\n      return\n    }\n\n    // mime -> extensions\n    extensions[type] = exts\n\n    // extension -> mime\n    for (var i = 0; i < exts.length; i++) {\n      var extension = exts[i]\n\n      if (types[extension]) {\n        var from = preference.indexOf(db[types[extension]].source)\n        var to = preference.indexOf(mime.source)\n\n        if (types[extension] !== 'application/octet-stream' &&\n          (from > to || (from === to && types[extension].substr(0, 12) === 'application/'))) {\n          // skip the remapping\n          continue\n        }\n      }\n\n      // set the extension -> mime\n      types[extension] = type\n    }\n  })\n}\n", "/*!\n * bytes\n * Copyright(c) 2012-2014 TJ Holowaychuk\n * Copyright(c) 2015 Jed Watson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = bytes;\nmodule.exports.format = format;\nmodule.exports.parse = parse;\n\n/**\n * Module variables.\n * @private\n */\n\nvar formatThousandsRegExp = /\\B(?=(\\d{3})+(?!\\d))/g;\n\nvar formatDecimalsRegExp = /(?:\\.0*|(\\.[^0]+)0+)$/;\n\nvar map = {\n  b:  1,\n  kb: 1 << 10,\n  mb: 1 << 20,\n  gb: 1 << 30,\n  tb: ((1 << 30) * 1024)\n};\n\nvar parseRegExp = /^((-|\\+)?(\\d+(?:\\.\\d+)?)) *(kb|mb|gb|tb)$/i;\n\n/**\n * Convert the given value in bytes into a string or parse to string to an integer in bytes.\n *\n * @param {string|number} value\n * @param {{\n *  case: [string],\n *  decimalPlaces: [number]\n *  fixedDecimals: [boolean]\n *  thousandsSeparator: [string]\n *  unitSeparator: [string]\n *  }} [options] bytes options.\n *\n * @returns {string|number|null}\n */\n\nfunction bytes(value, options) {\n  if (typeof value === 'string') {\n    return parse(value);\n  }\n\n  if (typeof value === 'number') {\n    return format(value, options);\n  }\n\n  return null;\n}\n\n/**\n * Format the given value in bytes into a string.\n *\n * If the value is negative, it is kept as such. If it is a float,\n * it is rounded.\n *\n * @param {number} value\n * @param {object} [options]\n * @param {number} [options.decimalPlaces=2]\n * @param {number} [options.fixedDecimals=false]\n * @param {string} [options.thousandsSeparator=]\n * @param {string} [options.unit=]\n * @param {string} [options.unitSeparator=]\n *\n * @returns {string|null}\n * @public\n */\n\nfunction format(value, options) {\n  if (!Number.isFinite(value)) {\n    return null;\n  }\n\n  var mag = Math.abs(value);\n  var thousandsSeparator = (options && options.thousandsSeparator) || '';\n  var unitSeparator = (options && options.unitSeparator) || '';\n  var decimalPlaces = (options && options.decimalPlaces !== undefined) ? options.decimalPlaces : 2;\n  var fixedDecimals = Boolean(options && options.fixedDecimals);\n  var unit = (options && options.unit) || '';\n\n  if (!unit || !map[unit.toLowerCase()]) {\n    if (mag >= map.tb) {\n      unit = 'TB';\n    } else if (mag >= map.gb) {\n      unit = 'GB';\n    } else if (mag >= map.mb) {\n      unit = 'MB';\n    } else if (mag >= map.kb) {\n      unit = 'KB';\n    } else {\n      unit = 'B';\n    }\n  }\n\n  var val = value / map[unit.toLowerCase()];\n  var str = val.toFixed(decimalPlaces);\n\n  if (!fixedDecimals) {\n    str = str.replace(formatDecimalsRegExp, '$1');\n  }\n\n  if (thousandsSeparator) {\n    str = str.replace(formatThousandsRegExp, thousandsSeparator);\n  }\n\n  return str + unitSeparator + unit;\n}\n\n/**\n * Parse the string value into an integer in bytes.\n *\n * If no unit is given, it is assumed the value is in bytes.\n *\n * @param {number|string} val\n *\n * @returns {number|null}\n * @public\n */\n\nfunction parse(val) {\n  if (typeof val === 'number' && !isNaN(val)) {\n    return val;\n  }\n\n  if (typeof val !== 'string') {\n    return null;\n  }\n\n  // Test if the string passed is valid\n  var results = parseRegExp.exec(val);\n  var floatValue;\n  var unit = 'b';\n\n  if (!results) {\n    // Nothing could be extracted from the given string\n    floatValue = parseInt(val, 10);\n    unit = 'b'\n  } else {\n    // Retrieve the value and the unit\n    floatValue = parseFloat(results[1]);\n    unit = results[4].toLowerCase();\n  }\n\n  return Math.floor(map[unit] * floatValue);\n}\n", "/*!\n * content-disposition\n * Copyright(c) 2014 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n */\n\nmodule.exports = contentDisposition\nmodule.exports.parse = parse\n\n/**\n * Module dependencies.\n */\n\nvar basename = require('path').basename\n\n/**\n * RegExp to match non attr-char, *after* encodeURIComponent (i.e. not including \"%\")\n */\n\nvar ENCODE_URL_ATTR_CHAR_REGEXP = /[\\x00-\\x20\"'()*,/:;<=>?@[\\\\\\]{}\\x7f]/g // eslint-disable-line no-control-regex\n\n/**\n * RegExp to match percent encoding escape.\n */\n\nvar HEX_ESCAPE_REGEXP = /%[0-9A-Fa-f]{2}/\nvar HEX_ESCAPE_REPLACE_REGEXP = /%([0-9A-Fa-f]{2})/g\n\n/**\n * RegExp to match non-latin1 characters.\n */\n\nvar NON_LATIN1_REGEXP = /[^\\x20-\\x7e\\xa0-\\xff]/g\n\n/**\n * RegExp to match quoted-pair in RFC 2616\n *\n * quoted-pair = \"\\\" CHAR\n * CHAR        = <any US-ASCII character (octets 0 - 127)>\n */\n\nvar QESC_REGEXP = /\\\\([\\u0000-\\u007f])/g\n\n/**\n * RegExp to match chars that must be quoted-pair in RFC 2616\n */\n\nvar QUOTE_REGEXP = /([\\\\\"])/g\n\n/**\n * RegExp for various RFC 2616 grammar\n *\n * parameter     = token \"=\" ( token | quoted-string )\n * token         = 1*<any CHAR except CTLs or separators>\n * separators    = \"(\" | \")\" | \"<\" | \">\" | \"@\"\n *               | \",\" | \";\" | \":\" | \"\\\" | <\">\n *               | \"/\" | \"[\" | \"]\" | \"?\" | \"=\"\n *               | \"{\" | \"}\" | SP | HT\n * quoted-string = ( <\"> *(qdtext | quoted-pair ) <\"> )\n * qdtext        = <any TEXT except <\">>\n * quoted-pair   = \"\\\" CHAR\n * CHAR          = <any US-ASCII character (octets 0 - 127)>\n * TEXT          = <any OCTET except CTLs, but including LWS>\n * LWS           = [CRLF] 1*( SP | HT )\n * CRLF          = CR LF\n * CR            = <US-ASCII CR, carriage return (13)>\n * LF            = <US-ASCII LF, linefeed (10)>\n * SP            = <US-ASCII SP, space (32)>\n * HT            = <US-ASCII HT, horizontal-tab (9)>\n * CTL           = <any US-ASCII control character (octets 0 - 31) and DEL (127)>\n * OCTET         = <any 8-bit sequence of data>\n */\n\nvar PARAM_REGEXP = /;[\\x09\\x20]*([!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\\x09\\x20]*=[\\x09\\x20]*(\"(?:[\\x20!\\x23-\\x5b\\x5d-\\x7e\\x80-\\xff]|\\\\[\\x20-\\x7e])*\"|[!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\\x09\\x20]*/g // eslint-disable-line no-control-regex\nvar TEXT_REGEXP = /^[\\x20-\\x7e\\x80-\\xff]+$/\nvar TOKEN_REGEXP = /^[!#$%&'*+.0-9A-Z^_`a-z|~-]+$/\n\n/**\n * RegExp for various RFC 5987 grammar\n *\n * ext-value     = charset  \"'\" [ language ] \"'\" value-chars\n * charset       = \"UTF-8\" / \"ISO-8859-1\" / mime-charset\n * mime-charset  = 1*mime-charsetc\n * mime-charsetc = ALPHA / DIGIT\n *               / \"!\" / \"#\" / \"$\" / \"%\" / \"&\"\n *               / \"+\" / \"-\" / \"^\" / \"_\" / \"`\"\n *               / \"{\" / \"}\" / \"~\"\n * language      = ( 2*3ALPHA [ extlang ] )\n *               / 4ALPHA\n *               / 5*8ALPHA\n * extlang       = *3( \"-\" 3ALPHA )\n * value-chars   = *( pct-encoded / attr-char )\n * pct-encoded   = \"%\" HEXDIG HEXDIG\n * attr-char     = ALPHA / DIGIT\n *               / \"!\" / \"#\" / \"$\" / \"&\" / \"+\" / \"-\" / \".\"\n *               / \"^\" / \"_\" / \"`\" / \"|\" / \"~\"\n */\n\nvar EXT_VALUE_REGEXP = /^([A-Za-z0-9!#$%&+\\-^_`{}~]+)'(?:[A-Za-z]{2,3}(?:-[A-Za-z]{3}){0,3}|[A-Za-z]{4,8}|)'((?:%[0-9A-Fa-f]{2}|[A-Za-z0-9!#$&+.^_`|~-])+)$/\n\n/**\n * RegExp for various RFC 6266 grammar\n *\n * disposition-type = \"inline\" | \"attachment\" | disp-ext-type\n * disp-ext-type    = token\n * disposition-parm = filename-parm | disp-ext-parm\n * filename-parm    = \"filename\" \"=\" value\n *                  | \"filename*\" \"=\" ext-value\n * disp-ext-parm    = token \"=\" value\n *                  | ext-token \"=\" ext-value\n * ext-token        = <the characters in token, followed by \"*\">\n */\n\nvar DISPOSITION_TYPE_REGEXP = /^([!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\\x09\\x20]*(?:$|;)/ // eslint-disable-line no-control-regex\n\n/**\n * Create an attachment Content-Disposition header.\n *\n * @param {string} [filename]\n * @param {object} [options]\n * @param {string} [options.type=attachment]\n * @param {string|boolean} [options.fallback=true]\n * @return {string}\n * @api public\n */\n\nfunction contentDisposition (filename, options) {\n  var opts = options || {}\n\n  // get type\n  var type = opts.type || 'attachment'\n\n  // get parameters\n  var params = createparams(filename, opts.fallback)\n\n  // format into string\n  return format(new ContentDisposition(type, params))\n}\n\n/**\n * Create parameters object from filename and fallback.\n *\n * @param {string} [filename]\n * @param {string|boolean} [fallback=true]\n * @return {object}\n * @api private\n */\n\nfunction createparams (filename, fallback) {\n  if (filename === undefined) {\n    return\n  }\n\n  var params = {}\n\n  if (typeof filename !== 'string') {\n    throw new TypeError('filename must be a string')\n  }\n\n  // fallback defaults to true\n  if (fallback === undefined) {\n    fallback = true\n  }\n\n  if (typeof fallback !== 'string' && typeof fallback !== 'boolean') {\n    throw new TypeError('fallback must be a string or boolean')\n  }\n\n  if (typeof fallback === 'string' && NON_LATIN1_REGEXP.test(fallback)) {\n    throw new TypeError('fallback must be ISO-8859-1 string')\n  }\n\n  // restrict to file base name\n  var name = basename(filename)\n\n  // determine if name is suitable for quoted string\n  var isQuotedString = TEXT_REGEXP.test(name)\n\n  // generate fallback name\n  var fallbackName = typeof fallback !== 'string'\n    ? fallback && getlatin1(name)\n    : basename(fallback)\n  var hasFallback = typeof fallbackName === 'string' && fallbackName !== name\n\n  // set extended filename parameter\n  if (hasFallback || !isQuotedString || HEX_ESCAPE_REGEXP.test(name)) {\n    params['filename*'] = name\n  }\n\n  // set filename parameter\n  if (isQuotedString || hasFallback) {\n    params.filename = hasFallback\n      ? fallbackName\n      : name\n  }\n\n  return params\n}\n\n/**\n * Format object to Content-Disposition header.\n *\n * @param {object} obj\n * @param {string} obj.type\n * @param {object} [obj.parameters]\n * @return {string}\n * @api private\n */\n\nfunction format (obj) {\n  var parameters = obj.parameters\n  var type = obj.type\n\n  if (!type || typeof type !== 'string' || !TOKEN_REGEXP.test(type)) {\n    throw new TypeError('invalid type')\n  }\n\n  // start with normalized type\n  var string = String(type).toLowerCase()\n\n  // append parameters\n  if (parameters && typeof parameters === 'object') {\n    var param\n    var params = Object.keys(parameters).sort()\n\n    for (var i = 0; i < params.length; i++) {\n      param = params[i]\n\n      var val = param.substr(-1) === '*'\n        ? ustring(parameters[param])\n        : qstring(parameters[param])\n\n      string += '; ' + param + '=' + val\n    }\n  }\n\n  return string\n}\n\n/**\n * Decode a RFC 6987 field value (gracefully).\n *\n * @param {string} str\n * @return {string}\n * @api private\n */\n\nfunction decodefield (str) {\n  var match = EXT_VALUE_REGEXP.exec(str)\n\n  if (!match) {\n    throw new TypeError('invalid extended field value')\n  }\n\n  var charset = match[1].toLowerCase()\n  var encoded = match[2]\n  var value\n\n  // to binary string\n  var binary = encoded.replace(HEX_ESCAPE_REPLACE_REGEXP, pdecode)\n\n  switch (charset) {\n    case 'iso-8859-1':\n      value = getlatin1(binary)\n      break\n    case 'utf-8':\n      value = new Buffer(binary, 'binary').toString('utf8')\n      break\n    default:\n      throw new TypeError('unsupported charset in extended field')\n  }\n\n  return value\n}\n\n/**\n * Get ISO-8859-1 version of string.\n *\n * @param {string} val\n * @return {string}\n * @api private\n */\n\nfunction getlatin1 (val) {\n  // simple Unicode -> ISO-8859-1 transformation\n  return String(val).replace(NON_LATIN1_REGEXP, '?')\n}\n\n/**\n * Parse Content-Disposition header string.\n *\n * @param {string} string\n * @return {object}\n * @api private\n */\n\nfunction parse (string) {\n  if (!string || typeof string !== 'string') {\n    throw new TypeError('argument string is required')\n  }\n\n  var match = DISPOSITION_TYPE_REGEXP.exec(string)\n\n  if (!match) {\n    throw new TypeError('invalid type format')\n  }\n\n  // normalize type\n  var index = match[0].length\n  var type = match[1].toLowerCase()\n\n  var key\n  var names = []\n  var params = {}\n  var value\n\n  // calculate index to start at\n  index = PARAM_REGEXP.lastIndex = match[0].substr(-1) === ';'\n    ? index - 1\n    : index\n\n  // match parameters\n  while ((match = PARAM_REGEXP.exec(string))) {\n    if (match.index !== index) {\n      throw new TypeError('invalid parameter format')\n    }\n\n    index += match[0].length\n    key = match[1].toLowerCase()\n    value = match[2]\n\n    if (names.indexOf(key) !== -1) {\n      throw new TypeError('invalid duplicate parameter')\n    }\n\n    names.push(key)\n\n    if (key.indexOf('*') + 1 === key.length) {\n      // decode extended value\n      key = key.slice(0, -1)\n      value = decodefield(value)\n\n      // overwrite existing value\n      params[key] = value\n      continue\n    }\n\n    if (typeof params[key] === 'string') {\n      continue\n    }\n\n    if (value[0] === '\"') {\n      // remove quotes and escapes\n      value = value\n        .substr(1, value.length - 2)\n        .replace(QESC_REGEXP, '$1')\n    }\n\n    params[key] = value\n  }\n\n  if (index !== -1 && index !== string.length) {\n    throw new TypeError('invalid parameter format')\n  }\n\n  return new ContentDisposition(type, params)\n}\n\n/**\n * Percent decode a single character.\n *\n * @param {string} str\n * @param {string} hex\n * @return {string}\n * @api private\n */\n\nfunction pdecode (str, hex) {\n  return String.fromCharCode(parseInt(hex, 16))\n}\n\n/**\n * Percent encode a single character.\n *\n * @param {string} char\n * @return {string}\n * @api private\n */\n\nfunction pencode (char) {\n  var hex = String(char)\n    .charCodeAt(0)\n    .toString(16)\n    .toUpperCase()\n  return hex.length === 1\n    ? '%0' + hex\n    : '%' + hex\n}\n\n/**\n * Quote a string for HTTP.\n *\n * @param {string} val\n * @return {string}\n * @api private\n */\n\nfunction qstring (val) {\n  var str = String(val)\n\n  return '\"' + str.replace(QUOTE_REGEXP, '\\\\$1') + '\"'\n}\n\n/**\n * Encode a Unicode string for HTTP (RFC 5987).\n *\n * @param {string} val\n * @return {string}\n * @api private\n */\n\nfunction ustring (val) {\n  var str = String(val)\n\n  // percent encode as UTF-8\n  var encoded = encodeURIComponent(str)\n    .replace(ENCODE_URL_ATTR_CHAR_REGEXP, pencode)\n\n  return 'UTF-8\\'\\'' + encoded\n}\n\n/**\n * Class for parsed Content-Disposition header for v8 optimization\n */\n\nfunction ContentDisposition (type, parameters) {\n  this.type = type\n  this.parameters = parameters\n}\n", "\"use strict\";\n\nvar path = require(\"path\");\n\nmodule.exports = function (thePath, potentialParent) {\n    // For inside-directory checking, we want to allow trailing slashes, so normalize.\n    thePath = stripTrailingSep(thePath);\n    potentialParent = stripTrailingSep(potentialParent);\n\n    // Node treats only Windows as case-insensitive in its path module; we follow those conventions.\n    if (process.platform === \"win32\") {\n        thePath = thePath.toLowerCase();\n        potentialParent = potentialParent.toLowerCase();\n    }\n\n    return thePath.lastIndexOf(potentialParent, 0) === 0 &&\n\t\t(\n\t\t\tthePath[potentialParent.length] === path.sep ||\n\t\t\tthePath[potentialParent.length] === undefined\n\t\t);\n};\n\nfunction stripTrailingSep(thePath) {\n    if (thePath[thePath.length - 1] === path.sep) {\n        return thePath.slice(0, -1);\n    }\n    return thePath;\n}\n", "/*!\n * range-parser\n * Copyright(c) 2012-2014 TJ Holowaychuk\n * Copyright(c) 2015-2016 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = rangeParser\n\n/**\n * Parse \"Range\" header `str` relative to the given file `size`.\n *\n * @param {Number} size\n * @param {String} str\n * @param {Object} [options]\n * @return {Array}\n * @public\n */\n\nfunction rangeParser (size, str, options) {\n  var index = str.indexOf('=')\n\n  if (index === -1) {\n    return -2\n  }\n\n  // split the range string\n  var arr = str.slice(index + 1).split(',')\n  var ranges = []\n\n  // add ranges type\n  ranges.type = str.slice(0, index)\n\n  // parse all ranges\n  for (var i = 0; i < arr.length; i++) {\n    var range = arr[i].split('-')\n    var start = parseInt(range[0], 10)\n    var end = parseInt(range[1], 10)\n\n    // -nnn\n    if (isNaN(start)) {\n      start = size - end\n      end = size - 1\n    // nnn-\n    } else if (isNaN(end)) {\n      end = size - 1\n    }\n\n    // limit last-byte-pos to current length\n    if (end > size - 1) {\n      end = size - 1\n    }\n\n    // invalid or unsatisifiable\n    if (isNaN(start) || isNaN(end) || start > end || start < 0) {\n      continue\n    }\n\n    // add range\n    ranges.push({\n      start: start,\n      end: end\n    })\n  }\n\n  if (ranges.length < 1) {\n    // unsatisifiable\n    return -1\n  }\n\n  return options && options.combine\n    ? combineRanges(ranges)\n    : ranges\n}\n\n/**\n * Combine overlapping & adjacent ranges.\n * @private\n */\n\nfunction combineRanges (ranges) {\n  var ordered = ranges.map(mapWithIndex).sort(sortByRangeStart)\n\n  for (var j = 0, i = 1; i < ordered.length; i++) {\n    var range = ordered[i]\n    var current = ordered[j]\n\n    if (range.start > current.end + 1) {\n      // next range\n      ordered[++j] = range\n    } else if (range.end > current.end) {\n      // extend range\n      current.end = range.end\n      current.index = Math.min(current.index, range.index)\n    }\n  }\n\n  // trim ordered array\n  ordered.length = j + 1\n\n  // generate combined range\n  var combined = ordered.sort(sortByRangeIndex).map(mapWithoutIndex)\n\n  // copy ranges type\n  combined.type = ranges.type\n\n  return combined\n}\n\n/**\n * Map function to add index value to ranges.\n * @private\n */\n\nfunction mapWithIndex (range, index) {\n  return {\n    start: range.start,\n    end: range.end,\n    index: index\n  }\n}\n\n/**\n * Map function to remove index value from ranges.\n * @private\n */\n\nfunction mapWithoutIndex (range) {\n  return {\n    start: range.start,\n    end: range.end\n  }\n}\n\n/**\n * Sort function to sort ranges by index.\n * @private\n */\n\nfunction sortByRangeIndex (a, b) {\n  return a.index - b.index\n}\n\n/**\n * Sort function to sort ranges by start position.\n * @private\n */\n\nfunction sortByRangeStart (a, b) {\n  return a.start - b.start\n}\n", "(function(){function directory(it\n) {\nvar encodeHTML = typeof _encodeHTML !== 'undefined' ? _encodeHTML : (function(doNotSkipEncoded) {\n\t\tvar encodeHTMLRules = { \"&\": \"&#38;\", \"<\": \"&#60;\", \">\": \"&#62;\", '\"': \"&#34;\", \"'\": \"&#39;\", \"/\": \"&#47;\" },\n\t\t\tmatchHTML = doNotSkipEncoded ? /[&<>\"'\\/]/g : /&(?!#?\\w+;)|<|>|\"|'|\\//g;\n\t\treturn function(code) {\n\t\t\treturn code ? code.toString().replace(matchHTML, function(m) {return encodeHTMLRules[m] || m;}) : \"\";\n\t\t};\n\t}());var out='<!DOCTYPE html><html lang=\"en\"> <head> <meta charset=\"utf-8\"> <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"> <title>Files within '+encodeHTML(it.directory)+'</title> <style>body { margin: 0; padding: 30px; background: #fff; font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Cantarell\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", sans-serif; -webkit-font-smoothing: antialiased;}main { max-width: 920px;}header { display: flex; justify-content: space-between; flex-wrap: wrap;}h1 { font-size: 18px; font-weight: 500; margin-top: 0; color: #000;}header h1 a { font-size: 18px; font-weight: 500; margin-top: 0; color: #000;}h1 i { font-style: normal;}ul { margin: 0 0 0 -2px; padding: 20px 0 0 0;}ul li { list-style: none; font-size: 14px; display: flex; justify-content: space-between;}a { text-decoration: none;}ul a { color: #000; padding: 10px 5px; margin: 0 -5px; white-space: nowrap; overflow: hidden; display: block; width: 100%; text-overflow: ellipsis;}header a { color: #0076FF; font-size: 11px; font-weight: 400; display: inline-block; line-height: 20px;}svg { height: 13px; vertical-align: text-bottom;}ul a::before { display: inline-block; vertical-align: middle; margin-right: 10px; width: 24px; text-align: center; line-height: 12px;}ul a.file::before { content: url(\"data:image/svg+xml;utf8,<svg width=\\'15\\' height=\\'19\\' fill=\\'none\\' xmlns=\\'http://www.w3.org/2000/svg\\'><path d=\\'M10 8C8.34 8 7 6.66 7 5V1H3c-1.1 0-2 .9-2 2v13c0 1.1.9 2 2 2h9c1.1 0 2-.9 2-2V8h-4zM8 5c0 1.1.9 2 2 2h3.59L8 1.41V5zM3 0h5l7 7v9c0 1.66-1.34 3-3 3H3c-1.66 0-3-1.34-3-3V3c0-1.66 1.34-3 3-3z\\' fill=\\'black\\'/></svg>\");}ul a:hover { text-decoration: underline;}ul a.folder::before { content: url(\"data:image/svg+xml;utf8,<svg width=\\'20\\' height=\\'16\\' fill=\\'none\\' xmlns=\\'http://www.w3.org/2000/svg\\'><path d=\\'M18.784 3.87a1.565 1.565 0 0 0-.565-.356V2.426c0-.648-.523-1.171-1.15-1.171H8.996L7.908.25A.89.89 0 0 0 7.302 0H2.094C1.445 0 .944.523.944 1.171v2.3c-.21.085-.398.21-.565.356a1.348 1.348 0 0 0-.377 1.004l.398 9.83C.42 15.393 1.048 16 1.8 16h15.583c.753 0 1.36-.586 1.4-1.339l.398-9.83c.021-.313-.125-.69-.397-.962zM1.843 3.41V1.191c0-.146.104-.272.25-.272H7.26l1.234 1.088c.083.042.167.104.293.104h8.282c.125 0 .25.126.25.272V3.41H1.844zm15.54 11.712H1.78a.47.47 0 0 1-.481-.46l-.397-9.83c0-.147.041-.252.125-.356a.504.504 0 0 1 .377-.147H17.78c.125 0 .272.063.377.147.083.083.125.209.125.334l-.418 9.83c-.021.272-.23.482-.481.482z\\' fill=\\'black\\'/></svg>\");}ul a.lambda::before { content: url(\"data:image/svg+xml; utf8,<svg width=\\'15\\' height=\\'19\\' fill=\\'none\\' xmlns=\\'http://www.w3.org/2000/svg\\'><path d=\\'M3.5 14.4354H5.31622L7.30541 9.81311H7.43514L8.65315 13.0797C9.05676 14.1643 9.55405 14.5 10.7 14.5C11.0171 14.5 11.291 14.4677 11.5 14.4032V13.1572C11.3847 13.1766 11.2622 13.2024 11.1541 13.2024C10.6351 13.2024 10.3829 13.0281 10.1595 12.4664L8.02613 7.07586C7.21171 5.01646 6.54865 4.5 5.11441 4.5C4.83333 4.5 4.62432 4.53228 4.37207 4.59038V5.83635C4.56667 5.81052 4.66036 5.79761 4.77568 5.79761C5.64775 5.79761 5.9 6.0042 6.4045 7.19852L6.64234 7.77954L3.5 14.4354Z\\' fill=\\'black\\'/><rect x=\\'0.5\\' y=\\'0.5\\' width=\\'14\\' height=\\'18\\' rx=\\'2.5\\' stroke=\\'black\\'/></svg>\");}ul a.file.gif::before,ul a.file.jpg::before,ul a.file.png::before,ul a.file.svg::before { content: url(\"data:image/svg+xml;utf8,<svg width=\\'16\\' height=\\'16\\' viewBox=\\'0 0 80 80\\' xmlns=\\'http://www.w3.org/2000/svg\\' fill=\\'none\\' stroke=\\'black\\' stroke-width=\\'5\\' stroke-linecap=\\'round\\' stroke-linejoin=\\'round\\'><rect x=\\'6\\' y=\\'6\\' width=\\'68\\' height=\\'68\\' rx=\\'5\\' ry=\\'5\\'/><circle cx=\\'24\\' cy=\\'24\\' r=\\'8\\'/><path d=\\'M73 49L59 34 37 52m16 20L27 42 7 58\\'/></svg>\");}::selection { background-color: #79FFE1; color: #000;}::-moz-selection { background-color: #79FFE1; color: #000;}@media (min-width: 768px) { ul {display: flex;flex-wrap: wrap; } ul li {width: 230px;padding-right: 20px; }}@media (min-width: 992px) { body {padding: 45px; } h1, header h1 a {font-size: 15px; } ul li {font-size: 13px;box-sizing: border-box;justify-content: flex-start; }}</style> </head> <body> <main> <header> <h1> <i>Index of&nbsp;</i> ';var arr1=it.paths;if(arr1){var value,index=-1,l1=arr1.length-1;while(index<l1){value=arr1[index+=1];out+=' <a href=\"/'+encodeHTML(value.url)+'\">'+encodeHTML(value.name)+'</a> ';} } out+=' </h1> </header> <ul id=\"files\"> ';var arr2=it.files;if(arr2){var value,index=-1,l2=arr2.length-1;while(index<l2){value=arr2[index+=1];out+=' <li> <a href=\"'+encodeHTML(value.relative)+'\" title=\"'+encodeHTML(value.title)+'\" class=\"'+encodeHTML(value.type)+' '+encodeHTML(value.ext)+'\">'+encodeHTML(value.base)+'</a> </li> ';} } out+=' </ul></main> </body></html>';return out;\n}var itself=directory, _encodeHTML=(function(doNotSkipEncoded) {\n\t\tvar encodeHTMLRules = { \"&\": \"&#38;\", \"<\": \"&#60;\", \">\": \"&#62;\", '\"': \"&#34;\", \"'\": \"&#39;\", \"/\": \"&#47;\" },\n\t\t\tmatchHTML = doNotSkipEncoded ? /[&<>\"'\\/]/g : /&(?!#?\\w+;)|<|>|\"|'|\\//g;\n\t\treturn function(code) {\n\t\t\treturn code ? code.toString().replace(matchHTML, function(m) {return encodeHTMLRules[m] || m;}) : \"\";\n\t\t};\n\t}());if(typeof module!=='undefined' && module.exports) module.exports=itself;else if(typeof define==='function')define(function(){return itself;});else {window.render=window.render||{};window.render['directory']=itself;}}());", "(function(){function error(it\n) {\nvar out='<!DOCTYPE html><head> <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, user-scalable=no\"/> <style> body { margin: 0; font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Cantarell\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", sans-serif; cursor: default; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; -webkit-font-smoothing: antialiased; text-rendering: optimizeLegibility; position: absolute; top: 0; left: 0; right: 0; bottom: 0; display: flex; flex-direction: column; } main, aside, section { display: flex; justify-content: center; align-items: center; flex-direction: column; } main { height: 100%; } aside { background: #000; flex-shrink: 1; padding: 30px 20px; } aside p { margin: 0; color: #999999; font-size: 14px; line-height: 24px; } aside a { color: #fff; text-decoration: none; } section span { font-size: 24px; font-weight: 500; display: block; border-bottom: 1px solid #EAEAEA; text-align: center; padding-bottom: 20px; width: 100px; } section p { font-size: 14px; font-weight: 400; } section span + p { margin: 20px 0 0 0; } @media (min-width: 768px) { section { height: 40px; flex-direction: row; } section span, section p { height: 100%; line-height: 40px; } section span { border-bottom: 0; border-right: 1px solid #EAEAEA; padding: 0 20px 0 0; width: auto; } section span + p { margin: 0; padding-left: 20px; } aside { padding: 50px 0; } aside p { max-width: 520px; text-align: center; } } </style></head><body> <main> <section> <span>'+(it.statusCode)+'</span> <p>'+(it.message)+'</p> </section> </main></body>';return out;\n}var itself=error, _encodeHTML=(function(doNotSkipEncoded) {\n\t\tvar encodeHTMLRules = { \"&\": \"&#38;\", \"<\": \"&#60;\", \">\": \"&#62;\", '\"': \"&#34;\", \"'\": \"&#39;\", \"/\": \"&#47;\" },\n\t\t\tmatchHTML = doNotSkipEncoded ? /[&<>\"'\\/]/g : /&(?!#?\\w+;)|<|>|\"|'|\\//g;\n\t\treturn function(code) {\n\t\t\treturn code ? code.toString().replace(matchHTML, function(m) {return encodeHTMLRules[m] || m;}) : \"\";\n\t\t};\n\t}());if(typeof module!=='undefined' && module.exports) module.exports=itself;else if(typeof define==='function')define(function(){return itself;});else {window.render=window.render||{};window.render['error']=itself;}}());", "// Native\nconst {promisify} = require('util');\nconst path = require('path');\nconst {createHash} = require('crypto');\nconst {realpath, lstat, createReadStream, readdir} = require('fs');\n\n// Packages\nconst url = require('url');\nconst slasher = require('./glob-slash');\nconst minimatch = require('minimatch');\nconst pathToRegExp = require('path-to-regexp');\nconst mime = require('mime-types');\nconst bytes = require('bytes');\nconst contentDisposition = require('content-disposition');\nconst isPathInside = require('path-is-inside');\nconst parseRange = require('range-parser');\n\n// Other\nconst directoryTemplate = require('./directory');\nconst errorTemplate = require('./error');\n\nconst etags = new Map();\n\nconst calculateSha = (handlers, absolutePath) =>\n\tnew Promise((resolve, reject) => {\n\t\tconst hash = createHash('sha1');\n\t\thash.update(path.extname(absolutePath));\n\t\thash.update('-');\n\t\tconst rs = handlers.createReadStream(absolutePath);\n\t\trs.on('error', reject);\n\t\trs.on('data', buf => hash.update(buf));\n\t\trs.on('end', () => {\n\t\t\tconst sha = hash.digest('hex');\n\t\t\tresolve(sha);\n\t\t});\n\t});\n\nconst sourceMatches = (source, requestPath, allowSegments) => {\n\tconst keys = [];\n\tconst slashed = slasher(source);\n\tconst resolvedPath = path.posix.resolve(requestPath);\n\n\tlet results = null;\n\n\tif (allowSegments) {\n\t\tconst normalized = slashed.replace('*', '(.*)');\n\t\tconst expression = pathToRegExp(normalized, keys);\n\n\t\tresults = expression.exec(resolvedPath);\n\n\t\tif (!results) {\n\t\t\t// clear keys so that they are not used\n\t\t\t// later with empty results. this may\n\t\t\t// happen if minimatch returns true\n\t\t\tkeys.length = 0;\n\t\t}\n\t}\n\n\tif (results || minimatch(resolvedPath, slashed)) {\n\t\treturn {\n\t\t\tkeys,\n\t\t\tresults\n\t\t};\n\t}\n\n\treturn null;\n};\n\nconst toTarget = (source, destination, previousPath) => {\n\tconst matches = sourceMatches(source, previousPath, true);\n\n\tif (!matches) {\n\t\treturn null;\n\t}\n\n\tconst {keys, results} = matches;\n\n\tconst props = {};\n\tconst {protocol} = url.parse(destination);\n\tconst normalizedDest = protocol ? destination : slasher(destination);\n\tconst toPath = pathToRegExp.compile(normalizedDest);\n\n\tfor (let index = 0; index < keys.length; index++) {\n\t\tconst {name} = keys[index];\n\t\tprops[name] = results[index + 1];\n\t}\n\n\treturn toPath(props);\n};\n\nconst applyRewrites = (requestPath, rewrites = [], repetitive) => {\n\t// We need to copy the array, since we're going to modify it.\n\tconst rewritesCopy = rewrites.slice();\n\n\t// If the method was called again, the path was already rewritten\n\t// so we need to make sure to return it.\n\tconst fallback = repetitive ? requestPath : null;\n\n\tif (rewritesCopy.length === 0) {\n\t\treturn fallback;\n\t}\n\n\tfor (let index = 0; index < rewritesCopy.length; index++) {\n\t\tconst {source, destination} = rewrites[index];\n\t\tconst target = toTarget(source, destination, requestPath);\n\n\t\tif (target) {\n\t\t\t// Remove rules that were already applied\n\t\t\trewritesCopy.splice(index, 1);\n\n\t\t\t// Check if there are remaining ones to be applied\n\t\t\treturn applyRewrites(slasher(target), rewritesCopy, true);\n\t\t}\n\t}\n\n\treturn fallback;\n};\n\nconst ensureSlashStart = target => (target.startsWith('/') ? target : `/${target}`);\n\nconst shouldRedirect = (decodedPath, {redirects = [], trailingSlash}, cleanUrl) => {\n\tconst slashing = typeof trailingSlash === 'boolean';\n\tconst defaultType = 301;\n\tconst matchHTML = /(\\.html|\\/index)$/g;\n\n\tif (redirects.length === 0 && !slashing && !cleanUrl) {\n\t\treturn null;\n\t}\n\n\t// By stripping the HTML parts from the decoded\n\t// path *before* handling the trailing slash, we make\n\t// sure that only *one* redirect occurs if both\n\t// config options are used.\n\tif (cleanUrl && matchHTML.test(decodedPath)) {\n\t\tdecodedPath = decodedPath.replace(matchHTML, '');\n\t\tif (decodedPath.indexOf('//') > -1) {\n\t\t\tdecodedPath = decodedPath.replace(/\\/+/g, '/');\n\t\t}\n\t\treturn {\n\t\t\ttarget: ensureSlashStart(decodedPath),\n\t\t\tstatusCode: defaultType\n\t\t};\n\t}\n\n\tif (slashing) {\n\t\tconst {ext, name} = path.parse(decodedPath);\n\t\tconst isTrailed = decodedPath.endsWith('/');\n\t\tconst isDotfile = name.startsWith('.');\n\n\t\tlet target = null;\n\n\t\tif (!trailingSlash && isTrailed) {\n\t\t\ttarget = decodedPath.slice(0, -1);\n\t\t} else if (trailingSlash && !isTrailed && !ext && !isDotfile) {\n\t\t\ttarget = `${decodedPath}/`;\n\t\t}\n\n\t\tif (decodedPath.indexOf('//') > -1) {\n\t\t\ttarget = decodedPath.replace(/\\/+/g, '/');\n\t\t}\n\n\t\tif (target) {\n\t\t\treturn {\n\t\t\t\ttarget: ensureSlashStart(target),\n\t\t\t\tstatusCode: defaultType\n\t\t\t};\n\t\t}\n\t}\n\n\t// This is currently the fastest way to\n\t// iterate over an array\n\tfor (let index = 0; index < redirects.length; index++) {\n\t\tconst {source, destination, type} = redirects[index];\n\t\tconst target = toTarget(source, destination, decodedPath);\n\n\t\tif (target) {\n\t\t\treturn {\n\t\t\t\ttarget,\n\t\t\t\tstatusCode: type || defaultType\n\t\t\t};\n\t\t}\n\t}\n\n\treturn null;\n};\n\nconst appendHeaders = (target, source) => {\n\tfor (let index = 0; index < source.length; index++) {\n\t\tconst {key, value} = source[index];\n\t\ttarget[key] = value;\n\t}\n};\n\nconst getHeaders = async (handlers, config, current, absolutePath, stats) => {\n\tconst {headers: customHeaders = [], etag = false} = config;\n\tconst related = {};\n\tconst {base} = path.parse(absolutePath);\n\tconst relativePath = path.relative(current, absolutePath);\n\n\tif (customHeaders.length > 0) {\n\t\t// By iterating over all headers and never stopping, developers\n\t\t// can specify multiple header sources in the config that\n\t\t// might match a single path.\n\t\tfor (let index = 0; index < customHeaders.length; index++) {\n\t\t\tconst {source, headers} = customHeaders[index];\n\n\t\t\tif (sourceMatches(source, slasher(relativePath))) {\n\t\t\t\tappendHeaders(related, headers);\n\t\t\t}\n\t\t}\n\t}\n\n\tlet defaultHeaders = {};\n\n\tif (stats) {\n\t\tdefaultHeaders = {\n\t\t\t'Content-Length': stats.size,\n\t\t\t// Default to \"inline\", which always tries to render in the browser,\n\t\t\t// if that's not working, it will save the file. But to be clear: This\n\t\t\t// only happens if it cannot find a appropiate value.\n\t\t\t'Content-Disposition': contentDisposition(base, {\n\t\t\t\ttype: 'inline'\n\t\t\t}),\n\t\t\t'Accept-Ranges': 'bytes'\n\t\t};\n\n\t\tif (etag) {\n\t\t\tlet [mtime, sha] = etags.get(absolutePath) || [];\n\t\t\tif (Number(mtime) !== Number(stats.mtime)) {\n\t\t\t\tsha = await calculateSha(handlers, absolutePath);\n\t\t\t\tetags.set(absolutePath, [stats.mtime, sha]);\n\t\t\t}\n\t\t\tdefaultHeaders['ETag'] = `\"${sha}\"`;\n\t\t} else {\n\t\t\tdefaultHeaders['Last-Modified'] = stats.mtime.toUTCString();\n\t\t}\n\n\t\tconst contentType = mime.contentType(base);\n\n\t\tif (contentType) {\n\t\t\tdefaultHeaders['Content-Type'] = contentType;\n\t\t}\n\t}\n\n\tconst headers = Object.assign(defaultHeaders, related);\n\n\tfor (const key in headers) {\n\t\tif (headers.hasOwnProperty(key) && headers[key] === null) {\n\t\t\tdelete headers[key];\n\t\t}\n\t}\n\n\treturn headers;\n};\n\nconst applicable = (decodedPath, configEntry) => {\n\tif (typeof configEntry === 'boolean') {\n\t\treturn configEntry;\n\t}\n\n\tif (Array.isArray(configEntry)) {\n\t\tfor (let index = 0; index < configEntry.length; index++) {\n\t\t\tconst source = configEntry[index];\n\n\t\t\tif (sourceMatches(source, decodedPath)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\treturn true;\n};\n\nconst getPossiblePaths = (relativePath, extension) => [\n\tpath.join(relativePath, `index${extension}`),\n\trelativePath.endsWith('/') ? relativePath.replace(/\\/$/g, extension) : (relativePath + extension)\n].filter(item => path.basename(item) !== extension);\n\nconst findRelated = async (current, relativePath, rewrittenPath, originalStat) => {\n\tconst possible = rewrittenPath ? [rewrittenPath] : getPossiblePaths(relativePath, '.html');\n\n\tlet stats = null;\n\n\tfor (let index = 0; index < possible.length; index++) {\n\t\tconst related = possible[index];\n\t\tconst absolutePath = path.join(current, related);\n\n\t\ttry {\n\t\t\tstats = await originalStat(absolutePath);\n\t\t} catch (err) {\n\t\t\tif (err.code !== 'ENOENT' && err.code !== 'ENOTDIR') {\n\t\t\t\tthrow err;\n\t\t\t}\n\t\t}\n\n\t\tif (stats) {\n\t\t\treturn {\n\t\t\t\tstats,\n\t\t\t\tabsolutePath\n\t\t\t};\n\t\t}\n\t}\n\n\treturn null;\n};\n\nconst canBeListed = (excluded, file) => {\n\tconst slashed = slasher(file);\n\tlet whether = true;\n\n\tfor (let mark = 0; mark < excluded.length; mark++) {\n\t\tconst source = excluded[mark];\n\n\t\tif (sourceMatches(source, slashed)) {\n\t\t\twhether = false;\n\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn whether;\n};\n\nconst renderDirectory = async (current, acceptsJSON, handlers, methods, config, paths) => {\n\tconst {directoryListing, trailingSlash, unlisted = [], renderSingle} = config;\n\tconst slashSuffix = typeof trailingSlash === 'boolean' ? (trailingSlash ? '/' : '') : '/';\n\tconst {relativePath, absolutePath} = paths;\n\n\tconst excluded = [\n\t\t'.DS_Store',\n\t\t'.git',\n\t\t...unlisted\n\t];\n\n\tif (!applicable(relativePath, directoryListing) && !renderSingle) {\n\t\treturn {};\n\t}\n\n\tlet files = await handlers.readdir(absolutePath);\n\n\tconst canRenderSingle = renderSingle && (files.length === 1);\n\n\tfor (let index = 0; index < files.length; index++) {\n\t\tconst file = files[index];\n\n\t\tconst filePath = path.resolve(absolutePath, file);\n\t\tconst details = path.parse(filePath);\n\n\t\t// It's important to indicate that the `stat` call was\n\t\t// spawned by the directory listing, as Now is\n\t\t// simulating those calls and needs to special-case this.\n\t\tlet stats = null;\n\n\t\tif (methods.lstat) {\n\t\t\tstats = await handlers.lstat(filePath, true);\n\t\t} else {\n\t\t\tstats = await handlers.lstat(filePath);\n\t\t}\n\n\t\tdetails.relative = path.join(relativePath, details.base);\n\n\t\tif (stats.isDirectory()) {\n\t\t\tdetails.base += slashSuffix;\n\t\t\tdetails.relative += slashSuffix;\n\t\t\tdetails.type = 'folder';\n\t\t} else {\n\t\t\tif (canRenderSingle) {\n\t\t\t\treturn {\n\t\t\t\t\tsingleFile: true,\n\t\t\t\t\tabsolutePath: filePath,\n\t\t\t\t\tstats\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tdetails.ext = details.ext.split('.')[1] || 'txt';\n\t\t\tdetails.type = 'file';\n\n\t\t\tdetails.size = bytes(stats.size, {\n\t\t\t\tunitSeparator: ' ',\n\t\t\t\tdecimalPlaces: 0\n\t\t\t});\n\t\t}\n\n\t\tdetails.title = details.base;\n\n\t\tif (canBeListed(excluded, file)) {\n\t\t\tfiles[index] = details;\n\t\t} else {\n\t\t\tdelete files[index];\n\t\t}\n\t}\n\n\tconst toRoot = path.relative(current, absolutePath);\n\tconst directory = path.join(path.basename(current), toRoot, slashSuffix);\n\tconst pathParts = directory.split(path.sep).filter(Boolean);\n\n\t// Sort to list directories first, then sort alphabetically\n\tfiles = files.sort((a, b) => {\n\t\tconst aIsDir = a.type === 'directory';\n\t\tconst bIsDir = b.type === 'directory';\n\n\t\t/* istanbul ignore next */\n\t\tif (aIsDir && !bIsDir) {\n\t\t\treturn -1;\n\t\t}\n\n\t\tif ((bIsDir && !aIsDir) || (a.base > b.base)) {\n\t\t\treturn 1;\n\t\t}\n\n\t\t/* istanbul ignore next */\n\t\tif (a.base < b.base) {\n\t\t\treturn -1;\n\t\t}\n\n\t\t/* istanbul ignore next */\n\t\treturn 0;\n\t}).filter(Boolean);\n\n\t// Add parent directory to the head of the sorted files array\n\tif (toRoot.length > 0) {\n\t\tconst directoryPath = [...pathParts].slice(1);\n\t\tconst relative = path.join('/', ...directoryPath, '..', slashSuffix);\n\n\t\tfiles.unshift({\n\t\t\ttype: 'directory',\n\t\t\tbase: '..',\n\t\t\trelative,\n\t\t\ttitle: relative,\n\t\t\text: ''\n\t\t});\n\t}\n\n\tconst subPaths = [];\n\n\tfor (let index = 0; index < pathParts.length; index++) {\n\t\tconst parents = [];\n\t\tconst isLast = index === (pathParts.length - 1);\n\n\t\tlet before = 0;\n\n\t\twhile (before <= index) {\n\t\t\tparents.push(pathParts[before]);\n\t\t\tbefore++;\n\t\t}\n\n\t\tparents.shift();\n\n\t\tsubPaths.push({\n\t\t\tname: pathParts[index] + (isLast ? slashSuffix : '/'),\n\t\t\turl: index === 0 ? '' : parents.join('/') + slashSuffix\n\t\t});\n\t}\n\n\tconst spec = {\n\t\tfiles,\n\t\tdirectory,\n\t\tpaths: subPaths\n\t};\n\n\tconst output = acceptsJSON ? JSON.stringify(spec) : directoryTemplate(spec);\n\n\treturn {directory: output};\n};\n\nconst sendError = async (absolutePath, response, acceptsJSON, current, handlers, config, spec) => {\n\tconst {err: original, message, code, statusCode} = spec;\n\n\t/* istanbul ignore next */\n\tif (original && process.env.NODE_ENV !== 'test') {\n\t\tconsole.error(original);\n\t}\n\n\tresponse.statusCode = statusCode;\n\n\tif (acceptsJSON) {\n\t\tresponse.setHeader('Content-Type', 'application/json; charset=utf-8');\n\n\t\tresponse.end(JSON.stringify({\n\t\t\terror: {\n\t\t\t\tcode,\n\t\t\t\tmessage\n\t\t\t}\n\t\t}));\n\n\t\treturn;\n\t}\n\n\tlet stats = null;\n\n\tconst errorPage = path.join(current, `${statusCode}.html`);\n\n\ttry {\n\t\tstats = await handlers.lstat(errorPage);\n\t} catch (err) {\n\t\tif (err.code !== 'ENOENT') {\n\t\t\tconsole.error(err);\n\t\t}\n\t}\n\n\tif (stats) {\n\t\tlet stream = null;\n\n\t\ttry {\n\t\t\tstream = await handlers.createReadStream(errorPage);\n\n\t\t\tconst headers = await getHeaders(handlers, config, current, errorPage, stats);\n\n\t\t\tresponse.writeHead(statusCode, headers);\n\t\t\tstream.pipe(response);\n\n\t\t\treturn;\n\t\t} catch (err) {\n\t\t\tconsole.error(err);\n\t\t}\n\t}\n\n\tconst headers = await getHeaders(handlers, config, current, absolutePath, null);\n\theaders['Content-Type'] = 'text/html; charset=utf-8';\n\n\tresponse.writeHead(statusCode, headers);\n\tresponse.end(errorTemplate({statusCode, message}));\n};\n\nconst internalError = async (...args) => {\n\tconst lastIndex = args.length - 1;\n\tconst err = args[lastIndex];\n\n\targs[lastIndex] = {\n\t\tstatusCode: 500,\n\t\tcode: 'internal_server_error',\n\t\tmessage: 'A server error has occurred',\n\t\terr\n\t};\n\n\treturn sendError(...args);\n};\n\nconst getHandlers = methods => Object.assign({\n\tlstat: promisify(lstat),\n\trealpath: promisify(realpath),\n\tcreateReadStream,\n\treaddir: promisify(readdir),\n\tsendError\n}, methods);\n\nmodule.exports = async (request, response, config = {}, methods = {}) => {\n\tconst cwd = process.cwd();\n\tconst current = config.public ? path.resolve(cwd, config.public) : cwd;\n\tconst handlers = getHandlers(methods);\n\n\tlet relativePath = null;\n\tlet acceptsJSON = null;\n\n\tif (request.headers.accept) {\n\t\tacceptsJSON = request.headers.accept.includes('application/json');\n\t}\n\n\ttry {\n\t\trelativePath = decodeURIComponent(url.parse(request.url).pathname);\n\t} catch (err) {\n\t\treturn sendError('/', response, acceptsJSON, current, handlers, config, {\n\t\t\tstatusCode: 400,\n\t\t\tcode: 'bad_request',\n\t\t\tmessage: 'Bad Request'\n\t\t});\n\t}\n\n\tlet absolutePath = path.join(current, relativePath);\n\n\t// Prevent path traversal vulnerabilities. We could do this\n\t// by ourselves, but using the package covers all the edge cases.\n\tif (!isPathInside(absolutePath, current)) {\n\t\treturn sendError(absolutePath, response, acceptsJSON, current, handlers, config, {\n\t\t\tstatusCode: 400,\n\t\t\tcode: 'bad_request',\n\t\t\tmessage: 'Bad Request'\n\t\t});\n\t}\n\n\tconst cleanUrl = applicable(relativePath, config.cleanUrls);\n\tconst redirect = shouldRedirect(relativePath, config, cleanUrl);\n\n\tif (redirect) {\n\t\tresponse.writeHead(redirect.statusCode, {\n\t\t\tLocation: encodeURI(redirect.target)\n\t\t});\n\n\t\tresponse.end();\n\t\treturn;\n\t}\n\n\tlet stats = null;\n\n\t// It's extremely important that we're doing multiple stat calls. This one\n\t// right here could technically be removed, but then the program\n\t// would be slower. Because for directories, we always want to see if a related file\n\t// exists and then (after that), fetch the directory itself if no\n\t// related file was found. However (for files, of which most have extensions), we should\n\t// always stat right away.\n\t//\n\t// When simulating a file system without directory indexes, calculating whether a\n\t// directory exists requires loading all the file paths and then checking if\n\t// one of them includes the path of the directory. As that's a very\n\t// performance-expensive thing to do, we need to ensure it's not happening if not really necessary.\n\n\tif (path.extname(relativePath) !== '') {\n\t\ttry {\n\t\t\tstats = await handlers.lstat(absolutePath);\n\t\t} catch (err) {\n\t\t\tif (err.code !== 'ENOENT' && err.code !== 'ENOTDIR') {\n\t\t\t\treturn internalError(absolutePath, response, acceptsJSON, current, handlers, config, err);\n\t\t\t}\n\t\t}\n\t}\n\n\tconst rewrittenPath = applyRewrites(relativePath, config.rewrites);\n\n\tif (!stats && (cleanUrl || rewrittenPath)) {\n\t\ttry {\n\t\t\tconst related = await findRelated(current, relativePath, rewrittenPath, handlers.lstat);\n\n\t\t\tif (related) {\n\t\t\t\t({stats, absolutePath} = related);\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tif (err.code !== 'ENOENT' && err.code !== 'ENOTDIR') {\n\t\t\t\treturn internalError(absolutePath, response, acceptsJSON, current, handlers, config, err);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (!stats) {\n\t\ttry {\n\t\t\tstats = await handlers.lstat(absolutePath);\n\t\t} catch (err) {\n\t\t\tif (err.code !== 'ENOENT' && err.code !== 'ENOTDIR') {\n\t\t\t\treturn internalError(absolutePath, response, acceptsJSON, current, handlers, config, err);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (stats && stats.isDirectory()) {\n\t\tlet directory = null;\n\t\tlet singleFile = null;\n\n\t\ttry {\n\t\t\tconst related = await renderDirectory(current, acceptsJSON, handlers, methods, config, {\n\t\t\t\trelativePath,\n\t\t\t\tabsolutePath\n\t\t\t});\n\n\t\t\tif (related.singleFile) {\n\t\t\t\t({stats, absolutePath, singleFile} = related);\n\t\t\t} else {\n\t\t\t\t({directory} = related);\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tif (err.code !== 'ENOENT') {\n\t\t\t\treturn internalError(absolutePath, response, acceptsJSON, current, handlers, config, err);\n\t\t\t}\n\t\t}\n\n\t\tif (directory) {\n\t\t\tconst contentType = acceptsJSON ? 'application/json; charset=utf-8' : 'text/html; charset=utf-8';\n\n\t\t\tresponse.statusCode = 200;\n\t\t\tresponse.setHeader('Content-Type', contentType);\n\t\t\tresponse.end(directory);\n\n\t\t\treturn;\n\t\t}\n\n\t\tif (!singleFile) {\n\t\t\t// The directory listing is disabled, so we want to\n\t\t\t// render a 404 error.\n\t\t\tstats = null;\n\t\t}\n\t}\n\n\tconst isSymLink = stats && stats.isSymbolicLink();\n\n\t// There are two scenarios in which we want to reply with\n\t// a 404 error: Either the path does not exist, or it is a\n\t// symlink while the `symlinks` option is disabled (which it is by default).\n\tif (!stats || (!config.symlinks && isSymLink)) {\n\t\t// allow for custom 404 handling\n\t\treturn handlers.sendError(absolutePath, response, acceptsJSON, current, handlers, config, {\n\t\t\tstatusCode: 404,\n\t\t\tcode: 'not_found',\n\t\t\tmessage: 'The requested path could not be found'\n\t\t});\n\t}\n\n\t// If we figured out that the target is a symlink, we need to\n\t// resolve the symlink and run a new `stat` call just for the\n\t// target of that symlink.\n\tif (isSymLink) {\n\t\ttry {\n\t\t\tabsolutePath = await handlers.realpath(absolutePath);\n\t\t} catch (err) {\n\t\t\tif (err.code !== 'ENOENT') {\n\t\t\t\tthrow err;\n\t\t\t}\n\n\t\t\t// The requested symlink is invalid\n\t\t\treturn handlers.sendError(absolutePath, response, acceptsJSON, current, handlers, config, {\n\t\t\t\tstatusCode: 404,\n\t\t\t\tcode: 'not_found',\n\t\t\t\tmessage: 'The requested path could not be found'\n\t\t\t});\n\t\t}\n\t\tstats = await handlers.lstat(absolutePath);\n\t}\n\n\tconst streamOpts = {};\n\n\t// TODO ? if-range\n\tif (request.headers.range && stats.size) {\n\t\tconst range = parseRange(stats.size, request.headers.range);\n\n\t\tif (typeof range === 'object' && range.type === 'bytes') {\n\t\t\tconst {start, end} = range[0];\n\n\t\t\tstreamOpts.start = start;\n\t\t\tstreamOpts.end = end;\n\n\t\t\tresponse.statusCode = 206;\n\t\t} else {\n\t\t\tresponse.statusCode = 416;\n\t\t\tresponse.setHeader('Content-Range', `bytes */${stats.size}`);\n\t\t}\n\t}\n\n\t// TODO ? multiple ranges\n\n\tlet stream = null;\n\n\ttry {\n\t\tstream = await handlers.createReadStream(absolutePath, streamOpts);\n\t} catch (err) {\n\t\treturn internalError(absolutePath, response, acceptsJSON, current, handlers, config, err);\n\t}\n\n\tconst headers = await getHeaders(handlers, config, current, absolutePath, stats);\n\n\t// eslint-disable-next-line no-undefined\n\tif (streamOpts.start !== undefined && streamOpts.end !== undefined) {\n\t\theaders['Content-Range'] = `bytes ${streamOpts.start}-${streamOpts.end}/${stats.size}`;\n\t\theaders['Content-Length'] = streamOpts.end - streamOpts.start + 1;\n\t}\n\n\t// We need to check for `headers.ETag` being truthy first, otherwise it will\n\t// match `undefined` being equal to `undefined`, which is true.\n\t//\n\t// Checking for `undefined` and `null` is also important, because `Range` can be `0`.\n\t//\n\t// eslint-disable-next-line no-eq-null\n\tif (request.headers.range == null && headers.ETag && headers.ETag === request.headers['if-none-match']) {\n\t\tresponse.statusCode = 304;\n\t\tresponse.end();\n\n\t\treturn;\n\t}\n\n\tresponse.writeHead(response.statusCode || 200, headers);\n\tstream.pipe(response);\n};\n", "const { format } = require('util');\n\nclass OPError extends Error {\n  constructor({ error_description, error, error_uri, session_state, state, scope }, response) {\n    super(!error_description ? error : `${error} (${error_description})`);\n\n    Object.assign(\n      this,\n      { error },\n      error_description && { error_description },\n      error_uri && { error_uri },\n      state && { state },\n      scope && { scope },\n      session_state && { session_state },\n    );\n\n    if (response) {\n      Object.defineProperty(this, 'response', {\n        value: response,\n      });\n    }\n\n    this.name = this.constructor.name;\n    Error.captureStackTrace(this, this.constructor);\n  }\n}\n\nclass RPError extends Error {\n  constructor(...args) {\n    if (typeof args[0] === 'string') {\n      super(format(...args));\n    } else {\n      const { message, printf, response, ...rest } = args[0];\n      if (printf) {\n        super(format(...printf));\n      } else {\n        super(message);\n      }\n      Object.assign(this, rest);\n      if (response) {\n        Object.defineProperty(this, 'response', {\n          value: response,\n        });\n      }\n    }\n\n    this.name = this.constructor.name;\n    Error.captureStackTrace(this, this.constructor);\n  }\n}\n\nmodule.exports = {\n  OPError,\n  RPError,\n};\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst crypto_1 = require(\"crypto\");\nconst digest = (algorithm, data) => (0, crypto_1.createHash)(algorithm).update(data).digest();\nexports.default = digest;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.concatKdf = exports.lengthAndInput = exports.uint32be = exports.uint64be = exports.p2s = exports.concat = exports.decoder = exports.encoder = void 0;\nconst digest_js_1 = require(\"../runtime/digest.js\");\nexports.encoder = new TextEncoder();\nexports.decoder = new TextDecoder();\nconst MAX_INT32 = 2 ** 32;\nfunction concat(...buffers) {\n    const size = buffers.reduce((acc, { length }) => acc + length, 0);\n    const buf = new Uint8Array(size);\n    let i = 0;\n    buffers.forEach((buffer) => {\n        buf.set(buffer, i);\n        i += buffer.length;\n    });\n    return buf;\n}\nexports.concat = concat;\nfunction p2s(alg, p2sInput) {\n    return concat(exports.encoder.encode(alg), new Uint8Array([0]), p2sInput);\n}\nexports.p2s = p2s;\nfunction writeUInt32BE(buf, value, offset) {\n    if (value < 0 || value >= MAX_INT32) {\n        throw new RangeError(`value must be >= 0 and <= ${MAX_INT32 - 1}. Received ${value}`);\n    }\n    buf.set([value >>> 24, value >>> 16, value >>> 8, value & 0xff], offset);\n}\nfunction uint64be(value) {\n    const high = Math.floor(value / MAX_INT32);\n    const low = value % MAX_INT32;\n    const buf = new Uint8Array(8);\n    writeUInt32BE(buf, high, 0);\n    writeUInt32BE(buf, low, 4);\n    return buf;\n}\nexports.uint64be = uint64be;\nfunction uint32be(value) {\n    const buf = new Uint8Array(4);\n    writeUInt32BE(buf, value);\n    return buf;\n}\nexports.uint32be = uint32be;\nfunction lengthAndInput(input) {\n    return concat(uint32be(input.length), input);\n}\nexports.lengthAndInput = lengthAndInput;\nasync function concatKdf(secret, bits, value) {\n    const iterations = Math.ceil((bits >> 3) / 32);\n    const res = new Uint8Array(iterations * 32);\n    for (let iter = 0; iter < iterations; iter++) {\n        const buf = new Uint8Array(4 + secret.length + value.length);\n        buf.set(uint32be(iter + 1));\n        buf.set(secret, 4);\n        buf.set(value, 4 + secret.length);\n        res.set(await (0, digest_js_1.default)('sha256', buf), iter * 32);\n    }\n    return res.slice(0, bits >> 3);\n}\nexports.concatKdf = concatKdf;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.decode = exports.encode = exports.encodeBase64 = exports.decodeBase64 = void 0;\nconst buffer_1 = require(\"buffer\");\nconst buffer_utils_js_1 = require(\"../lib/buffer_utils.js\");\nlet encode;\nfunction normalize(input) {\n    let encoded = input;\n    if (encoded instanceof Uint8Array) {\n        encoded = buffer_utils_js_1.decoder.decode(encoded);\n    }\n    return encoded;\n}\nif (buffer_1.Buffer.isEncoding('base64url')) {\n    exports.encode = encode = (input) => buffer_1.Buffer.from(input).toString('base64url');\n}\nelse {\n    exports.encode = encode = (input) => buffer_1.Buffer.from(input).toString('base64').replace(/=/g, '').replace(/\\+/g, '-').replace(/\\//g, '_');\n}\nconst decodeBase64 = (input) => buffer_1.Buffer.from(input, 'base64');\nexports.decodeBase64 = decodeBase64;\nconst encodeBase64 = (input) => buffer_1.Buffer.from(input).toString('base64');\nexports.encodeBase64 = encodeBase64;\nconst decode = (input) => buffer_1.Buffer.from(normalize(input), 'base64');\nexports.decode = decode;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.JWSSignatureVerificationFailed = exports.JWKSTimeout = exports.JWKSMultipleMatchingKeys = exports.JWKSNoMatchingKey = exports.JWKSInvalid = exports.JWKInvalid = exports.JWTInvalid = exports.JWSInvalid = exports.JWEInvalid = exports.JWEDecompressionFailed = exports.JWEDecryptionFailed = exports.JOSENotSupported = exports.JOSEAlgNotAllowed = exports.JWTExpired = exports.JWTClaimValidationFailed = exports.JOSEError = void 0;\nclass JOSEError extends Error {\n    static get code() {\n        return 'ERR_JOSE_GENERIC';\n    }\n    constructor(message) {\n        var _a;\n        super(message);\n        this.code = 'ERR_JOSE_GENERIC';\n        this.name = this.constructor.name;\n        (_a = Error.captureStackTrace) === null || _a === void 0 ? void 0 : _a.call(Error, this, this.constructor);\n    }\n}\nexports.JOSEError = JOSEError;\nclass JWTClaimValidationFailed extends JOSEError {\n    static get code() {\n        return 'ERR_JWT_CLAIM_VALIDATION_FAILED';\n    }\n    constructor(message, claim = 'unspecified', reason = 'unspecified') {\n        super(message);\n        this.code = 'ERR_JWT_CLAIM_VALIDATION_FAILED';\n        this.claim = claim;\n        this.reason = reason;\n    }\n}\nexports.JWTClaimValidationFailed = JWTClaimValidationFailed;\nclass JWTExpired extends JOSEError {\n    static get code() {\n        return 'ERR_JWT_EXPIRED';\n    }\n    constructor(message, claim = 'unspecified', reason = 'unspecified') {\n        super(message);\n        this.code = 'ERR_JWT_EXPIRED';\n        this.claim = claim;\n        this.reason = reason;\n    }\n}\nexports.JWTExpired = JWTExpired;\nclass JOSEAlgNotAllowed extends JOSEError {\n    constructor() {\n        super(...arguments);\n        this.code = 'ERR_JOSE_ALG_NOT_ALLOWED';\n    }\n    static get code() {\n        return 'ERR_JOSE_ALG_NOT_ALLOWED';\n    }\n}\nexports.JOSEAlgNotAllowed = JOSEAlgNotAllowed;\nclass JOSENotSupported extends JOSEError {\n    constructor() {\n        super(...arguments);\n        this.code = 'ERR_JOSE_NOT_SUPPORTED';\n    }\n    static get code() {\n        return 'ERR_JOSE_NOT_SUPPORTED';\n    }\n}\nexports.JOSENotSupported = JOSENotSupported;\nclass JWEDecryptionFailed extends JOSEError {\n    constructor() {\n        super(...arguments);\n        this.code = 'ERR_JWE_DECRYPTION_FAILED';\n        this.message = 'decryption operation failed';\n    }\n    static get code() {\n        return 'ERR_JWE_DECRYPTION_FAILED';\n    }\n}\nexports.JWEDecryptionFailed = JWEDecryptionFailed;\nclass JWEDecompressionFailed extends JOSEError {\n    constructor() {\n        super(...arguments);\n        this.code = 'ERR_JWE_DECOMPRESSION_FAILED';\n        this.message = 'decompression operation failed';\n    }\n    static get code() {\n        return 'ERR_JWE_DECOMPRESSION_FAILED';\n    }\n}\nexports.JWEDecompressionFailed = JWEDecompressionFailed;\nclass JWEInvalid extends JOSEError {\n    constructor() {\n        super(...arguments);\n        this.code = 'ERR_JWE_INVALID';\n    }\n    static get code() {\n        return 'ERR_JWE_INVALID';\n    }\n}\nexports.JWEInvalid = JWEInvalid;\nclass JWSInvalid extends JOSEError {\n    constructor() {\n        super(...arguments);\n        this.code = 'ERR_JWS_INVALID';\n    }\n    static get code() {\n        return 'ERR_JWS_INVALID';\n    }\n}\nexports.JWSInvalid = JWSInvalid;\nclass JWTInvalid extends JOSEError {\n    constructor() {\n        super(...arguments);\n        this.code = 'ERR_JWT_INVALID';\n    }\n    static get code() {\n        return 'ERR_JWT_INVALID';\n    }\n}\nexports.JWTInvalid = JWTInvalid;\nclass JWKInvalid extends JOSEError {\n    constructor() {\n        super(...arguments);\n        this.code = 'ERR_JWK_INVALID';\n    }\n    static get code() {\n        return 'ERR_JWK_INVALID';\n    }\n}\nexports.JWKInvalid = JWKInvalid;\nclass JWKSInvalid extends JOSEError {\n    constructor() {\n        super(...arguments);\n        this.code = 'ERR_JWKS_INVALID';\n    }\n    static get code() {\n        return 'ERR_JWKS_INVALID';\n    }\n}\nexports.JWKSInvalid = JWKSInvalid;\nclass JWKSNoMatchingKey extends JOSEError {\n    constructor() {\n        super(...arguments);\n        this.code = 'ERR_JWKS_NO_MATCHING_KEY';\n        this.message = 'no applicable key found in the JSON Web Key Set';\n    }\n    static get code() {\n        return 'ERR_JWKS_NO_MATCHING_KEY';\n    }\n}\nexports.JWKSNoMatchingKey = JWKSNoMatchingKey;\nclass JWKSMultipleMatchingKeys extends JOSEError {\n    constructor() {\n        super(...arguments);\n        this.code = 'ERR_JWKS_MULTIPLE_MATCHING_KEYS';\n        this.message = 'multiple matching keys found in the JSON Web Key Set';\n    }\n    static get code() {\n        return 'ERR_JWKS_MULTIPLE_MATCHING_KEYS';\n    }\n}\nexports.JWKSMultipleMatchingKeys = JWKSMultipleMatchingKeys;\nSymbol.asyncIterator;\nclass JWKSTimeout extends JOSEError {\n    constructor() {\n        super(...arguments);\n        this.code = 'ERR_JWKS_TIMEOUT';\n        this.message = 'request timed out';\n    }\n    static get code() {\n        return 'ERR_JWKS_TIMEOUT';\n    }\n}\nexports.JWKSTimeout = JWKSTimeout;\nclass JWSSignatureVerificationFailed extends JOSEError {\n    constructor() {\n        super(...arguments);\n        this.code = 'ERR_JWS_SIGNATURE_VERIFICATION_FAILED';\n        this.message = 'signature verification failed';\n    }\n    static get code() {\n        return 'ERR_JWS_SIGNATURE_VERIFICATION_FAILED';\n    }\n}\nexports.JWSSignatureVerificationFailed = JWSSignatureVerificationFailed;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = void 0;\nvar crypto_1 = require(\"crypto\");\nObject.defineProperty(exports, \"default\", { enumerable: true, get: function () { return crypto_1.randomFillSync; } });\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.bitLength = void 0;\nconst errors_js_1 = require(\"../util/errors.js\");\nconst random_js_1 = require(\"../runtime/random.js\");\nfunction bitLength(alg) {\n    switch (alg) {\n        case 'A128GCM':\n        case 'A128GCMKW':\n        case 'A192GCM':\n        case 'A192GCMKW':\n        case 'A256GCM':\n        case 'A256GCMKW':\n            return 96;\n        case 'A128CBC-HS256':\n        case 'A192CBC-HS384':\n        case 'A256CBC-HS512':\n            return 128;\n        default:\n            throw new errors_js_1.JOSENotSupported(`Unsupported JWE Algorithm: ${alg}`);\n    }\n}\nexports.bitLength = bitLength;\nexports.default = (alg) => (0, random_js_1.default)(new Uint8Array(bitLength(alg) >> 3));\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst errors_js_1 = require(\"../util/errors.js\");\nconst iv_js_1 = require(\"./iv.js\");\nconst checkIvLength = (enc, iv) => {\n    if (iv.length << 3 !== (0, iv_js_1.bitLength)(enc)) {\n        throw new errors_js_1.JWEInvalid('Invalid Initialization Vector length');\n    }\n};\nexports.default = checkIvLength;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst crypto_1 = require(\"crypto\");\nconst util = require(\"util\");\nexports.default = util.types.isKeyObject\n    ? (obj) => util.types.isKeyObject(obj)\n    : (obj) => obj != null && obj instanceof crypto_1.KeyObject;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst errors_js_1 = require(\"../util/errors.js\");\nconst is_key_object_js_1 = require(\"./is_key_object.js\");\nconst checkCekLength = (enc, cek) => {\n    let expected;\n    switch (enc) {\n        case 'A128CBC-HS256':\n        case 'A192CBC-HS384':\n        case 'A256CBC-HS512':\n            expected = parseInt(enc.slice(-3), 10);\n            break;\n        case 'A128GCM':\n        case 'A192GCM':\n        case 'A256GCM':\n            expected = parseInt(enc.slice(1, 4), 10);\n            break;\n        default:\n            throw new errors_js_1.JOSENotSupported(`Content Encryption Algorithm ${enc} is not supported either by JOSE or your javascript runtime`);\n    }\n    if (cek instanceof Uint8Array) {\n        const actual = cek.byteLength << 3;\n        if (actual !== expected) {\n            throw new errors_js_1.JWEInvalid(`Invalid Content Encryption Key length. Expected ${expected} bits, got ${actual} bits`);\n        }\n        return;\n    }\n    if ((0, is_key_object_js_1.default)(cek) && cek.type === 'secret') {\n        const actual = cek.symmetricKeySize << 3;\n        if (actual !== expected) {\n            throw new errors_js_1.JWEInvalid(`Invalid Content Encryption Key length. Expected ${expected} bits, got ${actual} bits`);\n        }\n        return;\n    }\n    throw new TypeError('Invalid Content Encryption Key type');\n};\nexports.default = checkCekLength;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst crypto_1 = require(\"crypto\");\nconst timingSafeEqual = crypto_1.timingSafeEqual;\nexports.default = timingSafeEqual;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst crypto_1 = require(\"crypto\");\nconst buffer_utils_js_1 = require(\"../lib/buffer_utils.js\");\nfunction cbcTag(aad, iv, ciphertext, macSize, macKey, keySize) {\n    const macData = (0, buffer_utils_js_1.concat)(aad, iv, ciphertext, (0, buffer_utils_js_1.uint64be)(aad.length << 3));\n    const hmac = (0, crypto_1.createHmac)(`sha${macSize}`, macKey);\n    hmac.update(macData);\n    return hmac.digest().slice(0, keySize >> 3);\n}\nexports.default = cbcTag;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isCryptoKey = void 0;\nconst crypto = require(\"crypto\");\nconst util = require(\"util\");\nconst webcrypto = crypto.webcrypto;\nexports.default = webcrypto;\nexports.isCryptoKey = util.types.isCryptoKey\n    ? (key) => util.types.isCryptoKey(key)\n    :\n        (key) => false;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.checkEncCryptoKey = exports.checkSigCryptoKey = void 0;\nfunction unusable(name, prop = 'algorithm.name') {\n    return new TypeError(`CryptoKey does not support this operation, its ${prop} must be ${name}`);\n}\nfunction isAlgorithm(algorithm, name) {\n    return algorithm.name === name;\n}\nfunction getHashLength(hash) {\n    return parseInt(hash.name.slice(4), 10);\n}\nfunction getNamedCurve(alg) {\n    switch (alg) {\n        case 'ES256':\n            return 'P-256';\n        case 'ES384':\n            return 'P-384';\n        case 'ES512':\n            return 'P-521';\n        default:\n            throw new Error('unreachable');\n    }\n}\nfunction checkUsage(key, usages) {\n    if (usages.length && !usages.some((expected) => key.usages.includes(expected))) {\n        let msg = 'CryptoKey does not support this operation, its usages must include ';\n        if (usages.length > 2) {\n            const last = usages.pop();\n            msg += `one of ${usages.join(', ')}, or ${last}.`;\n        }\n        else if (usages.length === 2) {\n            msg += `one of ${usages[0]} or ${usages[1]}.`;\n        }\n        else {\n            msg += `${usages[0]}.`;\n        }\n        throw new TypeError(msg);\n    }\n}\nfunction checkSigCryptoKey(key, alg, ...usages) {\n    switch (alg) {\n        case 'HS256':\n        case 'HS384':\n        case 'HS512': {\n            if (!isAlgorithm(key.algorithm, 'HMAC'))\n                throw unusable('HMAC');\n            const expected = parseInt(alg.slice(2), 10);\n            const actual = getHashLength(key.algorithm.hash);\n            if (actual !== expected)\n                throw unusable(`SHA-${expected}`, 'algorithm.hash');\n            break;\n        }\n        case 'RS256':\n        case 'RS384':\n        case 'RS512': {\n            if (!isAlgorithm(key.algorithm, 'RSASSA-PKCS1-v1_5'))\n                throw unusable('RSASSA-PKCS1-v1_5');\n            const expected = parseInt(alg.slice(2), 10);\n            const actual = getHashLength(key.algorithm.hash);\n            if (actual !== expected)\n                throw unusable(`SHA-${expected}`, 'algorithm.hash');\n            break;\n        }\n        case 'PS256':\n        case 'PS384':\n        case 'PS512': {\n            if (!isAlgorithm(key.algorithm, 'RSA-PSS'))\n                throw unusable('RSA-PSS');\n            const expected = parseInt(alg.slice(2), 10);\n            const actual = getHashLength(key.algorithm.hash);\n            if (actual !== expected)\n                throw unusable(`SHA-${expected}`, 'algorithm.hash');\n            break;\n        }\n        case 'EdDSA': {\n            if (key.algorithm.name !== 'Ed25519' && key.algorithm.name !== 'Ed448') {\n                throw unusable('Ed25519 or Ed448');\n            }\n            break;\n        }\n        case 'ES256':\n        case 'ES384':\n        case 'ES512': {\n            if (!isAlgorithm(key.algorithm, 'ECDSA'))\n                throw unusable('ECDSA');\n            const expected = getNamedCurve(alg);\n            const actual = key.algorithm.namedCurve;\n            if (actual !== expected)\n                throw unusable(expected, 'algorithm.namedCurve');\n            break;\n        }\n        default:\n            throw new TypeError('CryptoKey does not support this operation');\n    }\n    checkUsage(key, usages);\n}\nexports.checkSigCryptoKey = checkSigCryptoKey;\nfunction checkEncCryptoKey(key, alg, ...usages) {\n    switch (alg) {\n        case 'A128GCM':\n        case 'A192GCM':\n        case 'A256GCM': {\n            if (!isAlgorithm(key.algorithm, 'AES-GCM'))\n                throw unusable('AES-GCM');\n            const expected = parseInt(alg.slice(1, 4), 10);\n            const actual = key.algorithm.length;\n            if (actual !== expected)\n                throw unusable(expected, 'algorithm.length');\n            break;\n        }\n        case 'A128KW':\n        case 'A192KW':\n        case 'A256KW': {\n            if (!isAlgorithm(key.algorithm, 'AES-KW'))\n                throw unusable('AES-KW');\n            const expected = parseInt(alg.slice(1, 4), 10);\n            const actual = key.algorithm.length;\n            if (actual !== expected)\n                throw unusable(expected, 'algorithm.length');\n            break;\n        }\n        case 'ECDH': {\n            switch (key.algorithm.name) {\n                case 'ECDH':\n                case 'X25519':\n                case 'X448':\n                    break;\n                default:\n                    throw unusable('ECDH, X25519, or X448');\n            }\n            break;\n        }\n        case 'PBES2-HS256+A128KW':\n        case 'PBES2-HS384+A192KW':\n        case 'PBES2-HS512+A256KW':\n            if (!isAlgorithm(key.algorithm, 'PBKDF2'))\n                throw unusable('PBKDF2');\n            break;\n        case 'RSA-OAEP':\n        case 'RSA-OAEP-256':\n        case 'RSA-OAEP-384':\n        case 'RSA-OAEP-512': {\n            if (!isAlgorithm(key.algorithm, 'RSA-OAEP'))\n                throw unusable('RSA-OAEP');\n            const expected = parseInt(alg.slice(9), 10) || 1;\n            const actual = getHashLength(key.algorithm.hash);\n            if (actual !== expected)\n                throw unusable(`SHA-${expected}`, 'algorithm.hash');\n            break;\n        }\n        default:\n            throw new TypeError('CryptoKey does not support this operation');\n    }\n    checkUsage(key, usages);\n}\nexports.checkEncCryptoKey = checkEncCryptoKey;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.withAlg = void 0;\nfunction message(msg, actual, ...types) {\n    if (types.length > 2) {\n        const last = types.pop();\n        msg += `one of type ${types.join(', ')}, or ${last}.`;\n    }\n    else if (types.length === 2) {\n        msg += `one of type ${types[0]} or ${types[1]}.`;\n    }\n    else {\n        msg += `of type ${types[0]}.`;\n    }\n    if (actual == null) {\n        msg += ` Received ${actual}`;\n    }\n    else if (typeof actual === 'function' && actual.name) {\n        msg += ` Received function ${actual.name}`;\n    }\n    else if (typeof actual === 'object' && actual != null) {\n        if (actual.constructor && actual.constructor.name) {\n            msg += ` Received an instance of ${actual.constructor.name}`;\n        }\n    }\n    return msg;\n}\nexports.default = (actual, ...types) => {\n    return message('Key must be ', actual, ...types);\n};\nfunction withAlg(alg, actual, ...types) {\n    return message(`Key for the ${alg} algorithm must be `, actual, ...types);\n}\nexports.withAlg = withAlg;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst crypto_1 = require(\"crypto\");\nlet ciphers;\nexports.default = (algorithm) => {\n    ciphers || (ciphers = new Set((0, crypto_1.getCiphers)()));\n    return ciphers.has(algorithm);\n};\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.types = void 0;\nconst webcrypto_js_1 = require(\"./webcrypto.js\");\nconst is_key_object_js_1 = require(\"./is_key_object.js\");\nexports.default = (key) => (0, is_key_object_js_1.default)(key) || (0, webcrypto_js_1.isCryptoKey)(key);\nconst types = ['KeyObject'];\nexports.types = types;\nif (globalThis.CryptoKey || (webcrypto_js_1.default === null || webcrypto_js_1.default === void 0 ? void 0 : webcrypto_js_1.default.CryptoKey)) {\n    types.push('CryptoKey');\n}\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst crypto_1 = require(\"crypto\");\nconst check_iv_length_js_1 = require(\"../lib/check_iv_length.js\");\nconst check_cek_length_js_1 = require(\"./check_cek_length.js\");\nconst buffer_utils_js_1 = require(\"../lib/buffer_utils.js\");\nconst errors_js_1 = require(\"../util/errors.js\");\nconst timing_safe_equal_js_1 = require(\"./timing_safe_equal.js\");\nconst cbc_tag_js_1 = require(\"./cbc_tag.js\");\nconst webcrypto_js_1 = require(\"./webcrypto.js\");\nconst crypto_key_js_1 = require(\"../lib/crypto_key.js\");\nconst is_key_object_js_1 = require(\"./is_key_object.js\");\nconst invalid_key_input_js_1 = require(\"../lib/invalid_key_input.js\");\nconst ciphers_js_1 = require(\"./ciphers.js\");\nconst is_key_like_js_1 = require(\"./is_key_like.js\");\nfunction cbcDecrypt(enc, cek, ciphertext, iv, tag, aad) {\n    const keySize = parseInt(enc.slice(1, 4), 10);\n    if ((0, is_key_object_js_1.default)(cek)) {\n        cek = cek.export();\n    }\n    const encKey = cek.subarray(keySize >> 3);\n    const macKey = cek.subarray(0, keySize >> 3);\n    const macSize = parseInt(enc.slice(-3), 10);\n    const algorithm = `aes-${keySize}-cbc`;\n    if (!(0, ciphers_js_1.default)(algorithm)) {\n        throw new errors_js_1.JOSENotSupported(`alg ${enc} is not supported by your javascript runtime`);\n    }\n    const expectedTag = (0, cbc_tag_js_1.default)(aad, iv, ciphertext, macSize, macKey, keySize);\n    let macCheckPassed;\n    try {\n        macCheckPassed = (0, timing_safe_equal_js_1.default)(tag, expectedTag);\n    }\n    catch {\n    }\n    if (!macCheckPassed) {\n        throw new errors_js_1.JWEDecryptionFailed();\n    }\n    let plaintext;\n    try {\n        const decipher = (0, crypto_1.createDecipheriv)(algorithm, encKey, iv);\n        plaintext = (0, buffer_utils_js_1.concat)(decipher.update(ciphertext), decipher.final());\n    }\n    catch {\n    }\n    if (!plaintext) {\n        throw new errors_js_1.JWEDecryptionFailed();\n    }\n    return plaintext;\n}\nfunction gcmDecrypt(enc, cek, ciphertext, iv, tag, aad) {\n    const keySize = parseInt(enc.slice(1, 4), 10);\n    const algorithm = `aes-${keySize}-gcm`;\n    if (!(0, ciphers_js_1.default)(algorithm)) {\n        throw new errors_js_1.JOSENotSupported(`alg ${enc} is not supported by your javascript runtime`);\n    }\n    try {\n        const decipher = (0, crypto_1.createDecipheriv)(algorithm, cek, iv, { authTagLength: 16 });\n        decipher.setAuthTag(tag);\n        if (aad.byteLength) {\n            decipher.setAAD(aad, { plaintextLength: ciphertext.length });\n        }\n        const plaintext = decipher.update(ciphertext);\n        decipher.final();\n        return plaintext;\n    }\n    catch {\n        throw new errors_js_1.JWEDecryptionFailed();\n    }\n}\nconst decrypt = (enc, cek, ciphertext, iv, tag, aad) => {\n    let key;\n    if ((0, webcrypto_js_1.isCryptoKey)(cek)) {\n        (0, crypto_key_js_1.checkEncCryptoKey)(cek, enc, 'decrypt');\n        key = crypto_1.KeyObject.from(cek);\n    }\n    else if (cek instanceof Uint8Array || (0, is_key_object_js_1.default)(cek)) {\n        key = cek;\n    }\n    else {\n        throw new TypeError((0, invalid_key_input_js_1.default)(cek, ...is_key_like_js_1.types, 'Uint8Array'));\n    }\n    (0, check_cek_length_js_1.default)(enc, key);\n    (0, check_iv_length_js_1.default)(enc, iv);\n    switch (enc) {\n        case 'A128CBC-HS256':\n        case 'A192CBC-HS384':\n        case 'A256CBC-HS512':\n            return cbcDecrypt(enc, key, ciphertext, iv, tag, aad);\n        case 'A128GCM':\n        case 'A192GCM':\n        case 'A256GCM':\n            return gcmDecrypt(enc, key, ciphertext, iv, tag, aad);\n        default:\n            throw new errors_js_1.JOSENotSupported('Unsupported JWE Content Encryption Algorithm');\n    }\n};\nexports.default = decrypt;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.deflate = exports.inflate = void 0;\nconst util_1 = require(\"util\");\nconst zlib_1 = require(\"zlib\");\nconst errors_js_1 = require(\"../util/errors.js\");\nconst inflateRaw = (0, util_1.promisify)(zlib_1.inflateRaw);\nconst deflateRaw = (0, util_1.promisify)(zlib_1.deflateRaw);\nconst inflate = (input) => inflateRaw(input, { maxOutputLength: 250000 }).catch(() => {\n    throw new errors_js_1.JWEDecompressionFailed();\n});\nexports.inflate = inflate;\nconst deflate = (input) => deflateRaw(input);\nexports.deflate = deflate;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst isDisjoint = (...headers) => {\n    const sources = headers.filter(Boolean);\n    if (sources.length === 0 || sources.length === 1) {\n        return true;\n    }\n    let acc;\n    for (const header of sources) {\n        const parameters = Object.keys(header);\n        if (!acc || acc.size === 0) {\n            acc = new Set(parameters);\n            continue;\n        }\n        for (const parameter of parameters) {\n            if (acc.has(parameter)) {\n                return false;\n            }\n            acc.add(parameter);\n        }\n    }\n    return true;\n};\nexports.default = isDisjoint;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nfunction isObjectLike(value) {\n    return typeof value === 'object' && value !== null;\n}\nfunction isObject(input) {\n    if (!isObjectLike(input) || Object.prototype.toString.call(input) !== '[object Object]') {\n        return false;\n    }\n    if (Object.getPrototypeOf(input) === null) {\n        return true;\n    }\n    let proto = input;\n    while (Object.getPrototypeOf(proto) !== null) {\n        proto = Object.getPrototypeOf(proto);\n    }\n    return Object.getPrototypeOf(input) === proto;\n}\nexports.default = isObject;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.unwrap = exports.wrap = void 0;\nconst buffer_1 = require(\"buffer\");\nconst crypto_1 = require(\"crypto\");\nconst errors_js_1 = require(\"../util/errors.js\");\nconst buffer_utils_js_1 = require(\"../lib/buffer_utils.js\");\nconst webcrypto_js_1 = require(\"./webcrypto.js\");\nconst crypto_key_js_1 = require(\"../lib/crypto_key.js\");\nconst is_key_object_js_1 = require(\"./is_key_object.js\");\nconst invalid_key_input_js_1 = require(\"../lib/invalid_key_input.js\");\nconst ciphers_js_1 = require(\"./ciphers.js\");\nconst is_key_like_js_1 = require(\"./is_key_like.js\");\nfunction checkKeySize(key, alg) {\n    if (key.symmetricKeySize << 3 !== parseInt(alg.slice(1, 4), 10)) {\n        throw new TypeError(`Invalid key size for alg: ${alg}`);\n    }\n}\nfunction ensureKeyObject(key, alg, usage) {\n    if ((0, is_key_object_js_1.default)(key)) {\n        return key;\n    }\n    if (key instanceof Uint8Array) {\n        return (0, crypto_1.createSecretKey)(key);\n    }\n    if ((0, webcrypto_js_1.isCryptoKey)(key)) {\n        (0, crypto_key_js_1.checkEncCryptoKey)(key, alg, usage);\n        return crypto_1.KeyObject.from(key);\n    }\n    throw new TypeError((0, invalid_key_input_js_1.default)(key, ...is_key_like_js_1.types, 'Uint8Array'));\n}\nconst wrap = (alg, key, cek) => {\n    const size = parseInt(alg.slice(1, 4), 10);\n    const algorithm = `aes${size}-wrap`;\n    if (!(0, ciphers_js_1.default)(algorithm)) {\n        throw new errors_js_1.JOSENotSupported(`alg ${alg} is not supported either by JOSE or your javascript runtime`);\n    }\n    const keyObject = ensureKeyObject(key, alg, 'wrapKey');\n    checkKeySize(keyObject, alg);\n    const cipher = (0, crypto_1.createCipheriv)(algorithm, keyObject, buffer_1.Buffer.alloc(8, 0xa6));\n    return (0, buffer_utils_js_1.concat)(cipher.update(cek), cipher.final());\n};\nexports.wrap = wrap;\nconst unwrap = (alg, key, encryptedKey) => {\n    const size = parseInt(alg.slice(1, 4), 10);\n    const algorithm = `aes${size}-wrap`;\n    if (!(0, ciphers_js_1.default)(algorithm)) {\n        throw new errors_js_1.JOSENotSupported(`alg ${alg} is not supported either by JOSE or your javascript runtime`);\n    }\n    const keyObject = ensureKeyObject(key, alg, 'unwrapKey');\n    checkKeySize(keyObject, alg);\n    const cipher = (0, crypto_1.createDecipheriv)(algorithm, keyObject, buffer_1.Buffer.alloc(8, 0xa6));\n    return (0, buffer_utils_js_1.concat)(cipher.update(encryptedKey), cipher.final());\n};\nexports.unwrap = unwrap;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.setCurve = exports.weakMap = void 0;\nconst buffer_1 = require(\"buffer\");\nconst crypto_1 = require(\"crypto\");\nconst errors_js_1 = require(\"../util/errors.js\");\nconst webcrypto_js_1 = require(\"./webcrypto.js\");\nconst is_key_object_js_1 = require(\"./is_key_object.js\");\nconst invalid_key_input_js_1 = require(\"../lib/invalid_key_input.js\");\nconst is_key_like_js_1 = require(\"./is_key_like.js\");\nconst p256 = buffer_1.Buffer.from([42, 134, 72, 206, 61, 3, 1, 7]);\nconst p384 = buffer_1.Buffer.from([43, 129, 4, 0, 34]);\nconst p521 = buffer_1.Buffer.from([43, 129, 4, 0, 35]);\nconst secp256k1 = buffer_1.Buffer.from([43, 129, 4, 0, 10]);\nexports.weakMap = new WeakMap();\nconst namedCurveToJOSE = (namedCurve) => {\n    switch (namedCurve) {\n        case 'prime256v1':\n            return 'P-256';\n        case 'secp384r1':\n            return 'P-384';\n        case 'secp521r1':\n            return 'P-521';\n        case 'secp256k1':\n            return 'secp256k1';\n        default:\n            throw new errors_js_1.JOSENotSupported('Unsupported key curve for this operation');\n    }\n};\nconst getNamedCurve = (kee, raw) => {\n    var _a;\n    let key;\n    if ((0, webcrypto_js_1.isCryptoKey)(kee)) {\n        key = crypto_1.KeyObject.from(kee);\n    }\n    else if ((0, is_key_object_js_1.default)(kee)) {\n        key = kee;\n    }\n    else {\n        throw new TypeError((0, invalid_key_input_js_1.default)(kee, ...is_key_like_js_1.types));\n    }\n    if (key.type === 'secret') {\n        throw new TypeError('only \"private\" or \"public\" type keys can be used for this operation');\n    }\n    switch (key.asymmetricKeyType) {\n        case 'ed25519':\n        case 'ed448':\n            return `Ed${key.asymmetricKeyType.slice(2)}`;\n        case 'x25519':\n        case 'x448':\n            return `X${key.asymmetricKeyType.slice(1)}`;\n        case 'ec': {\n            if (exports.weakMap.has(key)) {\n                return exports.weakMap.get(key);\n            }\n            let namedCurve = (_a = key.asymmetricKeyDetails) === null || _a === void 0 ? void 0 : _a.namedCurve;\n            if (!namedCurve && key.type === 'private') {\n                namedCurve = getNamedCurve((0, crypto_1.createPublicKey)(key), true);\n            }\n            else if (!namedCurve) {\n                const buf = key.export({ format: 'der', type: 'spki' });\n                const i = buf[1] < 128 ? 14 : 15;\n                const len = buf[i];\n                const curveOid = buf.slice(i + 1, i + 1 + len);\n                if (curveOid.equals(p256)) {\n                    namedCurve = 'prime256v1';\n                }\n                else if (curveOid.equals(p384)) {\n                    namedCurve = 'secp384r1';\n                }\n                else if (curveOid.equals(p521)) {\n                    namedCurve = 'secp521r1';\n                }\n                else if (curveOid.equals(secp256k1)) {\n                    namedCurve = 'secp256k1';\n                }\n                else {\n                    throw new errors_js_1.JOSENotSupported('Unsupported key curve for this operation');\n                }\n            }\n            if (raw)\n                return namedCurve;\n            const curve = namedCurveToJOSE(namedCurve);\n            exports.weakMap.set(key, curve);\n            return curve;\n        }\n        default:\n            throw new TypeError('Invalid asymmetric key type for this operation');\n    }\n};\nfunction setCurve(keyObject, curve) {\n    exports.weakMap.set(keyObject, curve);\n}\nexports.setCurve = setCurve;\nexports.default = getNamedCurve;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ecdhAllowed = exports.generateEpk = exports.deriveKey = void 0;\nconst crypto_1 = require(\"crypto\");\nconst util_1 = require(\"util\");\nconst get_named_curve_js_1 = require(\"./get_named_curve.js\");\nconst buffer_utils_js_1 = require(\"../lib/buffer_utils.js\");\nconst errors_js_1 = require(\"../util/errors.js\");\nconst webcrypto_js_1 = require(\"./webcrypto.js\");\nconst crypto_key_js_1 = require(\"../lib/crypto_key.js\");\nconst is_key_object_js_1 = require(\"./is_key_object.js\");\nconst invalid_key_input_js_1 = require(\"../lib/invalid_key_input.js\");\nconst is_key_like_js_1 = require(\"./is_key_like.js\");\nconst generateKeyPair = (0, util_1.promisify)(crypto_1.generateKeyPair);\nasync function deriveKey(publicKee, privateKee, algorithm, keyLength, apu = new Uint8Array(0), apv = new Uint8Array(0)) {\n    let publicKey;\n    if ((0, webcrypto_js_1.isCryptoKey)(publicKee)) {\n        (0, crypto_key_js_1.checkEncCryptoKey)(publicKee, 'ECDH');\n        publicKey = crypto_1.KeyObject.from(publicKee);\n    }\n    else if ((0, is_key_object_js_1.default)(publicKee)) {\n        publicKey = publicKee;\n    }\n    else {\n        throw new TypeError((0, invalid_key_input_js_1.default)(publicKee, ...is_key_like_js_1.types));\n    }\n    let privateKey;\n    if ((0, webcrypto_js_1.isCryptoKey)(privateKee)) {\n        (0, crypto_key_js_1.checkEncCryptoKey)(privateKee, 'ECDH', 'deriveBits');\n        privateKey = crypto_1.KeyObject.from(privateKee);\n    }\n    else if ((0, is_key_object_js_1.default)(privateKee)) {\n        privateKey = privateKee;\n    }\n    else {\n        throw new TypeError((0, invalid_key_input_js_1.default)(privateKee, ...is_key_like_js_1.types));\n    }\n    const value = (0, buffer_utils_js_1.concat)((0, buffer_utils_js_1.lengthAndInput)(buffer_utils_js_1.encoder.encode(algorithm)), (0, buffer_utils_js_1.lengthAndInput)(apu), (0, buffer_utils_js_1.lengthAndInput)(apv), (0, buffer_utils_js_1.uint32be)(keyLength));\n    const sharedSecret = (0, crypto_1.diffieHellman)({ privateKey, publicKey });\n    return (0, buffer_utils_js_1.concatKdf)(sharedSecret, keyLength, value);\n}\nexports.deriveKey = deriveKey;\nasync function generateEpk(kee) {\n    let key;\n    if ((0, webcrypto_js_1.isCryptoKey)(kee)) {\n        key = crypto_1.KeyObject.from(kee);\n    }\n    else if ((0, is_key_object_js_1.default)(kee)) {\n        key = kee;\n    }\n    else {\n        throw new TypeError((0, invalid_key_input_js_1.default)(kee, ...is_key_like_js_1.types));\n    }\n    switch (key.asymmetricKeyType) {\n        case 'x25519':\n            return generateKeyPair('x25519');\n        case 'x448': {\n            return generateKeyPair('x448');\n        }\n        case 'ec': {\n            const namedCurve = (0, get_named_curve_js_1.default)(key);\n            return generateKeyPair('ec', { namedCurve });\n        }\n        default:\n            throw new errors_js_1.JOSENotSupported('Invalid or unsupported EPK');\n    }\n}\nexports.generateEpk = generateEpk;\nconst ecdhAllowed = (key) => ['P-256', 'P-384', 'P-521', 'X25519', 'X448'].includes((0, get_named_curve_js_1.default)(key));\nexports.ecdhAllowed = ecdhAllowed;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst errors_js_1 = require(\"../util/errors.js\");\nfunction checkP2s(p2s) {\n    if (!(p2s instanceof Uint8Array) || p2s.length < 8) {\n        throw new errors_js_1.JWEInvalid('PBES2 Salt Input must be 8 or more octets');\n    }\n}\nexports.default = checkP2s;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.decrypt = exports.encrypt = void 0;\nconst util_1 = require(\"util\");\nconst crypto_1 = require(\"crypto\");\nconst random_js_1 = require(\"./random.js\");\nconst buffer_utils_js_1 = require(\"../lib/buffer_utils.js\");\nconst base64url_js_1 = require(\"./base64url.js\");\nconst aeskw_js_1 = require(\"./aeskw.js\");\nconst check_p2s_js_1 = require(\"../lib/check_p2s.js\");\nconst webcrypto_js_1 = require(\"./webcrypto.js\");\nconst crypto_key_js_1 = require(\"../lib/crypto_key.js\");\nconst is_key_object_js_1 = require(\"./is_key_object.js\");\nconst invalid_key_input_js_1 = require(\"../lib/invalid_key_input.js\");\nconst is_key_like_js_1 = require(\"./is_key_like.js\");\nconst pbkdf2 = (0, util_1.promisify)(crypto_1.pbkdf2);\nfunction getPassword(key, alg) {\n    if ((0, is_key_object_js_1.default)(key)) {\n        return key.export();\n    }\n    if (key instanceof Uint8Array) {\n        return key;\n    }\n    if ((0, webcrypto_js_1.isCryptoKey)(key)) {\n        (0, crypto_key_js_1.checkEncCryptoKey)(key, alg, 'deriveBits', 'deriveKey');\n        return crypto_1.KeyObject.from(key).export();\n    }\n    throw new TypeError((0, invalid_key_input_js_1.default)(key, ...is_key_like_js_1.types, 'Uint8Array'));\n}\nconst encrypt = async (alg, key, cek, p2c = 2048, p2s = (0, random_js_1.default)(new Uint8Array(16))) => {\n    (0, check_p2s_js_1.default)(p2s);\n    const salt = (0, buffer_utils_js_1.p2s)(alg, p2s);\n    const keylen = parseInt(alg.slice(13, 16), 10) >> 3;\n    const password = getPassword(key, alg);\n    const derivedKey = await pbkdf2(password, salt, p2c, keylen, `sha${alg.slice(8, 11)}`);\n    const encryptedKey = await (0, aeskw_js_1.wrap)(alg.slice(-6), derivedKey, cek);\n    return { encryptedKey, p2c, p2s: (0, base64url_js_1.encode)(p2s) };\n};\nexports.encrypt = encrypt;\nconst decrypt = async (alg, key, encryptedKey, p2c, p2s) => {\n    (0, check_p2s_js_1.default)(p2s);\n    const salt = (0, buffer_utils_js_1.p2s)(alg, p2s);\n    const keylen = parseInt(alg.slice(13, 16), 10) >> 3;\n    const password = getPassword(key, alg);\n    const derivedKey = await pbkdf2(password, salt, p2c, keylen, `sha${alg.slice(8, 11)}`);\n    return (0, aeskw_js_1.unwrap)(alg.slice(-6), derivedKey, encryptedKey);\n};\nexports.decrypt = decrypt;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.setModulusLength = exports.weakMap = void 0;\nexports.weakMap = new WeakMap();\nconst getLength = (buf, index) => {\n    let len = buf.readUInt8(1);\n    if ((len & 0x80) === 0) {\n        if (index === 0) {\n            return len;\n        }\n        return getLength(buf.subarray(2 + len), index - 1);\n    }\n    const num = len & 0x7f;\n    len = 0;\n    for (let i = 0; i < num; i++) {\n        len <<= 8;\n        const j = buf.readUInt8(2 + i);\n        len |= j;\n    }\n    if (index === 0) {\n        return len;\n    }\n    return getLength(buf.subarray(2 + len), index - 1);\n};\nconst getLengthOfSeqIndex = (sequence, index) => {\n    const len = sequence.readUInt8(1);\n    if ((len & 0x80) === 0) {\n        return getLength(sequence.subarray(2), index);\n    }\n    const num = len & 0x7f;\n    return getLength(sequence.subarray(2 + num), index);\n};\nconst getModulusLength = (key) => {\n    var _a, _b;\n    if (exports.weakMap.has(key)) {\n        return exports.weakMap.get(key);\n    }\n    const modulusLength = (_b = (_a = key.asymmetricKeyDetails) === null || _a === void 0 ? void 0 : _a.modulusLength) !== null && _b !== void 0 ? _b : (getLengthOfSeqIndex(key.export({ format: 'der', type: 'pkcs1' }), key.type === 'private' ? 1 : 0) -\n        1) <<\n        3;\n    exports.weakMap.set(key, modulusLength);\n    return modulusLength;\n};\nconst setModulusLength = (keyObject, modulusLength) => {\n    exports.weakMap.set(keyObject, modulusLength);\n};\nexports.setModulusLength = setModulusLength;\nexports.default = (key, alg) => {\n    if (getModulusLength(key) < 2048) {\n        throw new TypeError(`${alg} requires key modulusLength to be 2048 bits or larger`);\n    }\n};\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.decrypt = exports.encrypt = void 0;\nconst crypto_1 = require(\"crypto\");\nconst check_modulus_length_js_1 = require(\"./check_modulus_length.js\");\nconst webcrypto_js_1 = require(\"./webcrypto.js\");\nconst crypto_key_js_1 = require(\"../lib/crypto_key.js\");\nconst is_key_object_js_1 = require(\"./is_key_object.js\");\nconst invalid_key_input_js_1 = require(\"../lib/invalid_key_input.js\");\nconst is_key_like_js_1 = require(\"./is_key_like.js\");\nconst checkKey = (key, alg) => {\n    if (key.asymmetricKeyType !== 'rsa') {\n        throw new TypeError('Invalid key for this operation, its asymmetricKeyType must be rsa');\n    }\n    (0, check_modulus_length_js_1.default)(key, alg);\n};\nconst resolvePadding = (alg) => {\n    switch (alg) {\n        case 'RSA-OAEP':\n        case 'RSA-OAEP-256':\n        case 'RSA-OAEP-384':\n        case 'RSA-OAEP-512':\n            return crypto_1.constants.RSA_PKCS1_OAEP_PADDING;\n        case 'RSA1_5':\n            return crypto_1.constants.RSA_PKCS1_PADDING;\n        default:\n            return undefined;\n    }\n};\nconst resolveOaepHash = (alg) => {\n    switch (alg) {\n        case 'RSA-OAEP':\n            return 'sha1';\n        case 'RSA-OAEP-256':\n            return 'sha256';\n        case 'RSA-OAEP-384':\n            return 'sha384';\n        case 'RSA-OAEP-512':\n            return 'sha512';\n        default:\n            return undefined;\n    }\n};\nfunction ensureKeyObject(key, alg, ...usages) {\n    if ((0, is_key_object_js_1.default)(key)) {\n        return key;\n    }\n    if ((0, webcrypto_js_1.isCryptoKey)(key)) {\n        (0, crypto_key_js_1.checkEncCryptoKey)(key, alg, ...usages);\n        return crypto_1.KeyObject.from(key);\n    }\n    throw new TypeError((0, invalid_key_input_js_1.default)(key, ...is_key_like_js_1.types));\n}\nconst encrypt = (alg, key, cek) => {\n    const padding = resolvePadding(alg);\n    const oaepHash = resolveOaepHash(alg);\n    const keyObject = ensureKeyObject(key, alg, 'wrapKey', 'encrypt');\n    checkKey(keyObject, alg);\n    return (0, crypto_1.publicEncrypt)({ key: keyObject, oaepHash, padding }, cek);\n};\nexports.encrypt = encrypt;\nconst decrypt = (alg, key, encryptedKey) => {\n    const padding = resolvePadding(alg);\n    const oaepHash = resolveOaepHash(alg);\n    const keyObject = ensureKeyObject(key, alg, 'unwrapKey', 'decrypt');\n    checkKey(keyObject, alg);\n    return (0, crypto_1.privateDecrypt)({ key: keyObject, oaepHash, padding }, encryptedKey);\n};\nexports.decrypt = decrypt;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.bitLength = void 0;\nconst errors_js_1 = require(\"../util/errors.js\");\nconst random_js_1 = require(\"../runtime/random.js\");\nfunction bitLength(alg) {\n    switch (alg) {\n        case 'A128GCM':\n            return 128;\n        case 'A192GCM':\n            return 192;\n        case 'A256GCM':\n        case 'A128CBC-HS256':\n            return 256;\n        case 'A192CBC-HS384':\n            return 384;\n        case 'A256CBC-HS512':\n            return 512;\n        default:\n            throw new errors_js_1.JOSENotSupported(`Unsupported JWE Algorithm: ${alg}`);\n    }\n}\nexports.bitLength = bitLength;\nexports.default = (alg) => (0, random_js_1.default)(new Uint8Array(bitLength(alg) >> 3));\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.fromX509 = exports.fromSPKI = exports.fromPKCS8 = exports.toPKCS8 = exports.toSPKI = void 0;\nconst crypto_1 = require(\"crypto\");\nconst buffer_1 = require(\"buffer\");\nconst webcrypto_js_1 = require(\"./webcrypto.js\");\nconst is_key_object_js_1 = require(\"./is_key_object.js\");\nconst invalid_key_input_js_1 = require(\"../lib/invalid_key_input.js\");\nconst is_key_like_js_1 = require(\"./is_key_like.js\");\nconst genericExport = (keyType, keyFormat, key) => {\n    let keyObject;\n    if ((0, webcrypto_js_1.isCryptoKey)(key)) {\n        if (!key.extractable) {\n            throw new TypeError('CryptoKey is not extractable');\n        }\n        keyObject = crypto_1.KeyObject.from(key);\n    }\n    else if ((0, is_key_object_js_1.default)(key)) {\n        keyObject = key;\n    }\n    else {\n        throw new TypeError((0, invalid_key_input_js_1.default)(key, ...is_key_like_js_1.types));\n    }\n    if (keyObject.type !== keyType) {\n        throw new TypeError(`key is not a ${keyType} key`);\n    }\n    return keyObject.export({ format: 'pem', type: keyFormat });\n};\nconst toSPKI = (key) => {\n    return genericExport('public', 'spki', key);\n};\nexports.toSPKI = toSPKI;\nconst toPKCS8 = (key) => {\n    return genericExport('private', 'pkcs8', key);\n};\nexports.toPKCS8 = toPKCS8;\nconst fromPKCS8 = (pem) => (0, crypto_1.createPrivateKey)({\n    key: buffer_1.Buffer.from(pem.replace(/(?:-----(?:BEGIN|END) PRIVATE KEY-----|\\s)/g, ''), 'base64'),\n    type: 'pkcs8',\n    format: 'der',\n});\nexports.fromPKCS8 = fromPKCS8;\nconst fromSPKI = (pem) => (0, crypto_1.createPublicKey)({\n    key: buffer_1.Buffer.from(pem.replace(/(?:-----(?:BEGIN|END) PUBLIC KEY-----|\\s)/g, ''), 'base64'),\n    type: 'spki',\n    format: 'der',\n});\nexports.fromSPKI = fromSPKI;\nconst fromX509 = (pem) => (0, crypto_1.createPublicKey)({\n    key: pem,\n    type: 'spki',\n    format: 'pem',\n});\nexports.fromX509 = fromX509;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst buffer_1 = require(\"buffer\");\nconst errors_js_1 = require(\"../util/errors.js\");\nconst tagInteger = 0x02;\nconst tagBitStr = 0x03;\nconst tagOctStr = 0x04;\nconst tagSequence = 0x30;\nconst bZero = buffer_1.Buffer.from([0x00]);\nconst bTagInteger = buffer_1.Buffer.from([tagInteger]);\nconst bTagBitStr = buffer_1.Buffer.from([tagBitStr]);\nconst bTagSequence = buffer_1.Buffer.from([tagSequence]);\nconst bTagOctStr = buffer_1.Buffer.from([tagOctStr]);\nconst encodeLength = (len) => {\n    if (len < 128)\n        return buffer_1.Buffer.from([len]);\n    const buffer = buffer_1.Buffer.alloc(5);\n    buffer.writeUInt32BE(len, 1);\n    let offset = 1;\n    while (buffer[offset] === 0)\n        offset++;\n    buffer[offset - 1] = 0x80 | (5 - offset);\n    return buffer.slice(offset - 1);\n};\nconst oids = new Map([\n    ['P-256', buffer_1.Buffer.from('06 08 2A 86 48 CE 3D 03 01 07'.replace(/ /g, ''), 'hex')],\n    ['secp256k1', buffer_1.Buffer.from('06 05 2B 81 04 00 0A'.replace(/ /g, ''), 'hex')],\n    ['P-384', buffer_1.Buffer.from('06 05 2B 81 04 00 22'.replace(/ /g, ''), 'hex')],\n    ['P-521', buffer_1.Buffer.from('06 05 2B 81 04 00 23'.replace(/ /g, ''), 'hex')],\n    ['ecPublicKey', buffer_1.Buffer.from('06 07 2A 86 48 CE 3D 02 01'.replace(/ /g, ''), 'hex')],\n    ['X25519', buffer_1.Buffer.from('06 03 2B 65 6E'.replace(/ /g, ''), 'hex')],\n    ['X448', buffer_1.Buffer.from('06 03 2B 65 6F'.replace(/ /g, ''), 'hex')],\n    ['Ed25519', buffer_1.Buffer.from('06 03 2B 65 70'.replace(/ /g, ''), 'hex')],\n    ['Ed448', buffer_1.Buffer.from('06 03 2B 65 71'.replace(/ /g, ''), 'hex')],\n]);\nclass DumbAsn1Encoder {\n    constructor() {\n        this.length = 0;\n        this.elements = [];\n    }\n    oidFor(oid) {\n        const bOid = oids.get(oid);\n        if (!bOid) {\n            throw new errors_js_1.JOSENotSupported('Invalid or unsupported OID');\n        }\n        this.elements.push(bOid);\n        this.length += bOid.length;\n    }\n    zero() {\n        this.elements.push(bTagInteger, buffer_1.Buffer.from([0x01]), bZero);\n        this.length += 3;\n    }\n    one() {\n        this.elements.push(bTagInteger, buffer_1.Buffer.from([0x01]), buffer_1.Buffer.from([0x01]));\n        this.length += 3;\n    }\n    unsignedInteger(integer) {\n        if (integer[0] & 0x80) {\n            const len = encodeLength(integer.length + 1);\n            this.elements.push(bTagInteger, len, bZero, integer);\n            this.length += 2 + len.length + integer.length;\n        }\n        else {\n            let i = 0;\n            while (integer[i] === 0 && (integer[i + 1] & 0x80) === 0)\n                i++;\n            const len = encodeLength(integer.length - i);\n            this.elements.push(bTagInteger, encodeLength(integer.length - i), integer.slice(i));\n            this.length += 1 + len.length + integer.length - i;\n        }\n    }\n    octStr(octStr) {\n        const len = encodeLength(octStr.length);\n        this.elements.push(bTagOctStr, encodeLength(octStr.length), octStr);\n        this.length += 1 + len.length + octStr.length;\n    }\n    bitStr(bitS) {\n        const len = encodeLength(bitS.length + 1);\n        this.elements.push(bTagBitStr, encodeLength(bitS.length + 1), bZero, bitS);\n        this.length += 1 + len.length + bitS.length + 1;\n    }\n    add(seq) {\n        this.elements.push(seq);\n        this.length += seq.length;\n    }\n    end(tag = bTagSequence) {\n        const len = encodeLength(this.length);\n        return buffer_1.Buffer.concat([tag, len, ...this.elements], 1 + len.length + this.length);\n    }\n}\nexports.default = DumbAsn1Encoder;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.jwkImport = exports.jwkExport = exports.rsaPssParams = exports.oneShotCallback = void 0;\nconst [major, minor] = process.versions.node.split('.').map((str) => parseInt(str, 10));\nexports.oneShotCallback = major >= 16 || (major === 15 && minor >= 13);\nexports.rsaPssParams = !('electron' in process.versions) && (major >= 17 || (major === 16 && minor >= 9));\nexports.jwkExport = major >= 16 || (major === 15 && minor >= 9);\nexports.jwkImport = major >= 16 || (major === 15 && minor >= 12);\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst buffer_1 = require(\"buffer\");\nconst crypto_1 = require(\"crypto\");\nconst base64url_js_1 = require(\"./base64url.js\");\nconst errors_js_1 = require(\"../util/errors.js\");\nconst get_named_curve_js_1 = require(\"./get_named_curve.js\");\nconst check_modulus_length_js_1 = require(\"./check_modulus_length.js\");\nconst asn1_sequence_encoder_js_1 = require(\"./asn1_sequence_encoder.js\");\nconst flags_js_1 = require(\"./flags.js\");\nconst parse = (jwk) => {\n    if (flags_js_1.jwkImport && jwk.kty !== 'oct') {\n        return jwk.d\n            ? (0, crypto_1.createPrivateKey)({ format: 'jwk', key: jwk })\n            : (0, crypto_1.createPublicKey)({ format: 'jwk', key: jwk });\n    }\n    switch (jwk.kty) {\n        case 'oct': {\n            return (0, crypto_1.createSecretKey)((0, base64url_js_1.decode)(jwk.k));\n        }\n        case 'RSA': {\n            const enc = new asn1_sequence_encoder_js_1.default();\n            const isPrivate = jwk.d !== undefined;\n            const modulus = buffer_1.Buffer.from(jwk.n, 'base64');\n            const exponent = buffer_1.Buffer.from(jwk.e, 'base64');\n            if (isPrivate) {\n                enc.zero();\n                enc.unsignedInteger(modulus);\n                enc.unsignedInteger(exponent);\n                enc.unsignedInteger(buffer_1.Buffer.from(jwk.d, 'base64'));\n                enc.unsignedInteger(buffer_1.Buffer.from(jwk.p, 'base64'));\n                enc.unsignedInteger(buffer_1.Buffer.from(jwk.q, 'base64'));\n                enc.unsignedInteger(buffer_1.Buffer.from(jwk.dp, 'base64'));\n                enc.unsignedInteger(buffer_1.Buffer.from(jwk.dq, 'base64'));\n                enc.unsignedInteger(buffer_1.Buffer.from(jwk.qi, 'base64'));\n            }\n            else {\n                enc.unsignedInteger(modulus);\n                enc.unsignedInteger(exponent);\n            }\n            const der = enc.end();\n            const createInput = {\n                key: der,\n                format: 'der',\n                type: 'pkcs1',\n            };\n            const keyObject = isPrivate ? (0, crypto_1.createPrivateKey)(createInput) : (0, crypto_1.createPublicKey)(createInput);\n            (0, check_modulus_length_js_1.setModulusLength)(keyObject, modulus.length << 3);\n            return keyObject;\n        }\n        case 'EC': {\n            const enc = new asn1_sequence_encoder_js_1.default();\n            const isPrivate = jwk.d !== undefined;\n            const pub = buffer_1.Buffer.concat([\n                buffer_1.Buffer.alloc(1, 4),\n                buffer_1.Buffer.from(jwk.x, 'base64'),\n                buffer_1.Buffer.from(jwk.y, 'base64'),\n            ]);\n            if (isPrivate) {\n                enc.zero();\n                const enc$1 = new asn1_sequence_encoder_js_1.default();\n                enc$1.oidFor('ecPublicKey');\n                enc$1.oidFor(jwk.crv);\n                enc.add(enc$1.end());\n                const enc$2 = new asn1_sequence_encoder_js_1.default();\n                enc$2.one();\n                enc$2.octStr(buffer_1.Buffer.from(jwk.d, 'base64'));\n                const enc$3 = new asn1_sequence_encoder_js_1.default();\n                enc$3.bitStr(pub);\n                const f2 = enc$3.end(buffer_1.Buffer.from([0xa1]));\n                enc$2.add(f2);\n                const f = enc$2.end();\n                const enc$4 = new asn1_sequence_encoder_js_1.default();\n                enc$4.add(f);\n                const f3 = enc$4.end(buffer_1.Buffer.from([0x04]));\n                enc.add(f3);\n                const der = enc.end();\n                const keyObject = (0, crypto_1.createPrivateKey)({ key: der, format: 'der', type: 'pkcs8' });\n                (0, get_named_curve_js_1.setCurve)(keyObject, jwk.crv);\n                return keyObject;\n            }\n            const enc$1 = new asn1_sequence_encoder_js_1.default();\n            enc$1.oidFor('ecPublicKey');\n            enc$1.oidFor(jwk.crv);\n            enc.add(enc$1.end());\n            enc.bitStr(pub);\n            const der = enc.end();\n            const keyObject = (0, crypto_1.createPublicKey)({ key: der, format: 'der', type: 'spki' });\n            (0, get_named_curve_js_1.setCurve)(keyObject, jwk.crv);\n            return keyObject;\n        }\n        case 'OKP': {\n            const enc = new asn1_sequence_encoder_js_1.default();\n            const isPrivate = jwk.d !== undefined;\n            if (isPrivate) {\n                enc.zero();\n                const enc$1 = new asn1_sequence_encoder_js_1.default();\n                enc$1.oidFor(jwk.crv);\n                enc.add(enc$1.end());\n                const enc$2 = new asn1_sequence_encoder_js_1.default();\n                enc$2.octStr(buffer_1.Buffer.from(jwk.d, 'base64'));\n                const f = enc$2.end(buffer_1.Buffer.from([0x04]));\n                enc.add(f);\n                const der = enc.end();\n                return (0, crypto_1.createPrivateKey)({ key: der, format: 'der', type: 'pkcs8' });\n            }\n            const enc$1 = new asn1_sequence_encoder_js_1.default();\n            enc$1.oidFor(jwk.crv);\n            enc.add(enc$1.end());\n            enc.bitStr(buffer_1.Buffer.from(jwk.x, 'base64'));\n            const der = enc.end();\n            return (0, crypto_1.createPublicKey)({ key: der, format: 'der', type: 'spki' });\n        }\n        default:\n            throw new errors_js_1.JOSENotSupported('Invalid or unsupported JWK \"kty\" (Key Type) Parameter value');\n    }\n};\nexports.default = parse;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.importJWK = exports.importPKCS8 = exports.importX509 = exports.importSPKI = void 0;\nconst base64url_js_1 = require(\"../runtime/base64url.js\");\nconst asn1_js_1 = require(\"../runtime/asn1.js\");\nconst jwk_to_key_js_1 = require(\"../runtime/jwk_to_key.js\");\nconst errors_js_1 = require(\"../util/errors.js\");\nconst is_object_js_1 = require(\"../lib/is_object.js\");\nasync function importSPKI(spki, alg, options) {\n    if (typeof spki !== 'string' || spki.indexOf('-----BEGIN PUBLIC KEY-----') !== 0) {\n        throw new TypeError('\"spki\" must be SPKI formatted string');\n    }\n    return (0, asn1_js_1.fromSPKI)(spki, alg, options);\n}\nexports.importSPKI = importSPKI;\nasync function importX509(x509, alg, options) {\n    if (typeof x509 !== 'string' || x509.indexOf('-----BEGIN CERTIFICATE-----') !== 0) {\n        throw new TypeError('\"x509\" must be X.509 formatted string');\n    }\n    return (0, asn1_js_1.fromX509)(x509, alg, options);\n}\nexports.importX509 = importX509;\nasync function importPKCS8(pkcs8, alg, options) {\n    if (typeof pkcs8 !== 'string' || pkcs8.indexOf('-----BEGIN PRIVATE KEY-----') !== 0) {\n        throw new TypeError('\"pkcs8\" must be PKCS#8 formatted string');\n    }\n    return (0, asn1_js_1.fromPKCS8)(pkcs8, alg, options);\n}\nexports.importPKCS8 = importPKCS8;\nasync function importJWK(jwk, alg, octAsKeyObject) {\n    var _a;\n    if (!(0, is_object_js_1.default)(jwk)) {\n        throw new TypeError('JWK must be an object');\n    }\n    alg || (alg = jwk.alg);\n    switch (jwk.kty) {\n        case 'oct':\n            if (typeof jwk.k !== 'string' || !jwk.k) {\n                throw new TypeError('missing \"k\" (Key Value) Parameter value');\n            }\n            octAsKeyObject !== null && octAsKeyObject !== void 0 ? octAsKeyObject : (octAsKeyObject = jwk.ext !== true);\n            if (octAsKeyObject) {\n                return (0, jwk_to_key_js_1.default)({ ...jwk, alg, ext: (_a = jwk.ext) !== null && _a !== void 0 ? _a : false });\n            }\n            return (0, base64url_js_1.decode)(jwk.k);\n        case 'RSA':\n            if (jwk.oth !== undefined) {\n                throw new errors_js_1.JOSENotSupported('RSA JWK \"oth\" (Other Primes Info) Parameter value is not supported');\n            }\n        case 'EC':\n        case 'OKP':\n            return (0, jwk_to_key_js_1.default)({ ...jwk, alg });\n        default:\n            throw new errors_js_1.JOSENotSupported('Unsupported \"kty\" (Key Type) Parameter value');\n    }\n}\nexports.importJWK = importJWK;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst invalid_key_input_js_1 = require(\"./invalid_key_input.js\");\nconst is_key_like_js_1 = require(\"../runtime/is_key_like.js\");\nconst symmetricTypeCheck = (alg, key) => {\n    if (key instanceof Uint8Array)\n        return;\n    if (!(0, is_key_like_js_1.default)(key)) {\n        throw new TypeError((0, invalid_key_input_js_1.withAlg)(alg, key, ...is_key_like_js_1.types, 'Uint8Array'));\n    }\n    if (key.type !== 'secret') {\n        throw new TypeError(`${is_key_like_js_1.types.join(' or ')} instances for symmetric algorithms must be of type \"secret\"`);\n    }\n};\nconst asymmetricTypeCheck = (alg, key, usage) => {\n    if (!(0, is_key_like_js_1.default)(key)) {\n        throw new TypeError((0, invalid_key_input_js_1.withAlg)(alg, key, ...is_key_like_js_1.types));\n    }\n    if (key.type === 'secret') {\n        throw new TypeError(`${is_key_like_js_1.types.join(' or ')} instances for asymmetric algorithms must not be of type \"secret\"`);\n    }\n    if (usage === 'sign' && key.type === 'public') {\n        throw new TypeError(`${is_key_like_js_1.types.join(' or ')} instances for asymmetric algorithm signing must be of type \"private\"`);\n    }\n    if (usage === 'decrypt' && key.type === 'public') {\n        throw new TypeError(`${is_key_like_js_1.types.join(' or ')} instances for asymmetric algorithm decryption must be of type \"private\"`);\n    }\n    if (key.algorithm && usage === 'verify' && key.type === 'private') {\n        throw new TypeError(`${is_key_like_js_1.types.join(' or ')} instances for asymmetric algorithm verifying must be of type \"public\"`);\n    }\n    if (key.algorithm && usage === 'encrypt' && key.type === 'private') {\n        throw new TypeError(`${is_key_like_js_1.types.join(' or ')} instances for asymmetric algorithm encryption must be of type \"public\"`);\n    }\n};\nconst checkKeyType = (alg, key, usage) => {\n    const symmetric = alg.startsWith('HS') ||\n        alg === 'dir' ||\n        alg.startsWith('PBES2') ||\n        /^A\\d{3}(?:GCM)?KW$/.test(alg);\n    if (symmetric) {\n        symmetricTypeCheck(alg, key);\n    }\n    else {\n        asymmetricTypeCheck(alg, key, usage);\n    }\n};\nexports.default = checkKeyType;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst crypto_1 = require(\"crypto\");\nconst check_iv_length_js_1 = require(\"../lib/check_iv_length.js\");\nconst check_cek_length_js_1 = require(\"./check_cek_length.js\");\nconst buffer_utils_js_1 = require(\"../lib/buffer_utils.js\");\nconst cbc_tag_js_1 = require(\"./cbc_tag.js\");\nconst webcrypto_js_1 = require(\"./webcrypto.js\");\nconst crypto_key_js_1 = require(\"../lib/crypto_key.js\");\nconst is_key_object_js_1 = require(\"./is_key_object.js\");\nconst invalid_key_input_js_1 = require(\"../lib/invalid_key_input.js\");\nconst errors_js_1 = require(\"../util/errors.js\");\nconst ciphers_js_1 = require(\"./ciphers.js\");\nconst is_key_like_js_1 = require(\"./is_key_like.js\");\nfunction cbcEncrypt(enc, plaintext, cek, iv, aad) {\n    const keySize = parseInt(enc.slice(1, 4), 10);\n    if ((0, is_key_object_js_1.default)(cek)) {\n        cek = cek.export();\n    }\n    const encKey = cek.subarray(keySize >> 3);\n    const macKey = cek.subarray(0, keySize >> 3);\n    const algorithm = `aes-${keySize}-cbc`;\n    if (!(0, ciphers_js_1.default)(algorithm)) {\n        throw new errors_js_1.JOSENotSupported(`alg ${enc} is not supported by your javascript runtime`);\n    }\n    const cipher = (0, crypto_1.createCipheriv)(algorithm, encKey, iv);\n    const ciphertext = (0, buffer_utils_js_1.concat)(cipher.update(plaintext), cipher.final());\n    const macSize = parseInt(enc.slice(-3), 10);\n    const tag = (0, cbc_tag_js_1.default)(aad, iv, ciphertext, macSize, macKey, keySize);\n    return { ciphertext, tag };\n}\nfunction gcmEncrypt(enc, plaintext, cek, iv, aad) {\n    const keySize = parseInt(enc.slice(1, 4), 10);\n    const algorithm = `aes-${keySize}-gcm`;\n    if (!(0, ciphers_js_1.default)(algorithm)) {\n        throw new errors_js_1.JOSENotSupported(`alg ${enc} is not supported by your javascript runtime`);\n    }\n    const cipher = (0, crypto_1.createCipheriv)(algorithm, cek, iv, { authTagLength: 16 });\n    if (aad.byteLength) {\n        cipher.setAAD(aad, { plaintextLength: plaintext.length });\n    }\n    const ciphertext = cipher.update(plaintext);\n    cipher.final();\n    const tag = cipher.getAuthTag();\n    return { ciphertext, tag };\n}\nconst encrypt = (enc, plaintext, cek, iv, aad) => {\n    let key;\n    if ((0, webcrypto_js_1.isCryptoKey)(cek)) {\n        (0, crypto_key_js_1.checkEncCryptoKey)(cek, enc, 'encrypt');\n        key = crypto_1.KeyObject.from(cek);\n    }\n    else if (cek instanceof Uint8Array || (0, is_key_object_js_1.default)(cek)) {\n        key = cek;\n    }\n    else {\n        throw new TypeError((0, invalid_key_input_js_1.default)(cek, ...is_key_like_js_1.types, 'Uint8Array'));\n    }\n    (0, check_cek_length_js_1.default)(enc, key);\n    (0, check_iv_length_js_1.default)(enc, iv);\n    switch (enc) {\n        case 'A128CBC-HS256':\n        case 'A192CBC-HS384':\n        case 'A256CBC-HS512':\n            return cbcEncrypt(enc, plaintext, key, iv, aad);\n        case 'A128GCM':\n        case 'A192GCM':\n        case 'A256GCM':\n            return gcmEncrypt(enc, plaintext, key, iv, aad);\n        default:\n            throw new errors_js_1.JOSENotSupported('Unsupported JWE Content Encryption Algorithm');\n    }\n};\nexports.default = encrypt;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.unwrap = exports.wrap = void 0;\nconst encrypt_js_1 = require(\"../runtime/encrypt.js\");\nconst decrypt_js_1 = require(\"../runtime/decrypt.js\");\nconst iv_js_1 = require(\"./iv.js\");\nconst base64url_js_1 = require(\"../runtime/base64url.js\");\nasync function wrap(alg, key, cek, iv) {\n    const jweAlgorithm = alg.slice(0, 7);\n    iv || (iv = (0, iv_js_1.default)(jweAlgorithm));\n    const { ciphertext: encryptedKey, tag } = await (0, encrypt_js_1.default)(jweAlgorithm, cek, key, iv, new Uint8Array(0));\n    return { encryptedKey, iv: (0, base64url_js_1.encode)(iv), tag: (0, base64url_js_1.encode)(tag) };\n}\nexports.wrap = wrap;\nasync function unwrap(alg, key, encryptedKey, iv, tag) {\n    const jweAlgorithm = alg.slice(0, 7);\n    return (0, decrypt_js_1.default)(jweAlgorithm, key, encryptedKey, iv, tag, new Uint8Array(0));\n}\nexports.unwrap = unwrap;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst aeskw_js_1 = require(\"../runtime/aeskw.js\");\nconst ECDH = require(\"../runtime/ecdhes.js\");\nconst pbes2kw_js_1 = require(\"../runtime/pbes2kw.js\");\nconst rsaes_js_1 = require(\"../runtime/rsaes.js\");\nconst base64url_js_1 = require(\"../runtime/base64url.js\");\nconst errors_js_1 = require(\"../util/errors.js\");\nconst cek_js_1 = require(\"../lib/cek.js\");\nconst import_js_1 = require(\"../key/import.js\");\nconst check_key_type_js_1 = require(\"./check_key_type.js\");\nconst is_object_js_1 = require(\"./is_object.js\");\nconst aesgcmkw_js_1 = require(\"./aesgcmkw.js\");\nasync function decryptKeyManagement(alg, key, encryptedKey, joseHeader, options) {\n    (0, check_key_type_js_1.default)(alg, key, 'decrypt');\n    switch (alg) {\n        case 'dir': {\n            if (encryptedKey !== undefined)\n                throw new errors_js_1.JWEInvalid('Encountered unexpected JWE Encrypted Key');\n            return key;\n        }\n        case 'ECDH-ES':\n            if (encryptedKey !== undefined)\n                throw new errors_js_1.JWEInvalid('Encountered unexpected JWE Encrypted Key');\n        case 'ECDH-ES+A128KW':\n        case 'ECDH-ES+A192KW':\n        case 'ECDH-ES+A256KW': {\n            if (!(0, is_object_js_1.default)(joseHeader.epk))\n                throw new errors_js_1.JWEInvalid(`JOSE Header \"epk\" (Ephemeral Public Key) missing or invalid`);\n            if (!ECDH.ecdhAllowed(key))\n                throw new errors_js_1.JOSENotSupported('ECDH with the provided key is not allowed or not supported by your javascript runtime');\n            const epk = await (0, import_js_1.importJWK)(joseHeader.epk, alg);\n            let partyUInfo;\n            let partyVInfo;\n            if (joseHeader.apu !== undefined) {\n                if (typeof joseHeader.apu !== 'string')\n                    throw new errors_js_1.JWEInvalid(`JOSE Header \"apu\" (Agreement PartyUInfo) invalid`);\n                try {\n                    partyUInfo = (0, base64url_js_1.decode)(joseHeader.apu);\n                }\n                catch {\n                    throw new errors_js_1.JWEInvalid('Failed to base64url decode the apu');\n                }\n            }\n            if (joseHeader.apv !== undefined) {\n                if (typeof joseHeader.apv !== 'string')\n                    throw new errors_js_1.JWEInvalid(`JOSE Header \"apv\" (Agreement PartyVInfo) invalid`);\n                try {\n                    partyVInfo = (0, base64url_js_1.decode)(joseHeader.apv);\n                }\n                catch {\n                    throw new errors_js_1.JWEInvalid('Failed to base64url decode the apv');\n                }\n            }\n            const sharedSecret = await ECDH.deriveKey(epk, key, alg === 'ECDH-ES' ? joseHeader.enc : alg, alg === 'ECDH-ES' ? (0, cek_js_1.bitLength)(joseHeader.enc) : parseInt(alg.slice(-5, -2), 10), partyUInfo, partyVInfo);\n            if (alg === 'ECDH-ES')\n                return sharedSecret;\n            if (encryptedKey === undefined)\n                throw new errors_js_1.JWEInvalid('JWE Encrypted Key missing');\n            return (0, aeskw_js_1.unwrap)(alg.slice(-6), sharedSecret, encryptedKey);\n        }\n        case 'RSA1_5':\n        case 'RSA-OAEP':\n        case 'RSA-OAEP-256':\n        case 'RSA-OAEP-384':\n        case 'RSA-OAEP-512': {\n            if (encryptedKey === undefined)\n                throw new errors_js_1.JWEInvalid('JWE Encrypted Key missing');\n            return (0, rsaes_js_1.decrypt)(alg, key, encryptedKey);\n        }\n        case 'PBES2-HS256+A128KW':\n        case 'PBES2-HS384+A192KW':\n        case 'PBES2-HS512+A256KW': {\n            if (encryptedKey === undefined)\n                throw new errors_js_1.JWEInvalid('JWE Encrypted Key missing');\n            if (typeof joseHeader.p2c !== 'number')\n                throw new errors_js_1.JWEInvalid(`JOSE Header \"p2c\" (PBES2 Count) missing or invalid`);\n            const p2cLimit = (options === null || options === void 0 ? void 0 : options.maxPBES2Count) || 10000;\n            if (joseHeader.p2c > p2cLimit)\n                throw new errors_js_1.JWEInvalid(`JOSE Header \"p2c\" (PBES2 Count) out is of acceptable bounds`);\n            if (typeof joseHeader.p2s !== 'string')\n                throw new errors_js_1.JWEInvalid(`JOSE Header \"p2s\" (PBES2 Salt) missing or invalid`);\n            let p2s;\n            try {\n                p2s = (0, base64url_js_1.decode)(joseHeader.p2s);\n            }\n            catch {\n                throw new errors_js_1.JWEInvalid('Failed to base64url decode the p2s');\n            }\n            return (0, pbes2kw_js_1.decrypt)(alg, key, encryptedKey, joseHeader.p2c, p2s);\n        }\n        case 'A128KW':\n        case 'A192KW':\n        case 'A256KW': {\n            if (encryptedKey === undefined)\n                throw new errors_js_1.JWEInvalid('JWE Encrypted Key missing');\n            return (0, aeskw_js_1.unwrap)(alg, key, encryptedKey);\n        }\n        case 'A128GCMKW':\n        case 'A192GCMKW':\n        case 'A256GCMKW': {\n            if (encryptedKey === undefined)\n                throw new errors_js_1.JWEInvalid('JWE Encrypted Key missing');\n            if (typeof joseHeader.iv !== 'string')\n                throw new errors_js_1.JWEInvalid(`JOSE Header \"iv\" (Initialization Vector) missing or invalid`);\n            if (typeof joseHeader.tag !== 'string')\n                throw new errors_js_1.JWEInvalid(`JOSE Header \"tag\" (Authentication Tag) missing or invalid`);\n            let iv;\n            try {\n                iv = (0, base64url_js_1.decode)(joseHeader.iv);\n            }\n            catch {\n                throw new errors_js_1.JWEInvalid('Failed to base64url decode the iv');\n            }\n            let tag;\n            try {\n                tag = (0, base64url_js_1.decode)(joseHeader.tag);\n            }\n            catch {\n                throw new errors_js_1.JWEInvalid('Failed to base64url decode the tag');\n            }\n            return (0, aesgcmkw_js_1.unwrap)(alg, key, encryptedKey, iv, tag);\n        }\n        default: {\n            throw new errors_js_1.JOSENotSupported('Invalid or unsupported \"alg\" (JWE Algorithm) header value');\n        }\n    }\n}\nexports.default = decryptKeyManagement;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst errors_js_1 = require(\"../util/errors.js\");\nfunction validateCrit(Err, recognizedDefault, recognizedOption, protectedHeader, joseHeader) {\n    if (joseHeader.crit !== undefined && protectedHeader.crit === undefined) {\n        throw new Err('\"crit\" (Critical) Header Parameter MUST be integrity protected');\n    }\n    if (!protectedHeader || protectedHeader.crit === undefined) {\n        return new Set();\n    }\n    if (!Array.isArray(protectedHeader.crit) ||\n        protectedHeader.crit.length === 0 ||\n        protectedHeader.crit.some((input) => typeof input !== 'string' || input.length === 0)) {\n        throw new Err('\"crit\" (Critical) Header Parameter MUST be an array of non-empty strings when present');\n    }\n    let recognized;\n    if (recognizedOption !== undefined) {\n        recognized = new Map([...Object.entries(recognizedOption), ...recognizedDefault.entries()]);\n    }\n    else {\n        recognized = recognizedDefault;\n    }\n    for (const parameter of protectedHeader.crit) {\n        if (!recognized.has(parameter)) {\n            throw new errors_js_1.JOSENotSupported(`Extension Header Parameter \"${parameter}\" is not recognized`);\n        }\n        if (joseHeader[parameter] === undefined) {\n            throw new Err(`Extension Header Parameter \"${parameter}\" is missing`);\n        }\n        else if (recognized.get(parameter) && protectedHeader[parameter] === undefined) {\n            throw new Err(`Extension Header Parameter \"${parameter}\" MUST be integrity protected`);\n        }\n    }\n    return new Set(protectedHeader.crit);\n}\nexports.default = validateCrit;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst validateAlgorithms = (option, algorithms) => {\n    if (algorithms !== undefined &&\n        (!Array.isArray(algorithms) || algorithms.some((s) => typeof s !== 'string'))) {\n        throw new TypeError(`\"${option}\" option must be an array of strings`);\n    }\n    if (!algorithms) {\n        return undefined;\n    }\n    return new Set(algorithms);\n};\nexports.default = validateAlgorithms;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.flattenedDecrypt = void 0;\nconst base64url_js_1 = require(\"../../runtime/base64url.js\");\nconst decrypt_js_1 = require(\"../../runtime/decrypt.js\");\nconst zlib_js_1 = require(\"../../runtime/zlib.js\");\nconst errors_js_1 = require(\"../../util/errors.js\");\nconst is_disjoint_js_1 = require(\"../../lib/is_disjoint.js\");\nconst is_object_js_1 = require(\"../../lib/is_object.js\");\nconst decrypt_key_management_js_1 = require(\"../../lib/decrypt_key_management.js\");\nconst buffer_utils_js_1 = require(\"../../lib/buffer_utils.js\");\nconst cek_js_1 = require(\"../../lib/cek.js\");\nconst validate_crit_js_1 = require(\"../../lib/validate_crit.js\");\nconst validate_algorithms_js_1 = require(\"../../lib/validate_algorithms.js\");\nasync function flattenedDecrypt(jwe, key, options) {\n    var _a;\n    if (!(0, is_object_js_1.default)(jwe)) {\n        throw new errors_js_1.JWEInvalid('Flattened JWE must be an object');\n    }\n    if (jwe.protected === undefined && jwe.header === undefined && jwe.unprotected === undefined) {\n        throw new errors_js_1.JWEInvalid('JOSE Header missing');\n    }\n    if (typeof jwe.iv !== 'string') {\n        throw new errors_js_1.JWEInvalid('JWE Initialization Vector missing or incorrect type');\n    }\n    if (typeof jwe.ciphertext !== 'string') {\n        throw new errors_js_1.JWEInvalid('JWE Ciphertext missing or incorrect type');\n    }\n    if (typeof jwe.tag !== 'string') {\n        throw new errors_js_1.JWEInvalid('JWE Authentication Tag missing or incorrect type');\n    }\n    if (jwe.protected !== undefined && typeof jwe.protected !== 'string') {\n        throw new errors_js_1.JWEInvalid('JWE Protected Header incorrect type');\n    }\n    if (jwe.encrypted_key !== undefined && typeof jwe.encrypted_key !== 'string') {\n        throw new errors_js_1.JWEInvalid('JWE Encrypted Key incorrect type');\n    }\n    if (jwe.aad !== undefined && typeof jwe.aad !== 'string') {\n        throw new errors_js_1.JWEInvalid('JWE AAD incorrect type');\n    }\n    if (jwe.header !== undefined && !(0, is_object_js_1.default)(jwe.header)) {\n        throw new errors_js_1.JWEInvalid('JWE Shared Unprotected Header incorrect type');\n    }\n    if (jwe.unprotected !== undefined && !(0, is_object_js_1.default)(jwe.unprotected)) {\n        throw new errors_js_1.JWEInvalid('JWE Per-Recipient Unprotected Header incorrect type');\n    }\n    let parsedProt;\n    if (jwe.protected) {\n        try {\n            const protectedHeader = (0, base64url_js_1.decode)(jwe.protected);\n            parsedProt = JSON.parse(buffer_utils_js_1.decoder.decode(protectedHeader));\n        }\n        catch {\n            throw new errors_js_1.JWEInvalid('JWE Protected Header is invalid');\n        }\n    }\n    if (!(0, is_disjoint_js_1.default)(parsedProt, jwe.header, jwe.unprotected)) {\n        throw new errors_js_1.JWEInvalid('JWE Protected, JWE Unprotected Header, and JWE Per-Recipient Unprotected Header Parameter names must be disjoint');\n    }\n    const joseHeader = {\n        ...parsedProt,\n        ...jwe.header,\n        ...jwe.unprotected,\n    };\n    (0, validate_crit_js_1.default)(errors_js_1.JWEInvalid, new Map(), options === null || options === void 0 ? void 0 : options.crit, parsedProt, joseHeader);\n    if (joseHeader.zip !== undefined) {\n        if (!parsedProt || !parsedProt.zip) {\n            throw new errors_js_1.JWEInvalid('JWE \"zip\" (Compression Algorithm) Header MUST be integrity protected');\n        }\n        if (joseHeader.zip !== 'DEF') {\n            throw new errors_js_1.JOSENotSupported('Unsupported JWE \"zip\" (Compression Algorithm) Header Parameter value');\n        }\n    }\n    const { alg, enc } = joseHeader;\n    if (typeof alg !== 'string' || !alg) {\n        throw new errors_js_1.JWEInvalid('missing JWE Algorithm (alg) in JWE Header');\n    }\n    if (typeof enc !== 'string' || !enc) {\n        throw new errors_js_1.JWEInvalid('missing JWE Encryption Algorithm (enc) in JWE Header');\n    }\n    const keyManagementAlgorithms = options && (0, validate_algorithms_js_1.default)('keyManagementAlgorithms', options.keyManagementAlgorithms);\n    const contentEncryptionAlgorithms = options &&\n        (0, validate_algorithms_js_1.default)('contentEncryptionAlgorithms', options.contentEncryptionAlgorithms);\n    if (keyManagementAlgorithms && !keyManagementAlgorithms.has(alg)) {\n        throw new errors_js_1.JOSEAlgNotAllowed('\"alg\" (Algorithm) Header Parameter not allowed');\n    }\n    if (contentEncryptionAlgorithms && !contentEncryptionAlgorithms.has(enc)) {\n        throw new errors_js_1.JOSEAlgNotAllowed('\"enc\" (Encryption Algorithm) Header Parameter not allowed');\n    }\n    let encryptedKey;\n    if (jwe.encrypted_key !== undefined) {\n        try {\n            encryptedKey = (0, base64url_js_1.decode)(jwe.encrypted_key);\n        }\n        catch {\n            throw new errors_js_1.JWEInvalid('Failed to base64url decode the encrypted_key');\n        }\n    }\n    let resolvedKey = false;\n    if (typeof key === 'function') {\n        key = await key(parsedProt, jwe);\n        resolvedKey = true;\n    }\n    let cek;\n    try {\n        cek = await (0, decrypt_key_management_js_1.default)(alg, key, encryptedKey, joseHeader, options);\n    }\n    catch (err) {\n        if (err instanceof TypeError || err instanceof errors_js_1.JWEInvalid || err instanceof errors_js_1.JOSENotSupported) {\n            throw err;\n        }\n        cek = (0, cek_js_1.default)(enc);\n    }\n    let iv;\n    let tag;\n    try {\n        iv = (0, base64url_js_1.decode)(jwe.iv);\n    }\n    catch {\n        throw new errors_js_1.JWEInvalid('Failed to base64url decode the iv');\n    }\n    try {\n        tag = (0, base64url_js_1.decode)(jwe.tag);\n    }\n    catch {\n        throw new errors_js_1.JWEInvalid('Failed to base64url decode the tag');\n    }\n    const protectedHeader = buffer_utils_js_1.encoder.encode((_a = jwe.protected) !== null && _a !== void 0 ? _a : '');\n    let additionalData;\n    if (jwe.aad !== undefined) {\n        additionalData = (0, buffer_utils_js_1.concat)(protectedHeader, buffer_utils_js_1.encoder.encode('.'), buffer_utils_js_1.encoder.encode(jwe.aad));\n    }\n    else {\n        additionalData = protectedHeader;\n    }\n    let ciphertext;\n    try {\n        ciphertext = (0, base64url_js_1.decode)(jwe.ciphertext);\n    }\n    catch {\n        throw new errors_js_1.JWEInvalid('Failed to base64url decode the ciphertext');\n    }\n    let plaintext = await (0, decrypt_js_1.default)(enc, cek, ciphertext, iv, tag, additionalData);\n    if (joseHeader.zip === 'DEF') {\n        plaintext = await ((options === null || options === void 0 ? void 0 : options.inflateRaw) || zlib_js_1.inflate)(plaintext);\n    }\n    const result = { plaintext };\n    if (jwe.protected !== undefined) {\n        result.protectedHeader = parsedProt;\n    }\n    if (jwe.aad !== undefined) {\n        try {\n            result.additionalAuthenticatedData = (0, base64url_js_1.decode)(jwe.aad);\n        }\n        catch {\n            throw new errors_js_1.JWEInvalid('Failed to base64url decode the aad');\n        }\n    }\n    if (jwe.unprotected !== undefined) {\n        result.sharedUnprotectedHeader = jwe.unprotected;\n    }\n    if (jwe.header !== undefined) {\n        result.unprotectedHeader = jwe.header;\n    }\n    if (resolvedKey) {\n        return { ...result, key };\n    }\n    return result;\n}\nexports.flattenedDecrypt = flattenedDecrypt;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.compactDecrypt = void 0;\nconst decrypt_js_1 = require(\"../flattened/decrypt.js\");\nconst errors_js_1 = require(\"../../util/errors.js\");\nconst buffer_utils_js_1 = require(\"../../lib/buffer_utils.js\");\nasync function compactDecrypt(jwe, key, options) {\n    if (jwe instanceof Uint8Array) {\n        jwe = buffer_utils_js_1.decoder.decode(jwe);\n    }\n    if (typeof jwe !== 'string') {\n        throw new errors_js_1.JWEInvalid('Compact JWE must be a string or Uint8Array');\n    }\n    const { 0: protectedHeader, 1: encryptedKey, 2: iv, 3: ciphertext, 4: tag, length, } = jwe.split('.');\n    if (length !== 5) {\n        throw new errors_js_1.JWEInvalid('Invalid Compact JWE');\n    }\n    const decrypted = await (0, decrypt_js_1.flattenedDecrypt)({\n        ciphertext,\n        iv: (iv || undefined),\n        protected: protectedHeader || undefined,\n        tag: (tag || undefined),\n        encrypted_key: encryptedKey || undefined,\n    }, key, options);\n    const result = { plaintext: decrypted.plaintext, protectedHeader: decrypted.protectedHeader };\n    if (typeof key === 'function') {\n        return { ...result, key: decrypted.key };\n    }\n    return result;\n}\nexports.compactDecrypt = compactDecrypt;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.generalDecrypt = void 0;\nconst decrypt_js_1 = require(\"../flattened/decrypt.js\");\nconst errors_js_1 = require(\"../../util/errors.js\");\nconst is_object_js_1 = require(\"../../lib/is_object.js\");\nasync function generalDecrypt(jwe, key, options) {\n    if (!(0, is_object_js_1.default)(jwe)) {\n        throw new errors_js_1.JWEInvalid('General JWE must be an object');\n    }\n    if (!Array.isArray(jwe.recipients) || !jwe.recipients.every(is_object_js_1.default)) {\n        throw new errors_js_1.JWEInvalid('JWE Recipients missing or incorrect type');\n    }\n    if (!jwe.recipients.length) {\n        throw new errors_js_1.JWEInvalid('JWE Recipients has no members');\n    }\n    for (const recipient of jwe.recipients) {\n        try {\n            return await (0, decrypt_js_1.flattenedDecrypt)({\n                aad: jwe.aad,\n                ciphertext: jwe.ciphertext,\n                encrypted_key: recipient.encrypted_key,\n                header: recipient.header,\n                iv: jwe.iv,\n                protected: jwe.protected,\n                tag: jwe.tag,\n                unprotected: jwe.unprotected,\n            }, key, options);\n        }\n        catch {\n        }\n    }\n    throw new errors_js_1.JWEDecryptionFailed();\n}\nexports.generalDecrypt = generalDecrypt;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst tagInteger = 0x02;\nconst tagSequence = 0x30;\nclass Asn1SequenceDecoder {\n    constructor(buffer) {\n        if (buffer[0] !== tagSequence) {\n            throw new TypeError();\n        }\n        this.buffer = buffer;\n        this.offset = 1;\n        const len = this.decodeLength();\n        if (len !== buffer.length - this.offset) {\n            throw new TypeError();\n        }\n    }\n    decodeLength() {\n        let length = this.buffer[this.offset++];\n        if (length & 0x80) {\n            const nBytes = length & ~0x80;\n            length = 0;\n            for (let i = 0; i < nBytes; i++)\n                length = (length << 8) | this.buffer[this.offset + i];\n            this.offset += nBytes;\n        }\n        return length;\n    }\n    unsignedInteger() {\n        if (this.buffer[this.offset++] !== tagInteger) {\n            throw new TypeError();\n        }\n        let length = this.decodeLength();\n        if (this.buffer[this.offset] === 0) {\n            this.offset++;\n            length--;\n        }\n        const result = this.buffer.slice(this.offset, this.offset + length);\n        this.offset += length;\n        return result;\n    }\n    end() {\n        if (this.offset !== this.buffer.length) {\n            throw new TypeError();\n        }\n    }\n}\nexports.default = Asn1SequenceDecoder;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst crypto_1 = require(\"crypto\");\nconst base64url_js_1 = require(\"./base64url.js\");\nconst asn1_sequence_decoder_js_1 = require(\"./asn1_sequence_decoder.js\");\nconst errors_js_1 = require(\"../util/errors.js\");\nconst get_named_curve_js_1 = require(\"./get_named_curve.js\");\nconst webcrypto_js_1 = require(\"./webcrypto.js\");\nconst is_key_object_js_1 = require(\"./is_key_object.js\");\nconst invalid_key_input_js_1 = require(\"../lib/invalid_key_input.js\");\nconst is_key_like_js_1 = require(\"./is_key_like.js\");\nconst flags_js_1 = require(\"./flags.js\");\nconst keyToJWK = (key) => {\n    let keyObject;\n    if ((0, webcrypto_js_1.isCryptoKey)(key)) {\n        if (!key.extractable) {\n            throw new TypeError('CryptoKey is not extractable');\n        }\n        keyObject = crypto_1.KeyObject.from(key);\n    }\n    else if ((0, is_key_object_js_1.default)(key)) {\n        keyObject = key;\n    }\n    else if (key instanceof Uint8Array) {\n        return {\n            kty: 'oct',\n            k: (0, base64url_js_1.encode)(key),\n        };\n    }\n    else {\n        throw new TypeError((0, invalid_key_input_js_1.default)(key, ...is_key_like_js_1.types, 'Uint8Array'));\n    }\n    if (flags_js_1.jwkExport) {\n        if (keyObject.type !== 'secret' &&\n            !['rsa', 'ec', 'ed25519', 'x25519', 'ed448', 'x448'].includes(keyObject.asymmetricKeyType)) {\n            throw new errors_js_1.JOSENotSupported('Unsupported key asymmetricKeyType');\n        }\n        return keyObject.export({ format: 'jwk' });\n    }\n    switch (keyObject.type) {\n        case 'secret':\n            return {\n                kty: 'oct',\n                k: (0, base64url_js_1.encode)(keyObject.export()),\n            };\n        case 'private':\n        case 'public': {\n            switch (keyObject.asymmetricKeyType) {\n                case 'rsa': {\n                    const der = keyObject.export({ format: 'der', type: 'pkcs1' });\n                    const dec = new asn1_sequence_decoder_js_1.default(der);\n                    if (keyObject.type === 'private') {\n                        dec.unsignedInteger();\n                    }\n                    const n = (0, base64url_js_1.encode)(dec.unsignedInteger());\n                    const e = (0, base64url_js_1.encode)(dec.unsignedInteger());\n                    let jwk;\n                    if (keyObject.type === 'private') {\n                        jwk = {\n                            d: (0, base64url_js_1.encode)(dec.unsignedInteger()),\n                            p: (0, base64url_js_1.encode)(dec.unsignedInteger()),\n                            q: (0, base64url_js_1.encode)(dec.unsignedInteger()),\n                            dp: (0, base64url_js_1.encode)(dec.unsignedInteger()),\n                            dq: (0, base64url_js_1.encode)(dec.unsignedInteger()),\n                            qi: (0, base64url_js_1.encode)(dec.unsignedInteger()),\n                        };\n                    }\n                    dec.end();\n                    return { kty: 'RSA', n, e, ...jwk };\n                }\n                case 'ec': {\n                    const crv = (0, get_named_curve_js_1.default)(keyObject);\n                    let len;\n                    let offset;\n                    let correction;\n                    switch (crv) {\n                        case 'secp256k1':\n                            len = 64;\n                            offset = 31 + 2;\n                            correction = -1;\n                            break;\n                        case 'P-256':\n                            len = 64;\n                            offset = 34 + 2;\n                            correction = -1;\n                            break;\n                        case 'P-384':\n                            len = 96;\n                            offset = 33 + 2;\n                            correction = -3;\n                            break;\n                        case 'P-521':\n                            len = 132;\n                            offset = 33 + 2;\n                            correction = -3;\n                            break;\n                        default:\n                            throw new errors_js_1.JOSENotSupported('Unsupported curve');\n                    }\n                    if (keyObject.type === 'public') {\n                        const der = keyObject.export({ type: 'spki', format: 'der' });\n                        return {\n                            kty: 'EC',\n                            crv,\n                            x: (0, base64url_js_1.encode)(der.subarray(-len, -len / 2)),\n                            y: (0, base64url_js_1.encode)(der.subarray(-len / 2)),\n                        };\n                    }\n                    const der = keyObject.export({ type: 'pkcs8', format: 'der' });\n                    if (der.length < 100) {\n                        offset += correction;\n                    }\n                    return {\n                        ...keyToJWK((0, crypto_1.createPublicKey)(keyObject)),\n                        d: (0, base64url_js_1.encode)(der.subarray(offset, offset + len / 2)),\n                    };\n                }\n                case 'ed25519':\n                case 'x25519': {\n                    const crv = (0, get_named_curve_js_1.default)(keyObject);\n                    if (keyObject.type === 'public') {\n                        const der = keyObject.export({ type: 'spki', format: 'der' });\n                        return {\n                            kty: 'OKP',\n                            crv,\n                            x: (0, base64url_js_1.encode)(der.subarray(-32)),\n                        };\n                    }\n                    const der = keyObject.export({ type: 'pkcs8', format: 'der' });\n                    return {\n                        ...keyToJWK((0, crypto_1.createPublicKey)(keyObject)),\n                        d: (0, base64url_js_1.encode)(der.subarray(-32)),\n                    };\n                }\n                case 'ed448':\n                case 'x448': {\n                    const crv = (0, get_named_curve_js_1.default)(keyObject);\n                    if (keyObject.type === 'public') {\n                        const der = keyObject.export({ type: 'spki', format: 'der' });\n                        return {\n                            kty: 'OKP',\n                            crv,\n                            x: (0, base64url_js_1.encode)(der.subarray(crv === 'Ed448' ? -57 : -56)),\n                        };\n                    }\n                    const der = keyObject.export({ type: 'pkcs8', format: 'der' });\n                    return {\n                        ...keyToJWK((0, crypto_1.createPublicKey)(keyObject)),\n                        d: (0, base64url_js_1.encode)(der.subarray(crv === 'Ed448' ? -57 : -56)),\n                    };\n                }\n                default:\n                    throw new errors_js_1.JOSENotSupported('Unsupported key asymmetricKeyType');\n            }\n        }\n        default:\n            throw new errors_js_1.JOSENotSupported('Unsupported key type');\n    }\n};\nexports.default = keyToJWK;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.exportJWK = exports.exportPKCS8 = exports.exportSPKI = void 0;\nconst asn1_js_1 = require(\"../runtime/asn1.js\");\nconst asn1_js_2 = require(\"../runtime/asn1.js\");\nconst key_to_jwk_js_1 = require(\"../runtime/key_to_jwk.js\");\nasync function exportSPKI(key) {\n    return (0, asn1_js_1.toSPKI)(key);\n}\nexports.exportSPKI = exportSPKI;\nasync function exportPKCS8(key) {\n    return (0, asn1_js_2.toPKCS8)(key);\n}\nexports.exportPKCS8 = exportPKCS8;\nasync function exportJWK(key) {\n    return (0, key_to_jwk_js_1.default)(key);\n}\nexports.exportJWK = exportJWK;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst aeskw_js_1 = require(\"../runtime/aeskw.js\");\nconst ECDH = require(\"../runtime/ecdhes.js\");\nconst pbes2kw_js_1 = require(\"../runtime/pbes2kw.js\");\nconst rsaes_js_1 = require(\"../runtime/rsaes.js\");\nconst base64url_js_1 = require(\"../runtime/base64url.js\");\nconst cek_js_1 = require(\"../lib/cek.js\");\nconst errors_js_1 = require(\"../util/errors.js\");\nconst export_js_1 = require(\"../key/export.js\");\nconst check_key_type_js_1 = require(\"./check_key_type.js\");\nconst aesgcmkw_js_1 = require(\"./aesgcmkw.js\");\nasync function encryptKeyManagement(alg, enc, key, providedCek, providedParameters = {}) {\n    let encryptedKey;\n    let parameters;\n    let cek;\n    (0, check_key_type_js_1.default)(alg, key, 'encrypt');\n    switch (alg) {\n        case 'dir': {\n            cek = key;\n            break;\n        }\n        case 'ECDH-ES':\n        case 'ECDH-ES+A128KW':\n        case 'ECDH-ES+A192KW':\n        case 'ECDH-ES+A256KW': {\n            if (!ECDH.ecdhAllowed(key)) {\n                throw new errors_js_1.JOSENotSupported('ECDH with the provided key is not allowed or not supported by your javascript runtime');\n            }\n            const { apu, apv } = providedParameters;\n            let { epk: ephemeralKey } = providedParameters;\n            ephemeralKey || (ephemeralKey = (await ECDH.generateEpk(key)).privateKey);\n            const { x, y, crv, kty } = await (0, export_js_1.exportJWK)(ephemeralKey);\n            const sharedSecret = await ECDH.deriveKey(key, ephemeralKey, alg === 'ECDH-ES' ? enc : alg, alg === 'ECDH-ES' ? (0, cek_js_1.bitLength)(enc) : parseInt(alg.slice(-5, -2), 10), apu, apv);\n            parameters = { epk: { x, crv, kty } };\n            if (kty === 'EC')\n                parameters.epk.y = y;\n            if (apu)\n                parameters.apu = (0, base64url_js_1.encode)(apu);\n            if (apv)\n                parameters.apv = (0, base64url_js_1.encode)(apv);\n            if (alg === 'ECDH-ES') {\n                cek = sharedSecret;\n                break;\n            }\n            cek = providedCek || (0, cek_js_1.default)(enc);\n            const kwAlg = alg.slice(-6);\n            encryptedKey = await (0, aeskw_js_1.wrap)(kwAlg, sharedSecret, cek);\n            break;\n        }\n        case 'RSA1_5':\n        case 'RSA-OAEP':\n        case 'RSA-OAEP-256':\n        case 'RSA-OAEP-384':\n        case 'RSA-OAEP-512': {\n            cek = providedCek || (0, cek_js_1.default)(enc);\n            encryptedKey = await (0, rsaes_js_1.encrypt)(alg, key, cek);\n            break;\n        }\n        case 'PBES2-HS256+A128KW':\n        case 'PBES2-HS384+A192KW':\n        case 'PBES2-HS512+A256KW': {\n            cek = providedCek || (0, cek_js_1.default)(enc);\n            const { p2c, p2s } = providedParameters;\n            ({ encryptedKey, ...parameters } = await (0, pbes2kw_js_1.encrypt)(alg, key, cek, p2c, p2s));\n            break;\n        }\n        case 'A128KW':\n        case 'A192KW':\n        case 'A256KW': {\n            cek = providedCek || (0, cek_js_1.default)(enc);\n            encryptedKey = await (0, aeskw_js_1.wrap)(alg, key, cek);\n            break;\n        }\n        case 'A128GCMKW':\n        case 'A192GCMKW':\n        case 'A256GCMKW': {\n            cek = providedCek || (0, cek_js_1.default)(enc);\n            const { iv } = providedParameters;\n            ({ encryptedKey, ...parameters } = await (0, aesgcmkw_js_1.wrap)(alg, key, cek, iv));\n            break;\n        }\n        default: {\n            throw new errors_js_1.JOSENotSupported('Invalid or unsupported \"alg\" (JWE Algorithm) header value');\n        }\n    }\n    return { cek, encryptedKey, parameters };\n}\nexports.default = encryptKeyManagement;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.FlattenedEncrypt = exports.unprotected = void 0;\nconst base64url_js_1 = require(\"../../runtime/base64url.js\");\nconst encrypt_js_1 = require(\"../../runtime/encrypt.js\");\nconst zlib_js_1 = require(\"../../runtime/zlib.js\");\nconst iv_js_1 = require(\"../../lib/iv.js\");\nconst encrypt_key_management_js_1 = require(\"../../lib/encrypt_key_management.js\");\nconst errors_js_1 = require(\"../../util/errors.js\");\nconst is_disjoint_js_1 = require(\"../../lib/is_disjoint.js\");\nconst buffer_utils_js_1 = require(\"../../lib/buffer_utils.js\");\nconst validate_crit_js_1 = require(\"../../lib/validate_crit.js\");\nexports.unprotected = Symbol();\nclass FlattenedEncrypt {\n    constructor(plaintext) {\n        if (!(plaintext instanceof Uint8Array)) {\n            throw new TypeError('plaintext must be an instance of Uint8Array');\n        }\n        this._plaintext = plaintext;\n    }\n    setKeyManagementParameters(parameters) {\n        if (this._keyManagementParameters) {\n            throw new TypeError('setKeyManagementParameters can only be called once');\n        }\n        this._keyManagementParameters = parameters;\n        return this;\n    }\n    setProtectedHeader(protectedHeader) {\n        if (this._protectedHeader) {\n            throw new TypeError('setProtectedHeader can only be called once');\n        }\n        this._protectedHeader = protectedHeader;\n        return this;\n    }\n    setSharedUnprotectedHeader(sharedUnprotectedHeader) {\n        if (this._sharedUnprotectedHeader) {\n            throw new TypeError('setSharedUnprotectedHeader can only be called once');\n        }\n        this._sharedUnprotectedHeader = sharedUnprotectedHeader;\n        return this;\n    }\n    setUnprotectedHeader(unprotectedHeader) {\n        if (this._unprotectedHeader) {\n            throw new TypeError('setUnprotectedHeader can only be called once');\n        }\n        this._unprotectedHeader = unprotectedHeader;\n        return this;\n    }\n    setAdditionalAuthenticatedData(aad) {\n        this._aad = aad;\n        return this;\n    }\n    setContentEncryptionKey(cek) {\n        if (this._cek) {\n            throw new TypeError('setContentEncryptionKey can only be called once');\n        }\n        this._cek = cek;\n        return this;\n    }\n    setInitializationVector(iv) {\n        if (this._iv) {\n            throw new TypeError('setInitializationVector can only be called once');\n        }\n        this._iv = iv;\n        return this;\n    }\n    async encrypt(key, options) {\n        if (!this._protectedHeader && !this._unprotectedHeader && !this._sharedUnprotectedHeader) {\n            throw new errors_js_1.JWEInvalid('either setProtectedHeader, setUnprotectedHeader, or sharedUnprotectedHeader must be called before #encrypt()');\n        }\n        if (!(0, is_disjoint_js_1.default)(this._protectedHeader, this._unprotectedHeader, this._sharedUnprotectedHeader)) {\n            throw new errors_js_1.JWEInvalid('JWE Protected, JWE Shared Unprotected and JWE Per-Recipient Header Parameter names must be disjoint');\n        }\n        const joseHeader = {\n            ...this._protectedHeader,\n            ...this._unprotectedHeader,\n            ...this._sharedUnprotectedHeader,\n        };\n        (0, validate_crit_js_1.default)(errors_js_1.JWEInvalid, new Map(), options === null || options === void 0 ? void 0 : options.crit, this._protectedHeader, joseHeader);\n        if (joseHeader.zip !== undefined) {\n            if (!this._protectedHeader || !this._protectedHeader.zip) {\n                throw new errors_js_1.JWEInvalid('JWE \"zip\" (Compression Algorithm) Header MUST be integrity protected');\n            }\n            if (joseHeader.zip !== 'DEF') {\n                throw new errors_js_1.JOSENotSupported('Unsupported JWE \"zip\" (Compression Algorithm) Header Parameter value');\n            }\n        }\n        const { alg, enc } = joseHeader;\n        if (typeof alg !== 'string' || !alg) {\n            throw new errors_js_1.JWEInvalid('JWE \"alg\" (Algorithm) Header Parameter missing or invalid');\n        }\n        if (typeof enc !== 'string' || !enc) {\n            throw new errors_js_1.JWEInvalid('JWE \"enc\" (Encryption Algorithm) Header Parameter missing or invalid');\n        }\n        let encryptedKey;\n        if (alg === 'dir') {\n            if (this._cek) {\n                throw new TypeError('setContentEncryptionKey cannot be called when using Direct Encryption');\n            }\n        }\n        else if (alg === 'ECDH-ES') {\n            if (this._cek) {\n                throw new TypeError('setContentEncryptionKey cannot be called when using Direct Key Agreement');\n            }\n        }\n        let cek;\n        {\n            let parameters;\n            ({ cek, encryptedKey, parameters } = await (0, encrypt_key_management_js_1.default)(alg, enc, key, this._cek, this._keyManagementParameters));\n            if (parameters) {\n                if (options && exports.unprotected in options) {\n                    if (!this._unprotectedHeader) {\n                        this.setUnprotectedHeader(parameters);\n                    }\n                    else {\n                        this._unprotectedHeader = { ...this._unprotectedHeader, ...parameters };\n                    }\n                }\n                else {\n                    if (!this._protectedHeader) {\n                        this.setProtectedHeader(parameters);\n                    }\n                    else {\n                        this._protectedHeader = { ...this._protectedHeader, ...parameters };\n                    }\n                }\n            }\n        }\n        this._iv || (this._iv = (0, iv_js_1.default)(enc));\n        let additionalData;\n        let protectedHeader;\n        let aadMember;\n        if (this._protectedHeader) {\n            protectedHeader = buffer_utils_js_1.encoder.encode((0, base64url_js_1.encode)(JSON.stringify(this._protectedHeader)));\n        }\n        else {\n            protectedHeader = buffer_utils_js_1.encoder.encode('');\n        }\n        if (this._aad) {\n            aadMember = (0, base64url_js_1.encode)(this._aad);\n            additionalData = (0, buffer_utils_js_1.concat)(protectedHeader, buffer_utils_js_1.encoder.encode('.'), buffer_utils_js_1.encoder.encode(aadMember));\n        }\n        else {\n            additionalData = protectedHeader;\n        }\n        let ciphertext;\n        let tag;\n        if (joseHeader.zip === 'DEF') {\n            const deflated = await ((options === null || options === void 0 ? void 0 : options.deflateRaw) || zlib_js_1.deflate)(this._plaintext);\n            ({ ciphertext, tag } = await (0, encrypt_js_1.default)(enc, deflated, cek, this._iv, additionalData));\n        }\n        else {\n            ;\n            ({ ciphertext, tag } = await (0, encrypt_js_1.default)(enc, this._plaintext, cek, this._iv, additionalData));\n        }\n        const jwe = {\n            ciphertext: (0, base64url_js_1.encode)(ciphertext),\n            iv: (0, base64url_js_1.encode)(this._iv),\n            tag: (0, base64url_js_1.encode)(tag),\n        };\n        if (encryptedKey) {\n            jwe.encrypted_key = (0, base64url_js_1.encode)(encryptedKey);\n        }\n        if (aadMember) {\n            jwe.aad = aadMember;\n        }\n        if (this._protectedHeader) {\n            jwe.protected = buffer_utils_js_1.decoder.decode(protectedHeader);\n        }\n        if (this._sharedUnprotectedHeader) {\n            jwe.unprotected = this._sharedUnprotectedHeader;\n        }\n        if (this._unprotectedHeader) {\n            jwe.header = this._unprotectedHeader;\n        }\n        return jwe;\n    }\n}\nexports.FlattenedEncrypt = FlattenedEncrypt;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.GeneralEncrypt = void 0;\nconst encrypt_js_1 = require(\"../flattened/encrypt.js\");\nconst errors_js_1 = require(\"../../util/errors.js\");\nconst cek_js_1 = require(\"../../lib/cek.js\");\nconst is_disjoint_js_1 = require(\"../../lib/is_disjoint.js\");\nconst encrypt_key_management_js_1 = require(\"../../lib/encrypt_key_management.js\");\nconst base64url_js_1 = require(\"../../runtime/base64url.js\");\nconst validate_crit_js_1 = require(\"../../lib/validate_crit.js\");\nclass IndividualRecipient {\n    constructor(enc, key, options) {\n        this.parent = enc;\n        this.key = key;\n        this.options = options;\n    }\n    setUnprotectedHeader(unprotectedHeader) {\n        if (this.unprotectedHeader) {\n            throw new TypeError('setUnprotectedHeader can only be called once');\n        }\n        this.unprotectedHeader = unprotectedHeader;\n        return this;\n    }\n    addRecipient(...args) {\n        return this.parent.addRecipient(...args);\n    }\n    encrypt(...args) {\n        return this.parent.encrypt(...args);\n    }\n    done() {\n        return this.parent;\n    }\n}\nclass GeneralEncrypt {\n    constructor(plaintext) {\n        this._recipients = [];\n        this._plaintext = plaintext;\n    }\n    addRecipient(key, options) {\n        const recipient = new IndividualRecipient(this, key, { crit: options === null || options === void 0 ? void 0 : options.crit });\n        this._recipients.push(recipient);\n        return recipient;\n    }\n    setProtectedHeader(protectedHeader) {\n        if (this._protectedHeader) {\n            throw new TypeError('setProtectedHeader can only be called once');\n        }\n        this._protectedHeader = protectedHeader;\n        return this;\n    }\n    setSharedUnprotectedHeader(sharedUnprotectedHeader) {\n        if (this._unprotectedHeader) {\n            throw new TypeError('setSharedUnprotectedHeader can only be called once');\n        }\n        this._unprotectedHeader = sharedUnprotectedHeader;\n        return this;\n    }\n    setAdditionalAuthenticatedData(aad) {\n        this._aad = aad;\n        return this;\n    }\n    async encrypt(options) {\n        var _a, _b, _c;\n        if (!this._recipients.length) {\n            throw new errors_js_1.JWEInvalid('at least one recipient must be added');\n        }\n        options = { deflateRaw: options === null || options === void 0 ? void 0 : options.deflateRaw };\n        if (this._recipients.length === 1) {\n            const [recipient] = this._recipients;\n            const flattened = await new encrypt_js_1.FlattenedEncrypt(this._plaintext)\n                .setAdditionalAuthenticatedData(this._aad)\n                .setProtectedHeader(this._protectedHeader)\n                .setSharedUnprotectedHeader(this._unprotectedHeader)\n                .setUnprotectedHeader(recipient.unprotectedHeader)\n                .encrypt(recipient.key, { ...recipient.options, ...options });\n            let jwe = {\n                ciphertext: flattened.ciphertext,\n                iv: flattened.iv,\n                recipients: [{}],\n                tag: flattened.tag,\n            };\n            if (flattened.aad)\n                jwe.aad = flattened.aad;\n            if (flattened.protected)\n                jwe.protected = flattened.protected;\n            if (flattened.unprotected)\n                jwe.unprotected = flattened.unprotected;\n            if (flattened.encrypted_key)\n                jwe.recipients[0].encrypted_key = flattened.encrypted_key;\n            if (flattened.header)\n                jwe.recipients[0].header = flattened.header;\n            return jwe;\n        }\n        let enc;\n        for (let i = 0; i < this._recipients.length; i++) {\n            const recipient = this._recipients[i];\n            if (!(0, is_disjoint_js_1.default)(this._protectedHeader, this._unprotectedHeader, recipient.unprotectedHeader)) {\n                throw new errors_js_1.JWEInvalid('JWE Protected, JWE Shared Unprotected and JWE Per-Recipient Header Parameter names must be disjoint');\n            }\n            const joseHeader = {\n                ...this._protectedHeader,\n                ...this._unprotectedHeader,\n                ...recipient.unprotectedHeader,\n            };\n            const { alg } = joseHeader;\n            if (typeof alg !== 'string' || !alg) {\n                throw new errors_js_1.JWEInvalid('JWE \"alg\" (Algorithm) Header Parameter missing or invalid');\n            }\n            if (alg === 'dir' || alg === 'ECDH-ES') {\n                throw new errors_js_1.JWEInvalid('\"dir\" and \"ECDH-ES\" alg may only be used with a single recipient');\n            }\n            if (typeof joseHeader.enc !== 'string' || !joseHeader.enc) {\n                throw new errors_js_1.JWEInvalid('JWE \"enc\" (Encryption Algorithm) Header Parameter missing or invalid');\n            }\n            if (!enc) {\n                enc = joseHeader.enc;\n            }\n            else if (enc !== joseHeader.enc) {\n                throw new errors_js_1.JWEInvalid('JWE \"enc\" (Encryption Algorithm) Header Parameter must be the same for all recipients');\n            }\n            (0, validate_crit_js_1.default)(errors_js_1.JWEInvalid, new Map(), recipient.options.crit, this._protectedHeader, joseHeader);\n            if (joseHeader.zip !== undefined) {\n                if (!this._protectedHeader || !this._protectedHeader.zip) {\n                    throw new errors_js_1.JWEInvalid('JWE \"zip\" (Compression Algorithm) Header MUST be integrity protected');\n                }\n            }\n        }\n        const cek = (0, cek_js_1.default)(enc);\n        let jwe = {\n            ciphertext: '',\n            iv: '',\n            recipients: [],\n            tag: '',\n        };\n        for (let i = 0; i < this._recipients.length; i++) {\n            const recipient = this._recipients[i];\n            const target = {};\n            jwe.recipients.push(target);\n            const joseHeader = {\n                ...this._protectedHeader,\n                ...this._unprotectedHeader,\n                ...recipient.unprotectedHeader,\n            };\n            const p2c = joseHeader.alg.startsWith('PBES2') ? 2048 + i : undefined;\n            if (i === 0) {\n                const flattened = await new encrypt_js_1.FlattenedEncrypt(this._plaintext)\n                    .setAdditionalAuthenticatedData(this._aad)\n                    .setContentEncryptionKey(cek)\n                    .setProtectedHeader(this._protectedHeader)\n                    .setSharedUnprotectedHeader(this._unprotectedHeader)\n                    .setUnprotectedHeader(recipient.unprotectedHeader)\n                    .setKeyManagementParameters({ p2c })\n                    .encrypt(recipient.key, {\n                    ...recipient.options,\n                    ...options,\n                    [encrypt_js_1.unprotected]: true,\n                });\n                jwe.ciphertext = flattened.ciphertext;\n                jwe.iv = flattened.iv;\n                jwe.tag = flattened.tag;\n                if (flattened.aad)\n                    jwe.aad = flattened.aad;\n                if (flattened.protected)\n                    jwe.protected = flattened.protected;\n                if (flattened.unprotected)\n                    jwe.unprotected = flattened.unprotected;\n                target.encrypted_key = flattened.encrypted_key;\n                if (flattened.header)\n                    target.header = flattened.header;\n                continue;\n            }\n            const { encryptedKey, parameters } = await (0, encrypt_key_management_js_1.default)(((_a = recipient.unprotectedHeader) === null || _a === void 0 ? void 0 : _a.alg) ||\n                ((_b = this._protectedHeader) === null || _b === void 0 ? void 0 : _b.alg) ||\n                ((_c = this._unprotectedHeader) === null || _c === void 0 ? void 0 : _c.alg), enc, recipient.key, cek, { p2c });\n            target.encrypted_key = (0, base64url_js_1.encode)(encryptedKey);\n            if (recipient.unprotectedHeader || parameters)\n                target.header = { ...recipient.unprotectedHeader, ...parameters };\n        }\n        return jwe;\n    }\n}\nexports.GeneralEncrypt = GeneralEncrypt;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst errors_js_1 = require(\"../util/errors.js\");\nfunction dsaDigest(alg) {\n    switch (alg) {\n        case 'PS256':\n        case 'RS256':\n        case 'ES256':\n        case 'ES256K':\n            return 'sha256';\n        case 'PS384':\n        case 'RS384':\n        case 'ES384':\n            return 'sha384';\n        case 'PS512':\n        case 'RS512':\n        case 'ES512':\n            return 'sha512';\n        case 'EdDSA':\n            return undefined;\n        default:\n            throw new errors_js_1.JOSENotSupported(`alg ${alg} is not supported either by JOSE or your javascript runtime`);\n    }\n}\nexports.default = dsaDigest;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst crypto_1 = require(\"crypto\");\nconst get_named_curve_js_1 = require(\"./get_named_curve.js\");\nconst errors_js_1 = require(\"../util/errors.js\");\nconst check_modulus_length_js_1 = require(\"./check_modulus_length.js\");\nconst flags_js_1 = require(\"./flags.js\");\nconst PSS = {\n    padding: crypto_1.constants.RSA_PKCS1_PSS_PADDING,\n    saltLength: crypto_1.constants.RSA_PSS_SALTLEN_DIGEST,\n};\nconst ecCurveAlgMap = new Map([\n    ['ES256', 'P-256'],\n    ['ES256K', 'secp256k1'],\n    ['ES384', 'P-384'],\n    ['ES512', 'P-521'],\n]);\nfunction keyForCrypto(alg, key) {\n    switch (alg) {\n        case 'EdDSA':\n            if (!['ed25519', 'ed448'].includes(key.asymmetricKeyType)) {\n                throw new TypeError('Invalid key for this operation, its asymmetricKeyType must be ed25519 or ed448');\n            }\n            return key;\n        case 'RS256':\n        case 'RS384':\n        case 'RS512':\n            if (key.asymmetricKeyType !== 'rsa') {\n                throw new TypeError('Invalid key for this operation, its asymmetricKeyType must be rsa');\n            }\n            (0, check_modulus_length_js_1.default)(key, alg);\n            return key;\n        case flags_js_1.rsaPssParams && 'PS256':\n        case flags_js_1.rsaPssParams && 'PS384':\n        case flags_js_1.rsaPssParams && 'PS512':\n            if (key.asymmetricKeyType === 'rsa-pss') {\n                const { hashAlgorithm, mgf1HashAlgorithm, saltLength } = key.asymmetricKeyDetails;\n                const length = parseInt(alg.slice(-3), 10);\n                if (hashAlgorithm !== undefined &&\n                    (hashAlgorithm !== `sha${length}` || mgf1HashAlgorithm !== hashAlgorithm)) {\n                    throw new TypeError(`Invalid key for this operation, its RSA-PSS parameters do not meet the requirements of \"alg\" ${alg}`);\n                }\n                if (saltLength !== undefined && saltLength > length >> 3) {\n                    throw new TypeError(`Invalid key for this operation, its RSA-PSS parameter saltLength does not meet the requirements of \"alg\" ${alg}`);\n                }\n            }\n            else if (key.asymmetricKeyType !== 'rsa') {\n                throw new TypeError('Invalid key for this operation, its asymmetricKeyType must be rsa or rsa-pss');\n            }\n            (0, check_modulus_length_js_1.default)(key, alg);\n            return { key, ...PSS };\n        case !flags_js_1.rsaPssParams && 'PS256':\n        case !flags_js_1.rsaPssParams && 'PS384':\n        case !flags_js_1.rsaPssParams && 'PS512':\n            if (key.asymmetricKeyType !== 'rsa') {\n                throw new TypeError('Invalid key for this operation, its asymmetricKeyType must be rsa');\n            }\n            (0, check_modulus_length_js_1.default)(key, alg);\n            return { key, ...PSS };\n        case 'ES256':\n        case 'ES256K':\n        case 'ES384':\n        case 'ES512': {\n            if (key.asymmetricKeyType !== 'ec') {\n                throw new TypeError('Invalid key for this operation, its asymmetricKeyType must be ec');\n            }\n            const actual = (0, get_named_curve_js_1.default)(key);\n            const expected = ecCurveAlgMap.get(alg);\n            if (actual !== expected) {\n                throw new TypeError(`Invalid key curve for the algorithm, its curve must be ${expected}, got ${actual}`);\n            }\n            return { dsaEncoding: 'ieee-p1363', key };\n        }\n        default:\n            throw new errors_js_1.JOSENotSupported(`alg ${alg} is not supported either by JOSE or your javascript runtime`);\n    }\n}\nexports.default = keyForCrypto;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst errors_js_1 = require(\"../util/errors.js\");\nfunction hmacDigest(alg) {\n    switch (alg) {\n        case 'HS256':\n            return 'sha256';\n        case 'HS384':\n            return 'sha384';\n        case 'HS512':\n            return 'sha512';\n        default:\n            throw new errors_js_1.JOSENotSupported(`alg ${alg} is not supported either by JOSE or your javascript runtime`);\n    }\n}\nexports.default = hmacDigest;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst crypto_1 = require(\"crypto\");\nconst webcrypto_js_1 = require(\"./webcrypto.js\");\nconst crypto_key_js_1 = require(\"../lib/crypto_key.js\");\nconst invalid_key_input_js_1 = require(\"../lib/invalid_key_input.js\");\nconst is_key_like_js_1 = require(\"./is_key_like.js\");\nfunction getSignVerifyKey(alg, key, usage) {\n    if (key instanceof Uint8Array) {\n        if (!alg.startsWith('HS')) {\n            throw new TypeError((0, invalid_key_input_js_1.default)(key, ...is_key_like_js_1.types));\n        }\n        return (0, crypto_1.createSecretKey)(key);\n    }\n    if (key instanceof crypto_1.KeyObject) {\n        return key;\n    }\n    if ((0, webcrypto_js_1.isCryptoKey)(key)) {\n        (0, crypto_key_js_1.checkSigCryptoKey)(key, alg, usage);\n        return crypto_1.KeyObject.from(key);\n    }\n    throw new TypeError((0, invalid_key_input_js_1.default)(key, ...is_key_like_js_1.types, 'Uint8Array'));\n}\nexports.default = getSignVerifyKey;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst crypto = require(\"crypto\");\nconst util_1 = require(\"util\");\nconst dsa_digest_js_1 = require(\"./dsa_digest.js\");\nconst hmac_digest_js_1 = require(\"./hmac_digest.js\");\nconst node_key_js_1 = require(\"./node_key.js\");\nconst get_sign_verify_key_js_1 = require(\"./get_sign_verify_key.js\");\nlet oneShotSign;\nif (crypto.sign.length > 3) {\n    oneShotSign = (0, util_1.promisify)(crypto.sign);\n}\nelse {\n    oneShotSign = crypto.sign;\n}\nconst sign = async (alg, key, data) => {\n    const keyObject = (0, get_sign_verify_key_js_1.default)(alg, key, 'sign');\n    if (alg.startsWith('HS')) {\n        const hmac = crypto.createHmac((0, hmac_digest_js_1.default)(alg), keyObject);\n        hmac.update(data);\n        return hmac.digest();\n    }\n    return oneShotSign((0, dsa_digest_js_1.default)(alg), data, (0, node_key_js_1.default)(alg, keyObject));\n};\nexports.default = sign;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst crypto = require(\"crypto\");\nconst util_1 = require(\"util\");\nconst dsa_digest_js_1 = require(\"./dsa_digest.js\");\nconst node_key_js_1 = require(\"./node_key.js\");\nconst sign_js_1 = require(\"./sign.js\");\nconst get_sign_verify_key_js_1 = require(\"./get_sign_verify_key.js\");\nconst flags_js_1 = require(\"./flags.js\");\nlet oneShotVerify;\nif (crypto.verify.length > 4 && flags_js_1.oneShotCallback) {\n    oneShotVerify = (0, util_1.promisify)(crypto.verify);\n}\nelse {\n    oneShotVerify = crypto.verify;\n}\nconst verify = async (alg, key, signature, data) => {\n    const keyObject = (0, get_sign_verify_key_js_1.default)(alg, key, 'verify');\n    if (alg.startsWith('HS')) {\n        const expected = await (0, sign_js_1.default)(alg, keyObject, data);\n        const actual = signature;\n        try {\n            return crypto.timingSafeEqual(actual, expected);\n        }\n        catch {\n            return false;\n        }\n    }\n    const algorithm = (0, dsa_digest_js_1.default)(alg);\n    const keyInput = (0, node_key_js_1.default)(alg, keyObject);\n    try {\n        return await oneShotVerify(algorithm, data, keyInput, signature);\n    }\n    catch {\n        return false;\n    }\n};\nexports.default = verify;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.flattenedVerify = void 0;\nconst base64url_js_1 = require(\"../../runtime/base64url.js\");\nconst verify_js_1 = require(\"../../runtime/verify.js\");\nconst errors_js_1 = require(\"../../util/errors.js\");\nconst buffer_utils_js_1 = require(\"../../lib/buffer_utils.js\");\nconst is_disjoint_js_1 = require(\"../../lib/is_disjoint.js\");\nconst is_object_js_1 = require(\"../../lib/is_object.js\");\nconst check_key_type_js_1 = require(\"../../lib/check_key_type.js\");\nconst validate_crit_js_1 = require(\"../../lib/validate_crit.js\");\nconst validate_algorithms_js_1 = require(\"../../lib/validate_algorithms.js\");\nasync function flattenedVerify(jws, key, options) {\n    var _a;\n    if (!(0, is_object_js_1.default)(jws)) {\n        throw new errors_js_1.JWSInvalid('Flattened JWS must be an object');\n    }\n    if (jws.protected === undefined && jws.header === undefined) {\n        throw new errors_js_1.JWSInvalid('Flattened JWS must have either of the \"protected\" or \"header\" members');\n    }\n    if (jws.protected !== undefined && typeof jws.protected !== 'string') {\n        throw new errors_js_1.JWSInvalid('JWS Protected Header incorrect type');\n    }\n    if (jws.payload === undefined) {\n        throw new errors_js_1.JWSInvalid('JWS Payload missing');\n    }\n    if (typeof jws.signature !== 'string') {\n        throw new errors_js_1.JWSInvalid('JWS Signature missing or incorrect type');\n    }\n    if (jws.header !== undefined && !(0, is_object_js_1.default)(jws.header)) {\n        throw new errors_js_1.JWSInvalid('JWS Unprotected Header incorrect type');\n    }\n    let parsedProt = {};\n    if (jws.protected) {\n        try {\n            const protectedHeader = (0, base64url_js_1.decode)(jws.protected);\n            parsedProt = JSON.parse(buffer_utils_js_1.decoder.decode(protectedHeader));\n        }\n        catch {\n            throw new errors_js_1.JWSInvalid('JWS Protected Header is invalid');\n        }\n    }\n    if (!(0, is_disjoint_js_1.default)(parsedProt, jws.header)) {\n        throw new errors_js_1.JWSInvalid('JWS Protected and JWS Unprotected Header Parameter names must be disjoint');\n    }\n    const joseHeader = {\n        ...parsedProt,\n        ...jws.header,\n    };\n    const extensions = (0, validate_crit_js_1.default)(errors_js_1.JWSInvalid, new Map([['b64', true]]), options === null || options === void 0 ? void 0 : options.crit, parsedProt, joseHeader);\n    let b64 = true;\n    if (extensions.has('b64')) {\n        b64 = parsedProt.b64;\n        if (typeof b64 !== 'boolean') {\n            throw new errors_js_1.JWSInvalid('The \"b64\" (base64url-encode payload) Header Parameter must be a boolean');\n        }\n    }\n    const { alg } = joseHeader;\n    if (typeof alg !== 'string' || !alg) {\n        throw new errors_js_1.JWSInvalid('JWS \"alg\" (Algorithm) Header Parameter missing or invalid');\n    }\n    const algorithms = options && (0, validate_algorithms_js_1.default)('algorithms', options.algorithms);\n    if (algorithms && !algorithms.has(alg)) {\n        throw new errors_js_1.JOSEAlgNotAllowed('\"alg\" (Algorithm) Header Parameter not allowed');\n    }\n    if (b64) {\n        if (typeof jws.payload !== 'string') {\n            throw new errors_js_1.JWSInvalid('JWS Payload must be a string');\n        }\n    }\n    else if (typeof jws.payload !== 'string' && !(jws.payload instanceof Uint8Array)) {\n        throw new errors_js_1.JWSInvalid('JWS Payload must be a string or an Uint8Array instance');\n    }\n    let resolvedKey = false;\n    if (typeof key === 'function') {\n        key = await key(parsedProt, jws);\n        resolvedKey = true;\n    }\n    (0, check_key_type_js_1.default)(alg, key, 'verify');\n    const data = (0, buffer_utils_js_1.concat)(buffer_utils_js_1.encoder.encode((_a = jws.protected) !== null && _a !== void 0 ? _a : ''), buffer_utils_js_1.encoder.encode('.'), typeof jws.payload === 'string' ? buffer_utils_js_1.encoder.encode(jws.payload) : jws.payload);\n    let signature;\n    try {\n        signature = (0, base64url_js_1.decode)(jws.signature);\n    }\n    catch {\n        throw new errors_js_1.JWSInvalid('Failed to base64url decode the signature');\n    }\n    const verified = await (0, verify_js_1.default)(alg, key, signature, data);\n    if (!verified) {\n        throw new errors_js_1.JWSSignatureVerificationFailed();\n    }\n    let payload;\n    if (b64) {\n        try {\n            payload = (0, base64url_js_1.decode)(jws.payload);\n        }\n        catch {\n            throw new errors_js_1.JWSInvalid('Failed to base64url decode the payload');\n        }\n    }\n    else if (typeof jws.payload === 'string') {\n        payload = buffer_utils_js_1.encoder.encode(jws.payload);\n    }\n    else {\n        payload = jws.payload;\n    }\n    const result = { payload };\n    if (jws.protected !== undefined) {\n        result.protectedHeader = parsedProt;\n    }\n    if (jws.header !== undefined) {\n        result.unprotectedHeader = jws.header;\n    }\n    if (resolvedKey) {\n        return { ...result, key };\n    }\n    return result;\n}\nexports.flattenedVerify = flattenedVerify;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.compactVerify = void 0;\nconst verify_js_1 = require(\"../flattened/verify.js\");\nconst errors_js_1 = require(\"../../util/errors.js\");\nconst buffer_utils_js_1 = require(\"../../lib/buffer_utils.js\");\nasync function compactVerify(jws, key, options) {\n    if (jws instanceof Uint8Array) {\n        jws = buffer_utils_js_1.decoder.decode(jws);\n    }\n    if (typeof jws !== 'string') {\n        throw new errors_js_1.JWSInvalid('Compact JWS must be a string or Uint8Array');\n    }\n    const { 0: protectedHeader, 1: payload, 2: signature, length } = jws.split('.');\n    if (length !== 3) {\n        throw new errors_js_1.JWSInvalid('Invalid Compact JWS');\n    }\n    const verified = await (0, verify_js_1.flattenedVerify)({ payload, protected: protectedHeader, signature }, key, options);\n    const result = { payload: verified.payload, protectedHeader: verified.protectedHeader };\n    if (typeof key === 'function') {\n        return { ...result, key: verified.key };\n    }\n    return result;\n}\nexports.compactVerify = compactVerify;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.generalVerify = void 0;\nconst verify_js_1 = require(\"../flattened/verify.js\");\nconst errors_js_1 = require(\"../../util/errors.js\");\nconst is_object_js_1 = require(\"../../lib/is_object.js\");\nasync function generalVerify(jws, key, options) {\n    if (!(0, is_object_js_1.default)(jws)) {\n        throw new errors_js_1.JWSInvalid('General JWS must be an object');\n    }\n    if (!Array.isArray(jws.signatures) || !jws.signatures.every(is_object_js_1.default)) {\n        throw new errors_js_1.JWSInvalid('JWS Signatures missing or incorrect type');\n    }\n    for (const signature of jws.signatures) {\n        try {\n            return await (0, verify_js_1.flattenedVerify)({\n                header: signature.header,\n                payload: jws.payload,\n                protected: signature.protected,\n                signature: signature.signature,\n            }, key, options);\n        }\n        catch {\n        }\n    }\n    throw new errors_js_1.JWSSignatureVerificationFailed();\n}\nexports.generalVerify = generalVerify;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = (date) => Math.floor(date.getTime() / 1000);\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst minute = 60;\nconst hour = minute * 60;\nconst day = hour * 24;\nconst week = day * 7;\nconst year = day * 365.25;\nconst REGEX = /^(\\d+|\\d+\\.\\d+) ?(seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)$/i;\nexports.default = (str) => {\n    const matched = REGEX.exec(str);\n    if (!matched) {\n        throw new TypeError('Invalid time period format');\n    }\n    const value = parseFloat(matched[1]);\n    const unit = matched[2].toLowerCase();\n    switch (unit) {\n        case 'sec':\n        case 'secs':\n        case 'second':\n        case 'seconds':\n        case 's':\n            return Math.round(value);\n        case 'minute':\n        case 'minutes':\n        case 'min':\n        case 'mins':\n        case 'm':\n            return Math.round(value * minute);\n        case 'hour':\n        case 'hours':\n        case 'hr':\n        case 'hrs':\n        case 'h':\n            return Math.round(value * hour);\n        case 'day':\n        case 'days':\n        case 'd':\n            return Math.round(value * day);\n        case 'week':\n        case 'weeks':\n        case 'w':\n            return Math.round(value * week);\n        default:\n            return Math.round(value * year);\n    }\n};\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst errors_js_1 = require(\"../util/errors.js\");\nconst buffer_utils_js_1 = require(\"./buffer_utils.js\");\nconst epoch_js_1 = require(\"./epoch.js\");\nconst secs_js_1 = require(\"./secs.js\");\nconst is_object_js_1 = require(\"./is_object.js\");\nconst normalizeTyp = (value) => value.toLowerCase().replace(/^application\\//, '');\nconst checkAudiencePresence = (audPayload, audOption) => {\n    if (typeof audPayload === 'string') {\n        return audOption.includes(audPayload);\n    }\n    if (Array.isArray(audPayload)) {\n        return audOption.some(Set.prototype.has.bind(new Set(audPayload)));\n    }\n    return false;\n};\nexports.default = (protectedHeader, encodedPayload, options = {}) => {\n    const { typ } = options;\n    if (typ &&\n        (typeof protectedHeader.typ !== 'string' ||\n            normalizeTyp(protectedHeader.typ) !== normalizeTyp(typ))) {\n        throw new errors_js_1.JWTClaimValidationFailed('unexpected \"typ\" JWT header value', 'typ', 'check_failed');\n    }\n    let payload;\n    try {\n        payload = JSON.parse(buffer_utils_js_1.decoder.decode(encodedPayload));\n    }\n    catch {\n    }\n    if (!(0, is_object_js_1.default)(payload)) {\n        throw new errors_js_1.JWTInvalid('JWT Claims Set must be a top-level JSON object');\n    }\n    const { requiredClaims = [], issuer, subject, audience, maxTokenAge } = options;\n    if (maxTokenAge !== undefined)\n        requiredClaims.push('iat');\n    if (audience !== undefined)\n        requiredClaims.push('aud');\n    if (subject !== undefined)\n        requiredClaims.push('sub');\n    if (issuer !== undefined)\n        requiredClaims.push('iss');\n    for (const claim of new Set(requiredClaims.reverse())) {\n        if (!(claim in payload)) {\n            throw new errors_js_1.JWTClaimValidationFailed(`missing required \"${claim}\" claim`, claim, 'missing');\n        }\n    }\n    if (issuer && !(Array.isArray(issuer) ? issuer : [issuer]).includes(payload.iss)) {\n        throw new errors_js_1.JWTClaimValidationFailed('unexpected \"iss\" claim value', 'iss', 'check_failed');\n    }\n    if (subject && payload.sub !== subject) {\n        throw new errors_js_1.JWTClaimValidationFailed('unexpected \"sub\" claim value', 'sub', 'check_failed');\n    }\n    if (audience &&\n        !checkAudiencePresence(payload.aud, typeof audience === 'string' ? [audience] : audience)) {\n        throw new errors_js_1.JWTClaimValidationFailed('unexpected \"aud\" claim value', 'aud', 'check_failed');\n    }\n    let tolerance;\n    switch (typeof options.clockTolerance) {\n        case 'string':\n            tolerance = (0, secs_js_1.default)(options.clockTolerance);\n            break;\n        case 'number':\n            tolerance = options.clockTolerance;\n            break;\n        case 'undefined':\n            tolerance = 0;\n            break;\n        default:\n            throw new TypeError('Invalid clockTolerance option type');\n    }\n    const { currentDate } = options;\n    const now = (0, epoch_js_1.default)(currentDate || new Date());\n    if ((payload.iat !== undefined || maxTokenAge) && typeof payload.iat !== 'number') {\n        throw new errors_js_1.JWTClaimValidationFailed('\"iat\" claim must be a number', 'iat', 'invalid');\n    }\n    if (payload.nbf !== undefined) {\n        if (typeof payload.nbf !== 'number') {\n            throw new errors_js_1.JWTClaimValidationFailed('\"nbf\" claim must be a number', 'nbf', 'invalid');\n        }\n        if (payload.nbf > now + tolerance) {\n            throw new errors_js_1.JWTClaimValidationFailed('\"nbf\" claim timestamp check failed', 'nbf', 'check_failed');\n        }\n    }\n    if (payload.exp !== undefined) {\n        if (typeof payload.exp !== 'number') {\n            throw new errors_js_1.JWTClaimValidationFailed('\"exp\" claim must be a number', 'exp', 'invalid');\n        }\n        if (payload.exp <= now - tolerance) {\n            throw new errors_js_1.JWTExpired('\"exp\" claim timestamp check failed', 'exp', 'check_failed');\n        }\n    }\n    if (maxTokenAge) {\n        const age = now - payload.iat;\n        const max = typeof maxTokenAge === 'number' ? maxTokenAge : (0, secs_js_1.default)(maxTokenAge);\n        if (age - tolerance > max) {\n            throw new errors_js_1.JWTExpired('\"iat\" claim timestamp check failed (too far in the past)', 'iat', 'check_failed');\n        }\n        if (age < 0 - tolerance) {\n            throw new errors_js_1.JWTClaimValidationFailed('\"iat\" claim timestamp check failed (it should be in the past)', 'iat', 'check_failed');\n        }\n    }\n    return payload;\n};\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.jwtVerify = void 0;\nconst verify_js_1 = require(\"../jws/compact/verify.js\");\nconst jwt_claims_set_js_1 = require(\"../lib/jwt_claims_set.js\");\nconst errors_js_1 = require(\"../util/errors.js\");\nasync function jwtVerify(jwt, key, options) {\n    var _a;\n    const verified = await (0, verify_js_1.compactVerify)(jwt, key, options);\n    if (((_a = verified.protectedHeader.crit) === null || _a === void 0 ? void 0 : _a.includes('b64')) && verified.protectedHeader.b64 === false) {\n        throw new errors_js_1.JWTInvalid('JWTs MUST NOT use unencoded payload');\n    }\n    const payload = (0, jwt_claims_set_js_1.default)(verified.protectedHeader, verified.payload, options);\n    const result = { payload, protectedHeader: verified.protectedHeader };\n    if (typeof key === 'function') {\n        return { ...result, key: verified.key };\n    }\n    return result;\n}\nexports.jwtVerify = jwtVerify;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.jwtDecrypt = void 0;\nconst decrypt_js_1 = require(\"../jwe/compact/decrypt.js\");\nconst jwt_claims_set_js_1 = require(\"../lib/jwt_claims_set.js\");\nconst errors_js_1 = require(\"../util/errors.js\");\nasync function jwtDecrypt(jwt, key, options) {\n    const decrypted = await (0, decrypt_js_1.compactDecrypt)(jwt, key, options);\n    const payload = (0, jwt_claims_set_js_1.default)(decrypted.protectedHeader, decrypted.plaintext, options);\n    const { protectedHeader } = decrypted;\n    if (protectedHeader.iss !== undefined && protectedHeader.iss !== payload.iss) {\n        throw new errors_js_1.JWTClaimValidationFailed('replicated \"iss\" claim header parameter mismatch', 'iss', 'mismatch');\n    }\n    if (protectedHeader.sub !== undefined && protectedHeader.sub !== payload.sub) {\n        throw new errors_js_1.JWTClaimValidationFailed('replicated \"sub\" claim header parameter mismatch', 'sub', 'mismatch');\n    }\n    if (protectedHeader.aud !== undefined &&\n        JSON.stringify(protectedHeader.aud) !== JSON.stringify(payload.aud)) {\n        throw new errors_js_1.JWTClaimValidationFailed('replicated \"aud\" claim header parameter mismatch', 'aud', 'mismatch');\n    }\n    const result = { payload, protectedHeader };\n    if (typeof key === 'function') {\n        return { ...result, key: decrypted.key };\n    }\n    return result;\n}\nexports.jwtDecrypt = jwtDecrypt;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.CompactEncrypt = void 0;\nconst encrypt_js_1 = require(\"../flattened/encrypt.js\");\nclass CompactEncrypt {\n    constructor(plaintext) {\n        this._flattened = new encrypt_js_1.FlattenedEncrypt(plaintext);\n    }\n    setContentEncryptionKey(cek) {\n        this._flattened.setContentEncryptionKey(cek);\n        return this;\n    }\n    setInitializationVector(iv) {\n        this._flattened.setInitializationVector(iv);\n        return this;\n    }\n    setProtectedHeader(protectedHeader) {\n        this._flattened.setProtectedHeader(protectedHeader);\n        return this;\n    }\n    setKeyManagementParameters(parameters) {\n        this._flattened.setKeyManagementParameters(parameters);\n        return this;\n    }\n    async encrypt(key, options) {\n        const jwe = await this._flattened.encrypt(key, options);\n        return [jwe.protected, jwe.encrypted_key, jwe.iv, jwe.ciphertext, jwe.tag].join('.');\n    }\n}\nexports.CompactEncrypt = CompactEncrypt;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.FlattenedSign = void 0;\nconst base64url_js_1 = require(\"../../runtime/base64url.js\");\nconst sign_js_1 = require(\"../../runtime/sign.js\");\nconst is_disjoint_js_1 = require(\"../../lib/is_disjoint.js\");\nconst errors_js_1 = require(\"../../util/errors.js\");\nconst buffer_utils_js_1 = require(\"../../lib/buffer_utils.js\");\nconst check_key_type_js_1 = require(\"../../lib/check_key_type.js\");\nconst validate_crit_js_1 = require(\"../../lib/validate_crit.js\");\nclass FlattenedSign {\n    constructor(payload) {\n        if (!(payload instanceof Uint8Array)) {\n            throw new TypeError('payload must be an instance of Uint8Array');\n        }\n        this._payload = payload;\n    }\n    setProtectedHeader(protectedHeader) {\n        if (this._protectedHeader) {\n            throw new TypeError('setProtectedHeader can only be called once');\n        }\n        this._protectedHeader = protectedHeader;\n        return this;\n    }\n    setUnprotectedHeader(unprotectedHeader) {\n        if (this._unprotectedHeader) {\n            throw new TypeError('setUnprotectedHeader can only be called once');\n        }\n        this._unprotectedHeader = unprotectedHeader;\n        return this;\n    }\n    async sign(key, options) {\n        if (!this._protectedHeader && !this._unprotectedHeader) {\n            throw new errors_js_1.JWSInvalid('either setProtectedHeader or setUnprotectedHeader must be called before #sign()');\n        }\n        if (!(0, is_disjoint_js_1.default)(this._protectedHeader, this._unprotectedHeader)) {\n            throw new errors_js_1.JWSInvalid('JWS Protected and JWS Unprotected Header Parameter names must be disjoint');\n        }\n        const joseHeader = {\n            ...this._protectedHeader,\n            ...this._unprotectedHeader,\n        };\n        const extensions = (0, validate_crit_js_1.default)(errors_js_1.JWSInvalid, new Map([['b64', true]]), options === null || options === void 0 ? void 0 : options.crit, this._protectedHeader, joseHeader);\n        let b64 = true;\n        if (extensions.has('b64')) {\n            b64 = this._protectedHeader.b64;\n            if (typeof b64 !== 'boolean') {\n                throw new errors_js_1.JWSInvalid('The \"b64\" (base64url-encode payload) Header Parameter must be a boolean');\n            }\n        }\n        const { alg } = joseHeader;\n        if (typeof alg !== 'string' || !alg) {\n            throw new errors_js_1.JWSInvalid('JWS \"alg\" (Algorithm) Header Parameter missing or invalid');\n        }\n        (0, check_key_type_js_1.default)(alg, key, 'sign');\n        let payload = this._payload;\n        if (b64) {\n            payload = buffer_utils_js_1.encoder.encode((0, base64url_js_1.encode)(payload));\n        }\n        let protectedHeader;\n        if (this._protectedHeader) {\n            protectedHeader = buffer_utils_js_1.encoder.encode((0, base64url_js_1.encode)(JSON.stringify(this._protectedHeader)));\n        }\n        else {\n            protectedHeader = buffer_utils_js_1.encoder.encode('');\n        }\n        const data = (0, buffer_utils_js_1.concat)(protectedHeader, buffer_utils_js_1.encoder.encode('.'), payload);\n        const signature = await (0, sign_js_1.default)(alg, key, data);\n        const jws = {\n            signature: (0, base64url_js_1.encode)(signature),\n            payload: '',\n        };\n        if (b64) {\n            jws.payload = buffer_utils_js_1.decoder.decode(payload);\n        }\n        if (this._unprotectedHeader) {\n            jws.header = this._unprotectedHeader;\n        }\n        if (this._protectedHeader) {\n            jws.protected = buffer_utils_js_1.decoder.decode(protectedHeader);\n        }\n        return jws;\n    }\n}\nexports.FlattenedSign = FlattenedSign;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.CompactSign = void 0;\nconst sign_js_1 = require(\"../flattened/sign.js\");\nclass CompactSign {\n    constructor(payload) {\n        this._flattened = new sign_js_1.FlattenedSign(payload);\n    }\n    setProtectedHeader(protectedHeader) {\n        this._flattened.setProtectedHeader(protectedHeader);\n        return this;\n    }\n    async sign(key, options) {\n        const jws = await this._flattened.sign(key, options);\n        if (jws.payload === undefined) {\n            throw new TypeError('use the flattened module for creating JWS with b64: false');\n        }\n        return `${jws.protected}.${jws.payload}.${jws.signature}`;\n    }\n}\nexports.CompactSign = CompactSign;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.GeneralSign = void 0;\nconst sign_js_1 = require(\"../flattened/sign.js\");\nconst errors_js_1 = require(\"../../util/errors.js\");\nclass IndividualSignature {\n    constructor(sig, key, options) {\n        this.parent = sig;\n        this.key = key;\n        this.options = options;\n    }\n    setProtectedHeader(protectedHeader) {\n        if (this.protectedHeader) {\n            throw new TypeError('setProtectedHeader can only be called once');\n        }\n        this.protectedHeader = protectedHeader;\n        return this;\n    }\n    setUnprotectedHeader(unprotectedHeader) {\n        if (this.unprotectedHeader) {\n            throw new TypeError('setUnprotectedHeader can only be called once');\n        }\n        this.unprotectedHeader = unprotectedHeader;\n        return this;\n    }\n    addSignature(...args) {\n        return this.parent.addSignature(...args);\n    }\n    sign(...args) {\n        return this.parent.sign(...args);\n    }\n    done() {\n        return this.parent;\n    }\n}\nclass GeneralSign {\n    constructor(payload) {\n        this._signatures = [];\n        this._payload = payload;\n    }\n    addSignature(key, options) {\n        const signature = new IndividualSignature(this, key, options);\n        this._signatures.push(signature);\n        return signature;\n    }\n    async sign() {\n        if (!this._signatures.length) {\n            throw new errors_js_1.JWSInvalid('at least one signature must be added');\n        }\n        const jws = {\n            signatures: [],\n            payload: '',\n        };\n        for (let i = 0; i < this._signatures.length; i++) {\n            const signature = this._signatures[i];\n            const flattened = new sign_js_1.FlattenedSign(this._payload);\n            flattened.setProtectedHeader(signature.protectedHeader);\n            flattened.setUnprotectedHeader(signature.unprotectedHeader);\n            const { payload, ...rest } = await flattened.sign(signature.key, signature.options);\n            if (i === 0) {\n                jws.payload = payload;\n            }\n            else if (jws.payload !== payload) {\n                throw new errors_js_1.JWSInvalid('inconsistent use of JWS Unencoded Payload (RFC7797)');\n            }\n            jws.signatures.push(rest);\n        }\n        return jws;\n    }\n}\nexports.GeneralSign = GeneralSign;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ProduceJWT = void 0;\nconst epoch_js_1 = require(\"../lib/epoch.js\");\nconst is_object_js_1 = require(\"../lib/is_object.js\");\nconst secs_js_1 = require(\"../lib/secs.js\");\nclass ProduceJWT {\n    constructor(payload) {\n        if (!(0, is_object_js_1.default)(payload)) {\n            throw new TypeError('JWT Claims Set MUST be an object');\n        }\n        this._payload = payload;\n    }\n    setIssuer(issuer) {\n        this._payload = { ...this._payload, iss: issuer };\n        return this;\n    }\n    setSubject(subject) {\n        this._payload = { ...this._payload, sub: subject };\n        return this;\n    }\n    setAudience(audience) {\n        this._payload = { ...this._payload, aud: audience };\n        return this;\n    }\n    setJti(jwtId) {\n        this._payload = { ...this._payload, jti: jwtId };\n        return this;\n    }\n    setNotBefore(input) {\n        if (typeof input === 'number') {\n            this._payload = { ...this._payload, nbf: input };\n        }\n        else {\n            this._payload = { ...this._payload, nbf: (0, epoch_js_1.default)(new Date()) + (0, secs_js_1.default)(input) };\n        }\n        return this;\n    }\n    setExpirationTime(input) {\n        if (typeof input === 'number') {\n            this._payload = { ...this._payload, exp: input };\n        }\n        else {\n            this._payload = { ...this._payload, exp: (0, epoch_js_1.default)(new Date()) + (0, secs_js_1.default)(input) };\n        }\n        return this;\n    }\n    setIssuedAt(input) {\n        if (typeof input === 'undefined') {\n            this._payload = { ...this._payload, iat: (0, epoch_js_1.default)(new Date()) };\n        }\n        else {\n            this._payload = { ...this._payload, iat: input };\n        }\n        return this;\n    }\n}\nexports.ProduceJWT = ProduceJWT;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SignJWT = void 0;\nconst sign_js_1 = require(\"../jws/compact/sign.js\");\nconst errors_js_1 = require(\"../util/errors.js\");\nconst buffer_utils_js_1 = require(\"../lib/buffer_utils.js\");\nconst produce_js_1 = require(\"./produce.js\");\nclass SignJWT extends produce_js_1.ProduceJWT {\n    setProtectedHeader(protectedHeader) {\n        this._protectedHeader = protectedHeader;\n        return this;\n    }\n    async sign(key, options) {\n        var _a;\n        const sig = new sign_js_1.CompactSign(buffer_utils_js_1.encoder.encode(JSON.stringify(this._payload)));\n        sig.setProtectedHeader(this._protectedHeader);\n        if (Array.isArray((_a = this._protectedHeader) === null || _a === void 0 ? void 0 : _a.crit) &&\n            this._protectedHeader.crit.includes('b64') &&\n            this._protectedHeader.b64 === false) {\n            throw new errors_js_1.JWTInvalid('JWTs MUST NOT use unencoded payload');\n        }\n        return sig.sign(key, options);\n    }\n}\nexports.SignJWT = SignJWT;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.EncryptJWT = void 0;\nconst encrypt_js_1 = require(\"../jwe/compact/encrypt.js\");\nconst buffer_utils_js_1 = require(\"../lib/buffer_utils.js\");\nconst produce_js_1 = require(\"./produce.js\");\nclass EncryptJWT extends produce_js_1.ProduceJWT {\n    setProtectedHeader(protectedHeader) {\n        if (this._protectedHeader) {\n            throw new TypeError('setProtectedHeader can only be called once');\n        }\n        this._protectedHeader = protectedHeader;\n        return this;\n    }\n    setKeyManagementParameters(parameters) {\n        if (this._keyManagementParameters) {\n            throw new TypeError('setKeyManagementParameters can only be called once');\n        }\n        this._keyManagementParameters = parameters;\n        return this;\n    }\n    setContentEncryptionKey(cek) {\n        if (this._cek) {\n            throw new TypeError('setContentEncryptionKey can only be called once');\n        }\n        this._cek = cek;\n        return this;\n    }\n    setInitializationVector(iv) {\n        if (this._iv) {\n            throw new TypeError('setInitializationVector can only be called once');\n        }\n        this._iv = iv;\n        return this;\n    }\n    replicateIssuerAsHeader() {\n        this._replicateIssuerAsHeader = true;\n        return this;\n    }\n    replicateSubjectAsHeader() {\n        this._replicateSubjectAsHeader = true;\n        return this;\n    }\n    replicateAudienceAsHeader() {\n        this._replicateAudienceAsHeader = true;\n        return this;\n    }\n    async encrypt(key, options) {\n        const enc = new encrypt_js_1.CompactEncrypt(buffer_utils_js_1.encoder.encode(JSON.stringify(this._payload)));\n        if (this._replicateIssuerAsHeader) {\n            this._protectedHeader = { ...this._protectedHeader, iss: this._payload.iss };\n        }\n        if (this._replicateSubjectAsHeader) {\n            this._protectedHeader = { ...this._protectedHeader, sub: this._payload.sub };\n        }\n        if (this._replicateAudienceAsHeader) {\n            this._protectedHeader = { ...this._protectedHeader, aud: this._payload.aud };\n        }\n        enc.setProtectedHeader(this._protectedHeader);\n        if (this._iv) {\n            enc.setInitializationVector(this._iv);\n        }\n        if (this._cek) {\n            enc.setContentEncryptionKey(this._cek);\n        }\n        if (this._keyManagementParameters) {\n            enc.setKeyManagementParameters(this._keyManagementParameters);\n        }\n        return enc.encrypt(key, options);\n    }\n}\nexports.EncryptJWT = EncryptJWT;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.calculateJwkThumbprintUri = exports.calculateJwkThumbprint = void 0;\nconst digest_js_1 = require(\"../runtime/digest.js\");\nconst base64url_js_1 = require(\"../runtime/base64url.js\");\nconst errors_js_1 = require(\"../util/errors.js\");\nconst buffer_utils_js_1 = require(\"../lib/buffer_utils.js\");\nconst is_object_js_1 = require(\"../lib/is_object.js\");\nconst check = (value, description) => {\n    if (typeof value !== 'string' || !value) {\n        throw new errors_js_1.JWKInvalid(`${description} missing or invalid`);\n    }\n};\nasync function calculateJwkThumbprint(jwk, digestAlgorithm) {\n    if (!(0, is_object_js_1.default)(jwk)) {\n        throw new TypeError('JWK must be an object');\n    }\n    digestAlgorithm !== null && digestAlgorithm !== void 0 ? digestAlgorithm : (digestAlgorithm = 'sha256');\n    if (digestAlgorithm !== 'sha256' &&\n        digestAlgorithm !== 'sha384' &&\n        digestAlgorithm !== 'sha512') {\n        throw new TypeError('digestAlgorithm must one of \"sha256\", \"sha384\", or \"sha512\"');\n    }\n    let components;\n    switch (jwk.kty) {\n        case 'EC':\n            check(jwk.crv, '\"crv\" (Curve) Parameter');\n            check(jwk.x, '\"x\" (X Coordinate) Parameter');\n            check(jwk.y, '\"y\" (Y Coordinate) Parameter');\n            components = { crv: jwk.crv, kty: jwk.kty, x: jwk.x, y: jwk.y };\n            break;\n        case 'OKP':\n            check(jwk.crv, '\"crv\" (Subtype of Key Pair) Parameter');\n            check(jwk.x, '\"x\" (Public Key) Parameter');\n            components = { crv: jwk.crv, kty: jwk.kty, x: jwk.x };\n            break;\n        case 'RSA':\n            check(jwk.e, '\"e\" (Exponent) Parameter');\n            check(jwk.n, '\"n\" (Modulus) Parameter');\n            components = { e: jwk.e, kty: jwk.kty, n: jwk.n };\n            break;\n        case 'oct':\n            check(jwk.k, '\"k\" (Key Value) Parameter');\n            components = { k: jwk.k, kty: jwk.kty };\n            break;\n        default:\n            throw new errors_js_1.JOSENotSupported('\"kty\" (Key Type) Parameter missing or unsupported');\n    }\n    const data = buffer_utils_js_1.encoder.encode(JSON.stringify(components));\n    return (0, base64url_js_1.encode)(await (0, digest_js_1.default)(digestAlgorithm, data));\n}\nexports.calculateJwkThumbprint = calculateJwkThumbprint;\nasync function calculateJwkThumbprintUri(jwk, digestAlgorithm) {\n    digestAlgorithm !== null && digestAlgorithm !== void 0 ? digestAlgorithm : (digestAlgorithm = 'sha256');\n    const thumbprint = await calculateJwkThumbprint(jwk, digestAlgorithm);\n    return `urn:ietf:params:oauth:jwk-thumbprint:sha-${digestAlgorithm.slice(-3)}:${thumbprint}`;\n}\nexports.calculateJwkThumbprintUri = calculateJwkThumbprintUri;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.EmbeddedJWK = void 0;\nconst import_js_1 = require(\"../key/import.js\");\nconst is_object_js_1 = require(\"../lib/is_object.js\");\nconst errors_js_1 = require(\"../util/errors.js\");\nasync function EmbeddedJWK(protectedHeader, token) {\n    const joseHeader = {\n        ...protectedHeader,\n        ...token === null || token === void 0 ? void 0 : token.header,\n    };\n    if (!(0, is_object_js_1.default)(joseHeader.jwk)) {\n        throw new errors_js_1.JWSInvalid('\"jwk\" (JSON Web Key) Header Parameter must be a JSON object');\n    }\n    const key = await (0, import_js_1.importJWK)({ ...joseHeader.jwk, ext: true }, joseHeader.alg, true);\n    if (key instanceof Uint8Array || key.type !== 'public') {\n        throw new errors_js_1.JWSInvalid('\"jwk\" (JSON Web Key) Header Parameter must be a public key');\n    }\n    return key;\n}\nexports.EmbeddedJWK = EmbeddedJWK;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createLocalJWKSet = exports.LocalJWKSet = exports.isJWKSLike = void 0;\nconst import_js_1 = require(\"../key/import.js\");\nconst errors_js_1 = require(\"../util/errors.js\");\nconst is_object_js_1 = require(\"../lib/is_object.js\");\nfunction getKtyFromAlg(alg) {\n    switch (typeof alg === 'string' && alg.slice(0, 2)) {\n        case 'RS':\n        case 'PS':\n            return 'RSA';\n        case 'ES':\n            return 'EC';\n        case 'Ed':\n            return 'OKP';\n        default:\n            throw new errors_js_1.JOSENotSupported('Unsupported \"alg\" value for a JSON Web Key Set');\n    }\n}\nfunction isJWKSLike(jwks) {\n    return (jwks &&\n        typeof jwks === 'object' &&\n        Array.isArray(jwks.keys) &&\n        jwks.keys.every(isJWKLike));\n}\nexports.isJWKSLike = isJWKSLike;\nfunction isJWKLike(key) {\n    return (0, is_object_js_1.default)(key);\n}\nfunction clone(obj) {\n    if (typeof structuredClone === 'function') {\n        return structuredClone(obj);\n    }\n    return JSON.parse(JSON.stringify(obj));\n}\nclass LocalJWKSet {\n    constructor(jwks) {\n        this._cached = new WeakMap();\n        if (!isJWKSLike(jwks)) {\n            throw new errors_js_1.JWKSInvalid('JSON Web Key Set malformed');\n        }\n        this._jwks = clone(jwks);\n    }\n    async getKey(protectedHeader, token) {\n        const { alg, kid } = { ...protectedHeader, ...token === null || token === void 0 ? void 0 : token.header };\n        const kty = getKtyFromAlg(alg);\n        const candidates = this._jwks.keys.filter((jwk) => {\n            let candidate = kty === jwk.kty;\n            if (candidate && typeof kid === 'string') {\n                candidate = kid === jwk.kid;\n            }\n            if (candidate && typeof jwk.alg === 'string') {\n                candidate = alg === jwk.alg;\n            }\n            if (candidate && typeof jwk.use === 'string') {\n                candidate = jwk.use === 'sig';\n            }\n            if (candidate && Array.isArray(jwk.key_ops)) {\n                candidate = jwk.key_ops.includes('verify');\n            }\n            if (candidate && alg === 'EdDSA') {\n                candidate = jwk.crv === 'Ed25519' || jwk.crv === 'Ed448';\n            }\n            if (candidate) {\n                switch (alg) {\n                    case 'ES256':\n                        candidate = jwk.crv === 'P-256';\n                        break;\n                    case 'ES256K':\n                        candidate = jwk.crv === 'secp256k1';\n                        break;\n                    case 'ES384':\n                        candidate = jwk.crv === 'P-384';\n                        break;\n                    case 'ES512':\n                        candidate = jwk.crv === 'P-521';\n                        break;\n                }\n            }\n            return candidate;\n        });\n        const { 0: jwk, length } = candidates;\n        if (length === 0) {\n            throw new errors_js_1.JWKSNoMatchingKey();\n        }\n        else if (length !== 1) {\n            const error = new errors_js_1.JWKSMultipleMatchingKeys();\n            const { _cached } = this;\n            error[Symbol.asyncIterator] = async function* () {\n                for (const jwk of candidates) {\n                    try {\n                        yield await importWithAlgCache(_cached, jwk, alg);\n                    }\n                    catch {\n                        continue;\n                    }\n                }\n            };\n            throw error;\n        }\n        return importWithAlgCache(this._cached, jwk, alg);\n    }\n}\nexports.LocalJWKSet = LocalJWKSet;\nasync function importWithAlgCache(cache, jwk, alg) {\n    const cached = cache.get(jwk) || cache.set(jwk, {}).get(jwk);\n    if (cached[alg] === undefined) {\n        const key = await (0, import_js_1.importJWK)({ ...jwk, ext: true }, alg);\n        if (key instanceof Uint8Array || key.type !== 'public') {\n            throw new errors_js_1.JWKSInvalid('JSON Web Key Set members must be public keys');\n        }\n        cached[alg] = key;\n    }\n    return cached[alg];\n}\nfunction createLocalJWKSet(jwks) {\n    const set = new LocalJWKSet(jwks);\n    return async function (protectedHeader, token) {\n        return set.getKey(protectedHeader, token);\n    };\n}\nexports.createLocalJWKSet = createLocalJWKSet;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst http = require(\"http\");\nconst https = require(\"https\");\nconst events_1 = require(\"events\");\nconst errors_js_1 = require(\"../util/errors.js\");\nconst buffer_utils_js_1 = require(\"../lib/buffer_utils.js\");\nconst fetchJwks = async (url, timeout, options) => {\n    let get;\n    switch (url.protocol) {\n        case 'https:':\n            get = https.get;\n            break;\n        case 'http:':\n            get = http.get;\n            break;\n        default:\n            throw new TypeError('Unsupported URL protocol.');\n    }\n    const { agent, headers } = options;\n    const req = get(url.href, {\n        agent,\n        timeout,\n        headers,\n    });\n    const [response] = (await Promise.race([(0, events_1.once)(req, 'response'), (0, events_1.once)(req, 'timeout')]));\n    if (!response) {\n        req.destroy();\n        throw new errors_js_1.JWKSTimeout();\n    }\n    if (response.statusCode !== 200) {\n        throw new errors_js_1.JOSEError('Expected 200 OK from the JSON Web Key Set HTTP response');\n    }\n    const parts = [];\n    for await (const part of response) {\n        parts.push(part);\n    }\n    try {\n        return JSON.parse(buffer_utils_js_1.decoder.decode((0, buffer_utils_js_1.concat)(...parts)));\n    }\n    catch {\n        throw new errors_js_1.JOSEError('Failed to parse the JSON Web Key Set HTTP response as JSON');\n    }\n};\nexports.default = fetchJwks;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createRemoteJWKSet = void 0;\nconst fetch_jwks_js_1 = require(\"../runtime/fetch_jwks.js\");\nconst errors_js_1 = require(\"../util/errors.js\");\nconst local_js_1 = require(\"./local.js\");\nfunction isCloudflareWorkers() {\n    return (typeof WebSocketPair !== 'undefined' ||\n        (typeof navigator !== 'undefined' && navigator.userAgent === 'Cloudflare-Workers') ||\n        (typeof EdgeRuntime !== 'undefined' && EdgeRuntime === 'vercel'));\n}\nclass RemoteJWKSet extends local_js_1.LocalJWKSet {\n    constructor(url, options) {\n        super({ keys: [] });\n        this._jwks = undefined;\n        if (!(url instanceof URL)) {\n            throw new TypeError('url must be an instance of URL');\n        }\n        this._url = new URL(url.href);\n        this._options = { agent: options === null || options === void 0 ? void 0 : options.agent, headers: options === null || options === void 0 ? void 0 : options.headers };\n        this._timeoutDuration =\n            typeof (options === null || options === void 0 ? void 0 : options.timeoutDuration) === 'number' ? options === null || options === void 0 ? void 0 : options.timeoutDuration : 5000;\n        this._cooldownDuration =\n            typeof (options === null || options === void 0 ? void 0 : options.cooldownDuration) === 'number' ? options === null || options === void 0 ? void 0 : options.cooldownDuration : 30000;\n        this._cacheMaxAge = typeof (options === null || options === void 0 ? void 0 : options.cacheMaxAge) === 'number' ? options === null || options === void 0 ? void 0 : options.cacheMaxAge : 600000;\n    }\n    coolingDown() {\n        return typeof this._jwksTimestamp === 'number'\n            ? Date.now() < this._jwksTimestamp + this._cooldownDuration\n            : false;\n    }\n    fresh() {\n        return typeof this._jwksTimestamp === 'number'\n            ? Date.now() < this._jwksTimestamp + this._cacheMaxAge\n            : false;\n    }\n    async getKey(protectedHeader, token) {\n        if (!this._jwks || !this.fresh()) {\n            await this.reload();\n        }\n        try {\n            return await super.getKey(protectedHeader, token);\n        }\n        catch (err) {\n            if (err instanceof errors_js_1.JWKSNoMatchingKey) {\n                if (this.coolingDown() === false) {\n                    await this.reload();\n                    return super.getKey(protectedHeader, token);\n                }\n            }\n            throw err;\n        }\n    }\n    async reload() {\n        if (this._pendingFetch && isCloudflareWorkers()) {\n            this._pendingFetch = undefined;\n        }\n        this._pendingFetch || (this._pendingFetch = (0, fetch_jwks_js_1.default)(this._url, this._timeoutDuration, this._options)\n            .then((json) => {\n            if (!(0, local_js_1.isJWKSLike)(json)) {\n                throw new errors_js_1.JWKSInvalid('JSON Web Key Set malformed');\n            }\n            this._jwks = { keys: json.keys };\n            this._jwksTimestamp = Date.now();\n            this._pendingFetch = undefined;\n        })\n            .catch((err) => {\n            this._pendingFetch = undefined;\n            throw err;\n        }));\n        await this._pendingFetch;\n    }\n}\nfunction createRemoteJWKSet(url, options) {\n    const set = new RemoteJWKSet(url, options);\n    return async function (protectedHeader, token) {\n        return set.getKey(protectedHeader, token);\n    };\n}\nexports.createRemoteJWKSet = createRemoteJWKSet;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.UnsecuredJWT = void 0;\nconst base64url = require(\"../runtime/base64url.js\");\nconst buffer_utils_js_1 = require(\"../lib/buffer_utils.js\");\nconst errors_js_1 = require(\"../util/errors.js\");\nconst jwt_claims_set_js_1 = require(\"../lib/jwt_claims_set.js\");\nconst produce_js_1 = require(\"./produce.js\");\nclass UnsecuredJWT extends produce_js_1.ProduceJWT {\n    encode() {\n        const header = base64url.encode(JSON.stringify({ alg: 'none' }));\n        const payload = base64url.encode(JSON.stringify(this._payload));\n        return `${header}.${payload}.`;\n    }\n    static decode(jwt, options) {\n        if (typeof jwt !== 'string') {\n            throw new errors_js_1.JWTInvalid('Unsecured JWT must be a string');\n        }\n        const { 0: encodedHeader, 1: encodedPayload, 2: signature, length } = jwt.split('.');\n        if (length !== 3 || signature !== '') {\n            throw new errors_js_1.JWTInvalid('Invalid Unsecured JWT');\n        }\n        let header;\n        try {\n            header = JSON.parse(buffer_utils_js_1.decoder.decode(base64url.decode(encodedHeader)));\n            if (header.alg !== 'none')\n                throw new Error();\n        }\n        catch {\n            throw new errors_js_1.JWTInvalid('Invalid Unsecured JWT');\n        }\n        const payload = (0, jwt_claims_set_js_1.default)(header, base64url.decode(encodedPayload), options);\n        return { payload, header };\n    }\n}\nexports.UnsecuredJWT = UnsecuredJWT;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.decode = exports.encode = void 0;\nconst base64url = require(\"../runtime/base64url.js\");\nexports.encode = base64url.encode;\nexports.decode = base64url.decode;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.decodeProtectedHeader = void 0;\nconst base64url_js_1 = require(\"./base64url.js\");\nconst buffer_utils_js_1 = require(\"../lib/buffer_utils.js\");\nconst is_object_js_1 = require(\"../lib/is_object.js\");\nfunction decodeProtectedHeader(token) {\n    let protectedB64u;\n    if (typeof token === 'string') {\n        const parts = token.split('.');\n        if (parts.length === 3 || parts.length === 5) {\n            ;\n            [protectedB64u] = parts;\n        }\n    }\n    else if (typeof token === 'object' && token) {\n        if ('protected' in token) {\n            protectedB64u = token.protected;\n        }\n        else {\n            throw new TypeError('Token does not contain a Protected Header');\n        }\n    }\n    try {\n        if (typeof protectedB64u !== 'string' || !protectedB64u) {\n            throw new Error();\n        }\n        const result = JSON.parse(buffer_utils_js_1.decoder.decode((0, base64url_js_1.decode)(protectedB64u)));\n        if (!(0, is_object_js_1.default)(result)) {\n            throw new Error();\n        }\n        return result;\n    }\n    catch {\n        throw new TypeError('Invalid Token or Protected Header formatting');\n    }\n}\nexports.decodeProtectedHeader = decodeProtectedHeader;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.decodeJwt = void 0;\nconst base64url_js_1 = require(\"./base64url.js\");\nconst buffer_utils_js_1 = require(\"../lib/buffer_utils.js\");\nconst is_object_js_1 = require(\"../lib/is_object.js\");\nconst errors_js_1 = require(\"./errors.js\");\nfunction decodeJwt(jwt) {\n    if (typeof jwt !== 'string')\n        throw new errors_js_1.JWTInvalid('JWTs must use Compact JWS serialization, JWT must be a string');\n    const { 1: payload, length } = jwt.split('.');\n    if (length === 5)\n        throw new errors_js_1.JWTInvalid('Only JWTs using Compact JWS serialization can be decoded');\n    if (length !== 3)\n        throw new errors_js_1.JWTInvalid('Invalid JWT');\n    if (!payload)\n        throw new errors_js_1.JWTInvalid('JWTs must contain a payload');\n    let decoded;\n    try {\n        decoded = (0, base64url_js_1.decode)(payload);\n    }\n    catch {\n        throw new errors_js_1.JWTInvalid('Failed to base64url decode the payload');\n    }\n    let result;\n    try {\n        result = JSON.parse(buffer_utils_js_1.decoder.decode(decoded));\n    }\n    catch {\n        throw new errors_js_1.JWTInvalid('Failed to parse the decoded payload as JSON');\n    }\n    if (!(0, is_object_js_1.default)(result))\n        throw new errors_js_1.JWTInvalid('Invalid JWT Claims Set');\n    return result;\n}\nexports.decodeJwt = decodeJwt;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.generateKeyPair = exports.generateSecret = void 0;\nconst crypto_1 = require(\"crypto\");\nconst util_1 = require(\"util\");\nconst random_js_1 = require(\"./random.js\");\nconst check_modulus_length_js_1 = require(\"./check_modulus_length.js\");\nconst errors_js_1 = require(\"../util/errors.js\");\nconst generate = (0, util_1.promisify)(crypto_1.generateKeyPair);\nasync function generateSecret(alg, options) {\n    let length;\n    switch (alg) {\n        case 'HS256':\n        case 'HS384':\n        case 'HS512':\n        case 'A128CBC-HS256':\n        case 'A192CBC-HS384':\n        case 'A256CBC-HS512':\n            length = parseInt(alg.slice(-3), 10);\n            break;\n        case 'A128KW':\n        case 'A192KW':\n        case 'A256KW':\n        case 'A128GCMKW':\n        case 'A192GCMKW':\n        case 'A256GCMKW':\n        case 'A128GCM':\n        case 'A192GCM':\n        case 'A256GCM':\n            length = parseInt(alg.slice(1, 4), 10);\n            break;\n        default:\n            throw new errors_js_1.JOSENotSupported('Invalid or unsupported JWK \"alg\" (Algorithm) Parameter value');\n    }\n    return (0, crypto_1.createSecretKey)((0, random_js_1.default)(new Uint8Array(length >> 3)));\n}\nexports.generateSecret = generateSecret;\nasync function generateKeyPair(alg, options) {\n    var _a, _b;\n    switch (alg) {\n        case 'RS256':\n        case 'RS384':\n        case 'RS512':\n        case 'PS256':\n        case 'PS384':\n        case 'PS512':\n        case 'RSA-OAEP':\n        case 'RSA-OAEP-256':\n        case 'RSA-OAEP-384':\n        case 'RSA-OAEP-512':\n        case 'RSA1_5': {\n            const modulusLength = (_a = options === null || options === void 0 ? void 0 : options.modulusLength) !== null && _a !== void 0 ? _a : 2048;\n            if (typeof modulusLength !== 'number' || modulusLength < 2048) {\n                throw new errors_js_1.JOSENotSupported('Invalid or unsupported modulusLength option provided, 2048 bits or larger keys must be used');\n            }\n            const keypair = await generate('rsa', {\n                modulusLength,\n                publicExponent: 0x10001,\n            });\n            (0, check_modulus_length_js_1.setModulusLength)(keypair.privateKey, modulusLength);\n            (0, check_modulus_length_js_1.setModulusLength)(keypair.publicKey, modulusLength);\n            return keypair;\n        }\n        case 'ES256':\n            return generate('ec', { namedCurve: 'P-256' });\n        case 'ES256K':\n            return generate('ec', { namedCurve: 'secp256k1' });\n        case 'ES384':\n            return generate('ec', { namedCurve: 'P-384' });\n        case 'ES512':\n            return generate('ec', { namedCurve: 'P-521' });\n        case 'EdDSA': {\n            switch (options === null || options === void 0 ? void 0 : options.crv) {\n                case undefined:\n                case 'Ed25519':\n                    return generate('ed25519');\n                case 'Ed448':\n                    return generate('ed448');\n                default:\n                    throw new errors_js_1.JOSENotSupported('Invalid or unsupported crv option provided, supported values are Ed25519 and Ed448');\n            }\n        }\n        case 'ECDH-ES':\n        case 'ECDH-ES+A128KW':\n        case 'ECDH-ES+A192KW':\n        case 'ECDH-ES+A256KW':\n            const crv = (_b = options === null || options === void 0 ? void 0 : options.crv) !== null && _b !== void 0 ? _b : 'P-256';\n            switch (crv) {\n                case undefined:\n                case 'P-256':\n                case 'P-384':\n                case 'P-521':\n                    return generate('ec', { namedCurve: crv });\n                case 'X25519':\n                    return generate('x25519');\n                case 'X448':\n                    return generate('x448');\n                default:\n                    throw new errors_js_1.JOSENotSupported('Invalid or unsupported crv option provided, supported values are P-256, P-384, P-521, X25519, and X448');\n            }\n        default:\n            throw new errors_js_1.JOSENotSupported('Invalid or unsupported JWK \"alg\" (Algorithm) Parameter value');\n    }\n}\nexports.generateKeyPair = generateKeyPair;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.generateKeyPair = void 0;\nconst generate_js_1 = require(\"../runtime/generate.js\");\nasync function generateKeyPair(alg, options) {\n    return (0, generate_js_1.generateKeyPair)(alg, options);\n}\nexports.generateKeyPair = generateKeyPair;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.generateSecret = void 0;\nconst generate_js_1 = require(\"../runtime/generate.js\");\nasync function generateSecret(alg, options) {\n    return (0, generate_js_1.generateSecret)(alg, options);\n}\nexports.generateSecret = generateSecret;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = 'node:crypto';\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst runtime_js_1 = require(\"../runtime/runtime.js\");\nexports.default = runtime_js_1.default;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.cryptoRuntime = exports.base64url = exports.generateSecret = exports.generateKeyPair = exports.errors = exports.decodeJwt = exports.decodeProtectedHeader = exports.importJWK = exports.importX509 = exports.importPKCS8 = exports.importSPKI = exports.exportJWK = exports.exportSPKI = exports.exportPKCS8 = exports.UnsecuredJWT = exports.createRemoteJWKSet = exports.createLocalJWKSet = exports.EmbeddedJWK = exports.calculateJwkThumbprintUri = exports.calculateJwkThumbprint = exports.EncryptJWT = exports.SignJWT = exports.GeneralSign = exports.FlattenedSign = exports.CompactSign = exports.FlattenedEncrypt = exports.CompactEncrypt = exports.jwtDecrypt = exports.jwtVerify = exports.generalVerify = exports.flattenedVerify = exports.compactVerify = exports.GeneralEncrypt = exports.generalDecrypt = exports.flattenedDecrypt = exports.compactDecrypt = void 0;\nvar decrypt_js_1 = require(\"./jwe/compact/decrypt.js\");\nObject.defineProperty(exports, \"compactDecrypt\", { enumerable: true, get: function () { return decrypt_js_1.compactDecrypt; } });\nvar decrypt_js_2 = require(\"./jwe/flattened/decrypt.js\");\nObject.defineProperty(exports, \"flattenedDecrypt\", { enumerable: true, get: function () { return decrypt_js_2.flattenedDecrypt; } });\nvar decrypt_js_3 = require(\"./jwe/general/decrypt.js\");\nObject.defineProperty(exports, \"generalDecrypt\", { enumerable: true, get: function () { return decrypt_js_3.generalDecrypt; } });\nvar encrypt_js_1 = require(\"./jwe/general/encrypt.js\");\nObject.defineProperty(exports, \"GeneralEncrypt\", { enumerable: true, get: function () { return encrypt_js_1.GeneralEncrypt; } });\nvar verify_js_1 = require(\"./jws/compact/verify.js\");\nObject.defineProperty(exports, \"compactVerify\", { enumerable: true, get: function () { return verify_js_1.compactVerify; } });\nvar verify_js_2 = require(\"./jws/flattened/verify.js\");\nObject.defineProperty(exports, \"flattenedVerify\", { enumerable: true, get: function () { return verify_js_2.flattenedVerify; } });\nvar verify_js_3 = require(\"./jws/general/verify.js\");\nObject.defineProperty(exports, \"generalVerify\", { enumerable: true, get: function () { return verify_js_3.generalVerify; } });\nvar verify_js_4 = require(\"./jwt/verify.js\");\nObject.defineProperty(exports, \"jwtVerify\", { enumerable: true, get: function () { return verify_js_4.jwtVerify; } });\nvar decrypt_js_4 = require(\"./jwt/decrypt.js\");\nObject.defineProperty(exports, \"jwtDecrypt\", { enumerable: true, get: function () { return decrypt_js_4.jwtDecrypt; } });\nvar encrypt_js_2 = require(\"./jwe/compact/encrypt.js\");\nObject.defineProperty(exports, \"CompactEncrypt\", { enumerable: true, get: function () { return encrypt_js_2.CompactEncrypt; } });\nvar encrypt_js_3 = require(\"./jwe/flattened/encrypt.js\");\nObject.defineProperty(exports, \"FlattenedEncrypt\", { enumerable: true, get: function () { return encrypt_js_3.FlattenedEncrypt; } });\nvar sign_js_1 = require(\"./jws/compact/sign.js\");\nObject.defineProperty(exports, \"CompactSign\", { enumerable: true, get: function () { return sign_js_1.CompactSign; } });\nvar sign_js_2 = require(\"./jws/flattened/sign.js\");\nObject.defineProperty(exports, \"FlattenedSign\", { enumerable: true, get: function () { return sign_js_2.FlattenedSign; } });\nvar sign_js_3 = require(\"./jws/general/sign.js\");\nObject.defineProperty(exports, \"GeneralSign\", { enumerable: true, get: function () { return sign_js_3.GeneralSign; } });\nvar sign_js_4 = require(\"./jwt/sign.js\");\nObject.defineProperty(exports, \"SignJWT\", { enumerable: true, get: function () { return sign_js_4.SignJWT; } });\nvar encrypt_js_4 = require(\"./jwt/encrypt.js\");\nObject.defineProperty(exports, \"EncryptJWT\", { enumerable: true, get: function () { return encrypt_js_4.EncryptJWT; } });\nvar thumbprint_js_1 = require(\"./jwk/thumbprint.js\");\nObject.defineProperty(exports, \"calculateJwkThumbprint\", { enumerable: true, get: function () { return thumbprint_js_1.calculateJwkThumbprint; } });\nObject.defineProperty(exports, \"calculateJwkThumbprintUri\", { enumerable: true, get: function () { return thumbprint_js_1.calculateJwkThumbprintUri; } });\nvar embedded_js_1 = require(\"./jwk/embedded.js\");\nObject.defineProperty(exports, \"EmbeddedJWK\", { enumerable: true, get: function () { return embedded_js_1.EmbeddedJWK; } });\nvar local_js_1 = require(\"./jwks/local.js\");\nObject.defineProperty(exports, \"createLocalJWKSet\", { enumerable: true, get: function () { return local_js_1.createLocalJWKSet; } });\nvar remote_js_1 = require(\"./jwks/remote.js\");\nObject.defineProperty(exports, \"createRemoteJWKSet\", { enumerable: true, get: function () { return remote_js_1.createRemoteJWKSet; } });\nvar unsecured_js_1 = require(\"./jwt/unsecured.js\");\nObject.defineProperty(exports, \"UnsecuredJWT\", { enumerable: true, get: function () { return unsecured_js_1.UnsecuredJWT; } });\nvar export_js_1 = require(\"./key/export.js\");\nObject.defineProperty(exports, \"exportPKCS8\", { enumerable: true, get: function () { return export_js_1.exportPKCS8; } });\nObject.defineProperty(exports, \"exportSPKI\", { enumerable: true, get: function () { return export_js_1.exportSPKI; } });\nObject.defineProperty(exports, \"exportJWK\", { enumerable: true, get: function () { return export_js_1.exportJWK; } });\nvar import_js_1 = require(\"./key/import.js\");\nObject.defineProperty(exports, \"importSPKI\", { enumerable: true, get: function () { return import_js_1.importSPKI; } });\nObject.defineProperty(exports, \"importPKCS8\", { enumerable: true, get: function () { return import_js_1.importPKCS8; } });\nObject.defineProperty(exports, \"importX509\", { enumerable: true, get: function () { return import_js_1.importX509; } });\nObject.defineProperty(exports, \"importJWK\", { enumerable: true, get: function () { return import_js_1.importJWK; } });\nvar decode_protected_header_js_1 = require(\"./util/decode_protected_header.js\");\nObject.defineProperty(exports, \"decodeProtectedHeader\", { enumerable: true, get: function () { return decode_protected_header_js_1.decodeProtectedHeader; } });\nvar decode_jwt_js_1 = require(\"./util/decode_jwt.js\");\nObject.defineProperty(exports, \"decodeJwt\", { enumerable: true, get: function () { return decode_jwt_js_1.decodeJwt; } });\nexports.errors = require(\"./util/errors.js\");\nvar generate_key_pair_js_1 = require(\"./key/generate_key_pair.js\");\nObject.defineProperty(exports, \"generateKeyPair\", { enumerable: true, get: function () { return generate_key_pair_js_1.generateKeyPair; } });\nvar generate_secret_js_1 = require(\"./key/generate_secret.js\");\nObject.defineProperty(exports, \"generateSecret\", { enumerable: true, get: function () { return generate_secret_js_1.generateSecret; } });\nexports.base64url = require(\"./util/base64url.js\");\nvar runtime_js_1 = require(\"./util/runtime.js\");\nObject.defineProperty(exports, \"cryptoRuntime\", { enumerable: true, get: function () { return runtime_js_1.default; } });\n", "const { strict: assert } = require('assert');\nconst { createHash } = require('crypto');\nconst { format } = require('util');\n\nlet encode;\nif (Buffer.isEncoding('base64url')) {\n  encode = (input) => input.toString('base64url');\n} else {\n  const fromBase64 = (base64) => base64.replace(/=/g, '').replace(/\\+/g, '-').replace(/\\//g, '_');\n  encode = (input) => fromBase64(input.toString('base64'));\n}\n\n/** SPECIFICATION\n * Its (_hash) value is the base64url encoding of the left-most half of the hash of the octets of\n * the ASCII representation of the token value, where the hash algorithm used is the hash algorithm\n * used in the alg Header Parameter of the ID Token's JOSE Header. For instance, if the alg is\n * RS256, hash the token value with SHA-256, then take the left-most 128 bits and base64url encode\n * them. The _hash value is a case sensitive string.\n */\n\n/**\n * @name getHash\n * @api private\n *\n * returns the sha length based off the JOSE alg heade value, defaults to sha256\n *\n * @param token {String} token value to generate the hash from\n * @param alg {String} ID Token JOSE header alg value (i.e. RS256, HS384, ES512, PS256)\n * @param [crv] {String} For EdDSA the curve decides what hash algorithm is used. Required for EdDSA\n */\nfunction getHash(alg, crv) {\n  switch (alg) {\n    case 'HS256':\n    case 'RS256':\n    case 'PS256':\n    case 'ES256':\n    case 'ES256K':\n      return createHash('sha256');\n\n    case 'HS384':\n    case 'RS384':\n    case 'PS384':\n    case 'ES384':\n      return createHash('sha384');\n\n    case 'HS512':\n    case 'RS512':\n    case 'PS512':\n    case 'ES512':\n    case 'Ed25519':\n      return createHash('sha512');\n\n    case 'Ed448':\n      return createHash('shake256', { outputLength: 114 });\n\n    case 'ML-DSA-44':\n    case 'ML-DSA-65':\n    case 'ML-DSA-87':\n      return createHash('shake256', { outputLength: 64 });\n\n    case 'EdDSA':\n      switch (crv) {\n        case 'Ed25519':\n          return createHash('sha512');\n        case 'Ed448':\n          return createHash('shake256', { outputLength: 114 });\n        default:\n          throw new TypeError('unrecognized or invalid EdDSA curve provided');\n      }\n\n    default:\n      throw new TypeError('unrecognized or invalid JWS algorithm provided');\n  }\n}\n\nfunction generate(token, alg, crv) {\n  const digest = getHash(alg, crv).update(token).digest();\n  return encode(digest.slice(0, digest.length / 2));\n}\n\nfunction validate(names, actual, source, alg, crv) {\n  if (typeof names.claim !== 'string' || !names.claim) {\n    throw new TypeError('names.claim must be a non-empty string');\n  }\n\n  if (typeof names.source !== 'string' || !names.source) {\n    throw new TypeError('names.source must be a non-empty string');\n  }\n\n  assert(typeof actual === 'string' && actual, `${names.claim} must be a non-empty string`);\n  assert(typeof source === 'string' && source, `${names.source} must be a non-empty string`);\n\n  let expected;\n  let msg;\n  try {\n    expected = generate(source, alg, crv);\n  } catch (err) {\n    msg = format('%s could not be validated (%s)', names.claim, err.message);\n  }\n\n  msg = msg || format('%s mismatch, expected %s, got: %s', names.claim, expected, actual);\n\n  assert.equal(expected, actual, msg);\n}\n\nmodule.exports = {\n  validate,\n  generate,\n};\n", "const util = require('util');\nconst crypto = require('crypto');\n\nmodule.exports = util.types.isKeyObject || ((obj) => obj && obj instanceof crypto.KeyObject);\n", "let encode;\nif (Buffer.isEncoding('base64url')) {\n  encode = (input, encoding = 'utf8') => Buffer.from(input, encoding).toString('base64url');\n} else {\n  const fromBase64 = (base64) => base64.replace(/=/g, '').replace(/\\+/g, '-').replace(/\\//g, '_');\n  encode = (input, encoding = 'utf8') =>\n    fromBase64(Buffer.from(input, encoding).toString('base64'));\n}\n\nconst decode = (input) => Buffer.from(input, 'base64');\n\nmodule.exports.decode = decode;\nmodule.exports.encode = encode;\n", "const base64url = require('./base64url');\n\nmodule.exports = (token) => {\n  if (typeof token !== 'string' || !token) {\n    throw new TypeError('JWT must be a string');\n  }\n\n  const { 0: header, 1: payload, 2: signature, length } = token.split('.');\n\n  if (length === 5) {\n    throw new TypeError('encrypted JWTs cannot be decoded');\n  }\n\n  if (length !== 3) {\n    throw new Error('JWTs must have three components');\n  }\n\n  try {\n    return {\n      header: JSON.parse(base64url.decode(header)),\n      payload: JSON.parse(base64url.decode(payload)),\n      signature,\n    };\n  } catch (err) {\n    throw new Error('JWT is malformed');\n  }\n};\n", "module.exports = (a) => !!a && a.constructor === Object;\n", "const isPlainObject = require('./is_plain_object');\n\nfunction defaults(deep, target, ...sources) {\n  for (const source of sources) {\n    if (!isPlainObject(source)) {\n      continue;\n    }\n    for (const [key, value] of Object.entries(source)) {\n      /* istanbul ignore if */\n      if (key === '__proto__' || key === 'constructor') {\n        continue;\n      }\n      if (typeof target[key] === 'undefined' && typeof value !== 'undefined') {\n        target[key] = value;\n      }\n\n      if (deep && isPlainObject(target[key]) && isPlainObject(value)) {\n        defaults(true, target[key], value);\n      }\n    }\n  }\n\n  return target;\n}\n\nmodule.exports = defaults.bind(undefined, false);\nmodule.exports.deep = defaults.bind(undefined, true);\n", "const REGEXP = /(\\w+)=(\"[^\"]*\")/g;\n\nmodule.exports = (wwwAuthenticate) => {\n  const params = {};\n  try {\n    while (REGEXP.exec(wwwAuthenticate) !== null) {\n      if (RegExp.$1 && RegExp.$2) {\n        params[RegExp.$1] = RegExp.$2.slice(1, -1);\n      }\n    }\n  } catch (err) {}\n\n  return params;\n};\n", "function assertSigningAlgValuesSupport(endpoint, issuer, properties) {\n  if (!issuer[`${endpoint}_endpoint`]) return;\n\n  const eam = `${endpoint}_endpoint_auth_method`;\n  const easa = `${endpoint}_endpoint_auth_signing_alg`;\n  const easavs = `${endpoint}_endpoint_auth_signing_alg_values_supported`;\n\n  if (properties[eam] && properties[eam].endsWith('_jwt') && !properties[easa] && !issuer[easavs]) {\n    throw new TypeError(\n      `${easavs} must be configured on the issuer if ${easa} is not defined on a client`,\n    );\n  }\n}\n\nfunction assertIssuerConfiguration(issuer, endpoint) {\n  if (!issuer[endpoint]) {\n    throw new TypeError(`${endpoint} must be configured on the issuer`);\n  }\n}\n\nmodule.exports = {\n  assertSigningAlgValuesSupport,\n  assertIssuerConfiguration,\n};\n", "module.exports = function pick(object, ...paths) {\n  const obj = {};\n  for (const path of paths) {\n    if (object[path] !== undefined) {\n      obj[path] = object[path];\n    }\n  }\n  return obj;\n};\n", "const { STATUS_CODES } = require('http');\nconst { format } = require('util');\n\nconst { OPError } = require('../errors');\nconst parseWwwAuthenticate = require('./www_authenticate_parser');\n\nconst throwAuthenticateErrors = (response) => {\n  const params = parseWwwAuthenticate(response.headers['www-authenticate']);\n\n  if (params.error) {\n    throw new OPError(params, response);\n  }\n};\n\nconst isStandardBodyError = (response) => {\n  let result = false;\n  try {\n    let jsonbody;\n    if (typeof response.body !== 'object' || Buffer.isBuffer(response.body)) {\n      jsonbody = JSON.parse(response.body);\n    } else {\n      jsonbody = response.body;\n    }\n    result = typeof jsonbody.error === 'string' && jsonbody.error.length;\n    if (result) Object.defineProperty(response, 'body', { value: jsonbody, configurable: true });\n  } catch (err) {}\n\n  return result;\n};\n\nfunction processResponse(response, { statusCode = 200, body = true, bearer = false } = {}) {\n  if (response.statusCode !== statusCode) {\n    if (bearer) {\n      throwAuthenticateErrors(response);\n    }\n\n    if (isStandardBodyError(response)) {\n      throw new OPError(response.body, response);\n    }\n\n    throw new OPError(\n      {\n        error: format(\n          'expected %i %s, got: %i %s',\n          statusCode,\n          STATUS_CODES[statusCode],\n          response.statusCode,\n          STATUS_CODES[response.statusCode],\n        ),\n      },\n      response,\n    );\n  }\n\n  if (body && !response.body) {\n    throw new OPError(\n      {\n        error: format(\n          'expected %i %s with body but no body was returned',\n          statusCode,\n          STATUS_CODES[statusCode],\n        ),\n      },\n      response,\n    );\n  }\n\n  return response.body;\n}\n\nmodule.exports = processResponse;\n", "module.exports = () => Math.floor(Date.now() / 1000);\n", "const base64url = require('./helpers/base64url');\nconst now = require('./helpers/unix_timestamp');\n\nclass TokenSet {\n  constructor(values) {\n    Object.assign(this, values);\n    const { constructor, ...properties } = Object.getOwnPropertyDescriptors(\n      this.constructor.prototype,\n    );\n\n    Object.defineProperties(this, properties);\n  }\n\n  set expires_in(value) {\n    this.expires_at = now() + Number(value);\n  }\n\n  get expires_in() {\n    return Math.max.apply(null, [this.expires_at - now(), 0]);\n  }\n\n  expired() {\n    return this.expires_in === 0;\n  }\n\n  claims() {\n    if (!this.id_token) {\n      throw new TypeError('id_token not present in TokenSet');\n    }\n\n    return JSON.parse(base64url.decode(this.id_token.split('.')[1]));\n  }\n}\n\nmodule.exports = TokenSet;\n", "const { createHash, randomBytes } = require('crypto');\n\nconst base64url = require('./base64url');\n\nconst random = (bytes = 32) => base64url.encode(randomBytes(bytes));\n\nmodule.exports = {\n  random,\n  state: random,\n  nonce: random,\n  codeVerifier: random,\n  codeChallenge: (codeVerifier) =>\n    base64url.encode(createHash('sha256').update(codeVerifier).digest()),\n};\n", "'use strict'\nmodule.exports = function (Yallist) {\n  Yallist.prototype[Symbol.iterator] = function* () {\n    for (let walker = this.head; walker; walker = walker.next) {\n      yield walker.value\n    }\n  }\n}\n", "'use strict'\nmodule.exports = Yallist\n\nYallist.Node = Node\nYallist.create = Yallist\n\nfunction Yallist (list) {\n  var self = this\n  if (!(self instanceof Yallist)) {\n    self = new Yallist()\n  }\n\n  self.tail = null\n  self.head = null\n  self.length = 0\n\n  if (list && typeof list.forEach === 'function') {\n    list.forEach(function (item) {\n      self.push(item)\n    })\n  } else if (arguments.length > 0) {\n    for (var i = 0, l = arguments.length; i < l; i++) {\n      self.push(arguments[i])\n    }\n  }\n\n  return self\n}\n\nYallist.prototype.removeNode = function (node) {\n  if (node.list !== this) {\n    throw new Error('removing node which does not belong to this list')\n  }\n\n  var next = node.next\n  var prev = node.prev\n\n  if (next) {\n    next.prev = prev\n  }\n\n  if (prev) {\n    prev.next = next\n  }\n\n  if (node === this.head) {\n    this.head = next\n  }\n  if (node === this.tail) {\n    this.tail = prev\n  }\n\n  node.list.length--\n  node.next = null\n  node.prev = null\n  node.list = null\n\n  return next\n}\n\nYallist.prototype.unshiftNode = function (node) {\n  if (node === this.head) {\n    return\n  }\n\n  if (node.list) {\n    node.list.removeNode(node)\n  }\n\n  var head = this.head\n  node.list = this\n  node.next = head\n  if (head) {\n    head.prev = node\n  }\n\n  this.head = node\n  if (!this.tail) {\n    this.tail = node\n  }\n  this.length++\n}\n\nYallist.prototype.pushNode = function (node) {\n  if (node === this.tail) {\n    return\n  }\n\n  if (node.list) {\n    node.list.removeNode(node)\n  }\n\n  var tail = this.tail\n  node.list = this\n  node.prev = tail\n  if (tail) {\n    tail.next = node\n  }\n\n  this.tail = node\n  if (!this.head) {\n    this.head = node\n  }\n  this.length++\n}\n\nYallist.prototype.push = function () {\n  for (var i = 0, l = arguments.length; i < l; i++) {\n    push(this, arguments[i])\n  }\n  return this.length\n}\n\nYallist.prototype.unshift = function () {\n  for (var i = 0, l = arguments.length; i < l; i++) {\n    unshift(this, arguments[i])\n  }\n  return this.length\n}\n\nYallist.prototype.pop = function () {\n  if (!this.tail) {\n    return undefined\n  }\n\n  var res = this.tail.value\n  this.tail = this.tail.prev\n  if (this.tail) {\n    this.tail.next = null\n  } else {\n    this.head = null\n  }\n  this.length--\n  return res\n}\n\nYallist.prototype.shift = function () {\n  if (!this.head) {\n    return undefined\n  }\n\n  var res = this.head.value\n  this.head = this.head.next\n  if (this.head) {\n    this.head.prev = null\n  } else {\n    this.tail = null\n  }\n  this.length--\n  return res\n}\n\nYallist.prototype.forEach = function (fn, thisp) {\n  thisp = thisp || this\n  for (var walker = this.head, i = 0; walker !== null; i++) {\n    fn.call(thisp, walker.value, i, this)\n    walker = walker.next\n  }\n}\n\nYallist.prototype.forEachReverse = function (fn, thisp) {\n  thisp = thisp || this\n  for (var walker = this.tail, i = this.length - 1; walker !== null; i--) {\n    fn.call(thisp, walker.value, i, this)\n    walker = walker.prev\n  }\n}\n\nYallist.prototype.get = function (n) {\n  for (var i = 0, walker = this.head; walker !== null && i < n; i++) {\n    // abort out of the list early if we hit a cycle\n    walker = walker.next\n  }\n  if (i === n && walker !== null) {\n    return walker.value\n  }\n}\n\nYallist.prototype.getReverse = function (n) {\n  for (var i = 0, walker = this.tail; walker !== null && i < n; i++) {\n    // abort out of the list early if we hit a cycle\n    walker = walker.prev\n  }\n  if (i === n && walker !== null) {\n    return walker.value\n  }\n}\n\nYallist.prototype.map = function (fn, thisp) {\n  thisp = thisp || this\n  var res = new Yallist()\n  for (var walker = this.head; walker !== null;) {\n    res.push(fn.call(thisp, walker.value, this))\n    walker = walker.next\n  }\n  return res\n}\n\nYallist.prototype.mapReverse = function (fn, thisp) {\n  thisp = thisp || this\n  var res = new Yallist()\n  for (var walker = this.tail; walker !== null;) {\n    res.push(fn.call(thisp, walker.value, this))\n    walker = walker.prev\n  }\n  return res\n}\n\nYallist.prototype.reduce = function (fn, initial) {\n  var acc\n  var walker = this.head\n  if (arguments.length > 1) {\n    acc = initial\n  } else if (this.head) {\n    walker = this.head.next\n    acc = this.head.value\n  } else {\n    throw new TypeError('Reduce of empty list with no initial value')\n  }\n\n  for (var i = 0; walker !== null; i++) {\n    acc = fn(acc, walker.value, i)\n    walker = walker.next\n  }\n\n  return acc\n}\n\nYallist.prototype.reduceReverse = function (fn, initial) {\n  var acc\n  var walker = this.tail\n  if (arguments.length > 1) {\n    acc = initial\n  } else if (this.tail) {\n    walker = this.tail.prev\n    acc = this.tail.value\n  } else {\n    throw new TypeError('Reduce of empty list with no initial value')\n  }\n\n  for (var i = this.length - 1; walker !== null; i--) {\n    acc = fn(acc, walker.value, i)\n    walker = walker.prev\n  }\n\n  return acc\n}\n\nYallist.prototype.toArray = function () {\n  var arr = new Array(this.length)\n  for (var i = 0, walker = this.head; walker !== null; i++) {\n    arr[i] = walker.value\n    walker = walker.next\n  }\n  return arr\n}\n\nYallist.prototype.toArrayReverse = function () {\n  var arr = new Array(this.length)\n  for (var i = 0, walker = this.tail; walker !== null; i++) {\n    arr[i] = walker.value\n    walker = walker.prev\n  }\n  return arr\n}\n\nYallist.prototype.slice = function (from, to) {\n  to = to || this.length\n  if (to < 0) {\n    to += this.length\n  }\n  from = from || 0\n  if (from < 0) {\n    from += this.length\n  }\n  var ret = new Yallist()\n  if (to < from || to < 0) {\n    return ret\n  }\n  if (from < 0) {\n    from = 0\n  }\n  if (to > this.length) {\n    to = this.length\n  }\n  for (var i = 0, walker = this.head; walker !== null && i < from; i++) {\n    walker = walker.next\n  }\n  for (; walker !== null && i < to; i++, walker = walker.next) {\n    ret.push(walker.value)\n  }\n  return ret\n}\n\nYallist.prototype.sliceReverse = function (from, to) {\n  to = to || this.length\n  if (to < 0) {\n    to += this.length\n  }\n  from = from || 0\n  if (from < 0) {\n    from += this.length\n  }\n  var ret = new Yallist()\n  if (to < from || to < 0) {\n    return ret\n  }\n  if (from < 0) {\n    from = 0\n  }\n  if (to > this.length) {\n    to = this.length\n  }\n  for (var i = this.length, walker = this.tail; walker !== null && i > to; i--) {\n    walker = walker.prev\n  }\n  for (; walker !== null && i > from; i--, walker = walker.prev) {\n    ret.push(walker.value)\n  }\n  return ret\n}\n\nYallist.prototype.splice = function (start, deleteCount, ...nodes) {\n  if (start > this.length) {\n    start = this.length - 1\n  }\n  if (start < 0) {\n    start = this.length + start;\n  }\n\n  for (var i = 0, walker = this.head; walker !== null && i < start; i++) {\n    walker = walker.next\n  }\n\n  var ret = []\n  for (var i = 0; walker && i < deleteCount; i++) {\n    ret.push(walker.value)\n    walker = this.removeNode(walker)\n  }\n  if (walker === null) {\n    walker = this.tail\n  }\n\n  if (walker !== this.head && walker !== this.tail) {\n    walker = walker.prev\n  }\n\n  for (var i = 0; i < nodes.length; i++) {\n    walker = insert(this, walker, nodes[i])\n  }\n  return ret;\n}\n\nYallist.prototype.reverse = function () {\n  var head = this.head\n  var tail = this.tail\n  for (var walker = head; walker !== null; walker = walker.prev) {\n    var p = walker.prev\n    walker.prev = walker.next\n    walker.next = p\n  }\n  this.head = tail\n  this.tail = head\n  return this\n}\n\nfunction insert (self, node, value) {\n  var inserted = node === self.head ?\n    new Node(value, null, node, self) :\n    new Node(value, node, node.next, self)\n\n  if (inserted.next === null) {\n    self.tail = inserted\n  }\n  if (inserted.prev === null) {\n    self.head = inserted\n  }\n\n  self.length++\n\n  return inserted\n}\n\nfunction push (self, item) {\n  self.tail = new Node(item, self.tail, null, self)\n  if (!self.head) {\n    self.head = self.tail\n  }\n  self.length++\n}\n\nfunction unshift (self, item) {\n  self.head = new Node(item, null, self.head, self)\n  if (!self.tail) {\n    self.tail = self.head\n  }\n  self.length++\n}\n\nfunction Node (value, prev, next, list) {\n  if (!(this instanceof Node)) {\n    return new Node(value, prev, next, list)\n  }\n\n  this.list = list\n  this.value = value\n\n  if (prev) {\n    prev.next = this\n    this.prev = prev\n  } else {\n    this.prev = null\n  }\n\n  if (next) {\n    next.prev = this\n    this.next = next\n  } else {\n    this.next = null\n  }\n}\n\ntry {\n  // add if support for Symbol.iterator is present\n  require('./iterator.js')(Yallist)\n} catch (er) {}\n", "'use strict'\n\n// A linked list to keep track of recently-used-ness\nconst Yallist = require('yallist')\n\nconst MAX = Symbol('max')\nconst LENGTH = Symbol('length')\nconst LENGTH_CALCULATOR = Symbol('lengthCalculator')\nconst ALLOW_STALE = Symbol('allowStale')\nconst MAX_AGE = Symbol('maxAge')\nconst DISPOSE = Symbol('dispose')\nconst NO_DISPOSE_ON_SET = Symbol('noDisposeOnSet')\nconst LRU_LIST = Symbol('lruList')\nconst CACHE = Symbol('cache')\nconst UPDATE_AGE_ON_GET = Symbol('updateAgeOnGet')\n\nconst naiveLength = () => 1\n\n// lruList is a yallist where the head is the youngest\n// item, and the tail is the oldest.  the list contains the Hit\n// objects as the entries.\n// Each Hit object has a reference to its Yallist.Node.  This\n// never changes.\n//\n// cache is a Map (or PseudoMap) that matches the keys to\n// the Yallist.Node object.\nclass LRUCache {\n  constructor (options) {\n    if (typeof options === 'number')\n      options = { max: options }\n\n    if (!options)\n      options = {}\n\n    if (options.max && (typeof options.max !== 'number' || options.max < 0))\n      throw new TypeError('max must be a non-negative number')\n    // Kind of weird to have a default max of Infinity, but oh well.\n    const max = this[MAX] = options.max || Infinity\n\n    const lc = options.length || naiveLength\n    this[LENGTH_CALCULATOR] = (typeof lc !== 'function') ? naiveLength : lc\n    this[ALLOW_STALE] = options.stale || false\n    if (options.maxAge && typeof options.maxAge !== 'number')\n      throw new TypeError('maxAge must be a number')\n    this[MAX_AGE] = options.maxAge || 0\n    this[DISPOSE] = options.dispose\n    this[NO_DISPOSE_ON_SET] = options.noDisposeOnSet || false\n    this[UPDATE_AGE_ON_GET] = options.updateAgeOnGet || false\n    this.reset()\n  }\n\n  // resize the cache when the max changes.\n  set max (mL) {\n    if (typeof mL !== 'number' || mL < 0)\n      throw new TypeError('max must be a non-negative number')\n\n    this[MAX] = mL || Infinity\n    trim(this)\n  }\n  get max () {\n    return this[MAX]\n  }\n\n  set allowStale (allowStale) {\n    this[ALLOW_STALE] = !!allowStale\n  }\n  get allowStale () {\n    return this[ALLOW_STALE]\n  }\n\n  set maxAge (mA) {\n    if (typeof mA !== 'number')\n      throw new TypeError('maxAge must be a non-negative number')\n\n    this[MAX_AGE] = mA\n    trim(this)\n  }\n  get maxAge () {\n    return this[MAX_AGE]\n  }\n\n  // resize the cache when the lengthCalculator changes.\n  set lengthCalculator (lC) {\n    if (typeof lC !== 'function')\n      lC = naiveLength\n\n    if (lC !== this[LENGTH_CALCULATOR]) {\n      this[LENGTH_CALCULATOR] = lC\n      this[LENGTH] = 0\n      this[LRU_LIST].forEach(hit => {\n        hit.length = this[LENGTH_CALCULATOR](hit.value, hit.key)\n        this[LENGTH] += hit.length\n      })\n    }\n    trim(this)\n  }\n  get lengthCalculator () { return this[LENGTH_CALCULATOR] }\n\n  get length () { return this[LENGTH] }\n  get itemCount () { return this[LRU_LIST].length }\n\n  rforEach (fn, thisp) {\n    thisp = thisp || this\n    for (let walker = this[LRU_LIST].tail; walker !== null;) {\n      const prev = walker.prev\n      forEachStep(this, fn, walker, thisp)\n      walker = prev\n    }\n  }\n\n  forEach (fn, thisp) {\n    thisp = thisp || this\n    for (let walker = this[LRU_LIST].head; walker !== null;) {\n      const next = walker.next\n      forEachStep(this, fn, walker, thisp)\n      walker = next\n    }\n  }\n\n  keys () {\n    return this[LRU_LIST].toArray().map(k => k.key)\n  }\n\n  values () {\n    return this[LRU_LIST].toArray().map(k => k.value)\n  }\n\n  reset () {\n    if (this[DISPOSE] &&\n        this[LRU_LIST] &&\n        this[LRU_LIST].length) {\n      this[LRU_LIST].forEach(hit => this[DISPOSE](hit.key, hit.value))\n    }\n\n    this[CACHE] = new Map() // hash of items by key\n    this[LRU_LIST] = new Yallist() // list of items in order of use recency\n    this[LENGTH] = 0 // length of items in the list\n  }\n\n  dump () {\n    return this[LRU_LIST].map(hit =>\n      isStale(this, hit) ? false : {\n        k: hit.key,\n        v: hit.value,\n        e: hit.now + (hit.maxAge || 0)\n      }).toArray().filter(h => h)\n  }\n\n  dumpLru () {\n    return this[LRU_LIST]\n  }\n\n  set (key, value, maxAge) {\n    maxAge = maxAge || this[MAX_AGE]\n\n    if (maxAge && typeof maxAge !== 'number')\n      throw new TypeError('maxAge must be a number')\n\n    const now = maxAge ? Date.now() : 0\n    const len = this[LENGTH_CALCULATOR](value, key)\n\n    if (this[CACHE].has(key)) {\n      if (len > this[MAX]) {\n        del(this, this[CACHE].get(key))\n        return false\n      }\n\n      const node = this[CACHE].get(key)\n      const item = node.value\n\n      // dispose of the old one before overwriting\n      // split out into 2 ifs for better coverage tracking\n      if (this[DISPOSE]) {\n        if (!this[NO_DISPOSE_ON_SET])\n          this[DISPOSE](key, item.value)\n      }\n\n      item.now = now\n      item.maxAge = maxAge\n      item.value = value\n      this[LENGTH] += len - item.length\n      item.length = len\n      this.get(key)\n      trim(this)\n      return true\n    }\n\n    const hit = new Entry(key, value, len, now, maxAge)\n\n    // oversized objects fall out of cache automatically.\n    if (hit.length > this[MAX]) {\n      if (this[DISPOSE])\n        this[DISPOSE](key, value)\n\n      return false\n    }\n\n    this[LENGTH] += hit.length\n    this[LRU_LIST].unshift(hit)\n    this[CACHE].set(key, this[LRU_LIST].head)\n    trim(this)\n    return true\n  }\n\n  has (key) {\n    if (!this[CACHE].has(key)) return false\n    const hit = this[CACHE].get(key).value\n    return !isStale(this, hit)\n  }\n\n  get (key) {\n    return get(this, key, true)\n  }\n\n  peek (key) {\n    return get(this, key, false)\n  }\n\n  pop () {\n    const node = this[LRU_LIST].tail\n    if (!node)\n      return null\n\n    del(this, node)\n    return node.value\n  }\n\n  del (key) {\n    del(this, this[CACHE].get(key))\n  }\n\n  load (arr) {\n    // reset the cache\n    this.reset()\n\n    const now = Date.now()\n    // A previous serialized cache has the most recent items first\n    for (let l = arr.length - 1; l >= 0; l--) {\n      const hit = arr[l]\n      const expiresAt = hit.e || 0\n      if (expiresAt === 0)\n        // the item was created without expiration in a non aged cache\n        this.set(hit.k, hit.v)\n      else {\n        const maxAge = expiresAt - now\n        // dont add already expired items\n        if (maxAge > 0) {\n          this.set(hit.k, hit.v, maxAge)\n        }\n      }\n    }\n  }\n\n  prune () {\n    this[CACHE].forEach((value, key) => get(this, key, false))\n  }\n}\n\nconst get = (self, key, doUse) => {\n  const node = self[CACHE].get(key)\n  if (node) {\n    const hit = node.value\n    if (isStale(self, hit)) {\n      del(self, node)\n      if (!self[ALLOW_STALE])\n        return undefined\n    } else {\n      if (doUse) {\n        if (self[UPDATE_AGE_ON_GET])\n          node.value.now = Date.now()\n        self[LRU_LIST].unshiftNode(node)\n      }\n    }\n    return hit.value\n  }\n}\n\nconst isStale = (self, hit) => {\n  if (!hit || (!hit.maxAge && !self[MAX_AGE]))\n    return false\n\n  const diff = Date.now() - hit.now\n  return hit.maxAge ? diff > hit.maxAge\n    : self[MAX_AGE] && (diff > self[MAX_AGE])\n}\n\nconst trim = self => {\n  if (self[LENGTH] > self[MAX]) {\n    for (let walker = self[LRU_LIST].tail;\n      self[LENGTH] > self[MAX] && walker !== null;) {\n      // We know that we're about to delete this one, and also\n      // what the next least recently used key will be, so just\n      // go ahead and set it now.\n      const prev = walker.prev\n      del(self, walker)\n      walker = prev\n    }\n  }\n}\n\nconst del = (self, node) => {\n  if (node) {\n    const hit = node.value\n    if (self[DISPOSE])\n      self[DISPOSE](hit.key, hit.value)\n\n    self[LENGTH] -= hit.length\n    self[CACHE].delete(hit.key)\n    self[LRU_LIST].removeNode(node)\n  }\n}\n\nclass Entry {\n  constructor (key, value, length, now, maxAge) {\n    this.key = key\n    this.value = value\n    this.length = length\n    this.now = now\n    this.maxAge = maxAge || 0\n  }\n}\n\nconst forEachStep = (self, fn, node, thisp) => {\n  let hit = node.value\n  if (isStale(self, hit)) {\n    del(self, node)\n    if (!self[ALLOW_STALE])\n      hit = undefined\n  }\n  if (hit)\n    fn.call(thisp, hit.value, hit.key, self)\n}\n\nmodule.exports = LRUCache\n", "{\n  \"name\": \"openid-client\",\n  \"version\": \"5.7.1\",\n  \"description\": \"OpenID Connect Relying Party (RP, Client) implementation for Node.js runtime, supports passportjs\",\n  \"keywords\": [\n    \"auth\",\n    \"authentication\",\n    \"basic\",\n    \"certified\",\n    \"client\",\n    \"connect\",\n    \"dynamic\",\n    \"electron\",\n    \"hybrid\",\n    \"identity\",\n    \"implicit\",\n    \"oauth\",\n    \"oauth2\",\n    \"oidc\",\n    \"openid\",\n    \"passport\",\n    \"relying party\",\n    \"strategy\"\n  ],\n  \"homepage\": \"https://github.com/panva/openid-client\",\n  \"repository\": \"panva/openid-client\",\n  \"funding\": {\n    \"url\": \"https://github.com/sponsors/panva\"\n  },\n  \"license\": \"MIT\",\n  \"author\": \"Filip Skokan <panva.ip@gmail.com>\",\n  \"exports\": {\n    \"types\": \"./types/index.d.ts\",\n    \"import\": \"./lib/index.mjs\",\n    \"require\": \"./lib/index.js\"\n  },\n  \"main\": \"./lib/index.js\",\n  \"types\": \"./types/index.d.ts\",\n  \"files\": [\n    \"lib\",\n    \"types/index.d.ts\"\n  ],\n  \"scripts\": {\n    \"format\": \"npx prettier --loglevel silent --write ./lib ./test ./certification ./types\",\n    \"test\": \"mocha test/**/*.test.js\"\n  },\n  \"dependencies\": {\n    \"jose\": \"^4.15.9\",\n    \"lru-cache\": \"^6.0.0\",\n    \"object-hash\": \"^2.2.0\",\n    \"oidc-token-hash\": \"^5.0.3\"\n  },\n  \"devDependencies\": {\n    \"@types/node\": \"^16.18.106\",\n    \"@types/passport\": \"^1.0.16\",\n    \"base64url\": \"^3.0.1\",\n    \"chai\": \"^4.5.0\",\n    \"mocha\": \"^10.7.3\",\n    \"nock\": \"^13.5.5\",\n    \"prettier\": \"^2.8.8\",\n    \"readable-mock-req\": \"^0.2.2\",\n    \"sinon\": \"^9.2.4\",\n    \"timekeeper\": \"^2.3.1\"\n  },\n  \"standard-version\": {\n    \"scripts\": {\n      \"postchangelog\": \"sed -i '' -e 's/### \\\\[/## [/g' CHANGELOG.md\"\n    },\n    \"types\": [\n      {\n        \"type\": \"feat\",\n        \"section\": \"Features\"\n      },\n      {\n        \"type\": \"fix\",\n        \"section\": \"Fixes\"\n      },\n      {\n        \"type\": \"chore\",\n        \"hidden\": true\n      },\n      {\n        \"type\": \"docs\",\n        \"hidden\": true\n      },\n      {\n        \"type\": \"style\",\n        \"hidden\": true\n      },\n      {\n        \"type\": \"refactor\",\n        \"section\": \"Refactor\",\n        \"hidden\": false\n      },\n      {\n        \"type\": \"perf\",\n        \"section\": \"Performance\",\n        \"hidden\": false\n      },\n      {\n        \"type\": \"test\",\n        \"hidden\": true\n      }\n    ]\n  }\n}\n", "const HTTP_OPTIONS = Symbol();\nconst CLOCK_TOLERANCE = Symbol();\n\nmodule.exports = {\n  CLOCK_TOLERANCE,\n  HTTP_OPTIONS,\n};\n", "const assert = require('assert');\nconst querystring = require('querystring');\nconst http = require('http');\nconst https = require('https');\nconst { once } = require('events');\nconst { URL } = require('url');\n\nconst LRU = require('lru-cache');\n\nconst pkg = require('../../package.json');\nconst { RPError } = require('../errors');\n\nconst pick = require('./pick');\nconst { deep: defaultsDeep } = require('./defaults');\nconst { HTTP_OPTIONS } = require('./consts');\n\nlet DEFAULT_HTTP_OPTIONS;\nconst NQCHAR = /^[\\x21\\x23-\\x5B\\x5D-\\x7E]+$/;\n\nconst allowed = [\n  'agent',\n  'ca',\n  'cert',\n  'crl',\n  'headers',\n  'key',\n  'lookup',\n  'passphrase',\n  'pfx',\n  'timeout',\n];\n\nconst setDefaults = (props, options) => {\n  DEFAULT_HTTP_OPTIONS = defaultsDeep(\n    {},\n    props.length ? pick(options, ...props) : options,\n    DEFAULT_HTTP_OPTIONS,\n  );\n};\n\nsetDefaults([], {\n  headers: {\n    'User-Agent': `${pkg.name}/${pkg.version} (${pkg.homepage})`,\n    'Accept-Encoding': 'identity',\n  },\n  timeout: 3500,\n});\n\nfunction send(req, body, contentType) {\n  if (contentType) {\n    req.removeHeader('content-type');\n    req.setHeader('content-type', contentType);\n  }\n  if (body) {\n    req.removeHeader('content-length');\n    req.setHeader('content-length', Buffer.byteLength(body));\n    req.write(body);\n  }\n  req.end();\n}\n\nconst nonces = new LRU({ max: 100 });\n\nmodule.exports = async function request(options, { accessToken, mTLS = false, DPoP } = {}) {\n  let url;\n  try {\n    url = new URL(options.url);\n    delete options.url;\n    assert(/^(https?:)$/.test(url.protocol));\n  } catch (err) {\n    throw new TypeError('only valid absolute URLs can be requested');\n  }\n  const optsFn = this[HTTP_OPTIONS];\n  let opts = options;\n\n  const nonceKey = `${url.origin}${url.pathname}`;\n  if (DPoP && 'dpopProof' in this) {\n    opts.headers = opts.headers || {};\n    opts.headers.DPoP = await this.dpopProof(\n      {\n        htu: `${url.origin}${url.pathname}`,\n        htm: options.method || 'GET',\n        nonce: nonces.get(nonceKey),\n      },\n      DPoP,\n      accessToken,\n    );\n  }\n\n  let userOptions;\n  if (optsFn) {\n    userOptions = pick(\n      optsFn.call(this, url, defaultsDeep({}, opts, DEFAULT_HTTP_OPTIONS)),\n      ...allowed,\n    );\n  }\n  opts = defaultsDeep({}, userOptions, opts, DEFAULT_HTTP_OPTIONS);\n\n  if (mTLS && !opts.pfx && !(opts.key && opts.cert)) {\n    throw new TypeError('mutual-TLS certificate and key not set');\n  }\n\n  if (opts.searchParams) {\n    for (const [key, value] of Object.entries(opts.searchParams)) {\n      url.searchParams.delete(key);\n      url.searchParams.set(key, value);\n    }\n  }\n\n  let responseType;\n  let form;\n  let json;\n  let body;\n  ({ form, responseType, json, body, ...opts } = opts);\n\n  for (const [key, value] of Object.entries(opts.headers || {})) {\n    if (value === undefined) {\n      delete opts.headers[key];\n    }\n  }\n\n  let response;\n  const req = (url.protocol === 'https:' ? https.request : http.request)(url.href, opts);\n  return (async () => {\n    if (json) {\n      send(req, JSON.stringify(json), 'application/json');\n    } else if (form) {\n      send(req, querystring.stringify(form), 'application/x-www-form-urlencoded');\n    } else if (body) {\n      send(req, body);\n    } else {\n      send(req);\n    }\n\n    [response] = await Promise.race([once(req, 'response'), once(req, 'timeout')]);\n\n    // timeout reached\n    if (!response) {\n      req.destroy();\n      throw new RPError(`outgoing request timed out after ${opts.timeout}ms`);\n    }\n\n    const parts = [];\n\n    for await (const part of response) {\n      parts.push(part);\n    }\n\n    if (parts.length) {\n      switch (responseType) {\n        case 'json': {\n          Object.defineProperty(response, 'body', {\n            get() {\n              let value = Buffer.concat(parts);\n              try {\n                value = JSON.parse(value);\n              } catch (err) {\n                Object.defineProperty(err, 'response', { value: response });\n                throw err;\n              } finally {\n                Object.defineProperty(response, 'body', { value, configurable: true });\n              }\n              return value;\n            },\n            configurable: true,\n          });\n          break;\n        }\n        case undefined:\n        case 'buffer': {\n          Object.defineProperty(response, 'body', {\n            get() {\n              const value = Buffer.concat(parts);\n              Object.defineProperty(response, 'body', { value, configurable: true });\n              return value;\n            },\n            configurable: true,\n          });\n          break;\n        }\n        default:\n          throw new TypeError('unsupported responseType request option');\n      }\n    }\n\n    return response;\n  })()\n    .catch((err) => {\n      if (response) Object.defineProperty(err, 'response', { value: response });\n      throw err;\n    })\n    .finally(() => {\n      const dpopNonce = response && response.headers['dpop-nonce'];\n      if (dpopNonce && NQCHAR.test(dpopNonce)) {\n        nonces.set(nonceKey, dpopNonce);\n      }\n    });\n};\n\nmodule.exports.setDefaults = setDefaults.bind(undefined, allowed);\n", "module.exports.keystores = new WeakMap();\n", "module.exports = globalThis.structuredClone || ((obj) => JSON.parse(JSON.stringify(obj)));\n", "const jose = require('jose');\n\nconst clone = require('./deep_clone');\nconst isPlainObject = require('./is_plain_object');\n\nconst internal = Symbol();\n\nconst keyscore = (key, { alg, use }) => {\n  let score = 0;\n\n  if (alg && key.alg) {\n    score++;\n  }\n\n  if (use && key.use) {\n    score++;\n  }\n\n  return score;\n};\n\nfunction getKtyFromAlg(alg) {\n  switch (typeof alg === 'string' && alg.slice(0, 2)) {\n    case 'RS':\n    case 'PS':\n      return 'RSA';\n    case 'ES':\n      return 'EC';\n    case 'Ed':\n      return 'OKP';\n    default:\n      return undefined;\n  }\n}\n\nfunction getAlgorithms(use, alg, kty, crv) {\n  // Ed25519, Ed448, and secp256k1 always have \"alg\"\n  // OKP always has \"use\"\n  if (alg) {\n    return new Set([alg]);\n  }\n\n  switch (kty) {\n    case 'EC': {\n      let algs = [];\n\n      if (use === 'enc' || use === undefined) {\n        algs = algs.concat(['ECDH-ES', 'ECDH-ES+A128KW', 'ECDH-ES+A192KW', 'ECDH-ES+A256KW']);\n      }\n\n      if (use === 'sig' || use === undefined) {\n        switch (crv) {\n          case 'P-256':\n          case 'P-384':\n            algs = algs.concat([`ES${crv.slice(-3)}`]);\n            break;\n          case 'P-521':\n            algs = algs.concat(['ES512']);\n            break;\n          case 'secp256k1':\n            if (jose.cryptoRuntime === 'node:crypto') {\n              algs = algs.concat(['ES256K']);\n            }\n            break;\n        }\n      }\n\n      return new Set(algs);\n    }\n    case 'OKP': {\n      return new Set(['ECDH-ES', 'ECDH-ES+A128KW', 'ECDH-ES+A192KW', 'ECDH-ES+A256KW']);\n    }\n    case 'RSA': {\n      let algs = [];\n\n      if (use === 'enc' || use === undefined) {\n        algs = algs.concat(['RSA-OAEP', 'RSA-OAEP-256', 'RSA-OAEP-384', 'RSA-OAEP-512']);\n        if (jose.cryptoRuntime === 'node:crypto') {\n          algs = algs.concat(['RSA1_5']);\n        }\n      }\n\n      if (use === 'sig' || use === undefined) {\n        algs = algs.concat(['PS256', 'PS384', 'PS512', 'RS256', 'RS384', 'RS512']);\n      }\n\n      return new Set(algs);\n    }\n    default:\n      throw new Error('unreachable');\n  }\n}\n\nmodule.exports = class KeyStore {\n  #keys;\n\n  constructor(i, keys) {\n    if (i !== internal) throw new Error('invalid constructor call');\n    this.#keys = keys;\n  }\n\n  toJWKS() {\n    return {\n      keys: this.map(({ jwk: { d, p, q, dp, dq, qi, ...jwk } }) => jwk),\n    };\n  }\n\n  all({ alg, kid, use } = {}) {\n    if (!use || !alg) {\n      throw new Error();\n    }\n\n    const kty = getKtyFromAlg(alg);\n\n    const search = { alg, use };\n    return this.filter((key) => {\n      let candidate = true;\n\n      if (candidate && kty !== undefined && key.jwk.kty !== kty) {\n        candidate = false;\n      }\n\n      if (candidate && kid !== undefined && key.jwk.kid !== kid) {\n        candidate = false;\n      }\n\n      if (candidate && use !== undefined && key.jwk.use !== undefined && key.jwk.use !== use) {\n        candidate = false;\n      }\n\n      if (candidate && key.jwk.alg && key.jwk.alg !== alg) {\n        candidate = false;\n      } else if (!key.algorithms.has(alg)) {\n        candidate = false;\n      }\n\n      return candidate;\n    }).sort((first, second) => keyscore(second, search) - keyscore(first, search));\n  }\n\n  get(...args) {\n    return this.all(...args)[0];\n  }\n\n  static async fromJWKS(jwks, { onlyPublic = false, onlyPrivate = false } = {}) {\n    if (\n      !isPlainObject(jwks) ||\n      !Array.isArray(jwks.keys) ||\n      jwks.keys.some((k) => !isPlainObject(k) || !('kty' in k))\n    ) {\n      throw new TypeError('jwks must be a JSON Web Key Set formatted object');\n    }\n\n    const keys = [];\n\n    for (let jwk of jwks.keys) {\n      jwk = clone(jwk);\n      const { kty, kid, crv } = jwk;\n\n      let { alg, use } = jwk;\n\n      if (typeof kty !== 'string' || !kty) {\n        continue;\n      }\n\n      if (use !== undefined && use !== 'sig' && use !== 'enc') {\n        continue;\n      }\n\n      if (typeof alg !== 'string' && alg !== undefined) {\n        continue;\n      }\n\n      if (typeof kid !== 'string' && kid !== undefined) {\n        continue;\n      }\n\n      if (kty === 'EC' && use === 'sig') {\n        switch (crv) {\n          case 'P-256':\n            alg = 'ES256';\n            break;\n          case 'P-384':\n            alg = 'ES384';\n            break;\n          case 'P-521':\n            alg = 'ES512';\n            break;\n          default:\n            break;\n        }\n      }\n\n      if (crv === 'secp256k1') {\n        use = 'sig';\n        alg = 'ES256K';\n      }\n\n      if (kty === 'OKP') {\n        switch (crv) {\n          case 'Ed25519':\n          case 'Ed448':\n            use = 'sig';\n            alg = 'EdDSA';\n            break;\n          case 'X25519':\n          case 'X448':\n            use = 'enc';\n            break;\n          default:\n            break;\n        }\n      }\n\n      if (alg && !use) {\n        switch (true) {\n          case alg.startsWith('ECDH'):\n            use = 'enc';\n            break;\n          case alg.startsWith('RSA'):\n            use = 'enc';\n            break;\n          default:\n            break;\n        }\n      }\n\n      if (onlyPrivate && (jwk.kty === 'oct' || !jwk.d)) {\n        throw new Error('jwks must only contain private keys');\n      }\n\n      if (onlyPublic && (jwk.d || jwk.k)) {\n        continue;\n      }\n\n      keys.push({\n        jwk: { ...jwk, alg, use },\n        async keyObject(alg) {\n          if (this[alg]) {\n            return this[alg];\n          }\n\n          const keyObject = await jose.importJWK(this.jwk, alg);\n          this[alg] = keyObject;\n          return keyObject;\n        },\n        get algorithms() {\n          Object.defineProperty(this, 'algorithms', {\n            value: getAlgorithms(this.jwk.use, this.jwk.alg, this.jwk.kty, this.jwk.crv),\n            enumerable: true,\n            configurable: false,\n          });\n          return this.algorithms;\n        },\n      });\n    }\n\n    return new this(internal, keys);\n  }\n\n  filter(...args) {\n    return this.#keys.filter(...args);\n  }\n\n  find(...args) {\n    return this.#keys.find(...args);\n  }\n\n  every(...args) {\n    return this.#keys.every(...args);\n  }\n\n  some(...args) {\n    return this.#keys.some(...args);\n  }\n\n  map(...args) {\n    return this.#keys.map(...args);\n  }\n\n  forEach(...args) {\n    return this.#keys.forEach(...args);\n  }\n\n  reduce(...args) {\n    return this.#keys.reduce(...args);\n  }\n\n  sort(...args) {\n    return this.#keys.sort(...args);\n  }\n\n  *[Symbol.iterator]() {\n    for (const key of this.#keys) {\n      yield key;\n    }\n  }\n};\n", "const isPlainObject = require('./is_plain_object');\n\nfunction merge(target, ...sources) {\n  for (const source of sources) {\n    if (!isPlainObject(source)) {\n      continue;\n    }\n    for (const [key, value] of Object.entries(source)) {\n      /* istanbul ignore if */\n      if (key === '__proto__' || key === 'constructor') {\n        continue;\n      }\n      if (isPlainObject(target[key]) && isPlainObject(value)) {\n        target[key] = merge(target[key], value);\n      } else if (typeof value !== 'undefined') {\n        target[key] = value;\n      }\n    }\n  }\n\n  return target;\n}\n\nmodule.exports = merge;\n", "const jose = require('jose');\n\nconst { RPError } = require('../errors');\n\nconst { assertIssuerConfiguration } = require('./assert');\nconst { random } = require('./generators');\nconst now = require('./unix_timestamp');\nconst request = require('./request');\nconst { keystores } = require('./weak_cache');\nconst merge = require('./merge');\n\n// TODO: in v6.x additionally encode the `- _ . ! ~ * ' ( )` characters\n// https://github.com/panva/node-openid-client/commit/5a2ea80ef5e59ec0c03dbd97d82f551e24a9d348\nconst formUrlEncode = (value) => encodeURIComponent(value).replace(/%20/g, '+');\n\nasync function clientAssertion(endpoint, payload) {\n  let alg = this[`${endpoint}_endpoint_auth_signing_alg`];\n  if (!alg) {\n    assertIssuerConfiguration(\n      this.issuer,\n      `${endpoint}_endpoint_auth_signing_alg_values_supported`,\n    );\n  }\n\n  if (this[`${endpoint}_endpoint_auth_method`] === 'client_secret_jwt') {\n    if (!alg) {\n      const supported = this.issuer[`${endpoint}_endpoint_auth_signing_alg_values_supported`];\n      alg =\n        Array.isArray(supported) && supported.find((signAlg) => /^HS(?:256|384|512)/.test(signAlg));\n    }\n\n    if (!alg) {\n      throw new RPError(\n        `failed to determine a JWS Algorithm to use for ${\n          this[`${endpoint}_endpoint_auth_method`]\n        } Client Assertion`,\n      );\n    }\n\n    return new jose.CompactSign(Buffer.from(JSON.stringify(payload)))\n      .setProtectedHeader({ alg })\n      .sign(this.secretForAlg(alg));\n  }\n\n  const keystore = await keystores.get(this);\n\n  if (!keystore) {\n    throw new TypeError('no client jwks provided for signing a client assertion with');\n  }\n\n  if (!alg) {\n    const supported = this.issuer[`${endpoint}_endpoint_auth_signing_alg_values_supported`];\n    alg =\n      Array.isArray(supported) &&\n      supported.find((signAlg) => keystore.get({ alg: signAlg, use: 'sig' }));\n  }\n\n  if (!alg) {\n    throw new RPError(\n      `failed to determine a JWS Algorithm to use for ${\n        this[`${endpoint}_endpoint_auth_method`]\n      } Client Assertion`,\n    );\n  }\n\n  const key = keystore.get({ alg, use: 'sig' });\n  if (!key) {\n    throw new RPError(\n      `no key found in client jwks to sign a client assertion with using alg ${alg}`,\n    );\n  }\n\n  return new jose.CompactSign(Buffer.from(JSON.stringify(payload)))\n    .setProtectedHeader({ alg, kid: key.jwk && key.jwk.kid })\n    .sign(await key.keyObject(alg));\n}\n\nasync function authFor(endpoint, { clientAssertionPayload } = {}) {\n  const authMethod = this[`${endpoint}_endpoint_auth_method`];\n  switch (authMethod) {\n    case 'self_signed_tls_client_auth':\n    case 'tls_client_auth':\n    case 'none':\n      return { form: { client_id: this.client_id } };\n    case 'client_secret_post':\n      if (typeof this.client_secret !== 'string') {\n        throw new TypeError(\n          'client_secret_post client authentication method requires a client_secret',\n        );\n      }\n      return { form: { client_id: this.client_id, client_secret: this.client_secret } };\n    case 'private_key_jwt':\n    case 'client_secret_jwt': {\n      const timestamp = now();\n\n      const assertion = await clientAssertion.call(this, endpoint, {\n        iat: timestamp,\n        exp: timestamp + 60,\n        jti: random(),\n        iss: this.client_id,\n        sub: this.client_id,\n        aud: this.issuer.issuer,\n        ...clientAssertionPayload,\n      });\n\n      return {\n        form: {\n          client_id: this.client_id,\n          client_assertion: assertion,\n          client_assertion_type: 'urn:ietf:params:oauth:client-assertion-type:jwt-bearer',\n        },\n      };\n    }\n    case 'client_secret_basic': {\n      // This is correct behaviour, see https://tools.ietf.org/html/rfc6749#section-2.3.1 and the\n      // related appendix. (also https://github.com/panva/node-openid-client/pull/91)\n      // > The client identifier is encoded using the\n      // > \"application/x-www-form-urlencoded\" encoding algorithm per\n      // > Appendix B, and the encoded value is used as the username; the client\n      // > password is encoded using the same algorithm and used as the\n      // > password.\n      if (typeof this.client_secret !== 'string') {\n        throw new TypeError(\n          'client_secret_basic client authentication method requires a client_secret',\n        );\n      }\n      const encoded = `${formUrlEncode(this.client_id)}:${formUrlEncode(this.client_secret)}`;\n      const value = Buffer.from(encoded).toString('base64');\n      return { headers: { Authorization: `Basic ${value}` } };\n    }\n    default: {\n      throw new TypeError(`missing, or unsupported, ${endpoint}_endpoint_auth_method`);\n    }\n  }\n}\n\nfunction resolveResponseType() {\n  const { length, 0: value } = this.response_types;\n\n  if (length === 1) {\n    return value;\n  }\n\n  return undefined;\n}\n\nfunction resolveRedirectUri() {\n  const { length, 0: value } = this.redirect_uris || [];\n\n  if (length === 1) {\n    return value;\n  }\n\n  return undefined;\n}\n\nasync function authenticatedPost(\n  endpoint,\n  opts,\n  { clientAssertionPayload, endpointAuthMethod = endpoint, DPoP } = {},\n) {\n  const auth = await authFor.call(this, endpointAuthMethod, { clientAssertionPayload });\n  const requestOpts = merge(opts, auth);\n\n  const mTLS =\n    this[`${endpointAuthMethod}_endpoint_auth_method`].includes('tls_client_auth') ||\n    (endpoint === 'token' && this.tls_client_certificate_bound_access_tokens);\n\n  let targetUrl;\n  if (mTLS && this.issuer.mtls_endpoint_aliases) {\n    targetUrl = this.issuer.mtls_endpoint_aliases[`${endpoint}_endpoint`];\n  }\n\n  targetUrl = targetUrl || this.issuer[`${endpoint}_endpoint`];\n\n  if ('form' in requestOpts) {\n    for (const [key, value] of Object.entries(requestOpts.form)) {\n      if (typeof value === 'undefined') {\n        delete requestOpts.form[key];\n      }\n    }\n  }\n\n  return request.call(\n    this,\n    {\n      ...requestOpts,\n      method: 'POST',\n      url: targetUrl,\n      headers: {\n        ...(endpoint !== 'revocation'\n          ? {\n              Accept: 'application/json',\n            }\n          : undefined),\n        ...requestOpts.headers,\n      },\n    },\n    { mTLS, DPoP },\n  );\n}\n\nmodule.exports = {\n  resolveResponseType,\n  resolveRedirectUri,\n  authFor,\n  authenticatedPost,\n};\n", "'use strict';\n\nvar crypto = require('crypto');\n\n/**\n * Exported function\n *\n * Options:\n *\n *  - `algorithm` hash algo to be used by this instance: *'sha1', 'md5'\n *  - `excludeValues` {true|*false} hash object keys, values ignored\n *  - `encoding` hash encoding, supports 'buffer', '*hex', 'binary', 'base64'\n *  - `ignoreUnknown` {true|*false} ignore unknown object types\n *  - `replacer` optional function that replaces values before hashing\n *  - `respectFunctionProperties` {*true|false} consider function properties when hashing\n *  - `respectFunctionNames` {*true|false} consider 'name' property of functions for hashing\n *  - `respectType` {*true|false} Respect special properties (prototype, constructor)\n *    when hashing to distinguish between types\n *  - `unorderedArrays` {true|*false} Sort all arrays before hashing\n *  - `unorderedSets` {*true|false} Sort `Set` and `Map` instances before hashing\n *  * = default\n *\n * @param {object} object value to hash\n * @param {object} options hashing options\n * @return {string} hash value\n * @api public\n */\nexports = module.exports = objectHash;\n\nfunction objectHash(object, options){\n  options = applyDefaults(object, options);\n\n  return hash(object, options);\n}\n\n/**\n * Exported sugar methods\n *\n * @param {object} object value to hash\n * @return {string} hash value\n * @api public\n */\nexports.sha1 = function(object){\n  return objectHash(object);\n};\nexports.keys = function(object){\n  return objectHash(object, {excludeValues: true, algorithm: 'sha1', encoding: 'hex'});\n};\nexports.MD5 = function(object){\n  return objectHash(object, {algorithm: 'md5', encoding: 'hex'});\n};\nexports.keysMD5 = function(object){\n  return objectHash(object, {algorithm: 'md5', encoding: 'hex', excludeValues: true});\n};\n\n// Internals\nvar hashes = crypto.getHashes ? crypto.getHashes().slice() : ['sha1', 'md5'];\nhashes.push('passthrough');\nvar encodings = ['buffer', 'hex', 'binary', 'base64'];\n\nfunction applyDefaults(object, sourceOptions){\n  sourceOptions = sourceOptions || {};\n\n  // create a copy rather than mutating\n  var options = {};\n  options.algorithm = sourceOptions.algorithm || 'sha1';\n  options.encoding = sourceOptions.encoding || 'hex';\n  options.excludeValues = sourceOptions.excludeValues ? true : false;\n  options.algorithm = options.algorithm.toLowerCase();\n  options.encoding = options.encoding.toLowerCase();\n  options.ignoreUnknown = sourceOptions.ignoreUnknown !== true ? false : true; // default to false\n  options.respectType = sourceOptions.respectType === false ? false : true; // default to true\n  options.respectFunctionNames = sourceOptions.respectFunctionNames === false ? false : true;\n  options.respectFunctionProperties = sourceOptions.respectFunctionProperties === false ? false : true;\n  options.unorderedArrays = sourceOptions.unorderedArrays !== true ? false : true; // default to false\n  options.unorderedSets = sourceOptions.unorderedSets === false ? false : true; // default to false\n  options.unorderedObjects = sourceOptions.unorderedObjects === false ? false : true; // default to true\n  options.replacer = sourceOptions.replacer || undefined;\n  options.excludeKeys = sourceOptions.excludeKeys || undefined;\n\n  if(typeof object === 'undefined') {\n    throw new Error('Object argument required.');\n  }\n\n  // if there is a case-insensitive match in the hashes list, accept it\n  // (i.e. SHA256 for sha256)\n  for (var i = 0; i < hashes.length; ++i) {\n    if (hashes[i].toLowerCase() === options.algorithm.toLowerCase()) {\n      options.algorithm = hashes[i];\n    }\n  }\n\n  if(hashes.indexOf(options.algorithm) === -1){\n    throw new Error('Algorithm \"' + options.algorithm + '\"  not supported. ' +\n      'supported values: ' + hashes.join(', '));\n  }\n\n  if(encodings.indexOf(options.encoding) === -1 &&\n     options.algorithm !== 'passthrough'){\n    throw new Error('Encoding \"' + options.encoding + '\"  not supported. ' +\n      'supported values: ' + encodings.join(', '));\n  }\n\n  return options;\n}\n\n/** Check if the given function is a native function */\nfunction isNativeFunction(f) {\n  if ((typeof f) !== 'function') {\n    return false;\n  }\n  var exp = /^function\\s+\\w*\\s*\\(\\s*\\)\\s*{\\s+\\[native code\\]\\s+}$/i;\n  return exp.exec(Function.prototype.toString.call(f)) != null;\n}\n\nfunction hash(object, options) {\n  var hashingStream;\n\n  if (options.algorithm !== 'passthrough') {\n    hashingStream = crypto.createHash(options.algorithm);\n  } else {\n    hashingStream = new PassThrough();\n  }\n\n  if (typeof hashingStream.write === 'undefined') {\n    hashingStream.write = hashingStream.update;\n    hashingStream.end   = hashingStream.update;\n  }\n\n  var hasher = typeHasher(options, hashingStream);\n  hasher.dispatch(object);\n  if (!hashingStream.update) {\n    hashingStream.end('');\n  }\n\n  if (hashingStream.digest) {\n    return hashingStream.digest(options.encoding === 'buffer' ? undefined : options.encoding);\n  }\n\n  var buf = hashingStream.read();\n  if (options.encoding === 'buffer') {\n    return buf;\n  }\n\n  return buf.toString(options.encoding);\n}\n\n/**\n * Expose streaming API\n *\n * @param {object} object  Value to serialize\n * @param {object} options  Options, as for hash()\n * @param {object} stream  A stream to write the serializiation to\n * @api public\n */\nexports.writeToStream = function(object, options, stream) {\n  if (typeof stream === 'undefined') {\n    stream = options;\n    options = {};\n  }\n\n  options = applyDefaults(object, options);\n\n  return typeHasher(options, stream).dispatch(object);\n};\n\nfunction typeHasher(options, writeTo, context){\n  context = context || [];\n  var write = function(str) {\n    if (writeTo.update) {\n      return writeTo.update(str, 'utf8');\n    } else {\n      return writeTo.write(str, 'utf8');\n    }\n  };\n\n  return {\n    dispatch: function(value){\n      if (options.replacer) {\n        value = options.replacer(value);\n      }\n\n      var type = typeof value;\n      if (value === null) {\n        type = 'null';\n      }\n\n      //console.log(\"[DEBUG] Dispatch: \", value, \"->\", type, \" -> \", \"_\" + type);\n\n      return this['_' + type](value);\n    },\n    _object: function(object) {\n      var pattern = (/\\[object (.*)\\]/i);\n      var objString = Object.prototype.toString.call(object);\n      var objType = pattern.exec(objString);\n      if (!objType) { // object type did not match [object ...]\n        objType = 'unknown:[' + objString + ']';\n      } else {\n        objType = objType[1]; // take only the class name\n      }\n\n      objType = objType.toLowerCase();\n\n      var objectNumber = null;\n\n      if ((objectNumber = context.indexOf(object)) >= 0) {\n        return this.dispatch('[CIRCULAR:' + objectNumber + ']');\n      } else {\n        context.push(object);\n      }\n\n      if (typeof Buffer !== 'undefined' && Buffer.isBuffer && Buffer.isBuffer(object)) {\n        write('buffer:');\n        return write(object);\n      }\n\n      if(objType !== 'object' && objType !== 'function' && objType !== 'asyncfunction') {\n        if(this['_' + objType]) {\n          this['_' + objType](object);\n        } else if (options.ignoreUnknown) {\n          return write('[' + objType + ']');\n        } else {\n          throw new Error('Unknown object type \"' + objType + '\"');\n        }\n      }else{\n        var keys = Object.keys(object);\n        if (options.unorderedObjects) {\n          keys = keys.sort();\n        }\n        // Make sure to incorporate special properties, so\n        // Types with different prototypes will produce\n        // a different hash and objects derived from\n        // different functions (`new Foo`, `new Bar`) will\n        // produce different hashes.\n        // We never do this for native functions since some\n        // seem to break because of that.\n        if (options.respectType !== false && !isNativeFunction(object)) {\n          keys.splice(0, 0, 'prototype', '__proto__', 'constructor');\n        }\n\n        if (options.excludeKeys) {\n          keys = keys.filter(function(key) { return !options.excludeKeys(key); });\n        }\n\n        write('object:' + keys.length + ':');\n        var self = this;\n        return keys.forEach(function(key){\n          self.dispatch(key);\n          write(':');\n          if(!options.excludeValues) {\n            self.dispatch(object[key]);\n          }\n          write(',');\n        });\n      }\n    },\n    _array: function(arr, unordered){\n      unordered = typeof unordered !== 'undefined' ? unordered :\n        options.unorderedArrays !== false; // default to options.unorderedArrays\n\n      var self = this;\n      write('array:' + arr.length + ':');\n      if (!unordered || arr.length <= 1) {\n        return arr.forEach(function(entry) {\n          return self.dispatch(entry);\n        });\n      }\n\n      // the unordered case is a little more complicated:\n      // since there is no canonical ordering on objects,\n      // i.e. {a:1} < {a:2} and {a:1} > {a:2} are both false,\n      // we first serialize each entry using a PassThrough stream\n      // before sorting.\n      // also: we can\u2019t use the same context array for all entries\n      // since the order of hashing should *not* matter. instead,\n      // we keep track of the additions to a copy of the context array\n      // and add all of them to the global context array when we\u2019re done\n      var contextAdditions = [];\n      var entries = arr.map(function(entry) {\n        var strm = new PassThrough();\n        var localContext = context.slice(); // make copy\n        var hasher = typeHasher(options, strm, localContext);\n        hasher.dispatch(entry);\n        // take only what was added to localContext and append it to contextAdditions\n        contextAdditions = contextAdditions.concat(localContext.slice(context.length));\n        return strm.read().toString();\n      });\n      context = context.concat(contextAdditions);\n      entries.sort();\n      return this._array(entries, false);\n    },\n    _date: function(date){\n      return write('date:' + date.toJSON());\n    },\n    _symbol: function(sym){\n      return write('symbol:' + sym.toString());\n    },\n    _error: function(err){\n      return write('error:' + err.toString());\n    },\n    _boolean: function(bool){\n      return write('bool:' + bool.toString());\n    },\n    _string: function(string){\n      write('string:' + string.length + ':');\n      write(string.toString());\n    },\n    _function: function(fn){\n      write('fn:');\n      if (isNativeFunction(fn)) {\n        this.dispatch('[native]');\n      } else {\n        this.dispatch(fn.toString());\n      }\n\n      if (options.respectFunctionNames !== false) {\n        // Make sure we can still distinguish native functions\n        // by their name, otherwise String and Function will\n        // have the same hash\n        this.dispatch(\"function-name:\" + String(fn.name));\n      }\n\n      if (options.respectFunctionProperties) {\n        this._object(fn);\n      }\n    },\n    _number: function(number){\n      return write('number:' + number.toString());\n    },\n    _xml: function(xml){\n      return write('xml:' + xml.toString());\n    },\n    _null: function() {\n      return write('Null');\n    },\n    _undefined: function() {\n      return write('Undefined');\n    },\n    _regexp: function(regex){\n      return write('regex:' + regex.toString());\n    },\n    _uint8array: function(arr){\n      write('uint8array:');\n      return this.dispatch(Array.prototype.slice.call(arr));\n    },\n    _uint8clampedarray: function(arr){\n      write('uint8clampedarray:');\n      return this.dispatch(Array.prototype.slice.call(arr));\n    },\n    _int8array: function(arr){\n      write('uint8array:');\n      return this.dispatch(Array.prototype.slice.call(arr));\n    },\n    _uint16array: function(arr){\n      write('uint16array:');\n      return this.dispatch(Array.prototype.slice.call(arr));\n    },\n    _int16array: function(arr){\n      write('uint16array:');\n      return this.dispatch(Array.prototype.slice.call(arr));\n    },\n    _uint32array: function(arr){\n      write('uint32array:');\n      return this.dispatch(Array.prototype.slice.call(arr));\n    },\n    _int32array: function(arr){\n      write('uint32array:');\n      return this.dispatch(Array.prototype.slice.call(arr));\n    },\n    _float32array: function(arr){\n      write('float32array:');\n      return this.dispatch(Array.prototype.slice.call(arr));\n    },\n    _float64array: function(arr){\n      write('float64array:');\n      return this.dispatch(Array.prototype.slice.call(arr));\n    },\n    _arraybuffer: function(arr){\n      write('arraybuffer:');\n      return this.dispatch(new Uint8Array(arr));\n    },\n    _url: function(url) {\n      return write('url:' + url.toString(), 'utf8');\n    },\n    _map: function(map) {\n      write('map:');\n      var arr = Array.from(map);\n      return this._array(arr, options.unorderedSets !== false);\n    },\n    _set: function(set) {\n      write('set:');\n      var arr = Array.from(set);\n      return this._array(arr, options.unorderedSets !== false);\n    },\n    _file: function(file) {\n      write('file:');\n      return this.dispatch([file.name, file.size, file.type, file.lastModfied]);\n    },\n    _blob: function() {\n      if (options.ignoreUnknown) {\n        return write('[blob]');\n      }\n\n      throw Error('Hashing Blob objects is currently not supported\\n' +\n        '(see https://github.com/puleos/object-hash/issues/26)\\n' +\n        'Use \"options.replacer\" or \"options.ignoreUnknown\"\\n');\n    },\n    _domwindow: function() { return write('domwindow'); },\n    _bigint: function(number){\n      return write('bigint:' + number.toString());\n    },\n    /* Node.js standard native objects */\n    _process: function() { return write('process'); },\n    _timer: function() { return write('timer'); },\n    _pipe: function() { return write('pipe'); },\n    _tcp: function() { return write('tcp'); },\n    _udp: function() { return write('udp'); },\n    _tty: function() { return write('tty'); },\n    _statwatcher: function() { return write('statwatcher'); },\n    _securecontext: function() { return write('securecontext'); },\n    _connection: function() { return write('connection'); },\n    _zlib: function() { return write('zlib'); },\n    _context: function() { return write('context'); },\n    _nodescript: function() { return write('nodescript'); },\n    _httpparser: function() { return write('httpparser'); },\n    _dataview: function() { return write('dataview'); },\n    _signal: function() { return write('signal'); },\n    _fsevent: function() { return write('fsevent'); },\n    _tlswrap: function() { return write('tlswrap'); },\n  };\n}\n\n// Mini-implementation of stream.PassThrough\n// We are far from having need for the full implementation, and we can\n// make assumptions like \"many writes, then only one final read\"\n// and we can ignore encoding specifics\nfunction PassThrough() {\n  return {\n    buf: '',\n\n    write: function(b) {\n      this.buf += b;\n    },\n\n    end: function(b) {\n      this.buf += b;\n    },\n\n    read: function() {\n      return this.buf;\n    }\n  };\n}\n", "const objectHash = require('object-hash');\nconst LRU = require('lru-cache');\n\nconst { RPError } = require('../errors');\n\nconst { assertIssuerConfiguration } = require('./assert');\nconst KeyStore = require('./keystore');\nconst { keystores } = require('./weak_cache');\nconst processResponse = require('./process_response');\nconst request = require('./request');\n\nconst inFlight = new WeakMap();\nconst caches = new WeakMap();\nconst lrus = (ctx) => {\n  if (!caches.has(ctx)) {\n    caches.set(ctx, new LRU({ max: 100 }));\n  }\n  return caches.get(ctx);\n};\n\nasync function getKeyStore(reload = false) {\n  assertIssuerConfiguration(this, 'jwks_uri');\n\n  const keystore = keystores.get(this);\n  const cache = lrus(this);\n\n  if (reload || !keystore) {\n    if (inFlight.has(this)) {\n      return inFlight.get(this);\n    }\n    cache.reset();\n    inFlight.set(\n      this,\n      (async () => {\n        const response = await request\n          .call(this, {\n            method: 'GET',\n            responseType: 'json',\n            url: this.jwks_uri,\n            headers: {\n              Accept: 'application/json, application/jwk-set+json',\n            },\n          })\n          .finally(() => {\n            inFlight.delete(this);\n          });\n        const jwks = processResponse(response);\n\n        const joseKeyStore = KeyStore.fromJWKS(jwks, { onlyPublic: true });\n        cache.set('throttle', true, 60 * 1000);\n        keystores.set(this, joseKeyStore);\n\n        return joseKeyStore;\n      })(),\n    );\n\n    return inFlight.get(this);\n  }\n\n  return keystore;\n}\n\nasync function queryKeyStore({ kid, kty, alg, use }, { allowMulti = false } = {}) {\n  const cache = lrus(this);\n\n  const def = {\n    kid,\n    kty,\n    alg,\n    use,\n  };\n\n  const defHash = objectHash(def, {\n    algorithm: 'sha256',\n    ignoreUnknown: true,\n    unorderedArrays: true,\n    unorderedSets: true,\n    respectType: false,\n  });\n\n  // refresh keystore on every unknown key but also only upto once every minute\n  const freshJwksUri = cache.get(defHash) || cache.get('throttle');\n\n  const keystore = await getKeyStore.call(this, !freshJwksUri);\n  const keys = keystore.all(def);\n\n  delete def.use;\n  if (keys.length === 0) {\n    throw new RPError({\n      printf: [\"no valid key found in issuer's jwks_uri for key parameters %j\", def],\n      jwks: keystore,\n    });\n  }\n\n  if (!allowMulti && keys.length > 1 && !kid) {\n    throw new RPError({\n      printf: [\n        \"multiple matching keys found in issuer's jwks_uri for key parameters %j, kid must be provided in this case\",\n        def,\n      ],\n      jwks: keystore,\n    });\n  }\n\n  cache.set(defHash, true);\n\n  return keys;\n}\n\nmodule.exports.queryKeyStore = queryKeyStore;\nmodule.exports.keystore = getKeyStore;\n", "const { inspect } = require('util');\n\nconst { RPError, OPError } = require('./errors');\nconst now = require('./helpers/unix_timestamp');\n\nclass DeviceFlowHandle {\n  #aborted;\n  #client;\n  #clientAssertionPayload;\n  #DPoP;\n  #exchangeBody;\n  #expires_at;\n  #interval;\n  #maxAge;\n  #response;\n  constructor({ client, exchangeBody, clientAssertionPayload, response, maxAge, DPoP }) {\n    ['verification_uri', 'user_code', 'device_code'].forEach((prop) => {\n      if (typeof response[prop] !== 'string' || !response[prop]) {\n        throw new RPError(\n          `expected ${prop} string to be returned by Device Authorization Response, got %j`,\n          response[prop],\n        );\n      }\n    });\n\n    if (!Number.isSafeInteger(response.expires_in)) {\n      throw new RPError(\n        'expected expires_in number to be returned by Device Authorization Response, got %j',\n        response.expires_in,\n      );\n    }\n\n    this.#expires_at = now() + response.expires_in;\n    this.#client = client;\n    this.#DPoP = DPoP;\n    this.#maxAge = maxAge;\n    this.#exchangeBody = exchangeBody;\n    this.#clientAssertionPayload = clientAssertionPayload;\n    this.#response = response;\n    this.#interval = response.interval * 1000 || 5000;\n  }\n\n  abort() {\n    this.#aborted = true;\n  }\n\n  async poll({ signal } = {}) {\n    if ((signal && signal.aborted) || this.#aborted) {\n      throw new RPError('polling aborted');\n    }\n\n    if (this.expired()) {\n      throw new RPError(\n        'the device code %j has expired and the device authorization session has concluded',\n        this.device_code,\n      );\n    }\n\n    await new Promise((resolve) => setTimeout(resolve, this.#interval));\n\n    let tokenset;\n    try {\n      tokenset = await this.#client.grant(\n        {\n          ...this.#exchangeBody,\n          grant_type: 'urn:ietf:params:oauth:grant-type:device_code',\n          device_code: this.device_code,\n        },\n        { clientAssertionPayload: this.#clientAssertionPayload, DPoP: this.#DPoP },\n      );\n    } catch (err) {\n      switch (err instanceof OPError && err.error) {\n        case 'slow_down':\n          this.#interval += 5000;\n        case 'authorization_pending':\n          return this.poll({ signal });\n        default:\n          throw err;\n      }\n    }\n\n    if ('id_token' in tokenset) {\n      await this.#client.decryptIdToken(tokenset);\n      await this.#client.validateIdToken(tokenset, undefined, 'token', this.#maxAge);\n    }\n\n    return tokenset;\n  }\n\n  get device_code() {\n    return this.#response.device_code;\n  }\n\n  get user_code() {\n    return this.#response.user_code;\n  }\n\n  get verification_uri() {\n    return this.#response.verification_uri;\n  }\n\n  get verification_uri_complete() {\n    return this.#response.verification_uri_complete;\n  }\n\n  get expires_in() {\n    return Math.max.apply(null, [this.#expires_at - now(), 0]);\n  }\n\n  expired() {\n    return this.expires_in === 0;\n  }\n\n  /* istanbul ignore next */\n  [inspect.custom]() {\n    return `${this.constructor.name} ${inspect(this.#response, {\n      depth: Infinity,\n      colors: process.stdout.isTTY,\n      compact: false,\n      sorted: true,\n    })}`;\n  }\n}\n\nmodule.exports = DeviceFlowHandle;\n", "const { inspect } = require('util');\nconst stdhttp = require('http');\nconst crypto = require('crypto');\nconst { strict: assert } = require('assert');\nconst querystring = require('querystring');\nconst url = require('url');\nconst { URL, URLSearchParams } = require('url');\n\nconst jose = require('jose');\nconst tokenHash = require('oidc-token-hash');\n\nconst isKeyObject = require('./helpers/is_key_object');\nconst decodeJWT = require('./helpers/decode_jwt');\nconst base64url = require('./helpers/base64url');\nconst defaults = require('./helpers/defaults');\nconst parseWwwAuthenticate = require('./helpers/www_authenticate_parser');\nconst { assertSigningAlgValuesSupport, assertIssuerConfiguration } = require('./helpers/assert');\nconst pick = require('./helpers/pick');\nconst isPlainObject = require('./helpers/is_plain_object');\nconst processResponse = require('./helpers/process_response');\nconst TokenSet = require('./token_set');\nconst { OPError, RPError } = require('./errors');\nconst now = require('./helpers/unix_timestamp');\nconst { random } = require('./helpers/generators');\nconst request = require('./helpers/request');\nconst { CLOCK_TOLERANCE } = require('./helpers/consts');\nconst { keystores } = require('./helpers/weak_cache');\nconst KeyStore = require('./helpers/keystore');\nconst clone = require('./helpers/deep_clone');\nconst { authenticatedPost, resolveResponseType, resolveRedirectUri } = require('./helpers/client');\nconst { queryKeyStore } = require('./helpers/issuer');\nconst DeviceFlowHandle = require('./device_flow_handle');\n\nconst [major, minor] = process.version\n  .slice(1)\n  .split('.')\n  .map((str) => parseInt(str, 10));\n\nconst rsaPssParams = major >= 17 || (major === 16 && minor >= 9);\nconst retryAttempt = Symbol();\nconst skipNonceCheck = Symbol();\nconst skipMaxAgeCheck = Symbol();\n\nfunction pickCb(input) {\n  return pick(\n    input,\n    'access_token', // OAuth 2.0\n    'code', // OAuth 2.0\n    'error_description', // OAuth 2.0\n    'error_uri', // OAuth 2.0\n    'error', // OAuth 2.0\n    'expires_in', // OAuth 2.0\n    'id_token', // OIDC Core 1.0\n    'iss', // draft-ietf-oauth-iss-auth-resp\n    'response', // FAPI JARM\n    'session_state', // OIDC Session Management\n    'state', // OAuth 2.0\n    'token_type', // OAuth 2.0\n  );\n}\n\nfunction authorizationHeaderValue(token, tokenType = 'Bearer') {\n  return `${tokenType} ${token}`;\n}\n\nfunction getSearchParams(input) {\n  const parsed = url.parse(input);\n  if (!parsed.search) return {};\n  return querystring.parse(parsed.search.substring(1));\n}\n\nfunction verifyPresence(payload, jwt, prop) {\n  if (payload[prop] === undefined) {\n    throw new RPError({\n      message: `missing required JWT property ${prop}`,\n      jwt,\n    });\n  }\n}\n\nfunction authorizationParams(params) {\n  const authParams = {\n    client_id: this.client_id,\n    scope: 'openid',\n    response_type: resolveResponseType.call(this),\n    redirect_uri: resolveRedirectUri.call(this),\n    ...params,\n  };\n\n  Object.entries(authParams).forEach(([key, value]) => {\n    if (value === null || value === undefined) {\n      delete authParams[key];\n    } else if (key === 'claims' && typeof value === 'object') {\n      authParams[key] = JSON.stringify(value);\n    } else if (key === 'resource' && Array.isArray(value)) {\n      authParams[key] = value;\n    } else if (typeof value !== 'string') {\n      authParams[key] = String(value);\n    }\n  });\n\n  return authParams;\n}\n\nfunction getKeystore(jwks) {\n  if (\n    !isPlainObject(jwks) ||\n    !Array.isArray(jwks.keys) ||\n    jwks.keys.some((k) => !isPlainObject(k) || !('kty' in k))\n  ) {\n    throw new TypeError('jwks must be a JSON Web Key Set formatted object');\n  }\n\n  return KeyStore.fromJWKS(jwks, { onlyPrivate: true });\n}\n\n// if an OP doesnt support client_secret_basic but supports client_secret_post, use it instead\n// this is in place to take care of most common pitfalls when first using discovered Issuers without\n// the support for default values defined by Discovery 1.0\nfunction checkBasicSupport(client, properties) {\n  try {\n    const supported = client.issuer.token_endpoint_auth_methods_supported;\n    if (!supported.includes(properties.token_endpoint_auth_method)) {\n      if (supported.includes('client_secret_post')) {\n        properties.token_endpoint_auth_method = 'client_secret_post';\n      }\n    }\n  } catch (err) {}\n}\n\nfunction handleCommonMistakes(client, metadata, properties) {\n  if (!metadata.token_endpoint_auth_method) {\n    // if no explicit value was provided\n    checkBasicSupport(client, properties);\n  }\n\n  // :fp: c'mon people... RTFM\n  if (metadata.redirect_uri) {\n    if (metadata.redirect_uris) {\n      throw new TypeError('provide a redirect_uri or redirect_uris, not both');\n    }\n    properties.redirect_uris = [metadata.redirect_uri];\n    delete properties.redirect_uri;\n  }\n\n  if (metadata.response_type) {\n    if (metadata.response_types) {\n      throw new TypeError('provide a response_type or response_types, not both');\n    }\n    properties.response_types = [metadata.response_type];\n    delete properties.response_type;\n  }\n}\n\nfunction getDefaultsForEndpoint(endpoint, issuer, properties) {\n  if (!issuer[`${endpoint}_endpoint`]) return;\n\n  const tokenEndpointAuthMethod = properties.token_endpoint_auth_method;\n  const tokenEndpointAuthSigningAlg = properties.token_endpoint_auth_signing_alg;\n\n  const eam = `${endpoint}_endpoint_auth_method`;\n  const easa = `${endpoint}_endpoint_auth_signing_alg`;\n\n  if (properties[eam] === undefined && properties[easa] === undefined) {\n    if (tokenEndpointAuthMethod !== undefined) {\n      properties[eam] = tokenEndpointAuthMethod;\n    }\n    if (tokenEndpointAuthSigningAlg !== undefined) {\n      properties[easa] = tokenEndpointAuthSigningAlg;\n    }\n  }\n}\n\nclass BaseClient {\n  #metadata;\n  #issuer;\n  #aadIssValidation;\n  #additionalAuthorizedParties;\n  constructor(issuer, aadIssValidation, metadata = {}, jwks, options) {\n    this.#metadata = new Map();\n    this.#issuer = issuer;\n    this.#aadIssValidation = aadIssValidation;\n\n    if (typeof metadata.client_id !== 'string' || !metadata.client_id) {\n      throw new TypeError('client_id is required');\n    }\n\n    const properties = {\n      grant_types: ['authorization_code'],\n      id_token_signed_response_alg: 'RS256',\n      authorization_signed_response_alg: 'RS256',\n      response_types: ['code'],\n      token_endpoint_auth_method: 'client_secret_basic',\n      ...(this.fapi1()\n        ? {\n            grant_types: ['authorization_code', 'implicit'],\n            id_token_signed_response_alg: 'PS256',\n            authorization_signed_response_alg: 'PS256',\n            response_types: ['code id_token'],\n            tls_client_certificate_bound_access_tokens: true,\n            token_endpoint_auth_method: undefined,\n          }\n        : undefined),\n      ...(this.fapi2()\n        ? {\n            id_token_signed_response_alg: 'PS256',\n            authorization_signed_response_alg: 'PS256',\n            token_endpoint_auth_method: undefined,\n          }\n        : undefined),\n      ...metadata,\n    };\n\n    if (this.fapi()) {\n      switch (properties.token_endpoint_auth_method) {\n        case 'self_signed_tls_client_auth':\n        case 'tls_client_auth':\n          break;\n        case 'private_key_jwt':\n          if (!jwks) {\n            throw new TypeError('jwks is required');\n          }\n          break;\n        case undefined:\n          throw new TypeError('token_endpoint_auth_method is required');\n        default:\n          throw new TypeError('invalid or unsupported token_endpoint_auth_method');\n      }\n    }\n\n    if (this.fapi2()) {\n      if (\n        properties.tls_client_certificate_bound_access_tokens &&\n        properties.dpop_bound_access_tokens\n      ) {\n        throw new TypeError(\n          'either tls_client_certificate_bound_access_tokens or dpop_bound_access_tokens must be set to true',\n        );\n      }\n\n      if (\n        !properties.tls_client_certificate_bound_access_tokens &&\n        !properties.dpop_bound_access_tokens\n      ) {\n        throw new TypeError(\n          'either tls_client_certificate_bound_access_tokens or dpop_bound_access_tokens must be set to true',\n        );\n      }\n    }\n\n    handleCommonMistakes(this, metadata, properties);\n\n    assertSigningAlgValuesSupport('token', this.issuer, properties);\n    ['introspection', 'revocation'].forEach((endpoint) => {\n      getDefaultsForEndpoint(endpoint, this.issuer, properties);\n      assertSigningAlgValuesSupport(endpoint, this.issuer, properties);\n    });\n\n    Object.entries(properties).forEach(([key, value]) => {\n      this.#metadata.set(key, value);\n      if (!this[key]) {\n        Object.defineProperty(this, key, {\n          get() {\n            return this.#metadata.get(key);\n          },\n          enumerable: true,\n        });\n      }\n    });\n\n    if (jwks !== undefined) {\n      const keystore = getKeystore.call(this, jwks);\n      keystores.set(this, keystore);\n    }\n\n    if (options != null && options.additionalAuthorizedParties) {\n      this.#additionalAuthorizedParties = clone(options.additionalAuthorizedParties);\n    }\n\n    this[CLOCK_TOLERANCE] = 0;\n  }\n\n  authorizationUrl(params = {}) {\n    if (!isPlainObject(params)) {\n      throw new TypeError('params must be a plain object');\n    }\n    assertIssuerConfiguration(this.issuer, 'authorization_endpoint');\n    const target = new URL(this.issuer.authorization_endpoint);\n\n    for (const [name, value] of Object.entries(authorizationParams.call(this, params))) {\n      if (Array.isArray(value)) {\n        target.searchParams.delete(name);\n        for (const member of value) {\n          target.searchParams.append(name, member);\n        }\n      } else {\n        target.searchParams.set(name, value);\n      }\n    }\n\n    // TODO: is the replace needed?\n    return target.href.replace(/\\+/g, '%20');\n  }\n\n  authorizationPost(params = {}) {\n    if (!isPlainObject(params)) {\n      throw new TypeError('params must be a plain object');\n    }\n    const inputs = authorizationParams.call(this, params);\n    const formInputs = Object.keys(inputs)\n      .map((name) => `<input type=\"hidden\" name=\"${name}\" value=\"${inputs[name]}\"/>`)\n      .join('\\n');\n\n    return `<!DOCTYPE html>\n<head>\n<title>Requesting Authorization</title>\n</head>\n<body onload=\"javascript:document.forms[0].submit()\">\n<form method=\"post\" action=\"${this.issuer.authorization_endpoint}\">\n  ${formInputs}\n</form>\n</body>\n</html>`;\n  }\n\n  endSessionUrl(params = {}) {\n    assertIssuerConfiguration(this.issuer, 'end_session_endpoint');\n\n    const { 0: postLogout, length } = this.post_logout_redirect_uris || [];\n\n    const { post_logout_redirect_uri = length === 1 ? postLogout : undefined } = params;\n\n    let id_token_hint;\n    ({ id_token_hint, ...params } = params);\n    if (id_token_hint instanceof TokenSet) {\n      if (!id_token_hint.id_token) {\n        throw new TypeError('id_token not present in TokenSet');\n      }\n      id_token_hint = id_token_hint.id_token;\n    }\n\n    const target = url.parse(this.issuer.end_session_endpoint);\n    const query = defaults(\n      getSearchParams(this.issuer.end_session_endpoint),\n      params,\n      {\n        post_logout_redirect_uri,\n        client_id: this.client_id,\n      },\n      { id_token_hint },\n    );\n\n    Object.entries(query).forEach(([key, value]) => {\n      if (value === null || value === undefined) {\n        delete query[key];\n      }\n    });\n\n    target.search = null;\n    target.query = query;\n\n    return url.format(target);\n  }\n\n  callbackParams(input) {\n    const isIncomingMessage =\n      input instanceof stdhttp.IncomingMessage || (input && input.method && input.url);\n    const isString = typeof input === 'string';\n\n    if (!isString && !isIncomingMessage) {\n      throw new TypeError(\n        '#callbackParams only accepts string urls, http.IncomingMessage or a lookalike',\n      );\n    }\n    if (isIncomingMessage) {\n      switch (input.method) {\n        case 'GET':\n          return pickCb(getSearchParams(input.url));\n        case 'POST':\n          if (input.body === undefined) {\n            throw new TypeError(\n              'incoming message body missing, include a body parser prior to this method call',\n            );\n          }\n          switch (typeof input.body) {\n            case 'object':\n            case 'string':\n              if (Buffer.isBuffer(input.body)) {\n                return pickCb(querystring.parse(input.body.toString('utf-8')));\n              }\n              if (typeof input.body === 'string') {\n                return pickCb(querystring.parse(input.body));\n              }\n\n              return pickCb(input.body);\n            default:\n              throw new TypeError('invalid IncomingMessage body object');\n          }\n        default:\n          throw new TypeError('invalid IncomingMessage method');\n      }\n    } else {\n      return pickCb(getSearchParams(input));\n    }\n  }\n\n  async callback(\n    redirectUri,\n    parameters,\n    checks = {},\n    { exchangeBody, clientAssertionPayload, DPoP } = {},\n  ) {\n    let params = pickCb(parameters);\n\n    if (checks.jarm && !('response' in parameters)) {\n      throw new RPError({\n        message: 'expected a JARM response',\n        checks,\n        params,\n      });\n    } else if ('response' in parameters) {\n      const decrypted = await this.decryptJARM(params.response);\n      params = await this.validateJARM(decrypted);\n    }\n\n    if (this.default_max_age && !checks.max_age) {\n      checks.max_age = this.default_max_age;\n    }\n\n    if (params.state && !checks.state) {\n      throw new TypeError('checks.state argument is missing');\n    }\n\n    if (!params.state && checks.state) {\n      throw new RPError({\n        message: 'state missing from the response',\n        checks,\n        params,\n      });\n    }\n\n    if (checks.state !== params.state) {\n      throw new RPError({\n        printf: ['state mismatch, expected %s, got: %s', checks.state, params.state],\n        checks,\n        params,\n      });\n    }\n\n    if ('iss' in params) {\n      assertIssuerConfiguration(this.issuer, 'issuer');\n      if (params.iss !== this.issuer.issuer) {\n        throw new RPError({\n          printf: ['iss mismatch, expected %s, got: %s', this.issuer.issuer, params.iss],\n          params,\n        });\n      }\n    } else if (\n      this.issuer.authorization_response_iss_parameter_supported &&\n      !('id_token' in params) &&\n      !('response' in parameters)\n    ) {\n      throw new RPError({\n        message: 'iss missing from the response',\n        params,\n      });\n    }\n\n    if (params.error) {\n      throw new OPError(params);\n    }\n\n    const RESPONSE_TYPE_REQUIRED_PARAMS = {\n      code: ['code'],\n      id_token: ['id_token'],\n      token: ['access_token', 'token_type'],\n    };\n\n    if (checks.response_type) {\n      for (const type of checks.response_type.split(' ')) {\n        if (type === 'none') {\n          if (params.code || params.id_token || params.access_token) {\n            throw new RPError({\n              message: 'unexpected params encountered for \"none\" response',\n              checks,\n              params,\n            });\n          }\n        } else {\n          for (const param of RESPONSE_TYPE_REQUIRED_PARAMS[type]) {\n            if (!params[param]) {\n              throw new RPError({\n                message: `${param} missing from response`,\n                checks,\n                params,\n              });\n            }\n          }\n        }\n      }\n    }\n\n    if (params.id_token) {\n      const tokenset = new TokenSet(params);\n      await this.decryptIdToken(tokenset);\n      await this.validateIdToken(\n        tokenset,\n        checks.nonce,\n        'authorization',\n        checks.max_age,\n        checks.state,\n      );\n\n      if (!params.code) {\n        return tokenset;\n      }\n    }\n\n    if (params.code) {\n      const tokenset = await this.grant(\n        {\n          ...exchangeBody,\n          grant_type: 'authorization_code',\n          code: params.code,\n          redirect_uri: redirectUri,\n          code_verifier: checks.code_verifier,\n        },\n        { clientAssertionPayload, DPoP },\n      );\n\n      await this.decryptIdToken(tokenset);\n      await this.validateIdToken(tokenset, checks.nonce, 'token', checks.max_age);\n\n      if (params.session_state) {\n        tokenset.session_state = params.session_state;\n      }\n\n      return tokenset;\n    }\n\n    return new TokenSet(params);\n  }\n\n  async oauthCallback(\n    redirectUri,\n    parameters,\n    checks = {},\n    { exchangeBody, clientAssertionPayload, DPoP } = {},\n  ) {\n    let params = pickCb(parameters);\n\n    if (checks.jarm && !('response' in parameters)) {\n      throw new RPError({\n        message: 'expected a JARM response',\n        checks,\n        params,\n      });\n    } else if ('response' in parameters) {\n      const decrypted = await this.decryptJARM(params.response);\n      params = await this.validateJARM(decrypted);\n    }\n\n    if (params.state && !checks.state) {\n      throw new TypeError('checks.state argument is missing');\n    }\n\n    if (!params.state && checks.state) {\n      throw new RPError({\n        message: 'state missing from the response',\n        checks,\n        params,\n      });\n    }\n\n    if (checks.state !== params.state) {\n      throw new RPError({\n        printf: ['state mismatch, expected %s, got: %s', checks.state, params.state],\n        checks,\n        params,\n      });\n    }\n\n    if ('iss' in params) {\n      assertIssuerConfiguration(this.issuer, 'issuer');\n      if (params.iss !== this.issuer.issuer) {\n        throw new RPError({\n          printf: ['iss mismatch, expected %s, got: %s', this.issuer.issuer, params.iss],\n          params,\n        });\n      }\n    } else if (\n      this.issuer.authorization_response_iss_parameter_supported &&\n      !('id_token' in params) &&\n      !('response' in parameters)\n    ) {\n      throw new RPError({\n        message: 'iss missing from the response',\n        params,\n      });\n    }\n\n    if (params.error) {\n      throw new OPError(params);\n    }\n\n    if (typeof params.id_token === 'string' && params.id_token.length) {\n      throw new RPError({\n        message:\n          'id_token detected in the response, you must use client.callback() instead of client.oauthCallback()',\n        params,\n      });\n    }\n    delete params.id_token;\n\n    const RESPONSE_TYPE_REQUIRED_PARAMS = {\n      code: ['code'],\n      token: ['access_token', 'token_type'],\n    };\n\n    if (checks.response_type) {\n      for (const type of checks.response_type.split(' ')) {\n        if (type === 'none') {\n          if (params.code || params.id_token || params.access_token) {\n            throw new RPError({\n              message: 'unexpected params encountered for \"none\" response',\n              checks,\n              params,\n            });\n          }\n        }\n\n        if (RESPONSE_TYPE_REQUIRED_PARAMS[type]) {\n          for (const param of RESPONSE_TYPE_REQUIRED_PARAMS[type]) {\n            if (!params[param]) {\n              throw new RPError({\n                message: `${param} missing from response`,\n                checks,\n                params,\n              });\n            }\n          }\n        }\n      }\n    }\n\n    if (params.code) {\n      const tokenset = await this.grant(\n        {\n          ...exchangeBody,\n          grant_type: 'authorization_code',\n          code: params.code,\n          redirect_uri: redirectUri,\n          code_verifier: checks.code_verifier,\n        },\n        { clientAssertionPayload, DPoP },\n      );\n\n      if (typeof tokenset.id_token === 'string' && tokenset.id_token.length) {\n        throw new RPError({\n          message:\n            'id_token detected in the response, you must use client.callback() instead of client.oauthCallback()',\n          params,\n        });\n      }\n      delete tokenset.id_token;\n\n      return tokenset;\n    }\n\n    return new TokenSet(params);\n  }\n\n  async decryptIdToken(token) {\n    if (!this.id_token_encrypted_response_alg) {\n      return token;\n    }\n\n    let idToken = token;\n\n    if (idToken instanceof TokenSet) {\n      if (!idToken.id_token) {\n        throw new TypeError('id_token not present in TokenSet');\n      }\n      idToken = idToken.id_token;\n    }\n\n    const expectedAlg = this.id_token_encrypted_response_alg;\n    const expectedEnc = this.id_token_encrypted_response_enc;\n\n    const result = await this.decryptJWE(idToken, expectedAlg, expectedEnc);\n\n    if (token instanceof TokenSet) {\n      token.id_token = result;\n      return token;\n    }\n\n    return result;\n  }\n\n  async validateJWTUserinfo(body) {\n    const expectedAlg = this.userinfo_signed_response_alg;\n\n    return this.validateJWT(body, expectedAlg, []);\n  }\n\n  async decryptJARM(response) {\n    if (!this.authorization_encrypted_response_alg) {\n      return response;\n    }\n\n    const expectedAlg = this.authorization_encrypted_response_alg;\n    const expectedEnc = this.authorization_encrypted_response_enc;\n\n    return this.decryptJWE(response, expectedAlg, expectedEnc);\n  }\n\n  async decryptJWTUserinfo(body) {\n    if (!this.userinfo_encrypted_response_alg) {\n      return body;\n    }\n\n    const expectedAlg = this.userinfo_encrypted_response_alg;\n    const expectedEnc = this.userinfo_encrypted_response_enc;\n\n    return this.decryptJWE(body, expectedAlg, expectedEnc);\n  }\n\n  async decryptJWE(jwe, expectedAlg, expectedEnc = 'A128CBC-HS256') {\n    const header = JSON.parse(base64url.decode(jwe.split('.')[0]));\n\n    if (header.alg !== expectedAlg) {\n      throw new RPError({\n        printf: ['unexpected JWE alg received, expected %s, got: %s', expectedAlg, header.alg],\n        jwt: jwe,\n      });\n    }\n\n    if (header.enc !== expectedEnc) {\n      throw new RPError({\n        printf: ['unexpected JWE enc received, expected %s, got: %s', expectedEnc, header.enc],\n        jwt: jwe,\n      });\n    }\n\n    const getPlaintext = (result) => new TextDecoder().decode(result.plaintext);\n    let plaintext;\n    if (expectedAlg.match(/^(?:RSA|ECDH)/)) {\n      const keystore = await keystores.get(this);\n\n      const protectedHeader = jose.decodeProtectedHeader(jwe);\n\n      for (const key of keystore.all({\n        ...protectedHeader,\n        use: 'enc',\n      })) {\n        plaintext = await jose\n          .compactDecrypt(jwe, await key.keyObject(protectedHeader.alg))\n          .then(getPlaintext, () => {});\n        if (plaintext) break;\n      }\n    } else {\n      plaintext = await jose\n        .compactDecrypt(jwe, this.secretForAlg(expectedAlg === 'dir' ? expectedEnc : expectedAlg))\n        .then(getPlaintext, () => {});\n    }\n\n    if (!plaintext) {\n      throw new RPError({\n        message: 'failed to decrypt JWE',\n        jwt: jwe,\n      });\n    }\n    return plaintext;\n  }\n\n  async validateIdToken(tokenSet, nonce, returnedBy, maxAge, state) {\n    let idToken = tokenSet;\n\n    const expectedAlg = this.id_token_signed_response_alg;\n\n    const isTokenSet = idToken instanceof TokenSet;\n\n    if (isTokenSet) {\n      if (!idToken.id_token) {\n        throw new TypeError('id_token not present in TokenSet');\n      }\n      idToken = idToken.id_token;\n    }\n\n    idToken = String(idToken);\n\n    const timestamp = now();\n    const { protected: header, payload, key } = await this.validateJWT(idToken, expectedAlg);\n\n    if (typeof maxAge === 'number' || (maxAge !== skipMaxAgeCheck && this.require_auth_time)) {\n      if (!payload.auth_time) {\n        throw new RPError({\n          message: 'missing required JWT property auth_time',\n          jwt: idToken,\n        });\n      }\n      if (typeof payload.auth_time !== 'number') {\n        throw new RPError({\n          message: 'JWT auth_time claim must be a JSON numeric value',\n          jwt: idToken,\n        });\n      }\n    }\n\n    if (\n      typeof maxAge === 'number' &&\n      payload.auth_time + maxAge < timestamp - this[CLOCK_TOLERANCE]\n    ) {\n      throw new RPError({\n        printf: [\n          'too much time has elapsed since the last End-User authentication, max_age %i, auth_time: %i, now %i',\n          maxAge,\n          payload.auth_time,\n          timestamp - this[CLOCK_TOLERANCE],\n        ],\n        now: timestamp,\n        tolerance: this[CLOCK_TOLERANCE],\n        auth_time: payload.auth_time,\n        jwt: idToken,\n      });\n    }\n\n    if (\n      nonce !== skipNonceCheck &&\n      (payload.nonce || nonce !== undefined) &&\n      payload.nonce !== nonce\n    ) {\n      throw new RPError({\n        printf: ['nonce mismatch, expected %s, got: %s', nonce, payload.nonce],\n        jwt: idToken,\n      });\n    }\n\n    if (returnedBy === 'authorization') {\n      if (!payload.at_hash && tokenSet.access_token) {\n        throw new RPError({\n          message: 'missing required property at_hash',\n          jwt: idToken,\n        });\n      }\n\n      if (!payload.c_hash && tokenSet.code) {\n        throw new RPError({\n          message: 'missing required property c_hash',\n          jwt: idToken,\n        });\n      }\n\n      if (this.fapi1()) {\n        if (!payload.s_hash && (tokenSet.state || state)) {\n          throw new RPError({\n            message: 'missing required property s_hash',\n            jwt: idToken,\n          });\n        }\n      }\n\n      if (payload.s_hash) {\n        if (!state) {\n          throw new TypeError('cannot verify s_hash, \"checks.state\" property not provided');\n        }\n\n        try {\n          tokenHash.validate(\n            { claim: 's_hash', source: 'state' },\n            payload.s_hash,\n            state,\n            header.alg,\n            key.jwk && key.jwk.crv,\n          );\n        } catch (err) {\n          throw new RPError({ message: err.message, jwt: idToken });\n        }\n      }\n    }\n\n    if (this.fapi() && payload.iat < timestamp - 3600) {\n      throw new RPError({\n        printf: ['JWT issued too far in the past, now %i, iat %i', timestamp, payload.iat],\n        now: timestamp,\n        tolerance: this[CLOCK_TOLERANCE],\n        iat: payload.iat,\n        jwt: idToken,\n      });\n    }\n\n    if (tokenSet.access_token && payload.at_hash !== undefined) {\n      try {\n        tokenHash.validate(\n          { claim: 'at_hash', source: 'access_token' },\n          payload.at_hash,\n          tokenSet.access_token,\n          header.alg,\n          key.jwk && key.jwk.crv,\n        );\n      } catch (err) {\n        throw new RPError({ message: err.message, jwt: idToken });\n      }\n    }\n\n    if (tokenSet.code && payload.c_hash !== undefined) {\n      try {\n        tokenHash.validate(\n          { claim: 'c_hash', source: 'code' },\n          payload.c_hash,\n          tokenSet.code,\n          header.alg,\n          key.jwk && key.jwk.crv,\n        );\n      } catch (err) {\n        throw new RPError({ message: err.message, jwt: idToken });\n      }\n    }\n\n    return tokenSet;\n  }\n\n  async validateJWT(jwt, expectedAlg, required = ['iss', 'sub', 'aud', 'exp', 'iat']) {\n    const isSelfIssued = this.issuer.issuer === 'https://self-issued.me';\n    const timestamp = now();\n    let header;\n    let payload;\n    try {\n      ({ header, payload } = decodeJWT(jwt, { complete: true }));\n    } catch (err) {\n      throw new RPError({\n        printf: ['failed to decode JWT (%s: %s)', err.name, err.message],\n        jwt,\n      });\n    }\n\n    if (header.alg !== expectedAlg) {\n      throw new RPError({\n        printf: ['unexpected JWT alg received, expected %s, got: %s', expectedAlg, header.alg],\n        jwt,\n      });\n    }\n\n    if (isSelfIssued) {\n      required = [...required, 'sub_jwk'];\n    }\n\n    required.forEach(verifyPresence.bind(undefined, payload, jwt));\n\n    if (payload.iss !== undefined) {\n      let expectedIss = this.issuer.issuer;\n\n      if (this.#aadIssValidation) {\n        expectedIss = this.issuer.issuer.replace('{tenantid}', payload.tid);\n      }\n\n      if (payload.iss !== expectedIss) {\n        throw new RPError({\n          printf: ['unexpected iss value, expected %s, got: %s', expectedIss, payload.iss],\n          jwt,\n        });\n      }\n    }\n\n    if (payload.iat !== undefined) {\n      if (typeof payload.iat !== 'number') {\n        throw new RPError({\n          message: 'JWT iat claim must be a JSON numeric value',\n          jwt,\n        });\n      }\n    }\n\n    if (payload.nbf !== undefined) {\n      if (typeof payload.nbf !== 'number') {\n        throw new RPError({\n          message: 'JWT nbf claim must be a JSON numeric value',\n          jwt,\n        });\n      }\n      if (payload.nbf > timestamp + this[CLOCK_TOLERANCE]) {\n        throw new RPError({\n          printf: [\n            'JWT not active yet, now %i, nbf %i',\n            timestamp + this[CLOCK_TOLERANCE],\n            payload.nbf,\n          ],\n          now: timestamp,\n          tolerance: this[CLOCK_TOLERANCE],\n          nbf: payload.nbf,\n          jwt,\n        });\n      }\n    }\n\n    if (payload.exp !== undefined) {\n      if (typeof payload.exp !== 'number') {\n        throw new RPError({\n          message: 'JWT exp claim must be a JSON numeric value',\n          jwt,\n        });\n      }\n      if (timestamp - this[CLOCK_TOLERANCE] >= payload.exp) {\n        throw new RPError({\n          printf: ['JWT expired, now %i, exp %i', timestamp - this[CLOCK_TOLERANCE], payload.exp],\n          now: timestamp,\n          tolerance: this[CLOCK_TOLERANCE],\n          exp: payload.exp,\n          jwt,\n        });\n      }\n    }\n\n    if (payload.aud !== undefined) {\n      if (Array.isArray(payload.aud)) {\n        if (payload.aud.length > 1 && !payload.azp) {\n          throw new RPError({\n            message: 'missing required JWT property azp',\n            jwt,\n          });\n        }\n\n        if (!payload.aud.includes(this.client_id)) {\n          throw new RPError({\n            printf: [\n              'aud is missing the client_id, expected %s to be included in %j',\n              this.client_id,\n              payload.aud,\n            ],\n            jwt,\n          });\n        }\n      } else if (payload.aud !== this.client_id) {\n        throw new RPError({\n          printf: ['aud mismatch, expected %s, got: %s', this.client_id, payload.aud],\n          jwt,\n        });\n      }\n    }\n\n    if (payload.azp !== undefined) {\n      let additionalAuthorizedParties = this.#additionalAuthorizedParties;\n\n      if (typeof additionalAuthorizedParties === 'string') {\n        additionalAuthorizedParties = [this.client_id, additionalAuthorizedParties];\n      } else if (Array.isArray(additionalAuthorizedParties)) {\n        additionalAuthorizedParties = [this.client_id, ...additionalAuthorizedParties];\n      } else {\n        additionalAuthorizedParties = [this.client_id];\n      }\n\n      if (!additionalAuthorizedParties.includes(payload.azp)) {\n        throw new RPError({\n          printf: ['azp mismatch, got: %s', payload.azp],\n          jwt,\n        });\n      }\n    }\n\n    let keys;\n\n    if (isSelfIssued) {\n      try {\n        assert(isPlainObject(payload.sub_jwk));\n        const key = await jose.importJWK(payload.sub_jwk, header.alg);\n        assert.equal(key.type, 'public');\n        keys = [\n          {\n            keyObject() {\n              return key;\n            },\n          },\n        ];\n      } catch (err) {\n        throw new RPError({\n          message: 'failed to use sub_jwk claim as an asymmetric JSON Web Key',\n          jwt,\n        });\n      }\n      if ((await jose.calculateJwkThumbprint(payload.sub_jwk)) !== payload.sub) {\n        throw new RPError({\n          message: 'failed to match the subject with sub_jwk',\n          jwt,\n        });\n      }\n    } else if (header.alg.startsWith('HS')) {\n      keys = [this.secretForAlg(header.alg)];\n    } else if (header.alg !== 'none') {\n      keys = await queryKeyStore.call(this.issuer, { ...header, use: 'sig' });\n    }\n\n    if (!keys && header.alg === 'none') {\n      return { protected: header, payload };\n    }\n\n    for (const key of keys) {\n      const verified = await jose\n        .compactVerify(jwt, key instanceof Uint8Array ? key : await key.keyObject(header.alg))\n        .catch(() => {});\n      if (verified) {\n        return {\n          payload,\n          protected: verified.protectedHeader,\n          key,\n        };\n      }\n    }\n\n    throw new RPError({\n      message: 'failed to validate JWT signature',\n      jwt,\n    });\n  }\n\n  async refresh(refreshToken, { exchangeBody, clientAssertionPayload, DPoP } = {}) {\n    let token = refreshToken;\n\n    if (token instanceof TokenSet) {\n      if (!token.refresh_token) {\n        throw new TypeError('refresh_token not present in TokenSet');\n      }\n      token = token.refresh_token;\n    }\n\n    const tokenset = await this.grant(\n      {\n        ...exchangeBody,\n        grant_type: 'refresh_token',\n        refresh_token: String(token),\n      },\n      { clientAssertionPayload, DPoP },\n    );\n\n    if (tokenset.id_token) {\n      await this.decryptIdToken(tokenset);\n      await this.validateIdToken(tokenset, skipNonceCheck, 'token', skipMaxAgeCheck);\n\n      if (refreshToken instanceof TokenSet && refreshToken.id_token) {\n        const expectedSub = refreshToken.claims().sub;\n        const actualSub = tokenset.claims().sub;\n        if (actualSub !== expectedSub) {\n          throw new RPError({\n            printf: ['sub mismatch, expected %s, got: %s', expectedSub, actualSub],\n            jwt: tokenset.id_token,\n          });\n        }\n      }\n    }\n\n    return tokenset;\n  }\n\n  async requestResource(\n    resourceUrl,\n    accessToken,\n    {\n      method,\n      headers,\n      body,\n      DPoP,\n      tokenType = DPoP\n        ? 'DPoP'\n        : accessToken instanceof TokenSet\n        ? accessToken.token_type\n        : 'Bearer',\n    } = {},\n    retry,\n  ) {\n    if (accessToken instanceof TokenSet) {\n      if (!accessToken.access_token) {\n        throw new TypeError('access_token not present in TokenSet');\n      }\n      accessToken = accessToken.access_token;\n    }\n\n    if (!accessToken) {\n      throw new TypeError('no access token provided');\n    } else if (typeof accessToken !== 'string') {\n      throw new TypeError('invalid access token provided');\n    }\n\n    const requestOpts = {\n      headers: {\n        Authorization: authorizationHeaderValue(accessToken, tokenType),\n        ...headers,\n      },\n      body,\n    };\n\n    const mTLS = !!this.tls_client_certificate_bound_access_tokens;\n\n    const response = await request.call(\n      this,\n      {\n        ...requestOpts,\n        responseType: 'buffer',\n        method,\n        url: resourceUrl,\n      },\n      { accessToken, mTLS, DPoP },\n    );\n\n    const wwwAuthenticate = response.headers['www-authenticate'];\n    if (\n      retry !== retryAttempt &&\n      wwwAuthenticate &&\n      wwwAuthenticate.toLowerCase().startsWith('dpop ') &&\n      parseWwwAuthenticate(wwwAuthenticate).error === 'use_dpop_nonce'\n    ) {\n      return this.requestResource(resourceUrl, accessToken, {\n        method,\n        headers,\n        body,\n        DPoP,\n        tokenType,\n      });\n    }\n\n    return response;\n  }\n\n  async userinfo(accessToken, { method = 'GET', via = 'header', tokenType, params, DPoP } = {}) {\n    assertIssuerConfiguration(this.issuer, 'userinfo_endpoint');\n    const options = {\n      tokenType,\n      method: String(method).toUpperCase(),\n      DPoP,\n    };\n\n    if (options.method !== 'GET' && options.method !== 'POST') {\n      throw new TypeError('#userinfo() method can only be POST or a GET');\n    }\n\n    if (via === 'body' && options.method !== 'POST') {\n      throw new TypeError('can only send body on POST');\n    }\n\n    const jwt = !!(this.userinfo_signed_response_alg || this.userinfo_encrypted_response_alg);\n\n    if (jwt) {\n      options.headers = { Accept: 'application/jwt' };\n    } else {\n      options.headers = { Accept: 'application/json' };\n    }\n    const mTLS = !!this.tls_client_certificate_bound_access_tokens;\n\n    let targetUrl;\n    if (mTLS && this.issuer.mtls_endpoint_aliases) {\n      targetUrl = this.issuer.mtls_endpoint_aliases.userinfo_endpoint;\n    }\n\n    targetUrl = new URL(targetUrl || this.issuer.userinfo_endpoint);\n\n    if (via === 'body') {\n      options.headers.Authorization = undefined;\n      options.headers['Content-Type'] = 'application/x-www-form-urlencoded';\n      options.body = new URLSearchParams();\n      options.body.append(\n        'access_token',\n        accessToken instanceof TokenSet ? accessToken.access_token : accessToken,\n      );\n    }\n\n    // handle additional parameters, GET via querystring, POST via urlencoded body\n    if (params) {\n      if (options.method === 'GET') {\n        Object.entries(params).forEach(([key, value]) => {\n          targetUrl.searchParams.append(key, value);\n        });\n      } else if (options.body) {\n        // POST && via body\n        Object.entries(params).forEach(([key, value]) => {\n          options.body.append(key, value);\n        });\n      } else {\n        // POST && via header\n        options.body = new URLSearchParams();\n        options.headers['Content-Type'] = 'application/x-www-form-urlencoded';\n        Object.entries(params).forEach(([key, value]) => {\n          options.body.append(key, value);\n        });\n      }\n    }\n\n    if (options.body) {\n      options.body = options.body.toString();\n    }\n\n    const response = await this.requestResource(targetUrl, accessToken, options);\n\n    let parsed = processResponse(response, { bearer: true });\n\n    if (jwt) {\n      if (!/^application\\/jwt/.test(response.headers['content-type'])) {\n        throw new RPError({\n          message: 'expected application/jwt response from the userinfo_endpoint',\n          response,\n        });\n      }\n\n      const body = response.body.toString();\n      const userinfo = await this.decryptJWTUserinfo(body);\n      if (!this.userinfo_signed_response_alg) {\n        try {\n          parsed = JSON.parse(userinfo);\n          assert(isPlainObject(parsed));\n        } catch (err) {\n          throw new RPError({\n            message: 'failed to parse userinfo JWE payload as JSON',\n            jwt: userinfo,\n          });\n        }\n      } else {\n        ({ payload: parsed } = await this.validateJWTUserinfo(userinfo));\n      }\n    } else {\n      try {\n        parsed = JSON.parse(response.body);\n      } catch (err) {\n        Object.defineProperty(err, 'response', { value: response });\n        throw err;\n      }\n    }\n\n    if (accessToken instanceof TokenSet && accessToken.id_token) {\n      const expectedSub = accessToken.claims().sub;\n      if (parsed.sub !== expectedSub) {\n        throw new RPError({\n          printf: ['userinfo sub mismatch, expected %s, got: %s', expectedSub, parsed.sub],\n          body: parsed,\n          jwt: accessToken.id_token,\n        });\n      }\n    }\n\n    return parsed;\n  }\n\n  encryptionSecret(len) {\n    const hash = len <= 256 ? 'sha256' : len <= 384 ? 'sha384' : len <= 512 ? 'sha512' : false;\n    if (!hash) {\n      throw new Error('unsupported symmetric encryption key derivation');\n    }\n\n    return crypto\n      .createHash(hash)\n      .update(this.client_secret)\n      .digest()\n      .slice(0, len / 8);\n  }\n\n  secretForAlg(alg) {\n    if (!this.client_secret) {\n      throw new TypeError('client_secret is required');\n    }\n\n    if (/^A(\\d{3})(?:GCM)?KW$/.test(alg)) {\n      return this.encryptionSecret(parseInt(RegExp.$1, 10));\n    }\n\n    if (/^A(\\d{3})(?:GCM|CBC-HS(\\d{3}))$/.test(alg)) {\n      return this.encryptionSecret(parseInt(RegExp.$2 || RegExp.$1, 10));\n    }\n\n    return new TextEncoder().encode(this.client_secret);\n  }\n\n  async grant(body, { clientAssertionPayload, DPoP } = {}, retry) {\n    assertIssuerConfiguration(this.issuer, 'token_endpoint');\n    const response = await authenticatedPost.call(\n      this,\n      'token',\n      {\n        form: body,\n        responseType: 'json',\n      },\n      { clientAssertionPayload, DPoP },\n    );\n    let responseBody;\n    try {\n      responseBody = processResponse(response);\n    } catch (err) {\n      if (retry !== retryAttempt && err instanceof OPError && err.error === 'use_dpop_nonce') {\n        return this.grant(body, { clientAssertionPayload, DPoP }, retryAttempt);\n      }\n      throw err;\n    }\n\n    return new TokenSet(responseBody);\n  }\n\n  async deviceAuthorization(params = {}, { exchangeBody, clientAssertionPayload, DPoP } = {}) {\n    assertIssuerConfiguration(this.issuer, 'device_authorization_endpoint');\n    assertIssuerConfiguration(this.issuer, 'token_endpoint');\n\n    const body = authorizationParams.call(this, {\n      client_id: this.client_id,\n      redirect_uri: null,\n      response_type: null,\n      ...params,\n    });\n\n    const response = await authenticatedPost.call(\n      this,\n      'device_authorization',\n      {\n        responseType: 'json',\n        form: body,\n      },\n      { clientAssertionPayload, endpointAuthMethod: 'token' },\n    );\n    const responseBody = processResponse(response);\n\n    return new DeviceFlowHandle({\n      client: this,\n      exchangeBody,\n      clientAssertionPayload,\n      response: responseBody,\n      maxAge: params.max_age,\n      DPoP,\n    });\n  }\n\n  async revoke(token, hint, { revokeBody, clientAssertionPayload } = {}) {\n    assertIssuerConfiguration(this.issuer, 'revocation_endpoint');\n    if (hint !== undefined && typeof hint !== 'string') {\n      throw new TypeError('hint must be a string');\n    }\n\n    const form = { ...revokeBody, token };\n\n    if (hint) {\n      form.token_type_hint = hint;\n    }\n\n    const response = await authenticatedPost.call(\n      this,\n      'revocation',\n      {\n        form,\n      },\n      { clientAssertionPayload },\n    );\n    processResponse(response, { body: false });\n  }\n\n  async introspect(token, hint, { introspectBody, clientAssertionPayload } = {}) {\n    assertIssuerConfiguration(this.issuer, 'introspection_endpoint');\n    if (hint !== undefined && typeof hint !== 'string') {\n      throw new TypeError('hint must be a string');\n    }\n\n    const form = { ...introspectBody, token };\n    if (hint) {\n      form.token_type_hint = hint;\n    }\n\n    const response = await authenticatedPost.call(\n      this,\n      'introspection',\n      { form, responseType: 'json' },\n      { clientAssertionPayload },\n    );\n\n    const responseBody = processResponse(response);\n\n    return responseBody;\n  }\n\n  static async register(metadata, options = {}) {\n    const { initialAccessToken, jwks, ...clientOptions } = options;\n\n    assertIssuerConfiguration(this.issuer, 'registration_endpoint');\n\n    if (jwks !== undefined && !(metadata.jwks || metadata.jwks_uri)) {\n      const keystore = await getKeystore.call(this, jwks);\n      metadata.jwks = keystore.toJWKS();\n    }\n\n    const response = await request.call(this, {\n      headers: {\n        Accept: 'application/json',\n        ...(initialAccessToken\n          ? {\n              Authorization: authorizationHeaderValue(initialAccessToken),\n            }\n          : undefined),\n      },\n      responseType: 'json',\n      json: metadata,\n      url: this.issuer.registration_endpoint,\n      method: 'POST',\n    });\n    const responseBody = processResponse(response, { statusCode: 201, bearer: true });\n\n    return new this(responseBody, jwks, clientOptions);\n  }\n\n  get metadata() {\n    return clone(Object.fromEntries(this.#metadata.entries()));\n  }\n\n  static async fromUri(registrationClientUri, registrationAccessToken, jwks, clientOptions) {\n    const response = await request.call(this, {\n      method: 'GET',\n      url: registrationClientUri,\n      responseType: 'json',\n      headers: {\n        Authorization: authorizationHeaderValue(registrationAccessToken),\n        Accept: 'application/json',\n      },\n    });\n    const responseBody = processResponse(response, { bearer: true });\n\n    return new this(responseBody, jwks, clientOptions);\n  }\n\n  async requestObject(\n    requestObject = {},\n    {\n      sign: signingAlgorithm = this.request_object_signing_alg || 'none',\n      encrypt: {\n        alg: eKeyManagement = this.request_object_encryption_alg,\n        enc: eContentEncryption = this.request_object_encryption_enc || 'A128CBC-HS256',\n      } = {},\n    } = {},\n  ) {\n    if (!isPlainObject(requestObject)) {\n      throw new TypeError('requestObject must be a plain object');\n    }\n\n    let signed;\n    let key;\n    const unix = now();\n    const header = { alg: signingAlgorithm, typ: 'oauth-authz-req+jwt' };\n    const payload = JSON.stringify(\n      defaults({}, requestObject, {\n        iss: this.client_id,\n        aud: this.issuer.issuer,\n        client_id: this.client_id,\n        jti: random(),\n        iat: unix,\n        exp: unix + 300,\n        ...(this.fapi() ? { nbf: unix } : undefined),\n      }),\n    );\n    if (signingAlgorithm === 'none') {\n      signed = [base64url.encode(JSON.stringify(header)), base64url.encode(payload), ''].join('.');\n    } else {\n      const symmetric = signingAlgorithm.startsWith('HS');\n      if (symmetric) {\n        key = this.secretForAlg(signingAlgorithm);\n      } else {\n        const keystore = await keystores.get(this);\n\n        if (!keystore) {\n          throw new TypeError(\n            `no keystore present for client, cannot sign using alg ${signingAlgorithm}`,\n          );\n        }\n        key = keystore.get({ alg: signingAlgorithm, use: 'sig' });\n        if (!key) {\n          throw new TypeError(`no key to sign with found for alg ${signingAlgorithm}`);\n        }\n      }\n\n      signed = await new jose.CompactSign(new TextEncoder().encode(payload))\n        .setProtectedHeader({\n          ...header,\n          kid: symmetric ? undefined : key.jwk.kid,\n        })\n        .sign(symmetric ? key : await key.keyObject(signingAlgorithm));\n    }\n\n    if (!eKeyManagement) {\n      return signed;\n    }\n\n    const fields = { alg: eKeyManagement, enc: eContentEncryption, cty: 'oauth-authz-req+jwt' };\n\n    if (fields.alg.match(/^(RSA|ECDH)/)) {\n      [key] = await queryKeyStore.call(\n        this.issuer,\n        { alg: fields.alg, use: 'enc' },\n        { allowMulti: true },\n      );\n    } else {\n      key = this.secretForAlg(fields.alg === 'dir' ? fields.enc : fields.alg);\n    }\n\n    return new jose.CompactEncrypt(new TextEncoder().encode(signed))\n      .setProtectedHeader({\n        ...fields,\n        kid: key instanceof Uint8Array ? undefined : key.jwk.kid,\n      })\n      .encrypt(key instanceof Uint8Array ? key : await key.keyObject(fields.alg));\n  }\n\n  async pushedAuthorizationRequest(params = {}, { clientAssertionPayload } = {}) {\n    assertIssuerConfiguration(this.issuer, 'pushed_authorization_request_endpoint');\n\n    const body = {\n      ...('request' in params ? params : authorizationParams.call(this, params)),\n      client_id: this.client_id,\n    };\n\n    const response = await authenticatedPost.call(\n      this,\n      'pushed_authorization_request',\n      {\n        responseType: 'json',\n        form: body,\n      },\n      { clientAssertionPayload, endpointAuthMethod: 'token' },\n    );\n    const responseBody = processResponse(response, { statusCode: 201 });\n\n    if (!('expires_in' in responseBody)) {\n      throw new RPError({\n        message: 'expected expires_in in Pushed Authorization Successful Response',\n        response,\n      });\n    }\n    if (typeof responseBody.expires_in !== 'number') {\n      throw new RPError({\n        message: 'invalid expires_in value in Pushed Authorization Successful Response',\n        response,\n      });\n    }\n    if (!('request_uri' in responseBody)) {\n      throw new RPError({\n        message: 'expected request_uri in Pushed Authorization Successful Response',\n        response,\n      });\n    }\n    if (typeof responseBody.request_uri !== 'string') {\n      throw new RPError({\n        message: 'invalid request_uri value in Pushed Authorization Successful Response',\n        response,\n      });\n    }\n\n    return responseBody;\n  }\n\n  get issuer() {\n    return this.#issuer;\n  }\n\n  /* istanbul ignore next */\n  [inspect.custom]() {\n    return `${this.constructor.name} ${inspect(this.metadata, {\n      depth: Infinity,\n      colors: process.stdout.isTTY,\n      compact: false,\n      sorted: true,\n    })}`;\n  }\n\n  fapi() {\n    return this.fapi1() || this.fapi2();\n  }\n\n  fapi1() {\n    return this.constructor.name === 'FAPI1Client';\n  }\n\n  fapi2() {\n    return this.constructor.name === 'FAPI2Client';\n  }\n\n  async validateJARM(response) {\n    const expectedAlg = this.authorization_signed_response_alg;\n    const { payload } = await this.validateJWT(response, expectedAlg, ['iss', 'exp', 'aud']);\n    return pickCb(payload);\n  }\n\n  /**\n   * @name dpopProof\n   * @api private\n   */\n  async dpopProof(payload, privateKeyInput, accessToken) {\n    if (!isPlainObject(payload)) {\n      throw new TypeError('payload must be a plain object');\n    }\n\n    let privateKey;\n    if (isKeyObject(privateKeyInput)) {\n      privateKey = privateKeyInput;\n    } else if (privateKeyInput[Symbol.toStringTag] === 'CryptoKey') {\n      privateKey = privateKeyInput;\n    } else if (jose.cryptoRuntime === 'node:crypto') {\n      privateKey = crypto.createPrivateKey(privateKeyInput);\n    } else {\n      throw new TypeError('unrecognized crypto runtime');\n    }\n\n    if (privateKey.type !== 'private') {\n      throw new TypeError('\"DPoP\" option must be a private key');\n    }\n    let alg = determineDPoPAlgorithm.call(this, privateKey, privateKeyInput);\n\n    if (!alg) {\n      throw new TypeError('could not determine DPoP JWS Algorithm');\n    }\n\n    return new jose.SignJWT({\n      ath: accessToken\n        ? base64url.encode(crypto.createHash('sha256').update(accessToken).digest())\n        : undefined,\n      ...payload,\n    })\n      .setProtectedHeader({\n        alg,\n        typ: 'dpop+jwt',\n        jwk: await getJwk(privateKey, privateKeyInput),\n      })\n      .setIssuedAt()\n      .setJti(random())\n      .sign(privateKey);\n  }\n}\n\nfunction determineDPoPAlgorithmFromCryptoKey(cryptoKey) {\n  switch (cryptoKey.algorithm.name) {\n    case 'Ed25519':\n    case 'Ed448':\n      return 'EdDSA';\n    case 'ECDSA': {\n      switch (cryptoKey.algorithm.namedCurve) {\n        case 'P-256':\n          return 'ES256';\n        case 'P-384':\n          return 'ES384';\n        case 'P-521':\n          return 'ES512';\n        default:\n          break;\n      }\n      break;\n    }\n    case 'RSASSA-PKCS1-v1_5':\n      return `RS${cryptoKey.algorithm.hash.name.slice(4)}`;\n    case 'RSA-PSS':\n      return `PS${cryptoKey.algorithm.hash.name.slice(4)}`;\n    default:\n      throw new TypeError('unsupported DPoP private key');\n  }\n}\n\nlet determineDPoPAlgorithm;\nif (jose.cryptoRuntime === 'node:crypto') {\n  determineDPoPAlgorithm = function (privateKey, privateKeyInput) {\n    if (privateKeyInput[Symbol.toStringTag] === 'CryptoKey') {\n      return determineDPoPAlgorithmFromCryptoKey(privateKey);\n    }\n\n    switch (privateKey.asymmetricKeyType) {\n      case 'ed25519':\n      case 'ed448':\n        return 'EdDSA';\n      case 'ec':\n        return determineEcAlgorithm(privateKey, privateKeyInput);\n      case 'rsa':\n      case rsaPssParams && 'rsa-pss':\n        return determineRsaAlgorithm(\n          privateKey,\n          privateKeyInput,\n          this.issuer.dpop_signing_alg_values_supported,\n        );\n      default:\n        throw new TypeError('unsupported DPoP private key');\n    }\n  };\n\n  const RSPS = /^(?:RS|PS)(?:256|384|512)$/;\n  function determineRsaAlgorithm(privateKey, privateKeyInput, valuesSupported) {\n    if (\n      typeof privateKeyInput === 'object' &&\n      privateKeyInput.format === 'jwk' &&\n      privateKeyInput.key &&\n      privateKeyInput.key.alg\n    ) {\n      return privateKeyInput.key.alg;\n    }\n\n    if (Array.isArray(valuesSupported)) {\n      let candidates = valuesSupported.filter(RegExp.prototype.test.bind(RSPS));\n      if (privateKey.asymmetricKeyType === 'rsa-pss') {\n        candidates = candidates.filter((value) => value.startsWith('PS'));\n      }\n      return ['PS256', 'PS384', 'PS512', 'RS256', 'RS384', 'RS384'].find((preferred) =>\n        candidates.includes(preferred),\n      );\n    }\n\n    return 'PS256';\n  }\n\n  const p256 = Buffer.from([42, 134, 72, 206, 61, 3, 1, 7]);\n  const p384 = Buffer.from([43, 129, 4, 0, 34]);\n  const p521 = Buffer.from([43, 129, 4, 0, 35]);\n  const secp256k1 = Buffer.from([43, 129, 4, 0, 10]);\n\n  function determineEcAlgorithm(privateKey, privateKeyInput) {\n    // If input was a JWK\n    switch (\n      typeof privateKeyInput === 'object' &&\n      typeof privateKeyInput.key === 'object' &&\n      privateKeyInput.key.crv\n    ) {\n      case 'P-256':\n        return 'ES256';\n      case 'secp256k1':\n        return 'ES256K';\n      case 'P-384':\n        return 'ES384';\n      case 'P-512':\n        return 'ES512';\n      default:\n        break;\n    }\n\n    const buf = privateKey.export({ format: 'der', type: 'pkcs8' });\n    const i = buf[1] < 128 ? 17 : 18;\n    const len = buf[i];\n    const curveOid = buf.slice(i + 1, i + 1 + len);\n    if (curveOid.equals(p256)) {\n      return 'ES256';\n    }\n\n    if (curveOid.equals(p384)) {\n      return 'ES384';\n    }\n    if (curveOid.equals(p521)) {\n      return 'ES512';\n    }\n\n    if (curveOid.equals(secp256k1)) {\n      return 'ES256K';\n    }\n\n    throw new TypeError('unsupported DPoP private key curve');\n  }\n} else {\n  determineDPoPAlgorithm = determineDPoPAlgorithmFromCryptoKey;\n}\n\nconst jwkCache = new WeakMap();\nasync function getJwk(keyObject, privateKeyInput) {\n  if (\n    jose.cryptoRuntime === 'node:crypto' &&\n    typeof privateKeyInput === 'object' &&\n    typeof privateKeyInput.key === 'object' &&\n    privateKeyInput.format === 'jwk'\n  ) {\n    return pick(privateKeyInput.key, 'kty', 'crv', 'x', 'y', 'e', 'n');\n  }\n\n  if (jwkCache.has(privateKeyInput)) {\n    return jwkCache.get(privateKeyInput);\n  }\n\n  const jwk = pick(await jose.exportJWK(keyObject), 'kty', 'crv', 'x', 'y', 'e', 'n');\n\n  if (isKeyObject(privateKeyInput) || jose.cryptoRuntime === 'WebCryptoAPI') {\n    jwkCache.set(privateKeyInput, jwk);\n  }\n\n  return jwk;\n}\n\nmodule.exports = (issuer, aadIssValidation = false) =>\n  class Client extends BaseClient {\n    constructor(...args) {\n      super(issuer, aadIssValidation, ...args);\n    }\n\n    static get issuer() {\n      return issuer;\n    }\n  };\n\nmodule.exports.BaseClient = BaseClient;\n", "const LRU = require('lru-cache');\n\nmodule.exports = new LRU({ max: 100 });\n", "// Credit: https://github.com/rohe/pyoidc/blob/master/src/oic/utils/webfinger.py\n\n// -- Normalization --\n// A string of any other type is interpreted as a URI either the form of scheme\n// \"://\" authority path-abempty [ \"?\" query ] [ \"#\" fragment ] or authority\n// path-abempty [ \"?\" query ] [ \"#\" fragment ] per RFC 3986 [RFC3986] and is\n// normalized according to the following rules:\n//\n// If the user input Identifier does not have an RFC 3986 [RFC3986] scheme\n// portion, the string is interpreted as [userinfo \"@\"] host [\":\" port]\n// path-abempty [ \"?\" query ] [ \"#\" fragment ] per RFC 3986 [RFC3986].\n// If the userinfo component is present and all of the path component, query\n// component, and port component are empty, the acct scheme is assumed. In this\n// case, the normalized URI is formed by prefixing acct: to the string as the\n// scheme. Per the 'acct' URI Scheme [I\u2011D.ietf\u2011appsawg\u2011acct\u2011uri], if there is an\n// at-sign character ('@') in the userinfo component, it needs to be\n// percent-encoded as described in RFC 3986 [RFC3986].\n// For all other inputs without a scheme portion, the https scheme is assumed,\n// and the normalized URI is formed by prefixing https:// to the string as the\n// scheme.\n// If the resulting URI contains a fragment portion, it MUST be stripped off\n// together with the fragment delimiter character \"#\".\n// The WebFinger [I\u2011D.ietf\u2011appsawg\u2011webfinger] Resource in this case is the\n// resulting URI, and the WebFinger Host is the authority component.\n//\n// Note: Since the definition of authority in RFC 3986 [RFC3986] is\n// [ userinfo \"@\" ] host [ \":\" port ], it is legal to have a user input\n// identifier like userinfo@host:port, e.g., alice@example.com:8080.\n\nconst PORT = /^\\d+$/;\n\nfunction hasScheme(input) {\n  if (input.includes('://')) return true;\n\n  const authority = input.replace(/(\\/|\\?)/g, '#').split('#')[0];\n  if (authority.includes(':')) {\n    const index = authority.indexOf(':');\n    const hostOrPort = authority.slice(index + 1);\n    if (!PORT.test(hostOrPort)) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\nfunction acctSchemeAssumed(input) {\n  if (!input.includes('@')) return false;\n  const parts = input.split('@');\n  const host = parts[parts.length - 1];\n  return !(host.includes(':') || host.includes('/') || host.includes('?'));\n}\n\nfunction normalize(input) {\n  if (typeof input !== 'string') {\n    throw new TypeError('input must be a string');\n  }\n\n  let output;\n  if (hasScheme(input)) {\n    output = input;\n  } else if (acctSchemeAssumed(input)) {\n    output = `acct:${input}`;\n  } else {\n    output = `https://${input}`;\n  }\n\n  return output.split('#')[0];\n}\n\nmodule.exports = normalize;\n", "const { inspect } = require('util');\nconst url = require('url');\n\nconst { RPError } = require('./errors');\nconst getClient = require('./client');\nconst registry = require('./issuer_registry');\nconst processResponse = require('./helpers/process_response');\nconst webfingerNormalize = require('./helpers/webfinger_normalize');\nconst request = require('./helpers/request');\nconst clone = require('./helpers/deep_clone');\nconst { keystore } = require('./helpers/issuer');\n\nconst AAD_MULTITENANT_DISCOVERY = [\n  'https://login.microsoftonline.com/common/.well-known/openid-configuration',\n  'https://login.microsoftonline.com/common/v2.0/.well-known/openid-configuration',\n  'https://login.microsoftonline.com/organizations/v2.0/.well-known/openid-configuration',\n  'https://login.microsoftonline.com/consumers/v2.0/.well-known/openid-configuration',\n];\nconst AAD_MULTITENANT = Symbol();\nconst ISSUER_DEFAULTS = {\n  claim_types_supported: ['normal'],\n  claims_parameter_supported: false,\n  grant_types_supported: ['authorization_code', 'implicit'],\n  request_parameter_supported: false,\n  request_uri_parameter_supported: true,\n  require_request_uri_registration: false,\n  response_modes_supported: ['query', 'fragment'],\n  token_endpoint_auth_methods_supported: ['client_secret_basic'],\n};\n\nclass Issuer {\n  #metadata;\n  constructor(meta = {}) {\n    const aadIssValidation = meta[AAD_MULTITENANT];\n    delete meta[AAD_MULTITENANT];\n    ['introspection', 'revocation'].forEach((endpoint) => {\n      // if intro/revocation endpoint auth specific meta is missing use the token ones if they\n      // are defined\n      if (\n        meta[`${endpoint}_endpoint`] &&\n        meta[`${endpoint}_endpoint_auth_methods_supported`] === undefined &&\n        meta[`${endpoint}_endpoint_auth_signing_alg_values_supported`] === undefined\n      ) {\n        if (meta.token_endpoint_auth_methods_supported) {\n          meta[`${endpoint}_endpoint_auth_methods_supported`] =\n            meta.token_endpoint_auth_methods_supported;\n        }\n        if (meta.token_endpoint_auth_signing_alg_values_supported) {\n          meta[`${endpoint}_endpoint_auth_signing_alg_values_supported`] =\n            meta.token_endpoint_auth_signing_alg_values_supported;\n        }\n      }\n    });\n\n    this.#metadata = new Map();\n\n    Object.entries(meta).forEach(([key, value]) => {\n      this.#metadata.set(key, value);\n      if (!this[key]) {\n        Object.defineProperty(this, key, {\n          get() {\n            return this.#metadata.get(key);\n          },\n          enumerable: true,\n        });\n      }\n    });\n\n    registry.set(this.issuer, this);\n\n    const Client = getClient(this, aadIssValidation);\n\n    Object.defineProperties(this, {\n      Client: { value: Client, enumerable: true },\n      FAPI1Client: { value: class FAPI1Client extends Client {}, enumerable: true },\n      FAPI2Client: { value: class FAPI2Client extends Client {}, enumerable: true },\n    });\n  }\n\n  get metadata() {\n    return clone(Object.fromEntries(this.#metadata.entries()));\n  }\n\n  static async webfinger(input) {\n    const resource = webfingerNormalize(input);\n    const { host } = url.parse(resource);\n    const webfingerUrl = `https://${host}/.well-known/webfinger`;\n\n    const response = await request.call(this, {\n      method: 'GET',\n      url: webfingerUrl,\n      responseType: 'json',\n      searchParams: { resource, rel: 'http://openid.net/specs/connect/1.0/issuer' },\n      headers: {\n        Accept: 'application/json',\n      },\n    });\n    const body = processResponse(response);\n\n    const location =\n      Array.isArray(body.links) &&\n      body.links.find(\n        (link) =>\n          typeof link === 'object' &&\n          link.rel === 'http://openid.net/specs/connect/1.0/issuer' &&\n          link.href,\n      );\n\n    if (!location) {\n      throw new RPError({\n        message: 'no issuer found in webfinger response',\n        body,\n      });\n    }\n\n    if (typeof location.href !== 'string' || !location.href.startsWith('https://')) {\n      throw new RPError({\n        printf: ['invalid issuer location %s', location.href],\n        body,\n      });\n    }\n\n    const expectedIssuer = location.href;\n    if (registry.has(expectedIssuer)) {\n      return registry.get(expectedIssuer);\n    }\n\n    const issuer = await this.discover(expectedIssuer);\n\n    if (issuer.issuer !== expectedIssuer) {\n      registry.del(issuer.issuer);\n      throw new RPError(\n        'discovered issuer mismatch, expected %s, got: %s',\n        expectedIssuer,\n        issuer.issuer,\n      );\n    }\n    return issuer;\n  }\n\n  static async discover(uri) {\n    const wellKnownUri = resolveWellKnownUri(uri);\n\n    const response = await request.call(this, {\n      method: 'GET',\n      responseType: 'json',\n      url: wellKnownUri,\n      headers: {\n        Accept: 'application/json',\n      },\n    });\n    const body = processResponse(response);\n    return new Issuer({\n      ...ISSUER_DEFAULTS,\n      ...body,\n      [AAD_MULTITENANT]: !!AAD_MULTITENANT_DISCOVERY.find((discoveryURL) =>\n        wellKnownUri.startsWith(discoveryURL),\n      ),\n    });\n  }\n\n  async reloadJwksUri() {\n    await keystore.call(this, true);\n  }\n\n  /* istanbul ignore next */\n  [inspect.custom]() {\n    return `${this.constructor.name} ${inspect(this.metadata, {\n      depth: Infinity,\n      colors: process.stdout.isTTY,\n      compact: false,\n      sorted: true,\n    })}`;\n  }\n}\n\nfunction resolveWellKnownUri(uri) {\n  const parsed = url.parse(uri);\n  if (parsed.pathname.includes('/.well-known/')) {\n    return uri;\n  } else {\n    let pathname;\n    if (parsed.pathname.endsWith('/')) {\n      pathname = `${parsed.pathname}.well-known/openid-configuration`;\n    } else {\n      pathname = `${parsed.pathname}/.well-known/openid-configuration`;\n    }\n    return url.format({ ...parsed, pathname });\n  }\n}\n\nmodule.exports = Issuer;\n", "const url = require('url');\nconst { format } = require('util');\n\nconst cloneDeep = require('./helpers/deep_clone');\nconst { RPError, OPError } = require('./errors');\nconst { BaseClient } = require('./client');\nconst { random, codeChallenge } = require('./helpers/generators');\nconst pick = require('./helpers/pick');\nconst { resolveResponseType, resolveRedirectUri } = require('./helpers/client');\n\nfunction verified(err, user, info = {}) {\n  if (err) {\n    this.error(err);\n  } else if (!user) {\n    this.fail(info);\n  } else {\n    this.success(user, info);\n  }\n}\n\nfunction OpenIDConnectStrategy(\n  { client, params = {}, passReqToCallback = false, sessionKey, usePKCE = true, extras = {} } = {},\n  verify,\n) {\n  if (!(client instanceof BaseClient)) {\n    throw new TypeError('client must be an instance of openid-client Client');\n  }\n\n  if (typeof verify !== 'function') {\n    throw new TypeError('verify callback must be a function');\n  }\n\n  if (!client.issuer || !client.issuer.issuer) {\n    throw new TypeError('client must have an issuer with an identifier');\n  }\n\n  this._client = client;\n  this._issuer = client.issuer;\n  this._verify = verify;\n  this._passReqToCallback = passReqToCallback;\n  this._usePKCE = usePKCE;\n  this._key = sessionKey || `oidc:${url.parse(this._issuer.issuer).hostname}`;\n  this._params = cloneDeep(params);\n\n  // state and nonce are handled in authenticate()\n  delete this._params.state;\n  delete this._params.nonce;\n\n  this._extras = cloneDeep(extras);\n\n  if (!this._params.response_type) this._params.response_type = resolveResponseType.call(client);\n  if (!this._params.redirect_uri) this._params.redirect_uri = resolveRedirectUri.call(client);\n  if (!this._params.scope) this._params.scope = 'openid';\n\n  if (this._usePKCE === true) {\n    const supportedMethods = Array.isArray(this._issuer.code_challenge_methods_supported)\n      ? this._issuer.code_challenge_methods_supported\n      : false;\n\n    if (supportedMethods && supportedMethods.includes('S256')) {\n      this._usePKCE = 'S256';\n    } else if (supportedMethods && supportedMethods.includes('plain')) {\n      this._usePKCE = 'plain';\n    } else if (supportedMethods) {\n      throw new TypeError(\n        'neither code_challenge_method supported by the client is supported by the issuer',\n      );\n    } else {\n      this._usePKCE = 'S256';\n    }\n  } else if (typeof this._usePKCE === 'string' && !['plain', 'S256'].includes(this._usePKCE)) {\n    throw new TypeError(`${this._usePKCE} is not valid/implemented PKCE code_challenge_method`);\n  }\n\n  this.name = url.parse(client.issuer.issuer).hostname;\n}\n\nOpenIDConnectStrategy.prototype.authenticate = function authenticate(req, options) {\n  (async () => {\n    const client = this._client;\n    if (!req.session) {\n      throw new TypeError('authentication requires session support');\n    }\n    const reqParams = client.callbackParams(req);\n    const sessionKey = this._key;\n\n    const { 0: parameter, length } = Object.keys(reqParams);\n\n    /**\n     * Start authentication request if this has no authorization response parameters or\n     * this might a login initiated from a third party as per\n     * https://openid.net/specs/openid-connect-core-1_0.html#ThirdPartyInitiatedLogin.\n     */\n    if (length === 0 || (length === 1 && parameter === 'iss')) {\n      // provide options object with extra authentication parameters\n      const params = {\n        state: random(),\n        ...this._params,\n        ...options,\n      };\n\n      if (!params.nonce && params.response_type.includes('id_token')) {\n        params.nonce = random();\n      }\n\n      req.session[sessionKey] = pick(params, 'nonce', 'state', 'max_age', 'response_type');\n\n      if (this._usePKCE && params.response_type.includes('code')) {\n        const verifier = random();\n        req.session[sessionKey].code_verifier = verifier;\n\n        switch (this._usePKCE) {\n          case 'S256':\n            params.code_challenge = codeChallenge(verifier);\n            params.code_challenge_method = 'S256';\n            break;\n          case 'plain':\n            params.code_challenge = verifier;\n            break;\n        }\n      }\n\n      this.redirect(client.authorizationUrl(params));\n      return;\n    }\n    /* end authentication request */\n\n    /* start authentication response */\n\n    const session = req.session[sessionKey];\n    if (Object.keys(session || {}).length === 0) {\n      throw new Error(\n        format(\n          'did not find expected authorization request details in session, req.session[\"%s\"] is %j',\n          sessionKey,\n          session,\n        ),\n      );\n    }\n\n    const {\n      state,\n      nonce,\n      max_age: maxAge,\n      code_verifier: codeVerifier,\n      response_type: responseType,\n    } = session;\n\n    try {\n      delete req.session[sessionKey];\n    } catch (err) {}\n\n    const opts = {\n      redirect_uri: this._params.redirect_uri,\n      ...options,\n    };\n\n    const checks = {\n      state,\n      nonce,\n      max_age: maxAge,\n      code_verifier: codeVerifier,\n      response_type: responseType,\n    };\n\n    const tokenset = await client.callback(opts.redirect_uri, reqParams, checks, this._extras);\n\n    const passReq = this._passReqToCallback;\n    const loadUserinfo = this._verify.length > (passReq ? 3 : 2) && client.issuer.userinfo_endpoint;\n\n    const args = [tokenset, verified.bind(this)];\n\n    if (loadUserinfo) {\n      if (!tokenset.access_token) {\n        throw new RPError({\n          message:\n            'expected access_token to be returned when asking for userinfo in verify callback',\n          tokenset,\n        });\n      }\n      const userinfo = await client.userinfo(tokenset);\n      args.splice(1, 0, userinfo);\n    }\n\n    if (passReq) {\n      args.unshift(req);\n    }\n\n    this._verify(...args);\n    /* end authentication response */\n  })().catch((error) => {\n    if (\n      (error instanceof OPError &&\n        error.error !== 'server_error' &&\n        !error.error.startsWith('invalid')) ||\n      error instanceof RPError\n    ) {\n      this.fail(error);\n    } else {\n      this.error(error);\n    }\n  });\n};\n\nmodule.exports = OpenIDConnectStrategy;\n", "const Issuer = require('./issuer');\nconst { OPError, RPError } = require('./errors');\nconst Strategy = require('./passport_strategy');\nconst TokenSet = require('./token_set');\nconst { CLOCK_TOLERANCE, HTTP_OPTIONS } = require('./helpers/consts');\nconst generators = require('./helpers/generators');\nconst { setDefaults } = require('./helpers/request');\n\nmodule.exports = {\n  Issuer,\n  Strategy,\n  TokenSet,\n  errors: {\n    OPError,\n    RPError,\n  },\n  custom: {\n    setHttpOptionsDefaults: setDefaults,\n    http_options: HTTP_OPTIONS,\n    clock_tolerance: CLOCK_TOLERANCE,\n  },\n  generators,\n};\n", "'use strict';\nconst fs = require('fs');\n\nlet isDocker;\n\nfunction hasDockerEnv() {\n\ttry {\n\t\tfs.statSync('/.dockerenv');\n\t\treturn true;\n\t} catch (_) {\n\t\treturn false;\n\t}\n}\n\nfunction hasDockerCGroup() {\n\ttry {\n\t\treturn fs.readFileSync('/proc/self/cgroup', 'utf8').includes('docker');\n\t} catch (_) {\n\t\treturn false;\n\t}\n}\n\nmodule.exports = () => {\n\tif (isDocker === undefined) {\n\t\tisDocker = hasDockerEnv() || hasDockerCGroup();\n\t}\n\n\treturn isDocker;\n};\n", "'use strict';\nconst os = require('os');\nconst fs = require('fs');\nconst isDocker = require('is-docker');\n\nconst isWsl = () => {\n\tif (process.platform !== 'linux') {\n\t\treturn false;\n\t}\n\n\tif (os.release().toLowerCase().includes('microsoft')) {\n\t\tif (isDocker()) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t}\n\n\ttry {\n\t\treturn fs.readFileSync('/proc/version', 'utf8').toLowerCase().includes('microsoft') ?\n\t\t\t!isDocker() : false;\n\t} catch (_) {\n\t\treturn false;\n\t}\n};\n\nif (process.env.__IS_WSL_TEST__) {\n\tmodule.exports = isWsl;\n} else {\n\tmodule.exports = isWsl();\n}\n", "'use strict';\nmodule.exports = (object, propertyName, fn) => {\n\tconst define = value => Object.defineProperty(object, propertyName, {value, enumerable: true, writable: true});\n\n\tObject.defineProperty(object, propertyName, {\n\t\tconfigurable: true,\n\t\tenumerable: true,\n\t\tget() {\n\t\t\tconst result = fn();\n\t\t\tdefine(result);\n\t\t\treturn result;\n\t\t},\n\t\tset(value) {\n\t\t\tdefine(value);\n\t\t}\n\t});\n\n\treturn object;\n};\n", "const path = require('path');\nconst childProcess = require('child_process');\nconst {promises: fs, constants: fsConstants} = require('fs');\nconst isWsl = require('is-wsl');\nconst isDocker = require('is-docker');\nconst defineLazyProperty = require('define-lazy-prop');\n\n// Path to included `xdg-open`.\nconst localXdgOpenPath = path.join(__dirname, 'xdg-open');\n\nconst {platform, arch} = process;\n\n// Podman detection\nconst hasContainerEnv = () => {\n\ttry {\n\t\tfs.statSync('/run/.containerenv');\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n};\n\nlet cachedResult;\nfunction isInsideContainer() {\n\tif (cachedResult === undefined) {\n\t\tcachedResult = hasContainerEnv() || isDocker();\n\t}\n\n\treturn cachedResult;\n}\n\n/**\nGet the mount point for fixed drives in WSL.\n\n@inner\n@returns {string} The mount point.\n*/\nconst getWslDrivesMountPoint = (() => {\n\t// Default value for \"root\" param\n\t// according to https://docs.microsoft.com/en-us/windows/wsl/wsl-config\n\tconst defaultMountPoint = '/mnt/';\n\n\tlet mountPoint;\n\n\treturn async function () {\n\t\tif (mountPoint) {\n\t\t\t// Return memoized mount point value\n\t\t\treturn mountPoint;\n\t\t}\n\n\t\tconst configFilePath = '/etc/wsl.conf';\n\n\t\tlet isConfigFileExists = false;\n\t\ttry {\n\t\t\tawait fs.access(configFilePath, fsConstants.F_OK);\n\t\t\tisConfigFileExists = true;\n\t\t} catch {}\n\n\t\tif (!isConfigFileExists) {\n\t\t\treturn defaultMountPoint;\n\t\t}\n\n\t\tconst configContent = await fs.readFile(configFilePath, {encoding: 'utf8'});\n\t\tconst configMountPoint = /(?<!#.*)root\\s*=\\s*(?<mountPoint>.*)/g.exec(configContent);\n\n\t\tif (!configMountPoint) {\n\t\t\treturn defaultMountPoint;\n\t\t}\n\n\t\tmountPoint = configMountPoint.groups.mountPoint.trim();\n\t\tmountPoint = mountPoint.endsWith('/') ? mountPoint : `${mountPoint}/`;\n\n\t\treturn mountPoint;\n\t};\n})();\n\nconst pTryEach = async (array, mapper) => {\n\tlet latestError;\n\n\tfor (const item of array) {\n\t\ttry {\n\t\t\treturn await mapper(item); // eslint-disable-line no-await-in-loop\n\t\t} catch (error) {\n\t\t\tlatestError = error;\n\t\t}\n\t}\n\n\tthrow latestError;\n};\n\nconst baseOpen = async options => {\n\toptions = {\n\t\twait: false,\n\t\tbackground: false,\n\t\tnewInstance: false,\n\t\tallowNonzeroExitCode: false,\n\t\t...options\n\t};\n\n\tif (Array.isArray(options.app)) {\n\t\treturn pTryEach(options.app, singleApp => baseOpen({\n\t\t\t...options,\n\t\t\tapp: singleApp\n\t\t}));\n\t}\n\n\tlet {name: app, arguments: appArguments = []} = options.app || {};\n\tappArguments = [...appArguments];\n\n\tif (Array.isArray(app)) {\n\t\treturn pTryEach(app, appName => baseOpen({\n\t\t\t...options,\n\t\t\tapp: {\n\t\t\t\tname: appName,\n\t\t\t\targuments: appArguments\n\t\t\t}\n\t\t}));\n\t}\n\n\tlet command;\n\tconst cliArguments = [];\n\tconst childProcessOptions = {};\n\n\tif (platform === 'darwin') {\n\t\tcommand = 'open';\n\n\t\tif (options.wait) {\n\t\t\tcliArguments.push('--wait-apps');\n\t\t}\n\n\t\tif (options.background) {\n\t\t\tcliArguments.push('--background');\n\t\t}\n\n\t\tif (options.newInstance) {\n\t\t\tcliArguments.push('--new');\n\t\t}\n\n\t\tif (app) {\n\t\t\tcliArguments.push('-a', app);\n\t\t}\n\t} else if (platform === 'win32' || (isWsl && !isInsideContainer() && !app)) {\n\t\tconst mountPoint = await getWslDrivesMountPoint();\n\n\t\tcommand = isWsl ?\n\t\t\t`${mountPoint}c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe` :\n\t\t\t`${process.env.SYSTEMROOT}\\\\System32\\\\WindowsPowerShell\\\\v1.0\\\\powershell`;\n\n\t\tcliArguments.push(\n\t\t\t'-NoProfile',\n\t\t\t'-NonInteractive',\n\t\t\t'\u2013ExecutionPolicy',\n\t\t\t'Bypass',\n\t\t\t'-EncodedCommand'\n\t\t);\n\n\t\tif (!isWsl) {\n\t\t\tchildProcessOptions.windowsVerbatimArguments = true;\n\t\t}\n\n\t\tconst encodedArguments = ['Start'];\n\n\t\tif (options.wait) {\n\t\t\tencodedArguments.push('-Wait');\n\t\t}\n\n\t\tif (app) {\n\t\t\t// Double quote with double quotes to ensure the inner quotes are passed through.\n\t\t\t// Inner quotes are delimited for PowerShell interpretation with backticks.\n\t\t\tencodedArguments.push(`\"\\`\"${app}\\`\"\"`, '-ArgumentList');\n\t\t\tif (options.target) {\n\t\t\t\tappArguments.unshift(options.target);\n\t\t\t}\n\t\t} else if (options.target) {\n\t\t\tencodedArguments.push(`\"${options.target}\"`);\n\t\t}\n\n\t\tif (appArguments.length > 0) {\n\t\t\tappArguments = appArguments.map(arg => `\"\\`\"${arg}\\`\"\"`);\n\t\t\tencodedArguments.push(appArguments.join(','));\n\t\t}\n\n\t\t// Using Base64-encoded command, accepted by PowerShell, to allow special characters.\n\t\toptions.target = Buffer.from(encodedArguments.join(' '), 'utf16le').toString('base64');\n\t} else {\n\t\tif (app) {\n\t\t\tcommand = app;\n\t\t} else {\n\t\t\t// When bundled by Webpack, there's no actual package file path and no local `xdg-open`.\n\t\t\tconst isBundled = !__dirname || __dirname === '/';\n\n\t\t\t// Check if local `xdg-open` exists and is executable.\n\t\t\tlet exeLocalXdgOpen = false;\n\t\t\ttry {\n\t\t\t\tawait fs.access(localXdgOpenPath, fsConstants.X_OK);\n\t\t\t\texeLocalXdgOpen = true;\n\t\t\t} catch {}\n\n\t\t\tconst useSystemXdgOpen = process.versions.electron ||\n\t\t\t\tplatform === 'android' || isBundled || !exeLocalXdgOpen;\n\t\t\tcommand = useSystemXdgOpen ? 'xdg-open' : localXdgOpenPath;\n\t\t}\n\n\t\tif (appArguments.length > 0) {\n\t\t\tcliArguments.push(...appArguments);\n\t\t}\n\n\t\tif (!options.wait) {\n\t\t\t// `xdg-open` will block the process unless stdio is ignored\n\t\t\t// and it's detached from the parent even if it's unref'd.\n\t\t\tchildProcessOptions.stdio = 'ignore';\n\t\t\tchildProcessOptions.detached = true;\n\t\t}\n\t}\n\n\tif (options.target) {\n\t\tcliArguments.push(options.target);\n\t}\n\n\tif (platform === 'darwin' && appArguments.length > 0) {\n\t\tcliArguments.push('--args', ...appArguments);\n\t}\n\n\tconst subprocess = childProcess.spawn(command, cliArguments, childProcessOptions);\n\n\tif (options.wait) {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tsubprocess.once('error', reject);\n\n\t\t\tsubprocess.once('close', exitCode => {\n\t\t\t\tif (!options.allowNonzeroExitCode && exitCode > 0) {\n\t\t\t\t\treject(new Error(`Exited with code ${exitCode}`));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tresolve(subprocess);\n\t\t\t});\n\t\t});\n\t}\n\n\tsubprocess.unref();\n\n\treturn subprocess;\n};\n\nconst open = (target, options) => {\n\tif (typeof target !== 'string') {\n\t\tthrow new TypeError('Expected a `target`');\n\t}\n\n\treturn baseOpen({\n\t\t...options,\n\t\ttarget\n\t});\n};\n\nconst openApp = (name, options) => {\n\tif (typeof name !== 'string') {\n\t\tthrow new TypeError('Expected a `name`');\n\t}\n\n\tconst {arguments: appArguments = []} = options || {};\n\tif (appArguments !== undefined && appArguments !== null && !Array.isArray(appArguments)) {\n\t\tthrow new TypeError('Expected `appArguments` as Array type');\n\t}\n\n\treturn baseOpen({\n\t\t...options,\n\t\tapp: {\n\t\t\tname,\n\t\t\targuments: appArguments\n\t\t}\n\t});\n};\n\nfunction detectArchBinary(binary) {\n\tif (typeof binary === 'string' || Array.isArray(binary)) {\n\t\treturn binary;\n\t}\n\n\tconst {[arch]: archBinary} = binary;\n\n\tif (!archBinary) {\n\t\tthrow new Error(`${arch} is not supported`);\n\t}\n\n\treturn archBinary;\n}\n\nfunction detectPlatformBinary({[platform]: platformBinary}, {wsl}) {\n\tif (wsl && isWsl) {\n\t\treturn detectArchBinary(wsl);\n\t}\n\n\tif (!platformBinary) {\n\t\tthrow new Error(`${platform} is not supported`);\n\t}\n\n\treturn detectArchBinary(platformBinary);\n}\n\nconst apps = {};\n\ndefineLazyProperty(apps, 'chrome', () => detectPlatformBinary({\n\tdarwin: 'google chrome',\n\twin32: 'chrome',\n\tlinux: ['google-chrome', 'google-chrome-stable', 'chromium']\n}, {\n\twsl: {\n\t\tia32: '/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe',\n\t\tx64: ['/mnt/c/Program Files/Google/Chrome/Application/chrome.exe', '/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe']\n\t}\n}));\n\ndefineLazyProperty(apps, 'firefox', () => detectPlatformBinary({\n\tdarwin: 'firefox',\n\twin32: 'C:\\\\Program Files\\\\Mozilla Firefox\\\\firefox.exe',\n\tlinux: 'firefox'\n}, {\n\twsl: '/mnt/c/Program Files/Mozilla Firefox/firefox.exe'\n}));\n\ndefineLazyProperty(apps, 'edge', () => detectPlatformBinary({\n\tdarwin: 'microsoft edge',\n\twin32: 'msedge',\n\tlinux: ['microsoft-edge', 'microsoft-edge-dev']\n}, {\n\twsl: '/mnt/c/Program Files (x86)/Microsoft/Edge/Application/msedge.exe'\n}));\n\nopen.apps = apps;\nopen.openApp = openApp;\n\nmodule.exports = open;\n", "// eslint-disable-next-line @typescript-eslint/no-extraneous-class\nexport abstract class _CodeOrName {\n  abstract readonly str: string\n  abstract readonly names: UsedNames\n  abstract toString(): string\n  abstract emptyStr(): boolean\n}\n\nexport const IDENTIFIER = /^[a-z$_][a-z$_0-9]*$/i\n\nexport class Name extends _CodeOrName {\n  readonly str: string\n  constructor(s: string) {\n    super()\n    if (!IDENTIFIER.test(s)) throw new Error(\"CodeGen: name must be a valid identifier\")\n    this.str = s\n  }\n\n  toString(): string {\n    return this.str\n  }\n\n  emptyStr(): boolean {\n    return false\n  }\n\n  get names(): UsedNames {\n    return {[this.str]: 1}\n  }\n}\n\nexport class _Code extends _CodeOrName {\n  readonly _items: readonly CodeItem[]\n  private _str?: string\n  private _names?: UsedNames\n\n  constructor(code: string | readonly CodeItem[]) {\n    super()\n    this._items = typeof code === \"string\" ? [code] : code\n  }\n\n  toString(): string {\n    return this.str\n  }\n\n  emptyStr(): boolean {\n    if (this._items.length > 1) return false\n    const item = this._items[0]\n    return item === \"\" || item === '\"\"'\n  }\n\n  get str(): string {\n    return (this._str ??= this._items.reduce((s: string, c: CodeItem) => `${s}${c}`, \"\"))\n  }\n\n  get names(): UsedNames {\n    return (this._names ??= this._items.reduce((names: UsedNames, c) => {\n      if (c instanceof Name) names[c.str] = (names[c.str] || 0) + 1\n      return names\n    }, {}))\n  }\n}\n\nexport type CodeItem = Name | string | number | boolean | null\n\nexport type UsedNames = Record<string, number | undefined>\n\nexport type Code = _Code | Name\n\nexport type SafeExpr = Code | number | boolean | null\n\nexport const nil = new _Code(\"\")\n\ntype CodeArg = SafeExpr | string | undefined\n\nexport function _(strs: TemplateStringsArray, ...args: CodeArg[]): _Code {\n  const code: CodeItem[] = [strs[0]]\n  let i = 0\n  while (i < args.length) {\n    addCodeArg(code, args[i])\n    code.push(strs[++i])\n  }\n  return new _Code(code)\n}\n\nconst plus = new _Code(\"+\")\n\nexport function str(strs: TemplateStringsArray, ...args: (CodeArg | string[])[]): _Code {\n  const expr: CodeItem[] = [safeStringify(strs[0])]\n  let i = 0\n  while (i < args.length) {\n    expr.push(plus)\n    addCodeArg(expr, args[i])\n    expr.push(plus, safeStringify(strs[++i]))\n  }\n  optimize(expr)\n  return new _Code(expr)\n}\n\nexport function addCodeArg(code: CodeItem[], arg: CodeArg | string[]): void {\n  if (arg instanceof _Code) code.push(...arg._items)\n  else if (arg instanceof Name) code.push(arg)\n  else code.push(interpolate(arg))\n}\n\nfunction optimize(expr: CodeItem[]): void {\n  let i = 1\n  while (i < expr.length - 1) {\n    if (expr[i] === plus) {\n      const res = mergeExprItems(expr[i - 1], expr[i + 1])\n      if (res !== undefined) {\n        expr.splice(i - 1, 3, res)\n        continue\n      }\n      expr[i++] = \"+\"\n    }\n    i++\n  }\n}\n\nfunction mergeExprItems(a: CodeItem, b: CodeItem): CodeItem | undefined {\n  if (b === '\"\"') return a\n  if (a === '\"\"') return b\n  if (typeof a == \"string\") {\n    if (b instanceof Name || a[a.length - 1] !== '\"') return\n    if (typeof b != \"string\") return `${a.slice(0, -1)}${b}\"`\n    if (b[0] === '\"') return a.slice(0, -1) + b.slice(1)\n    return\n  }\n  if (typeof b == \"string\" && b[0] === '\"' && !(a instanceof Name)) return `\"${a}${b.slice(1)}`\n  return\n}\n\nexport function strConcat(c1: Code, c2: Code): Code {\n  return c2.emptyStr() ? c1 : c1.emptyStr() ? c2 : str`${c1}${c2}`\n}\n\n// TODO do not allow arrays here\nfunction interpolate(x?: string | string[] | number | boolean | null): SafeExpr | string {\n  return typeof x == \"number\" || typeof x == \"boolean\" || x === null\n    ? x\n    : safeStringify(Array.isArray(x) ? x.join(\",\") : x)\n}\n\nexport function stringify(x: unknown): Code {\n  return new _Code(safeStringify(x))\n}\n\nexport function safeStringify(x: unknown): string {\n  return JSON.stringify(x)\n    .replace(/\\u2028/g, \"\\\\u2028\")\n    .replace(/\\u2029/g, \"\\\\u2029\")\n}\n\nexport function getProperty(key: Code | string | number): Code {\n  return typeof key == \"string\" && IDENTIFIER.test(key) ? new _Code(`.${key}`) : _`[${key}]`\n}\n\n//Does best effort to format the name properly\nexport function getEsmExportName(key: Code | string | number): Code {\n  if (typeof key == \"string\" && IDENTIFIER.test(key)) {\n    return new _Code(`${key}`)\n  }\n  throw new Error(`CodeGen: invalid export name: ${key}, use explicit $id name mapping`)\n}\n\nexport function regexpCode(rx: RegExp): Code {\n  return new _Code(rx.toString())\n}\n", "import {_, nil, Code, Name} from \"./code\"\n\ninterface NameGroup {\n  prefix: string\n  index: number\n}\n\nexport interface NameValue {\n  ref: ValueReference // this is the reference to any value that can be referred to from generated code via `globals` var in the closure\n  key?: unknown // any key to identify a global to avoid duplicates, if not passed ref is used\n  code?: Code // this is the code creating the value needed for standalone code wit_out closure - can be a primitive value, function or import (`require`)\n}\n\nexport type ValueReference = unknown // possibly make CodeGen parameterized type on this type\n\nclass ValueError extends Error {\n  readonly value?: NameValue\n  constructor(name: ValueScopeName) {\n    super(`CodeGen: \"code\" for ${name} not defined`)\n    this.value = name.value\n  }\n}\n\ninterface ScopeOptions {\n  prefixes?: Set<string>\n  parent?: Scope\n}\n\ninterface ValueScopeOptions extends ScopeOptions {\n  scope: ScopeStore\n  es5?: boolean\n  lines?: boolean\n}\n\nexport type ScopeStore = Record<string, ValueReference[] | undefined>\n\ntype ScopeValues = {\n  [Prefix in string]?: Map<unknown, ValueScopeName>\n}\n\nexport type ScopeValueSets = {\n  [Prefix in string]?: Set<ValueScopeName>\n}\n\nexport enum UsedValueState {\n  Started,\n  Completed,\n}\n\nexport type UsedScopeValues = {\n  [Prefix in string]?: Map<ValueScopeName, UsedValueState | undefined>\n}\n\nexport const varKinds = {\n  const: new Name(\"const\"),\n  let: new Name(\"let\"),\n  var: new Name(\"var\"),\n}\n\nexport class Scope {\n  protected readonly _names: {[Prefix in string]?: NameGroup} = {}\n  protected readonly _prefixes?: Set<string>\n  protected readonly _parent?: Scope\n\n  constructor({prefixes, parent}: ScopeOptions = {}) {\n    this._prefixes = prefixes\n    this._parent = parent\n  }\n\n  toName(nameOrPrefix: Name | string): Name {\n    return nameOrPrefix instanceof Name ? nameOrPrefix : this.name(nameOrPrefix)\n  }\n\n  name(prefix: string): Name {\n    return new Name(this._newName(prefix))\n  }\n\n  protected _newName(prefix: string): string {\n    const ng = this._names[prefix] || this._nameGroup(prefix)\n    return `${prefix}${ng.index++}`\n  }\n\n  private _nameGroup(prefix: string): NameGroup {\n    if (this._parent?._prefixes?.has(prefix) || (this._prefixes && !this._prefixes.has(prefix))) {\n      throw new Error(`CodeGen: prefix \"${prefix}\" is not allowed in this scope`)\n    }\n    return (this._names[prefix] = {prefix, index: 0})\n  }\n}\n\ninterface ScopePath {\n  property: string\n  itemIndex: number\n}\n\nexport class ValueScopeName extends Name {\n  readonly prefix: string\n  value?: NameValue\n  scopePath?: Code\n\n  constructor(prefix: string, nameStr: string) {\n    super(nameStr)\n    this.prefix = prefix\n  }\n\n  setValue(value: NameValue, {property, itemIndex}: ScopePath): void {\n    this.value = value\n    this.scopePath = _`.${new Name(property)}[${itemIndex}]`\n  }\n}\n\ninterface VSOptions extends ValueScopeOptions {\n  _n: Code\n}\n\nconst line = _`\\n`\n\nexport class ValueScope extends Scope {\n  protected readonly _values: ScopeValues = {}\n  protected readonly _scope: ScopeStore\n  readonly opts: VSOptions\n\n  constructor(opts: ValueScopeOptions) {\n    super(opts)\n    this._scope = opts.scope\n    this.opts = {...opts, _n: opts.lines ? line : nil}\n  }\n\n  get(): ScopeStore {\n    return this._scope\n  }\n\n  name(prefix: string): ValueScopeName {\n    return new ValueScopeName(prefix, this._newName(prefix))\n  }\n\n  value(nameOrPrefix: ValueScopeName | string, value: NameValue): ValueScopeName {\n    if (value.ref === undefined) throw new Error(\"CodeGen: ref must be passed in value\")\n    const name = this.toName(nameOrPrefix) as ValueScopeName\n    const {prefix} = name\n    const valueKey = value.key ?? value.ref\n    let vs = this._values[prefix]\n    if (vs) {\n      const _name = vs.get(valueKey)\n      if (_name) return _name\n    } else {\n      vs = this._values[prefix] = new Map()\n    }\n    vs.set(valueKey, name)\n\n    const s = this._scope[prefix] || (this._scope[prefix] = [])\n    const itemIndex = s.length\n    s[itemIndex] = value.ref\n    name.setValue(value, {property: prefix, itemIndex})\n    return name\n  }\n\n  getValue(prefix: string, keyOrRef: unknown): ValueScopeName | undefined {\n    const vs = this._values[prefix]\n    if (!vs) return\n    return vs.get(keyOrRef)\n  }\n\n  scopeRefs(scopeName: Name, values: ScopeValues | ScopeValueSets = this._values): Code {\n    return this._reduceValues(values, (name: ValueScopeName) => {\n      if (name.scopePath === undefined) throw new Error(`CodeGen: name \"${name}\" has no value`)\n      return _`${scopeName}${name.scopePath}`\n    })\n  }\n\n  scopeCode(\n    values: ScopeValues | ScopeValueSets = this._values,\n    usedValues?: UsedScopeValues,\n    getCode?: (n: ValueScopeName) => Code | undefined\n  ): Code {\n    return this._reduceValues(\n      values,\n      (name: ValueScopeName) => {\n        if (name.value === undefined) throw new Error(`CodeGen: name \"${name}\" has no value`)\n        return name.value.code\n      },\n      usedValues,\n      getCode\n    )\n  }\n\n  private _reduceValues(\n    values: ScopeValues | ScopeValueSets,\n    valueCode: (n: ValueScopeName) => Code | undefined,\n    usedValues: UsedScopeValues = {},\n    getCode?: (n: ValueScopeName) => Code | undefined\n  ): Code {\n    let code: Code = nil\n    for (const prefix in values) {\n      const vs = values[prefix]\n      if (!vs) continue\n      const nameSet = (usedValues[prefix] = usedValues[prefix] || new Map())\n      vs.forEach((name: ValueScopeName) => {\n        if (nameSet.has(name)) return\n        nameSet.set(name, UsedValueState.Started)\n        let c = valueCode(name)\n        if (c) {\n          const def = this.opts.es5 ? varKinds.var : varKinds.const\n          code = _`${code}${def} ${name} = ${c};${this.opts._n}`\n        } else if ((c = getCode?.(name))) {\n          code = _`${code}${c}${this.opts._n}`\n        } else {\n          throw new ValueError(name)\n        }\n        nameSet.set(name, UsedValueState.Completed)\n      })\n    }\n    return code\n  }\n}\n", "import type {ScopeValueSets, NameValue, ValueScope, ValueScopeName} from \"./scope\"\nimport {_, nil, _Code, Code, Name, UsedNames, CodeItem, addCodeArg, _CodeOrName} from \"./code\"\nimport {Scope, varKinds} from \"./scope\"\n\nexport {_, str, strConcat, nil, getProperty, stringify, regexpCode, Name, Code} from \"./code\"\nexport {Scope, ScopeStore, ValueScope, ValueScopeName, ScopeValueSets, varKinds} from \"./scope\"\n\n// type for expressions that can be safely inserted in code without quotes\nexport type SafeExpr = Code | number | boolean | null\n\n// type that is either Code of function that adds code to CodeGen instance using its methods\nexport type Block = Code | (() => void)\n\nexport const operators = {\n  GT: new _Code(\">\"),\n  GTE: new _Code(\">=\"),\n  LT: new _Code(\"<\"),\n  LTE: new _Code(\"<=\"),\n  EQ: new _Code(\"===\"),\n  NEQ: new _Code(\"!==\"),\n  NOT: new _Code(\"!\"),\n  OR: new _Code(\"||\"),\n  AND: new _Code(\"&&\"),\n  ADD: new _Code(\"+\"),\n}\n\nabstract class Node {\n  abstract readonly names: UsedNames\n\n  optimizeNodes(): this | ChildNode | ChildNode[] | undefined {\n    return this\n  }\n\n  optimizeNames(_names: UsedNames, _constants: Constants): this | undefined {\n    return this\n  }\n\n  // get count(): number {\n  //   return 1\n  // }\n}\n\nclass Def extends Node {\n  constructor(\n    private readonly varKind: Name,\n    private readonly name: Name,\n    private rhs?: SafeExpr\n  ) {\n    super()\n  }\n\n  render({es5, _n}: CGOptions): string {\n    const varKind = es5 ? varKinds.var : this.varKind\n    const rhs = this.rhs === undefined ? \"\" : ` = ${this.rhs}`\n    return `${varKind} ${this.name}${rhs};` + _n\n  }\n\n  optimizeNames(names: UsedNames, constants: Constants): this | undefined {\n    if (!names[this.name.str]) return\n    if (this.rhs) this.rhs = optimizeExpr(this.rhs, names, constants)\n    return this\n  }\n\n  get names(): UsedNames {\n    return this.rhs instanceof _CodeOrName ? this.rhs.names : {}\n  }\n}\n\nclass Assign extends Node {\n  constructor(\n    readonly lhs: Code,\n    public rhs: SafeExpr,\n    private readonly sideEffects?: boolean\n  ) {\n    super()\n  }\n\n  render({_n}: CGOptions): string {\n    return `${this.lhs} = ${this.rhs};` + _n\n  }\n\n  optimizeNames(names: UsedNames, constants: Constants): this | undefined {\n    if (this.lhs instanceof Name && !names[this.lhs.str] && !this.sideEffects) return\n    this.rhs = optimizeExpr(this.rhs, names, constants)\n    return this\n  }\n\n  get names(): UsedNames {\n    const names = this.lhs instanceof Name ? {} : {...this.lhs.names}\n    return addExprNames(names, this.rhs)\n  }\n}\n\nclass AssignOp extends Assign {\n  constructor(\n    lhs: Code,\n    private readonly op: Code,\n    rhs: SafeExpr,\n    sideEffects?: boolean\n  ) {\n    super(lhs, rhs, sideEffects)\n  }\n\n  render({_n}: CGOptions): string {\n    return `${this.lhs} ${this.op}= ${this.rhs};` + _n\n  }\n}\n\nclass Label extends Node {\n  readonly names: UsedNames = {}\n  constructor(readonly label: Name) {\n    super()\n  }\n\n  render({_n}: CGOptions): string {\n    return `${this.label}:` + _n\n  }\n}\n\nclass Break extends Node {\n  readonly names: UsedNames = {}\n  constructor(readonly label?: Code) {\n    super()\n  }\n\n  render({_n}: CGOptions): string {\n    const label = this.label ? ` ${this.label}` : \"\"\n    return `break${label};` + _n\n  }\n}\n\nclass Throw extends Node {\n  constructor(readonly error: Code) {\n    super()\n  }\n\n  render({_n}: CGOptions): string {\n    return `throw ${this.error};` + _n\n  }\n\n  get names(): UsedNames {\n    return this.error.names\n  }\n}\n\nclass AnyCode extends Node {\n  constructor(private code: SafeExpr) {\n    super()\n  }\n\n  render({_n}: CGOptions): string {\n    return `${this.code};` + _n\n  }\n\n  optimizeNodes(): this | undefined {\n    return `${this.code}` ? this : undefined\n  }\n\n  optimizeNames(names: UsedNames, constants: Constants): this {\n    this.code = optimizeExpr(this.code, names, constants)\n    return this\n  }\n\n  get names(): UsedNames {\n    return this.code instanceof _CodeOrName ? this.code.names : {}\n  }\n}\n\nabstract class ParentNode extends Node {\n  constructor(readonly nodes: ChildNode[] = []) {\n    super()\n  }\n\n  render(opts: CGOptions): string {\n    return this.nodes.reduce((code, n) => code + n.render(opts), \"\")\n  }\n\n  optimizeNodes(): this | ChildNode | ChildNode[] | undefined {\n    const {nodes} = this\n    let i = nodes.length\n    while (i--) {\n      const n = nodes[i].optimizeNodes()\n      if (Array.isArray(n)) nodes.splice(i, 1, ...n)\n      else if (n) nodes[i] = n\n      else nodes.splice(i, 1)\n    }\n    return nodes.length > 0 ? this : undefined\n  }\n\n  optimizeNames(names: UsedNames, constants: Constants): this | undefined {\n    const {nodes} = this\n    let i = nodes.length\n    while (i--) {\n      // iterating backwards improves 1-pass optimization\n      const n = nodes[i]\n      if (n.optimizeNames(names, constants)) continue\n      subtractNames(names, n.names)\n      nodes.splice(i, 1)\n    }\n    return nodes.length > 0 ? this : undefined\n  }\n\n  get names(): UsedNames {\n    return this.nodes.reduce((names: UsedNames, n) => addNames(names, n.names), {})\n  }\n\n  // get count(): number {\n  //   return this.nodes.reduce((c, n) => c + n.count, 1)\n  // }\n}\n\nabstract class BlockNode extends ParentNode {\n  render(opts: CGOptions): string {\n    return \"{\" + opts._n + super.render(opts) + \"}\" + opts._n\n  }\n}\n\nclass Root extends ParentNode {}\n\nclass Else extends BlockNode {\n  static readonly kind = \"else\"\n}\n\nclass If extends BlockNode {\n  static readonly kind = \"if\"\n  else?: If | Else\n  constructor(\n    private condition: Code | boolean,\n    nodes?: ChildNode[]\n  ) {\n    super(nodes)\n  }\n\n  render(opts: CGOptions): string {\n    let code = `if(${this.condition})` + super.render(opts)\n    if (this.else) code += \"else \" + this.else.render(opts)\n    return code\n  }\n\n  optimizeNodes(): If | ChildNode[] | undefined {\n    super.optimizeNodes()\n    const cond = this.condition\n    if (cond === true) return this.nodes // else is ignored here\n    let e = this.else\n    if (e) {\n      const ns = e.optimizeNodes()\n      e = this.else = Array.isArray(ns) ? new Else(ns) : (ns as Else | undefined)\n    }\n    if (e) {\n      if (cond === false) return e instanceof If ? e : e.nodes\n      if (this.nodes.length) return this\n      return new If(not(cond), e instanceof If ? [e] : e.nodes)\n    }\n    if (cond === false || !this.nodes.length) return undefined\n    return this\n  }\n\n  optimizeNames(names: UsedNames, constants: Constants): this | undefined {\n    this.else = this.else?.optimizeNames(names, constants)\n    if (!(super.optimizeNames(names, constants) || this.else)) return\n    this.condition = optimizeExpr(this.condition, names, constants)\n    return this\n  }\n\n  get names(): UsedNames {\n    const names = super.names\n    addExprNames(names, this.condition)\n    if (this.else) addNames(names, this.else.names)\n    return names\n  }\n\n  // get count(): number {\n  //   return super.count + (this.else?.count || 0)\n  // }\n}\n\nabstract class For extends BlockNode {\n  static readonly kind = \"for\"\n}\n\nclass ForLoop extends For {\n  constructor(private iteration: Code) {\n    super()\n  }\n\n  render(opts: CGOptions): string {\n    return `for(${this.iteration})` + super.render(opts)\n  }\n\n  optimizeNames(names: UsedNames, constants: Constants): this | undefined {\n    if (!super.optimizeNames(names, constants)) return\n    this.iteration = optimizeExpr(this.iteration, names, constants)\n    return this\n  }\n\n  get names(): UsedNames {\n    return addNames(super.names, this.iteration.names)\n  }\n}\n\nclass ForRange extends For {\n  constructor(\n    private readonly varKind: Name,\n    private readonly name: Name,\n    private readonly from: SafeExpr,\n    private readonly to: SafeExpr\n  ) {\n    super()\n  }\n\n  render(opts: CGOptions): string {\n    const varKind = opts.es5 ? varKinds.var : this.varKind\n    const {name, from, to} = this\n    return `for(${varKind} ${name}=${from}; ${name}<${to}; ${name}++)` + super.render(opts)\n  }\n\n  get names(): UsedNames {\n    const names = addExprNames(super.names, this.from)\n    return addExprNames(names, this.to)\n  }\n}\n\nclass ForIter extends For {\n  constructor(\n    private readonly loop: \"of\" | \"in\",\n    private readonly varKind: Name,\n    private readonly name: Name,\n    private iterable: Code\n  ) {\n    super()\n  }\n\n  render(opts: CGOptions): string {\n    return `for(${this.varKind} ${this.name} ${this.loop} ${this.iterable})` + super.render(opts)\n  }\n\n  optimizeNames(names: UsedNames, constants: Constants): this | undefined {\n    if (!super.optimizeNames(names, constants)) return\n    this.iterable = optimizeExpr(this.iterable, names, constants)\n    return this\n  }\n\n  get names(): UsedNames {\n    return addNames(super.names, this.iterable.names)\n  }\n}\n\nclass Func extends BlockNode {\n  static readonly kind = \"func\"\n  constructor(\n    public name: Name,\n    public args: Code,\n    public async?: boolean\n  ) {\n    super()\n  }\n\n  render(opts: CGOptions): string {\n    const _async = this.async ? \"async \" : \"\"\n    return `${_async}function ${this.name}(${this.args})` + super.render(opts)\n  }\n}\n\nclass Return extends ParentNode {\n  static readonly kind = \"return\"\n\n  render(opts: CGOptions): string {\n    return \"return \" + super.render(opts)\n  }\n}\n\nclass Try extends BlockNode {\n  catch?: Catch\n  finally?: Finally\n\n  render(opts: CGOptions): string {\n    let code = \"try\" + super.render(opts)\n    if (this.catch) code += this.catch.render(opts)\n    if (this.finally) code += this.finally.render(opts)\n    return code\n  }\n\n  optimizeNodes(): this {\n    super.optimizeNodes()\n    this.catch?.optimizeNodes() as Catch | undefined\n    this.finally?.optimizeNodes() as Finally | undefined\n    return this\n  }\n\n  optimizeNames(names: UsedNames, constants: Constants): this {\n    super.optimizeNames(names, constants)\n    this.catch?.optimizeNames(names, constants)\n    this.finally?.optimizeNames(names, constants)\n    return this\n  }\n\n  get names(): UsedNames {\n    const names = super.names\n    if (this.catch) addNames(names, this.catch.names)\n    if (this.finally) addNames(names, this.finally.names)\n    return names\n  }\n\n  // get count(): number {\n  //   return super.count + (this.catch?.count || 0) + (this.finally?.count || 0)\n  // }\n}\n\nclass Catch extends BlockNode {\n  static readonly kind = \"catch\"\n  constructor(readonly error: Name) {\n    super()\n  }\n\n  render(opts: CGOptions): string {\n    return `catch(${this.error})` + super.render(opts)\n  }\n}\n\nclass Finally extends BlockNode {\n  static readonly kind = \"finally\"\n  render(opts: CGOptions): string {\n    return \"finally\" + super.render(opts)\n  }\n}\n\ntype StartBlockNode = If | For | Func | Return | Try\n\ntype LeafNode = Def | Assign | Label | Break | Throw | AnyCode\n\ntype ChildNode = StartBlockNode | LeafNode\n\ntype EndBlockNodeType =\n  | typeof If\n  | typeof Else\n  | typeof For\n  | typeof Func\n  | typeof Return\n  | typeof Catch\n  | typeof Finally\n\ntype Constants = Record<string, SafeExpr | undefined>\n\nexport interface CodeGenOptions {\n  es5?: boolean\n  lines?: boolean\n  ownProperties?: boolean\n}\n\ninterface CGOptions extends CodeGenOptions {\n  _n: \"\\n\" | \"\"\n}\n\nexport class CodeGen {\n  readonly _scope: Scope\n  readonly _extScope: ValueScope\n  readonly _values: ScopeValueSets = {}\n  private readonly _nodes: ParentNode[]\n  private readonly _blockStarts: number[] = []\n  private readonly _constants: Constants = {}\n  private readonly opts: CGOptions\n\n  constructor(extScope: ValueScope, opts: CodeGenOptions = {}) {\n    this.opts = {...opts, _n: opts.lines ? \"\\n\" : \"\"}\n    this._extScope = extScope\n    this._scope = new Scope({parent: extScope})\n    this._nodes = [new Root()]\n  }\n\n  toString(): string {\n    return this._root.render(this.opts)\n  }\n\n  // returns unique name in the internal scope\n  name(prefix: string): Name {\n    return this._scope.name(prefix)\n  }\n\n  // reserves unique name in the external scope\n  scopeName(prefix: string): ValueScopeName {\n    return this._extScope.name(prefix)\n  }\n\n  // reserves unique name in the external scope and assigns value to it\n  scopeValue(prefixOrName: ValueScopeName | string, value: NameValue): Name {\n    const name = this._extScope.value(prefixOrName, value)\n    const vs = this._values[name.prefix] || (this._values[name.prefix] = new Set())\n    vs.add(name)\n    return name\n  }\n\n  getScopeValue(prefix: string, keyOrRef: unknown): ValueScopeName | undefined {\n    return this._extScope.getValue(prefix, keyOrRef)\n  }\n\n  // return code that assigns values in the external scope to the names that are used internally\n  // (same names that were returned by gen.scopeName or gen.scopeValue)\n  scopeRefs(scopeName: Name): Code {\n    return this._extScope.scopeRefs(scopeName, this._values)\n  }\n\n  scopeCode(): Code {\n    return this._extScope.scopeCode(this._values)\n  }\n\n  private _def(\n    varKind: Name,\n    nameOrPrefix: Name | string,\n    rhs?: SafeExpr,\n    constant?: boolean\n  ): Name {\n    const name = this._scope.toName(nameOrPrefix)\n    if (rhs !== undefined && constant) this._constants[name.str] = rhs\n    this._leafNode(new Def(varKind, name, rhs))\n    return name\n  }\n\n  // `const` declaration (`var` in es5 mode)\n  const(nameOrPrefix: Name | string, rhs: SafeExpr, _constant?: boolean): Name {\n    return this._def(varKinds.const, nameOrPrefix, rhs, _constant)\n  }\n\n  // `let` declaration with optional assignment (`var` in es5 mode)\n  let(nameOrPrefix: Name | string, rhs?: SafeExpr, _constant?: boolean): Name {\n    return this._def(varKinds.let, nameOrPrefix, rhs, _constant)\n  }\n\n  // `var` declaration with optional assignment\n  var(nameOrPrefix: Name | string, rhs?: SafeExpr, _constant?: boolean): Name {\n    return this._def(varKinds.var, nameOrPrefix, rhs, _constant)\n  }\n\n  // assignment code\n  assign(lhs: Code, rhs: SafeExpr, sideEffects?: boolean): CodeGen {\n    return this._leafNode(new Assign(lhs, rhs, sideEffects))\n  }\n\n  // `+=` code\n  add(lhs: Code, rhs: SafeExpr): CodeGen {\n    return this._leafNode(new AssignOp(lhs, operators.ADD, rhs))\n  }\n\n  // appends passed SafeExpr to code or executes Block\n  code(c: Block | SafeExpr): CodeGen {\n    if (typeof c == \"function\") c()\n    else if (c !== nil) this._leafNode(new AnyCode(c))\n    return this\n  }\n\n  // returns code for object literal for the passed argument list of key-value pairs\n  object(...keyValues: [Name | string, SafeExpr | string][]): _Code {\n    const code: CodeItem[] = [\"{\"]\n    for (const [key, value] of keyValues) {\n      if (code.length > 1) code.push(\",\")\n      code.push(key)\n      if (key !== value || this.opts.es5) {\n        code.push(\":\")\n        addCodeArg(code, value)\n      }\n    }\n    code.push(\"}\")\n    return new _Code(code)\n  }\n\n  // `if` clause (or statement if `thenBody` and, optionally, `elseBody` are passed)\n  if(condition: Code | boolean, thenBody?: Block, elseBody?: Block): CodeGen {\n    this._blockNode(new If(condition))\n\n    if (thenBody && elseBody) {\n      this.code(thenBody).else().code(elseBody).endIf()\n    } else if (thenBody) {\n      this.code(thenBody).endIf()\n    } else if (elseBody) {\n      throw new Error('CodeGen: \"else\" body without \"then\" body')\n    }\n    return this\n  }\n\n  // `else if` clause - invalid without `if` or after `else` clauses\n  elseIf(condition: Code | boolean): CodeGen {\n    return this._elseNode(new If(condition))\n  }\n\n  // `else` clause - only valid after `if` or `else if` clauses\n  else(): CodeGen {\n    return this._elseNode(new Else())\n  }\n\n  // end `if` statement (needed if gen.if was used only with condition)\n  endIf(): CodeGen {\n    return this._endBlockNode(If, Else)\n  }\n\n  private _for(node: For, forBody?: Block): CodeGen {\n    this._blockNode(node)\n    if (forBody) this.code(forBody).endFor()\n    return this\n  }\n\n  // a generic `for` clause (or statement if `forBody` is passed)\n  for(iteration: Code, forBody?: Block): CodeGen {\n    return this._for(new ForLoop(iteration), forBody)\n  }\n\n  // `for` statement for a range of values\n  forRange(\n    nameOrPrefix: Name | string,\n    from: SafeExpr,\n    to: SafeExpr,\n    forBody: (index: Name) => void,\n    varKind: Code = this.opts.es5 ? varKinds.var : varKinds.let\n  ): CodeGen {\n    const name = this._scope.toName(nameOrPrefix)\n    return this._for(new ForRange(varKind, name, from, to), () => forBody(name))\n  }\n\n  // `for-of` statement (in es5 mode replace with a normal for loop)\n  forOf(\n    nameOrPrefix: Name | string,\n    iterable: Code,\n    forBody: (item: Name) => void,\n    varKind: Code = varKinds.const\n  ): CodeGen {\n    const name = this._scope.toName(nameOrPrefix)\n    if (this.opts.es5) {\n      const arr = iterable instanceof Name ? iterable : this.var(\"_arr\", iterable)\n      return this.forRange(\"_i\", 0, _`${arr}.length`, (i) => {\n        this.var(name, _`${arr}[${i}]`)\n        forBody(name)\n      })\n    }\n    return this._for(new ForIter(\"of\", varKind, name, iterable), () => forBody(name))\n  }\n\n  // `for-in` statement.\n  // With option `ownProperties` replaced with a `for-of` loop for object keys\n  forIn(\n    nameOrPrefix: Name | string,\n    obj: Code,\n    forBody: (item: Name) => void,\n    varKind: Code = this.opts.es5 ? varKinds.var : varKinds.const\n  ): CodeGen {\n    if (this.opts.ownProperties) {\n      return this.forOf(nameOrPrefix, _`Object.keys(${obj})`, forBody)\n    }\n    const name = this._scope.toName(nameOrPrefix)\n    return this._for(new ForIter(\"in\", varKind, name, obj), () => forBody(name))\n  }\n\n  // end `for` loop\n  endFor(): CodeGen {\n    return this._endBlockNode(For)\n  }\n\n  // `label` statement\n  label(label: Name): CodeGen {\n    return this._leafNode(new Label(label))\n  }\n\n  // `break` statement\n  break(label?: Code): CodeGen {\n    return this._leafNode(new Break(label))\n  }\n\n  // `return` statement\n  return(value: Block | SafeExpr): CodeGen {\n    const node = new Return()\n    this._blockNode(node)\n    this.code(value)\n    if (node.nodes.length !== 1) throw new Error('CodeGen: \"return\" should have one node')\n    return this._endBlockNode(Return)\n  }\n\n  // `try` statement\n  try(tryBody: Block, catchCode?: (e: Name) => void, finallyCode?: Block): CodeGen {\n    if (!catchCode && !finallyCode) throw new Error('CodeGen: \"try\" without \"catch\" and \"finally\"')\n    const node = new Try()\n    this._blockNode(node)\n    this.code(tryBody)\n    if (catchCode) {\n      const error = this.name(\"e\")\n      this._currNode = node.catch = new Catch(error)\n      catchCode(error)\n    }\n    if (finallyCode) {\n      this._currNode = node.finally = new Finally()\n      this.code(finallyCode)\n    }\n    return this._endBlockNode(Catch, Finally)\n  }\n\n  // `throw` statement\n  throw(error: Code): CodeGen {\n    return this._leafNode(new Throw(error))\n  }\n\n  // start self-balancing block\n  block(body?: Block, nodeCount?: number): CodeGen {\n    this._blockStarts.push(this._nodes.length)\n    if (body) this.code(body).endBlock(nodeCount)\n    return this\n  }\n\n  // end the current self-balancing block\n  endBlock(nodeCount?: number): CodeGen {\n    const len = this._blockStarts.pop()\n    if (len === undefined) throw new Error(\"CodeGen: not in self-balancing block\")\n    const toClose = this._nodes.length - len\n    if (toClose < 0 || (nodeCount !== undefined && toClose !== nodeCount)) {\n      throw new Error(`CodeGen: wrong number of nodes: ${toClose} vs ${nodeCount} expected`)\n    }\n    this._nodes.length = len\n    return this\n  }\n\n  // `function` heading (or definition if funcBody is passed)\n  func(name: Name, args: Code = nil, async?: boolean, funcBody?: Block): CodeGen {\n    this._blockNode(new Func(name, args, async))\n    if (funcBody) this.code(funcBody).endFunc()\n    return this\n  }\n\n  // end function definition\n  endFunc(): CodeGen {\n    return this._endBlockNode(Func)\n  }\n\n  optimize(n = 1): void {\n    while (n-- > 0) {\n      this._root.optimizeNodes()\n      this._root.optimizeNames(this._root.names, this._constants)\n    }\n  }\n\n  private _leafNode(node: LeafNode): CodeGen {\n    this._currNode.nodes.push(node)\n    return this\n  }\n\n  private _blockNode(node: StartBlockNode): void {\n    this._currNode.nodes.push(node)\n    this._nodes.push(node)\n  }\n\n  private _endBlockNode(N1: EndBlockNodeType, N2?: EndBlockNodeType): CodeGen {\n    const n = this._currNode\n    if (n instanceof N1 || (N2 && n instanceof N2)) {\n      this._nodes.pop()\n      return this\n    }\n    throw new Error(`CodeGen: not in block \"${N2 ? `${N1.kind}/${N2.kind}` : N1.kind}\"`)\n  }\n\n  private _elseNode(node: If | Else): CodeGen {\n    const n = this._currNode\n    if (!(n instanceof If)) {\n      throw new Error('CodeGen: \"else\" without \"if\"')\n    }\n    this._currNode = n.else = node\n    return this\n  }\n\n  private get _root(): Root {\n    return this._nodes[0] as Root\n  }\n\n  private get _currNode(): ParentNode {\n    const ns = this._nodes\n    return ns[ns.length - 1]\n  }\n\n  private set _currNode(node: ParentNode) {\n    const ns = this._nodes\n    ns[ns.length - 1] = node\n  }\n\n  // get nodeCount(): number {\n  //   return this._root.count\n  // }\n}\n\nfunction addNames(names: UsedNames, from: UsedNames): UsedNames {\n  for (const n in from) names[n] = (names[n] || 0) + (from[n] || 0)\n  return names\n}\n\nfunction addExprNames(names: UsedNames, from: SafeExpr): UsedNames {\n  return from instanceof _CodeOrName ? addNames(names, from.names) : names\n}\n\nfunction optimizeExpr<T extends SafeExpr | Code>(expr: T, names: UsedNames, constants: Constants): T\nfunction optimizeExpr(expr: SafeExpr, names: UsedNames, constants: Constants): SafeExpr {\n  if (expr instanceof Name) return replaceName(expr)\n  if (!canOptimize(expr)) return expr\n  return new _Code(\n    expr._items.reduce((items: CodeItem[], c: SafeExpr | string) => {\n      if (c instanceof Name) c = replaceName(c)\n      if (c instanceof _Code) items.push(...c._items)\n      else items.push(c)\n      return items\n    }, [])\n  )\n\n  function replaceName(n: Name): SafeExpr {\n    const c = constants[n.str]\n    if (c === undefined || names[n.str] !== 1) return n\n    delete names[n.str]\n    return c\n  }\n\n  function canOptimize(e: SafeExpr): e is _Code {\n    return (\n      e instanceof _Code &&\n      e._items.some(\n        (c) => c instanceof Name && names[c.str] === 1 && constants[c.str] !== undefined\n      )\n    )\n  }\n}\n\nfunction subtractNames(names: UsedNames, from: UsedNames): void {\n  for (const n in from) names[n] = (names[n] || 0) - (from[n] || 0)\n}\n\nexport function not<T extends Code | SafeExpr>(x: T): T\nexport function not(x: Code | SafeExpr): Code | SafeExpr {\n  return typeof x == \"boolean\" || typeof x == \"number\" || x === null ? !x : _`!${par(x)}`\n}\n\nconst andCode = mappend(operators.AND)\n\n// boolean AND (&&) expression with the passed arguments\nexport function and(...args: Code[]): Code {\n  return args.reduce(andCode)\n}\n\nconst orCode = mappend(operators.OR)\n\n// boolean OR (||) expression with the passed arguments\nexport function or(...args: Code[]): Code {\n  return args.reduce(orCode)\n}\n\ntype MAppend = (x: Code, y: Code) => Code\n\nfunction mappend(op: Code): MAppend {\n  return (x, y) => (x === nil ? y : y === nil ? x : _`${par(x)} ${op} ${par(y)}`)\n}\n\nfunction par(x: Code): Code {\n  return x instanceof Name ? x : _`(${x})`\n}\n", "import type {AnySchema, EvaluatedProperties, EvaluatedItems} from \"../types\"\nimport type {SchemaCxt, SchemaObjCxt} from \".\"\nimport {_, getProperty, Code, Name, CodeGen} from \"./codegen\"\nimport {_Code} from \"./codegen/code\"\nimport type {Rule, ValidationRules} from \"./rules\"\n\n// TODO refactor to use Set\nexport function toHash<T extends string = string>(arr: T[]): {[K in T]?: true} {\n  const hash: {[K in T]?: true} = {}\n  for (const item of arr) hash[item] = true\n  return hash\n}\n\nexport function alwaysValidSchema(it: SchemaCxt, schema: AnySchema): boolean | void {\n  if (typeof schema == \"boolean\") return schema\n  if (Object.keys(schema).length === 0) return true\n  checkUnknownRules(it, schema)\n  return !schemaHasRules(schema, it.self.RULES.all)\n}\n\nexport function checkUnknownRules(it: SchemaCxt, schema: AnySchema = it.schema): void {\n  const {opts, self} = it\n  if (!opts.strictSchema) return\n  if (typeof schema === \"boolean\") return\n  const rules = self.RULES.keywords\n  for (const key in schema) {\n    if (!rules[key]) checkStrictMode(it, `unknown keyword: \"${key}\"`)\n  }\n}\n\nexport function schemaHasRules(\n  schema: AnySchema,\n  rules: {[Key in string]?: boolean | Rule}\n): boolean {\n  if (typeof schema == \"boolean\") return !schema\n  for (const key in schema) if (rules[key]) return true\n  return false\n}\n\nexport function schemaHasRulesButRef(schema: AnySchema, RULES: ValidationRules): boolean {\n  if (typeof schema == \"boolean\") return !schema\n  for (const key in schema) if (key !== \"$ref\" && RULES.all[key]) return true\n  return false\n}\n\nexport function schemaRefOrVal(\n  {topSchemaRef, schemaPath}: SchemaObjCxt,\n  schema: unknown,\n  keyword: string,\n  $data?: string | false\n): Code | number | boolean {\n  if (!$data) {\n    if (typeof schema == \"number\" || typeof schema == \"boolean\") return schema\n    if (typeof schema == \"string\") return _`${schema}`\n  }\n  return _`${topSchemaRef}${schemaPath}${getProperty(keyword)}`\n}\n\nexport function unescapeFragment(str: string): string {\n  return unescapeJsonPointer(decodeURIComponent(str))\n}\n\nexport function escapeFragment(str: string | number): string {\n  return encodeURIComponent(escapeJsonPointer(str))\n}\n\nexport function escapeJsonPointer(str: string | number): string {\n  if (typeof str == \"number\") return `${str}`\n  return str.replace(/~/g, \"~0\").replace(/\\//g, \"~1\")\n}\n\nexport function unescapeJsonPointer(str: string): string {\n  return str.replace(/~1/g, \"/\").replace(/~0/g, \"~\")\n}\n\nexport function eachItem<T>(xs: T | T[], f: (x: T) => void): void {\n  if (Array.isArray(xs)) {\n    for (const x of xs) f(x)\n  } else {\n    f(xs)\n  }\n}\n\ntype SomeEvaluated = EvaluatedProperties | EvaluatedItems\n\ntype MergeEvaluatedFunc<T extends SomeEvaluated> = (\n  gen: CodeGen,\n  from: Name | T,\n  to: Name | Exclude<T, true> | undefined,\n  toName?: typeof Name\n) => Name | T\n\ninterface MakeMergeFuncArgs<T extends SomeEvaluated> {\n  mergeNames: (gen: CodeGen, from: Name, to: Name) => void\n  mergeToName: (gen: CodeGen, from: T, to: Name) => void\n  mergeValues: (from: T, to: Exclude<T, true>) => T\n  resultToName: (gen: CodeGen, res?: T) => Name\n}\n\nfunction makeMergeEvaluated<T extends SomeEvaluated>({\n  mergeNames,\n  mergeToName,\n  mergeValues,\n  resultToName,\n}: MakeMergeFuncArgs<T>): MergeEvaluatedFunc<T> {\n  return (gen, from, to, toName) => {\n    const res =\n      to === undefined\n        ? from\n        : to instanceof Name\n        ? (from instanceof Name ? mergeNames(gen, from, to) : mergeToName(gen, from, to), to)\n        : from instanceof Name\n        ? (mergeToName(gen, to, from), from)\n        : mergeValues(from, to)\n    return toName === Name && !(res instanceof Name) ? resultToName(gen, res) : res\n  }\n}\n\ninterface MergeEvaluated {\n  props: MergeEvaluatedFunc<EvaluatedProperties>\n  items: MergeEvaluatedFunc<EvaluatedItems>\n}\n\nexport const mergeEvaluated: MergeEvaluated = {\n  props: makeMergeEvaluated({\n    mergeNames: (gen, from, to) =>\n      gen.if(_`${to} !== true && ${from} !== undefined`, () => {\n        gen.if(\n          _`${from} === true`,\n          () => gen.assign(to, true),\n          () => gen.assign(to, _`${to} || {}`).code(_`Object.assign(${to}, ${from})`)\n        )\n      }),\n    mergeToName: (gen, from, to) =>\n      gen.if(_`${to} !== true`, () => {\n        if (from === true) {\n          gen.assign(to, true)\n        } else {\n          gen.assign(to, _`${to} || {}`)\n          setEvaluated(gen, to, from)\n        }\n      }),\n    mergeValues: (from, to) => (from === true ? true : {...from, ...to}),\n    resultToName: evaluatedPropsToName,\n  }),\n  items: makeMergeEvaluated({\n    mergeNames: (gen, from, to) =>\n      gen.if(_`${to} !== true && ${from} !== undefined`, () =>\n        gen.assign(to, _`${from} === true ? true : ${to} > ${from} ? ${to} : ${from}`)\n      ),\n    mergeToName: (gen, from, to) =>\n      gen.if(_`${to} !== true`, () =>\n        gen.assign(to, from === true ? true : _`${to} > ${from} ? ${to} : ${from}`)\n      ),\n    mergeValues: (from, to) => (from === true ? true : Math.max(from, to)),\n    resultToName: (gen, items) => gen.var(\"items\", items),\n  }),\n}\n\nexport function evaluatedPropsToName(gen: CodeGen, ps?: EvaluatedProperties): Name {\n  if (ps === true) return gen.var(\"props\", true)\n  const props = gen.var(\"props\", _`{}`)\n  if (ps !== undefined) setEvaluated(gen, props, ps)\n  return props\n}\n\nexport function setEvaluated(gen: CodeGen, props: Name, ps: {[K in string]?: true}): void {\n  Object.keys(ps).forEach((p) => gen.assign(_`${props}${getProperty(p)}`, true))\n}\n\nconst snippets: {[S in string]?: _Code} = {}\n\nexport function useFunc(gen: CodeGen, f: {code: string}): Name {\n  return gen.scopeValue(\"func\", {\n    ref: f,\n    code: snippets[f.code] || (snippets[f.code] = new _Code(f.code)),\n  })\n}\n\nexport enum Type {\n  Num,\n  Str,\n}\n\nexport function getErrorPath(\n  dataProp: Name | string | number,\n  dataPropType?: Type,\n  jsPropertySyntax?: boolean\n): Code | string {\n  // let path\n  if (dataProp instanceof Name) {\n    const isNumber = dataPropType === Type.Num\n    return jsPropertySyntax\n      ? isNumber\n        ? _`\"[\" + ${dataProp} + \"]\"`\n        : _`\"['\" + ${dataProp} + \"']\"`\n      : isNumber\n      ? _`\"/\" + ${dataProp}`\n      : _`\"/\" + ${dataProp}.replace(/~/g, \"~0\").replace(/\\\\//g, \"~1\")` // TODO maybe use global escapePointer\n  }\n  return jsPropertySyntax ? getProperty(dataProp).toString() : \"/\" + escapeJsonPointer(dataProp)\n}\n\nexport function checkStrictMode(\n  it: SchemaCxt,\n  msg: string,\n  mode: boolean | \"log\" = it.opts.strictSchema\n): void {\n  if (!mode) return\n  msg = `strict mode: ${msg}`\n  if (mode === true) throw new Error(msg)\n  it.self.logger.warn(msg)\n}\n", "import {Name} from \"./codegen\"\n\nconst names = {\n  // validation function arguments\n  data: new Name(\"data\"), // data passed to validation function\n  // args passed from referencing schema\n  valCxt: new Name(\"valCxt\"), // validation/data context - should not be used directly, it is destructured to the names below\n  instancePath: new Name(\"instancePath\"),\n  parentData: new Name(\"parentData\"),\n  parentDataProperty: new Name(\"parentDataProperty\"),\n  rootData: new Name(\"rootData\"), // root data - same as the data passed to the first/top validation function\n  dynamicAnchors: new Name(\"dynamicAnchors\"), // used to support recursiveRef and dynamicRef\n  // function scoped variables\n  vErrors: new Name(\"vErrors\"), // null or array of validation errors\n  errors: new Name(\"errors\"), // counter of validation errors\n  this: new Name(\"this\"),\n  // \"globals\"\n  self: new Name(\"self\"),\n  scope: new Name(\"scope\"),\n  // JTD serialize/parse name for JSON string and position\n  json: new Name(\"json\"),\n  jsonPos: new Name(\"jsonPos\"),\n  jsonLen: new Name(\"jsonLen\"),\n  jsonPart: new Name(\"jsonPart\"),\n}\n\nexport default names\n", "import type {KeywordErrorCxt, KeywordErrorDefinition} from \"../types\"\nimport type {SchemaCxt} from \"./index\"\nimport {CodeGen, _, str, strConcat, Code, Name} from \"./codegen\"\nimport {SafeExpr} from \"./codegen/code\"\nimport {getErrorPath, Type} from \"./util\"\nimport N from \"./names\"\n\nexport const keywordError: KeywordErrorDefinition = {\n  message: ({keyword}) => str`must pass \"${keyword}\" keyword validation`,\n}\n\nexport const keyword$DataError: KeywordErrorDefinition = {\n  message: ({keyword, schemaType}) =>\n    schemaType\n      ? str`\"${keyword}\" keyword must be ${schemaType} ($data)`\n      : str`\"${keyword}\" keyword is invalid ($data)`,\n}\n\nexport interface ErrorPaths {\n  instancePath?: Code\n  schemaPath?: string\n  parentSchema?: boolean\n}\n\nexport function reportError(\n  cxt: KeywordErrorCxt,\n  error: KeywordErrorDefinition = keywordError,\n  errorPaths?: ErrorPaths,\n  overrideAllErrors?: boolean\n): void {\n  const {it} = cxt\n  const {gen, compositeRule, allErrors} = it\n  const errObj = errorObjectCode(cxt, error, errorPaths)\n  if (overrideAllErrors ?? (compositeRule || allErrors)) {\n    addError(gen, errObj)\n  } else {\n    returnErrors(it, _`[${errObj}]`)\n  }\n}\n\nexport function reportExtraError(\n  cxt: KeywordErrorCxt,\n  error: KeywordErrorDefinition = keywordError,\n  errorPaths?: ErrorPaths\n): void {\n  const {it} = cxt\n  const {gen, compositeRule, allErrors} = it\n  const errObj = errorObjectCode(cxt, error, errorPaths)\n  addError(gen, errObj)\n  if (!(compositeRule || allErrors)) {\n    returnErrors(it, N.vErrors)\n  }\n}\n\nexport function resetErrorsCount(gen: CodeGen, errsCount: Name): void {\n  gen.assign(N.errors, errsCount)\n  gen.if(_`${N.vErrors} !== null`, () =>\n    gen.if(\n      errsCount,\n      () => gen.assign(_`${N.vErrors}.length`, errsCount),\n      () => gen.assign(N.vErrors, null)\n    )\n  )\n}\n\nexport function extendErrors({\n  gen,\n  keyword,\n  schemaValue,\n  data,\n  errsCount,\n  it,\n}: KeywordErrorCxt): void {\n  /* istanbul ignore if */\n  if (errsCount === undefined) throw new Error(\"ajv implementation error\")\n  const err = gen.name(\"err\")\n  gen.forRange(\"i\", errsCount, N.errors, (i) => {\n    gen.const(err, _`${N.vErrors}[${i}]`)\n    gen.if(_`${err}.instancePath === undefined`, () =>\n      gen.assign(_`${err}.instancePath`, strConcat(N.instancePath, it.errorPath))\n    )\n    gen.assign(_`${err}.schemaPath`, str`${it.errSchemaPath}/${keyword}`)\n    if (it.opts.verbose) {\n      gen.assign(_`${err}.schema`, schemaValue)\n      gen.assign(_`${err}.data`, data)\n    }\n  })\n}\n\nfunction addError(gen: CodeGen, errObj: Code): void {\n  const err = gen.const(\"err\", errObj)\n  gen.if(\n    _`${N.vErrors} === null`,\n    () => gen.assign(N.vErrors, _`[${err}]`),\n    _`${N.vErrors}.push(${err})`\n  )\n  gen.code(_`${N.errors}++`)\n}\n\nfunction returnErrors(it: SchemaCxt, errs: Code): void {\n  const {gen, validateName, schemaEnv} = it\n  if (schemaEnv.$async) {\n    gen.throw(_`new ${it.ValidationError as Name}(${errs})`)\n  } else {\n    gen.assign(_`${validateName}.errors`, errs)\n    gen.return(false)\n  }\n}\n\nconst E = {\n  keyword: new Name(\"keyword\"),\n  schemaPath: new Name(\"schemaPath\"), // also used in JTD errors\n  params: new Name(\"params\"),\n  propertyName: new Name(\"propertyName\"),\n  message: new Name(\"message\"),\n  schema: new Name(\"schema\"),\n  parentSchema: new Name(\"parentSchema\"),\n}\n\nfunction errorObjectCode(\n  cxt: KeywordErrorCxt,\n  error: KeywordErrorDefinition,\n  errorPaths?: ErrorPaths\n): Code {\n  const {createErrors} = cxt.it\n  if (createErrors === false) return _`{}`\n  return errorObject(cxt, error, errorPaths)\n}\n\nfunction errorObject(\n  cxt: KeywordErrorCxt,\n  error: KeywordErrorDefinition,\n  errorPaths: ErrorPaths = {}\n): Code {\n  const {gen, it} = cxt\n  const keyValues: [Name, SafeExpr | string][] = [\n    errorInstancePath(it, errorPaths),\n    errorSchemaPath(cxt, errorPaths),\n  ]\n  extraErrorProps(cxt, error, keyValues)\n  return gen.object(...keyValues)\n}\n\nfunction errorInstancePath({errorPath}: SchemaCxt, {instancePath}: ErrorPaths): [Name, Code] {\n  const instPath = instancePath\n    ? str`${errorPath}${getErrorPath(instancePath, Type.Str)}`\n    : errorPath\n  return [N.instancePath, strConcat(N.instancePath, instPath)]\n}\n\nfunction errorSchemaPath(\n  {keyword, it: {errSchemaPath}}: KeywordErrorCxt,\n  {schemaPath, parentSchema}: ErrorPaths\n): [Name, string | Code] {\n  let schPath = parentSchema ? errSchemaPath : str`${errSchemaPath}/${keyword}`\n  if (schemaPath) {\n    schPath = str`${schPath}${getErrorPath(schemaPath, Type.Str)}`\n  }\n  return [E.schemaPath, schPath]\n}\n\nfunction extraErrorProps(\n  cxt: KeywordErrorCxt,\n  {params, message}: KeywordErrorDefinition,\n  keyValues: [Name, SafeExpr | string][]\n): void {\n  const {keyword, data, schemaValue, it} = cxt\n  const {opts, propertyName, topSchemaRef, schemaPath} = it\n  keyValues.push(\n    [E.keyword, keyword],\n    [E.params, typeof params == \"function\" ? params(cxt) : params || _`{}`]\n  )\n  if (opts.messages) {\n    keyValues.push([E.message, typeof message == \"function\" ? message(cxt) : message])\n  }\n  if (opts.verbose) {\n    keyValues.push(\n      [E.schema, schemaValue],\n      [E.parentSchema, _`${topSchemaRef}${schemaPath}`],\n      [N.data, data]\n    )\n  }\n  if (propertyName) keyValues.push([E.propertyName, propertyName])\n}\n", "import type {KeywordErrorDefinition, KeywordErrorCxt} from \"../../types\"\nimport type {SchemaCxt} from \"..\"\nimport {reportError} from \"../errors\"\nimport {_, Name} from \"../codegen\"\nimport N from \"../names\"\n\nconst boolError: KeywordErrorDefinition = {\n  message: \"boolean schema is false\",\n}\n\nexport function topBoolOrEmptySchema(it: SchemaCxt): void {\n  const {gen, schema, validateName} = it\n  if (schema === false) {\n    falseSchemaError(it, false)\n  } else if (typeof schema == \"object\" && schema.$async === true) {\n    gen.return(N.data)\n  } else {\n    gen.assign(_`${validateName}.errors`, null)\n    gen.return(true)\n  }\n}\n\nexport function boolOrEmptySchema(it: SchemaCxt, valid: Name): void {\n  const {gen, schema} = it\n  if (schema === false) {\n    gen.var(valid, false) // TODO var\n    falseSchemaError(it)\n  } else {\n    gen.var(valid, true) // TODO var\n  }\n}\n\nfunction falseSchemaError(it: SchemaCxt, overrideAllErrors?: boolean): void {\n  const {gen, data} = it\n  // TODO maybe some other interface should be used for non-keyword validation errors...\n  const cxt: KeywordErrorCxt = {\n    gen,\n    keyword: \"false schema\",\n    data,\n    schema: false,\n    schemaCode: false,\n    schemaValue: false,\n    params: {},\n    it,\n  }\n  reportError(cxt, boolError, undefined, overrideAllErrors)\n}\n", "import type {AddedKeywordDefinition} from \"../types\"\n\nconst _jsonTypes = [\"string\", \"number\", \"integer\", \"boolean\", \"null\", \"object\", \"array\"] as const\n\nexport type JSONType = (typeof _jsonTypes)[number]\n\nconst jsonTypes: Set<string> = new Set(_jsonTypes)\n\nexport function isJSONType(x: unknown): x is JSONType {\n  return typeof x == \"string\" && jsonTypes.has(x)\n}\n\ntype ValidationTypes = {\n  [K in JSONType]: boolean | RuleGroup | undefined\n}\n\nexport interface ValidationRules {\n  rules: RuleGroup[]\n  post: RuleGroup\n  all: {[Key in string]?: boolean | Rule} // rules that have to be validated\n  keywords: {[Key in string]?: boolean} // all known keywords (superset of \"all\")\n  types: ValidationTypes\n}\n\nexport interface RuleGroup {\n  type?: JSONType\n  rules: Rule[]\n}\n\n// This interface wraps KeywordDefinition because definition can have multiple keywords\nexport interface Rule {\n  keyword: string\n  definition: AddedKeywordDefinition\n}\n\nexport function getRules(): ValidationRules {\n  const groups: Record<\"number\" | \"string\" | \"array\" | \"object\", RuleGroup> = {\n    number: {type: \"number\", rules: []},\n    string: {type: \"string\", rules: []},\n    array: {type: \"array\", rules: []},\n    object: {type: \"object\", rules: []},\n  }\n  return {\n    types: {...groups, integer: true, boolean: true, null: true},\n    rules: [{rules: []}, groups.number, groups.string, groups.array, groups.object],\n    post: {rules: []},\n    all: {},\n    keywords: {},\n  }\n}\n", "import type {AnySchemaObject} from \"../../types\"\nimport type {SchemaObjCxt} from \"..\"\nimport type {JSONType, RuleGroup, Rule} from \"../rules\"\n\nexport function schemaHasRulesForType(\n  {schema, self}: SchemaObjCxt,\n  type: JSONType\n): boolean | undefined {\n  const group = self.RULES.types[type]\n  return group && group !== true && shouldUseGroup(schema, group)\n}\n\nexport function shouldUseGroup(schema: AnySchemaObject, group: RuleGroup): boolean {\n  return group.rules.some((rule) => shouldUseRule(schema, rule))\n}\n\nexport function shouldUseRule(schema: AnySchemaObject, rule: Rule): boolean | undefined {\n  return (\n    schema[rule.keyword] !== undefined ||\n    rule.definition.implements?.some((kwd) => schema[kwd] !== undefined)\n  )\n}\n", "import type {\n  KeywordErrorDefinition,\n  KeywordErrorCxt,\n  ErrorObject,\n  AnySchemaObject,\n} from \"../../types\"\nimport type {SchemaObjCxt} from \"..\"\nimport {isJSONType, JSONType} from \"../rules\"\nimport {schemaHasRulesForType} from \"./applicability\"\nimport {reportError} from \"../errors\"\nimport {_, nil, and, not, operators, Code, Name} from \"../codegen\"\nimport {toHash, schemaRefOrVal} from \"../util\"\n\nexport enum DataType {\n  Correct,\n  Wrong,\n}\n\nexport function getSchemaTypes(schema: AnySchemaObject): JSONType[] {\n  const types = getJSONTypes(schema.type)\n  const hasNull = types.includes(\"null\")\n  if (hasNull) {\n    if (schema.nullable === false) throw new Error(\"type: null contradicts nullable: false\")\n  } else {\n    if (!types.length && schema.nullable !== undefined) {\n      throw new Error('\"nullable\" cannot be used without \"type\"')\n    }\n    if (schema.nullable === true) types.push(\"null\")\n  }\n  return types\n}\n\n// eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\nexport function getJSONTypes(ts: unknown | unknown[]): JSONType[] {\n  const types: unknown[] = Array.isArray(ts) ? ts : ts ? [ts] : []\n  if (types.every(isJSONType)) return types\n  throw new Error(\"type must be JSONType or JSONType[]: \" + types.join(\",\"))\n}\n\nexport function coerceAndCheckDataType(it: SchemaObjCxt, types: JSONType[]): boolean {\n  const {gen, data, opts} = it\n  const coerceTo = coerceToTypes(types, opts.coerceTypes)\n  const checkTypes =\n    types.length > 0 &&\n    !(coerceTo.length === 0 && types.length === 1 && schemaHasRulesForType(it, types[0]))\n  if (checkTypes) {\n    const wrongType = checkDataTypes(types, data, opts.strictNumbers, DataType.Wrong)\n    gen.if(wrongType, () => {\n      if (coerceTo.length) coerceData(it, types, coerceTo)\n      else reportTypeError(it)\n    })\n  }\n  return checkTypes\n}\n\nconst COERCIBLE: Set<JSONType> = new Set([\"string\", \"number\", \"integer\", \"boolean\", \"null\"])\nfunction coerceToTypes(types: JSONType[], coerceTypes?: boolean | \"array\"): JSONType[] {\n  return coerceTypes\n    ? types.filter((t) => COERCIBLE.has(t) || (coerceTypes === \"array\" && t === \"array\"))\n    : []\n}\n\nfunction coerceData(it: SchemaObjCxt, types: JSONType[], coerceTo: JSONType[]): void {\n  const {gen, data, opts} = it\n  const dataType = gen.let(\"dataType\", _`typeof ${data}`)\n  const coerced = gen.let(\"coerced\", _`undefined`)\n  if (opts.coerceTypes === \"array\") {\n    gen.if(_`${dataType} == 'object' && Array.isArray(${data}) && ${data}.length == 1`, () =>\n      gen\n        .assign(data, _`${data}[0]`)\n        .assign(dataType, _`typeof ${data}`)\n        .if(checkDataTypes(types, data, opts.strictNumbers), () => gen.assign(coerced, data))\n    )\n  }\n  gen.if(_`${coerced} !== undefined`)\n  for (const t of coerceTo) {\n    if (COERCIBLE.has(t) || (t === \"array\" && opts.coerceTypes === \"array\")) {\n      coerceSpecificType(t)\n    }\n  }\n  gen.else()\n  reportTypeError(it)\n  gen.endIf()\n\n  gen.if(_`${coerced} !== undefined`, () => {\n    gen.assign(data, coerced)\n    assignParentData(it, coerced)\n  })\n\n  function coerceSpecificType(t: string): void {\n    switch (t) {\n      case \"string\":\n        gen\n          .elseIf(_`${dataType} == \"number\" || ${dataType} == \"boolean\"`)\n          .assign(coerced, _`\"\" + ${data}`)\n          .elseIf(_`${data} === null`)\n          .assign(coerced, _`\"\"`)\n        return\n      case \"number\":\n        gen\n          .elseIf(\n            _`${dataType} == \"boolean\" || ${data} === null\n              || (${dataType} == \"string\" && ${data} && ${data} == +${data})`\n          )\n          .assign(coerced, _`+${data}`)\n        return\n      case \"integer\":\n        gen\n          .elseIf(\n            _`${dataType} === \"boolean\" || ${data} === null\n              || (${dataType} === \"string\" && ${data} && ${data} == +${data} && !(${data} % 1))`\n          )\n          .assign(coerced, _`+${data}`)\n        return\n      case \"boolean\":\n        gen\n          .elseIf(_`${data} === \"false\" || ${data} === 0 || ${data} === null`)\n          .assign(coerced, false)\n          .elseIf(_`${data} === \"true\" || ${data} === 1`)\n          .assign(coerced, true)\n        return\n      case \"null\":\n        gen.elseIf(_`${data} === \"\" || ${data} === 0 || ${data} === false`)\n        gen.assign(coerced, null)\n        return\n\n      case \"array\":\n        gen\n          .elseIf(\n            _`${dataType} === \"string\" || ${dataType} === \"number\"\n              || ${dataType} === \"boolean\" || ${data} === null`\n          )\n          .assign(coerced, _`[${data}]`)\n    }\n  }\n}\n\nfunction assignParentData({gen, parentData, parentDataProperty}: SchemaObjCxt, expr: Name): void {\n  // TODO use gen.property\n  gen.if(_`${parentData} !== undefined`, () =>\n    gen.assign(_`${parentData}[${parentDataProperty}]`, expr)\n  )\n}\n\nexport function checkDataType(\n  dataType: JSONType,\n  data: Name,\n  strictNums?: boolean | \"log\",\n  correct = DataType.Correct\n): Code {\n  const EQ = correct === DataType.Correct ? operators.EQ : operators.NEQ\n  let cond: Code\n  switch (dataType) {\n    case \"null\":\n      return _`${data} ${EQ} null`\n    case \"array\":\n      cond = _`Array.isArray(${data})`\n      break\n    case \"object\":\n      cond = _`${data} && typeof ${data} == \"object\" && !Array.isArray(${data})`\n      break\n    case \"integer\":\n      cond = numCond(_`!(${data} % 1) && !isNaN(${data})`)\n      break\n    case \"number\":\n      cond = numCond()\n      break\n    default:\n      return _`typeof ${data} ${EQ} ${dataType}`\n  }\n  return correct === DataType.Correct ? cond : not(cond)\n\n  function numCond(_cond: Code = nil): Code {\n    return and(_`typeof ${data} == \"number\"`, _cond, strictNums ? _`isFinite(${data})` : nil)\n  }\n}\n\nexport function checkDataTypes(\n  dataTypes: JSONType[],\n  data: Name,\n  strictNums?: boolean | \"log\",\n  correct?: DataType\n): Code {\n  if (dataTypes.length === 1) {\n    return checkDataType(dataTypes[0], data, strictNums, correct)\n  }\n  let cond: Code\n  const types = toHash(dataTypes)\n  if (types.array && types.object) {\n    const notObj = _`typeof ${data} != \"object\"`\n    cond = types.null ? notObj : _`!${data} || ${notObj}`\n    delete types.null\n    delete types.array\n    delete types.object\n  } else {\n    cond = nil\n  }\n  if (types.number) delete types.integer\n  for (const t in types) cond = and(cond, checkDataType(t as JSONType, data, strictNums, correct))\n  return cond\n}\n\nexport type TypeError = ErrorObject<\"type\", {type: string}>\n\nconst typeError: KeywordErrorDefinition = {\n  message: ({schema}) => `must be ${schema}`,\n  params: ({schema, schemaValue}) =>\n    typeof schema == \"string\" ? _`{type: ${schema}}` : _`{type: ${schemaValue}}`,\n}\n\nexport function reportTypeError(it: SchemaObjCxt): void {\n  const cxt = getTypeErrorContext(it)\n  reportError(cxt, typeError)\n}\n\nfunction getTypeErrorContext(it: SchemaObjCxt): KeywordErrorCxt {\n  const {gen, data, schema} = it\n  const schemaCode = schemaRefOrVal(it, schema, \"type\")\n  return {\n    gen,\n    keyword: \"type\",\n    data,\n    schema: schema.type,\n    schemaCode,\n    schemaValue: schemaCode,\n    parentSchema: schema,\n    params: {},\n    it,\n  }\n}\n", "import type {SchemaObjCxt} from \"..\"\nimport {_, getProperty, stringify} from \"../codegen\"\nimport {checkStrictMode} from \"../util\"\n\nexport function assignDefaults(it: SchemaObjCxt, ty?: string): void {\n  const {properties, items} = it.schema\n  if (ty === \"object\" && properties) {\n    for (const key in properties) {\n      assignDefault(it, key, properties[key].default)\n    }\n  } else if (ty === \"array\" && Array.isArray(items)) {\n    items.forEach((sch, i: number) => assignDefault(it, i, sch.default))\n  }\n}\n\nfunction assignDefault(it: SchemaObjCxt, prop: string | number, defaultValue: unknown): void {\n  const {gen, compositeRule, data, opts} = it\n  if (defaultValue === undefined) return\n  const childData = _`${data}${getProperty(prop)}`\n  if (compositeRule) {\n    checkStrictMode(it, `default is ignored for: ${childData}`)\n    return\n  }\n\n  let condition = _`${childData} === undefined`\n  if (opts.useDefaults === \"empty\") {\n    condition = _`${condition} || ${childData} === null || ${childData} === \"\"`\n  }\n  // `${childData} === undefined` +\n  // (opts.useDefaults === \"empty\" ? ` || ${childData} === null || ${childData} === \"\"` : \"\")\n  gen.if(condition, _`${childData} = ${stringify(defaultValue)}`)\n}\n", "import type {AnySchema, SchemaMap} from \"../types\"\nimport type {SchemaCxt} from \"../compile\"\nimport type {KeywordCxt} from \"../compile/validate\"\nimport {CodeGen, _, and, or, not, nil, strConcat, getProperty, Code, Name} from \"../compile/codegen\"\nimport {alwaysValidSchema, Type} from \"../compile/util\"\nimport N from \"../compile/names\"\nimport {useFunc} from \"../compile/util\"\nexport function checkReportMissingProp(cxt: KeywordCxt, prop: string): void {\n  const {gen, data, it} = cxt\n  gen.if(noPropertyInData(gen, data, prop, it.opts.ownProperties), () => {\n    cxt.setParams({missingProperty: _`${prop}`}, true)\n    cxt.error()\n  })\n}\n\nexport function checkMissingProp(\n  {gen, data, it: {opts}}: KeywordCxt,\n  properties: string[],\n  missing: Name\n): Code {\n  return or(\n    ...properties.map((prop) =>\n      and(noPropertyInData(gen, data, prop, opts.ownProperties), _`${missing} = ${prop}`)\n    )\n  )\n}\n\nexport function reportMissingProp(cxt: KeywordCxt, missing: Name): void {\n  cxt.setParams({missingProperty: missing}, true)\n  cxt.error()\n}\n\nexport function hasPropFunc(gen: CodeGen): Name {\n  return gen.scopeValue(\"func\", {\n    // eslint-disable-next-line @typescript-eslint/unbound-method\n    ref: Object.prototype.hasOwnProperty,\n    code: _`Object.prototype.hasOwnProperty`,\n  })\n}\n\nexport function isOwnProperty(gen: CodeGen, data: Name, property: Name | string): Code {\n  return _`${hasPropFunc(gen)}.call(${data}, ${property})`\n}\n\nexport function propertyInData(\n  gen: CodeGen,\n  data: Name,\n  property: Name | string,\n  ownProperties?: boolean\n): Code {\n  const cond = _`${data}${getProperty(property)} !== undefined`\n  return ownProperties ? _`${cond} && ${isOwnProperty(gen, data, property)}` : cond\n}\n\nexport function noPropertyInData(\n  gen: CodeGen,\n  data: Name,\n  property: Name | string,\n  ownProperties?: boolean\n): Code {\n  const cond = _`${data}${getProperty(property)} === undefined`\n  return ownProperties ? or(cond, not(isOwnProperty(gen, data, property))) : cond\n}\n\nexport function allSchemaProperties(schemaMap?: SchemaMap): string[] {\n  return schemaMap ? Object.keys(schemaMap).filter((p) => p !== \"__proto__\") : []\n}\n\nexport function schemaProperties(it: SchemaCxt, schemaMap: SchemaMap): string[] {\n  return allSchemaProperties(schemaMap).filter(\n    (p) => !alwaysValidSchema(it, schemaMap[p] as AnySchema)\n  )\n}\n\nexport function callValidateCode(\n  {schemaCode, data, it: {gen, topSchemaRef, schemaPath, errorPath}, it}: KeywordCxt,\n  func: Code,\n  context: Code,\n  passSchema?: boolean\n): Code {\n  const dataAndSchema = passSchema ? _`${schemaCode}, ${data}, ${topSchemaRef}${schemaPath}` : data\n  const valCxt: [Name, Code | number][] = [\n    [N.instancePath, strConcat(N.instancePath, errorPath)],\n    [N.parentData, it.parentData],\n    [N.parentDataProperty, it.parentDataProperty],\n    [N.rootData, N.rootData],\n  ]\n  if (it.opts.dynamicRef) valCxt.push([N.dynamicAnchors, N.dynamicAnchors])\n  const args = _`${dataAndSchema}, ${gen.object(...valCxt)}`\n  return context !== nil ? _`${func}.call(${context}, ${args})` : _`${func}(${args})`\n}\n\nconst newRegExp = _`new RegExp`\n\nexport function usePattern({gen, it: {opts}}: KeywordCxt, pattern: string): Name {\n  const u = opts.unicodeRegExp ? \"u\" : \"\"\n  const {regExp} = opts.code\n  const rx = regExp(pattern, u)\n\n  return gen.scopeValue(\"pattern\", {\n    key: rx.toString(),\n    ref: rx,\n    code: _`${regExp.code === \"new RegExp\" ? newRegExp : useFunc(gen, regExp)}(${pattern}, ${u})`,\n  })\n}\n\nexport function validateArray(cxt: KeywordCxt): Name {\n  const {gen, data, keyword, it} = cxt\n  const valid = gen.name(\"valid\")\n  if (it.allErrors) {\n    const validArr = gen.let(\"valid\", true)\n    validateItems(() => gen.assign(validArr, false))\n    return validArr\n  }\n  gen.var(valid, true)\n  validateItems(() => gen.break())\n  return valid\n\n  function validateItems(notValid: () => void): void {\n    const len = gen.const(\"len\", _`${data}.length`)\n    gen.forRange(\"i\", 0, len, (i) => {\n      cxt.subschema(\n        {\n          keyword,\n          dataProp: i,\n          dataPropType: Type.Num,\n        },\n        valid\n      )\n      gen.if(not(valid), notValid)\n    })\n  }\n}\n\nexport function validateUnion(cxt: KeywordCxt): void {\n  const {gen, schema, keyword, it} = cxt\n  /* istanbul ignore if */\n  if (!Array.isArray(schema)) throw new Error(\"ajv implementation error\")\n  const alwaysValid = schema.some((sch: AnySchema) => alwaysValidSchema(it, sch))\n  if (alwaysValid && !it.opts.unevaluated) return\n\n  const valid = gen.let(\"valid\", false)\n  const schValid = gen.name(\"_valid\")\n\n  gen.block(() =>\n    schema.forEach((_sch: AnySchema, i: number) => {\n      const schCxt = cxt.subschema(\n        {\n          keyword,\n          schemaProp: i,\n          compositeRule: true,\n        },\n        schValid\n      )\n      gen.assign(valid, _`${valid} || ${schValid}`)\n      const merged = cxt.mergeValidEvaluated(schCxt, schValid)\n      // can short-circuit if `unevaluatedProperties/Items` not supported (opts.unevaluated !== true)\n      // or if all properties and items were evaluated (it.props === true && it.items === true)\n      if (!merged) gen.if(not(valid))\n    })\n  )\n\n  cxt.result(\n    valid,\n    () => cxt.reset(),\n    () => cxt.error(true)\n  )\n}\n", "import type {KeywordCxt} from \".\"\nimport type {\n  AnySchema,\n  SchemaValidateFunction,\n  AnyValidateFunction,\n  AddedKeywordDefinition,\n  MacroKeywordDefinition,\n  FuncKeywordDefinition,\n} from \"../../types\"\nimport type {SchemaObjCxt} from \"..\"\nimport {_, nil, not, stringify, Code, Name, CodeGen} from \"../codegen\"\nimport N from \"../names\"\nimport type {JSONType} from \"../rules\"\nimport {callValidateCode} from \"../../vocabularies/code\"\nimport {extendErrors} from \"../errors\"\n\ntype KeywordCompilationResult = AnySchema | SchemaValidateFunction | AnyValidateFunction\n\nexport function macroKeywordCode(cxt: KeywordCxt, def: MacroKeywordDefinition): void {\n  const {gen, keyword, schema, parentSchema, it} = cxt\n  const macroSchema = def.macro.call(it.self, schema, parentSchema, it)\n  const schemaRef = useKeyword(gen, keyword, macroSchema)\n  if (it.opts.validateSchema !== false) it.self.validateSchema(macroSchema, true)\n\n  const valid = gen.name(\"valid\")\n  cxt.subschema(\n    {\n      schema: macroSchema,\n      schemaPath: nil,\n      errSchemaPath: `${it.errSchemaPath}/${keyword}`,\n      topSchemaRef: schemaRef,\n      compositeRule: true,\n    },\n    valid\n  )\n  cxt.pass(valid, () => cxt.error(true))\n}\n\nexport function funcKeywordCode(cxt: KeywordCxt, def: FuncKeywordDefinition): void {\n  const {gen, keyword, schema, parentSchema, $data, it} = cxt\n  checkAsyncKeyword(it, def)\n  const validate =\n    !$data && def.compile ? def.compile.call(it.self, schema, parentSchema, it) : def.validate\n  const validateRef = useKeyword(gen, keyword, validate)\n  const valid = gen.let(\"valid\")\n  cxt.block$data(valid, validateKeyword)\n  cxt.ok(def.valid ?? valid)\n\n  function validateKeyword(): void {\n    if (def.errors === false) {\n      assignValid()\n      if (def.modifying) modifyData(cxt)\n      reportErrs(() => cxt.error())\n    } else {\n      const ruleErrs = def.async ? validateAsync() : validateSync()\n      if (def.modifying) modifyData(cxt)\n      reportErrs(() => addErrs(cxt, ruleErrs))\n    }\n  }\n\n  function validateAsync(): Name {\n    const ruleErrs = gen.let(\"ruleErrs\", null)\n    gen.try(\n      () => assignValid(_`await `),\n      (e) =>\n        gen.assign(valid, false).if(\n          _`${e} instanceof ${it.ValidationError as Name}`,\n          () => gen.assign(ruleErrs, _`${e}.errors`),\n          () => gen.throw(e)\n        )\n    )\n    return ruleErrs\n  }\n\n  function validateSync(): Code {\n    const validateErrs = _`${validateRef}.errors`\n    gen.assign(validateErrs, null)\n    assignValid(nil)\n    return validateErrs\n  }\n\n  function assignValid(_await: Code = def.async ? _`await ` : nil): void {\n    const passCxt = it.opts.passContext ? N.this : N.self\n    const passSchema = !((\"compile\" in def && !$data) || def.schema === false)\n    gen.assign(\n      valid,\n      _`${_await}${callValidateCode(cxt, validateRef, passCxt, passSchema)}`,\n      def.modifying\n    )\n  }\n\n  function reportErrs(errors: () => void): void {\n    gen.if(not(def.valid ?? valid), errors)\n  }\n}\n\nfunction modifyData(cxt: KeywordCxt): void {\n  const {gen, data, it} = cxt\n  gen.if(it.parentData, () => gen.assign(data, _`${it.parentData}[${it.parentDataProperty}]`))\n}\n\nfunction addErrs(cxt: KeywordCxt, errs: Code): void {\n  const {gen} = cxt\n  gen.if(\n    _`Array.isArray(${errs})`,\n    () => {\n      gen\n        .assign(N.vErrors, _`${N.vErrors} === null ? ${errs} : ${N.vErrors}.concat(${errs})`)\n        .assign(N.errors, _`${N.vErrors}.length`)\n      extendErrors(cxt)\n    },\n    () => cxt.error()\n  )\n}\n\nfunction checkAsyncKeyword({schemaEnv}: SchemaObjCxt, def: FuncKeywordDefinition): void {\n  if (def.async && !schemaEnv.$async) throw new Error(\"async keyword in sync schema\")\n}\n\nfunction useKeyword(gen: CodeGen, keyword: string, result?: KeywordCompilationResult): Name {\n  if (result === undefined) throw new Error(`keyword \"${keyword}\" failed to compile`)\n  return gen.scopeValue(\n    \"keyword\",\n    typeof result == \"function\" ? {ref: result} : {ref: result, code: stringify(result)}\n  )\n}\n\nexport function validSchemaType(\n  schema: unknown,\n  schemaType: JSONType[],\n  allowUndefined = false\n): boolean {\n  // TODO add tests\n  return (\n    !schemaType.length ||\n    schemaType.some((st) =>\n      st === \"array\"\n        ? Array.isArray(schema)\n        : st === \"object\"\n        ? schema && typeof schema == \"object\" && !Array.isArray(schema)\n        : typeof schema == st || (allowUndefined && typeof schema == \"undefined\")\n    )\n  )\n}\n\nexport function validateKeywordUsage(\n  {schema, opts, self, errSchemaPath}: SchemaObjCxt,\n  def: AddedKeywordDefinition,\n  keyword: string\n): void {\n  /* istanbul ignore if */\n  if (Array.isArray(def.keyword) ? !def.keyword.includes(keyword) : def.keyword !== keyword) {\n    throw new Error(\"ajv implementation error\")\n  }\n\n  const deps = def.dependencies\n  if (deps?.some((kwd) => !Object.prototype.hasOwnProperty.call(schema, kwd))) {\n    throw new Error(`parent schema must have dependencies of ${keyword}: ${deps.join(\",\")}`)\n  }\n\n  if (def.validateSchema) {\n    const valid = def.validateSchema(schema[keyword])\n    if (!valid) {\n      const msg =\n        `keyword \"${keyword}\" value is invalid at path \"${errSchemaPath}\": ` +\n        self.errorsText(def.validateSchema.errors)\n      if (opts.validateSchema === \"log\") self.logger.error(msg)\n      else throw new Error(msg)\n    }\n  }\n}\n", "import type {AnySchema} from \"../../types\"\nimport type {SchemaObjCxt} from \"..\"\nimport {_, str, getProperty, Code, Name} from \"../codegen\"\nimport {escapeFragment, getErrorPath, Type} from \"../util\"\nimport type {JSONType} from \"../rules\"\n\nexport interface SubschemaContext {\n  // TODO use Optional? align with SchemCxt property types\n  schema: AnySchema\n  schemaPath: Code\n  errSchemaPath: string\n  topSchemaRef?: Code\n  errorPath?: Code\n  dataLevel?: number\n  dataTypes?: JSONType[]\n  data?: Name\n  parentData?: Name\n  parentDataProperty?: Code | number\n  dataNames?: Name[]\n  dataPathArr?: (Code | number)[]\n  propertyName?: Name\n  jtdDiscriminator?: string\n  jtdMetadata?: boolean\n  compositeRule?: true\n  createErrors?: boolean\n  allErrors?: boolean\n}\n\nexport type SubschemaArgs = Partial<{\n  keyword: string\n  schemaProp: string | number\n  schema: AnySchema\n  schemaPath: Code\n  errSchemaPath: string\n  topSchemaRef: Code\n  data: Name | Code\n  dataProp: Code | string | number\n  dataTypes: JSONType[]\n  definedProperties: Set<string>\n  propertyName: Name\n  dataPropType: Type\n  jtdDiscriminator: string\n  jtdMetadata: boolean\n  compositeRule: true\n  createErrors: boolean\n  allErrors: boolean\n}>\n\nexport function getSubschema(\n  it: SchemaObjCxt,\n  {keyword, schemaProp, schema, schemaPath, errSchemaPath, topSchemaRef}: SubschemaArgs\n): SubschemaContext {\n  if (keyword !== undefined && schema !== undefined) {\n    throw new Error('both \"keyword\" and \"schema\" passed, only one allowed')\n  }\n\n  if (keyword !== undefined) {\n    const sch = it.schema[keyword]\n    return schemaProp === undefined\n      ? {\n          schema: sch,\n          schemaPath: _`${it.schemaPath}${getProperty(keyword)}`,\n          errSchemaPath: `${it.errSchemaPath}/${keyword}`,\n        }\n      : {\n          schema: sch[schemaProp],\n          schemaPath: _`${it.schemaPath}${getProperty(keyword)}${getProperty(schemaProp)}`,\n          errSchemaPath: `${it.errSchemaPath}/${keyword}/${escapeFragment(schemaProp)}`,\n        }\n  }\n\n  if (schema !== undefined) {\n    if (schemaPath === undefined || errSchemaPath === undefined || topSchemaRef === undefined) {\n      throw new Error('\"schemaPath\", \"errSchemaPath\" and \"topSchemaRef\" are required with \"schema\"')\n    }\n    return {\n      schema,\n      schemaPath,\n      topSchemaRef,\n      errSchemaPath,\n    }\n  }\n\n  throw new Error('either \"keyword\" or \"schema\" must be passed')\n}\n\nexport function extendSubschemaData(\n  subschema: SubschemaContext,\n  it: SchemaObjCxt,\n  {dataProp, dataPropType: dpType, data, dataTypes, propertyName}: SubschemaArgs\n): void {\n  if (data !== undefined && dataProp !== undefined) {\n    throw new Error('both \"data\" and \"dataProp\" passed, only one allowed')\n  }\n\n  const {gen} = it\n\n  if (dataProp !== undefined) {\n    const {errorPath, dataPathArr, opts} = it\n    const nextData = gen.let(\"data\", _`${it.data}${getProperty(dataProp)}`, true)\n    dataContextProps(nextData)\n    subschema.errorPath = str`${errorPath}${getErrorPath(dataProp, dpType, opts.jsPropertySyntax)}`\n    subschema.parentDataProperty = _`${dataProp}`\n    subschema.dataPathArr = [...dataPathArr, subschema.parentDataProperty]\n  }\n\n  if (data !== undefined) {\n    const nextData = data instanceof Name ? data : gen.let(\"data\", data, true) // replaceable if used once?\n    dataContextProps(nextData)\n    if (propertyName !== undefined) subschema.propertyName = propertyName\n    // TODO something is possibly wrong here with not changing parentDataProperty and not appending dataPathArr\n  }\n\n  if (dataTypes) subschema.dataTypes = dataTypes\n\n  function dataContextProps(_nextData: Name): void {\n    subschema.data = _nextData\n    subschema.dataLevel = it.dataLevel + 1\n    subschema.dataTypes = []\n    it.definedProperties = new Set<string>()\n    subschema.parentData = it.data\n    subschema.dataNames = [...it.dataNames, _nextData]\n  }\n}\n\nexport function extendSubschemaMode(\n  subschema: SubschemaContext,\n  {jtdDiscriminator, jtdMetadata, compositeRule, createErrors, allErrors}: SubschemaArgs\n): void {\n  if (compositeRule !== undefined) subschema.compositeRule = compositeRule\n  if (createErrors !== undefined) subschema.createErrors = createErrors\n  if (allErrors !== undefined) subschema.allErrors = allErrors\n  subschema.jtdDiscriminator = jtdDiscriminator // not inherited\n  subschema.jtdMetadata = jtdMetadata // not inherited\n}\n", "'use strict';\n\n// do not edit .js files directly - edit src/index.jst\n\n\n\nmodule.exports = function equal(a, b) {\n  if (a === b) return true;\n\n  if (a && b && typeof a == 'object' && typeof b == 'object') {\n    if (a.constructor !== b.constructor) return false;\n\n    var length, i, keys;\n    if (Array.isArray(a)) {\n      length = a.length;\n      if (length != b.length) return false;\n      for (i = length; i-- !== 0;)\n        if (!equal(a[i], b[i])) return false;\n      return true;\n    }\n\n\n\n    if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n    if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n    if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n\n    keys = Object.keys(a);\n    length = keys.length;\n    if (length !== Object.keys(b).length) return false;\n\n    for (i = length; i-- !== 0;)\n      if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n\n    for (i = length; i-- !== 0;) {\n      var key = keys[i];\n\n      if (!equal(a[key], b[key])) return false;\n    }\n\n    return true;\n  }\n\n  // true if both NaN, false otherwise\n  return a!==a && b!==b;\n};\n", "'use strict';\n\nvar traverse = module.exports = function (schema, opts, cb) {\n  // Legacy support for v0.3.1 and earlier.\n  if (typeof opts == 'function') {\n    cb = opts;\n    opts = {};\n  }\n\n  cb = opts.cb || cb;\n  var pre = (typeof cb == 'function') ? cb : cb.pre || function() {};\n  var post = cb.post || function() {};\n\n  _traverse(opts, pre, post, schema, '', schema);\n};\n\n\ntraverse.keywords = {\n  additionalItems: true,\n  items: true,\n  contains: true,\n  additionalProperties: true,\n  propertyNames: true,\n  not: true,\n  if: true,\n  then: true,\n  else: true\n};\n\ntraverse.arrayKeywords = {\n  items: true,\n  allOf: true,\n  anyOf: true,\n  oneOf: true\n};\n\ntraverse.propsKeywords = {\n  $defs: true,\n  definitions: true,\n  properties: true,\n  patternProperties: true,\n  dependencies: true\n};\n\ntraverse.skipKeywords = {\n  default: true,\n  enum: true,\n  const: true,\n  required: true,\n  maximum: true,\n  minimum: true,\n  exclusiveMaximum: true,\n  exclusiveMinimum: true,\n  multipleOf: true,\n  maxLength: true,\n  minLength: true,\n  pattern: true,\n  format: true,\n  maxItems: true,\n  minItems: true,\n  uniqueItems: true,\n  maxProperties: true,\n  minProperties: true\n};\n\n\nfunction _traverse(opts, pre, post, schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex) {\n  if (schema && typeof schema == 'object' && !Array.isArray(schema)) {\n    pre(schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex);\n    for (var key in schema) {\n      var sch = schema[key];\n      if (Array.isArray(sch)) {\n        if (key in traverse.arrayKeywords) {\n          for (var i=0; i<sch.length; i++)\n            _traverse(opts, pre, post, sch[i], jsonPtr + '/' + key + '/' + i, rootSchema, jsonPtr, key, schema, i);\n        }\n      } else if (key in traverse.propsKeywords) {\n        if (sch && typeof sch == 'object') {\n          for (var prop in sch)\n            _traverse(opts, pre, post, sch[prop], jsonPtr + '/' + key + '/' + escapeJsonPtr(prop), rootSchema, jsonPtr, key, schema, prop);\n        }\n      } else if (key in traverse.keywords || (opts.allKeys && !(key in traverse.skipKeywords))) {\n        _traverse(opts, pre, post, sch, jsonPtr + '/' + key, rootSchema, jsonPtr, key, schema);\n      }\n    }\n    post(schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex);\n  }\n}\n\n\nfunction escapeJsonPtr(str) {\n  return str.replace(/~/g, '~0').replace(/\\//g, '~1');\n}\n", "import type {AnySchema, AnySchemaObject, UriResolver} from \"../types\"\nimport type Ajv from \"../ajv\"\nimport type {URIComponent} from \"fast-uri\"\nimport {eachItem} from \"./util\"\nimport * as equal from \"fast-deep-equal\"\nimport * as traverse from \"json-schema-traverse\"\n\n// the hash of local references inside the schema (created by getSchemaRefs), used for inline resolution\nexport type LocalRefs = {[Ref in string]?: AnySchemaObject}\n\n// TODO refactor to use keyword definitions\nconst SIMPLE_INLINED = new Set([\n  \"type\",\n  \"format\",\n  \"pattern\",\n  \"maxLength\",\n  \"minLength\",\n  \"maxProperties\",\n  \"minProperties\",\n  \"maxItems\",\n  \"minItems\",\n  \"maximum\",\n  \"minimum\",\n  \"uniqueItems\",\n  \"multipleOf\",\n  \"required\",\n  \"enum\",\n  \"const\",\n])\n\nexport function inlineRef(schema: AnySchema, limit: boolean | number = true): boolean {\n  if (typeof schema == \"boolean\") return true\n  if (limit === true) return !hasRef(schema)\n  if (!limit) return false\n  return countKeys(schema) <= limit\n}\n\nconst REF_KEYWORDS = new Set([\n  \"$ref\",\n  \"$recursiveRef\",\n  \"$recursiveAnchor\",\n  \"$dynamicRef\",\n  \"$dynamicAnchor\",\n])\n\nfunction hasRef(schema: AnySchemaObject): boolean {\n  for (const key in schema) {\n    if (REF_KEYWORDS.has(key)) return true\n    const sch = schema[key]\n    if (Array.isArray(sch) && sch.some(hasRef)) return true\n    if (typeof sch == \"object\" && hasRef(sch)) return true\n  }\n  return false\n}\n\nfunction countKeys(schema: AnySchemaObject): number {\n  let count = 0\n  for (const key in schema) {\n    if (key === \"$ref\") return Infinity\n    count++\n    if (SIMPLE_INLINED.has(key)) continue\n    if (typeof schema[key] == \"object\") {\n      eachItem(schema[key], (sch) => (count += countKeys(sch)))\n    }\n    if (count === Infinity) return Infinity\n  }\n  return count\n}\n\nexport function getFullPath(resolver: UriResolver, id = \"\", normalize?: boolean): string {\n  if (normalize !== false) id = normalizeId(id)\n  const p = resolver.parse(id)\n  return _getFullPath(resolver, p)\n}\n\nexport function _getFullPath(resolver: UriResolver, p: URIComponent): string {\n  const serialized = resolver.serialize(p)\n  return serialized.split(\"#\")[0] + \"#\"\n}\n\nconst TRAILING_SLASH_HASH = /#\\/?$/\nexport function normalizeId(id: string | undefined): string {\n  return id ? id.replace(TRAILING_SLASH_HASH, \"\") : \"\"\n}\n\nexport function resolveUrl(resolver: UriResolver, baseId: string, id: string): string {\n  id = normalizeId(id)\n  return resolver.resolve(baseId, id)\n}\n\nconst ANCHOR = /^[a-z_][-a-z0-9._]*$/i\n\nexport function getSchemaRefs(this: Ajv, schema: AnySchema, baseId: string): LocalRefs {\n  if (typeof schema == \"boolean\") return {}\n  const {schemaId, uriResolver} = this.opts\n  const schId = normalizeId(schema[schemaId] || baseId)\n  const baseIds: {[JsonPtr in string]?: string} = {\"\": schId}\n  const pathPrefix = getFullPath(uriResolver, schId, false)\n  const localRefs: LocalRefs = {}\n  const schemaRefs: Set<string> = new Set()\n\n  traverse(schema, {allKeys: true}, (sch, jsonPtr, _, parentJsonPtr) => {\n    if (parentJsonPtr === undefined) return\n    const fullPath = pathPrefix + jsonPtr\n    let innerBaseId = baseIds[parentJsonPtr]\n    if (typeof sch[schemaId] == \"string\") innerBaseId = addRef.call(this, sch[schemaId])\n    addAnchor.call(this, sch.$anchor)\n    addAnchor.call(this, sch.$dynamicAnchor)\n    baseIds[jsonPtr] = innerBaseId\n\n    function addRef(this: Ajv, ref: string): string {\n      // eslint-disable-next-line @typescript-eslint/unbound-method\n      const _resolve = this.opts.uriResolver.resolve\n      ref = normalizeId(innerBaseId ? _resolve(innerBaseId, ref) : ref)\n      if (schemaRefs.has(ref)) throw ambiguos(ref)\n      schemaRefs.add(ref)\n      let schOrRef = this.refs[ref]\n      if (typeof schOrRef == \"string\") schOrRef = this.refs[schOrRef]\n      if (typeof schOrRef == \"object\") {\n        checkAmbiguosRef(sch, schOrRef.schema, ref)\n      } else if (ref !== normalizeId(fullPath)) {\n        if (ref[0] === \"#\") {\n          checkAmbiguosRef(sch, localRefs[ref], ref)\n          localRefs[ref] = sch\n        } else {\n          this.refs[ref] = fullPath\n        }\n      }\n      return ref\n    }\n\n    function addAnchor(this: Ajv, anchor: unknown): void {\n      if (typeof anchor == \"string\") {\n        if (!ANCHOR.test(anchor)) throw new Error(`invalid anchor \"${anchor}\"`)\n        addRef.call(this, `#${anchor}`)\n      }\n    }\n  })\n\n  return localRefs\n\n  function checkAmbiguosRef(sch1: AnySchema, sch2: AnySchema | undefined, ref: string): void {\n    if (sch2 !== undefined && !equal(sch1, sch2)) throw ambiguos(ref)\n  }\n\n  function ambiguos(ref: string): Error {\n    return new Error(`reference \"${ref}\" resolves to more than one schema`)\n  }\n}\n", "import type {\n  AddedKeywordDefinition,\n  AnySchema,\n  AnySchemaObject,\n  KeywordErrorCxt,\n  KeywordCxtParams,\n} from \"../../types\"\nimport type {SchemaCxt, SchemaObjCxt} from \"..\"\nimport type {InstanceOptions} from \"../../core\"\nimport {boolOrEmptySchema, topBoolOrEmptySchema} from \"./boolSchema\"\nimport {coerceAndCheckDataType, getSchemaTypes} from \"./dataType\"\nimport {shouldUseGroup, shouldUseRule} from \"./applicability\"\nimport {checkDataType, checkDataTypes, reportTypeError, DataType} from \"./dataType\"\nimport {assignDefaults} from \"./defaults\"\nimport {funcKeywordCode, macroKeywordCode, validateKeywordUsage, validSchemaType} from \"./keyword\"\nimport {getSubschema, extendSubschemaData, SubschemaArgs, extendSubschemaMode} from \"./subschema\"\nimport {_, nil, str, or, not, getProperty, Block, Code, Name, CodeGen} from \"../codegen\"\nimport N from \"../names\"\nimport {resolveUrl} from \"../resolve\"\nimport {\n  schemaRefOrVal,\n  schemaHasRulesButRef,\n  checkUnknownRules,\n  checkStrictMode,\n  unescapeJsonPointer,\n  mergeEvaluated,\n} from \"../util\"\nimport type {JSONType, Rule, RuleGroup} from \"../rules\"\nimport {\n  ErrorPaths,\n  reportError,\n  reportExtraError,\n  resetErrorsCount,\n  keyword$DataError,\n} from \"../errors\"\n\n// schema compilation - generates validation function, subschemaCode (below) is used for subschemas\nexport function validateFunctionCode(it: SchemaCxt): void {\n  if (isSchemaObj(it)) {\n    checkKeywords(it)\n    if (schemaCxtHasRules(it)) {\n      topSchemaObjCode(it)\n      return\n    }\n  }\n  validateFunction(it, () => topBoolOrEmptySchema(it))\n}\n\nfunction validateFunction(\n  {gen, validateName, schema, schemaEnv, opts}: SchemaCxt,\n  body: Block\n): void {\n  if (opts.code.es5) {\n    gen.func(validateName, _`${N.data}, ${N.valCxt}`, schemaEnv.$async, () => {\n      gen.code(_`\"use strict\"; ${funcSourceUrl(schema, opts)}`)\n      destructureValCxtES5(gen, opts)\n      gen.code(body)\n    })\n  } else {\n    gen.func(validateName, _`${N.data}, ${destructureValCxt(opts)}`, schemaEnv.$async, () =>\n      gen.code(funcSourceUrl(schema, opts)).code(body)\n    )\n  }\n}\n\nfunction destructureValCxt(opts: InstanceOptions): Code {\n  return _`{${N.instancePath}=\"\", ${N.parentData}, ${N.parentDataProperty}, ${N.rootData}=${\n    N.data\n  }${opts.dynamicRef ? _`, ${N.dynamicAnchors}={}` : nil}}={}`\n}\n\nfunction destructureValCxtES5(gen: CodeGen, opts: InstanceOptions): void {\n  gen.if(\n    N.valCxt,\n    () => {\n      gen.var(N.instancePath, _`${N.valCxt}.${N.instancePath}`)\n      gen.var(N.parentData, _`${N.valCxt}.${N.parentData}`)\n      gen.var(N.parentDataProperty, _`${N.valCxt}.${N.parentDataProperty}`)\n      gen.var(N.rootData, _`${N.valCxt}.${N.rootData}`)\n      if (opts.dynamicRef) gen.var(N.dynamicAnchors, _`${N.valCxt}.${N.dynamicAnchors}`)\n    },\n    () => {\n      gen.var(N.instancePath, _`\"\"`)\n      gen.var(N.parentData, _`undefined`)\n      gen.var(N.parentDataProperty, _`undefined`)\n      gen.var(N.rootData, N.data)\n      if (opts.dynamicRef) gen.var(N.dynamicAnchors, _`{}`)\n    }\n  )\n}\n\nfunction topSchemaObjCode(it: SchemaObjCxt): void {\n  const {schema, opts, gen} = it\n  validateFunction(it, () => {\n    if (opts.$comment && schema.$comment) commentKeyword(it)\n    checkNoDefault(it)\n    gen.let(N.vErrors, null)\n    gen.let(N.errors, 0)\n    if (opts.unevaluated) resetEvaluated(it)\n    typeAndKeywords(it)\n    returnResults(it)\n  })\n  return\n}\n\nfunction resetEvaluated(it: SchemaObjCxt): void {\n  // TODO maybe some hook to execute it in the end to check whether props/items are Name, as in assignEvaluated\n  const {gen, validateName} = it\n  it.evaluated = gen.const(\"evaluated\", _`${validateName}.evaluated`)\n  gen.if(_`${it.evaluated}.dynamicProps`, () => gen.assign(_`${it.evaluated}.props`, _`undefined`))\n  gen.if(_`${it.evaluated}.dynamicItems`, () => gen.assign(_`${it.evaluated}.items`, _`undefined`))\n}\n\nfunction funcSourceUrl(schema: AnySchema, opts: InstanceOptions): Code {\n  const schId = typeof schema == \"object\" && schema[opts.schemaId]\n  return schId && (opts.code.source || opts.code.process) ? _`/*# sourceURL=${schId} */` : nil\n}\n\n// schema compilation - this function is used recursively to generate code for sub-schemas\nfunction subschemaCode(it: SchemaCxt, valid: Name): void {\n  if (isSchemaObj(it)) {\n    checkKeywords(it)\n    if (schemaCxtHasRules(it)) {\n      subSchemaObjCode(it, valid)\n      return\n    }\n  }\n  boolOrEmptySchema(it, valid)\n}\n\nfunction schemaCxtHasRules({schema, self}: SchemaCxt): boolean {\n  if (typeof schema == \"boolean\") return !schema\n  for (const key in schema) if (self.RULES.all[key]) return true\n  return false\n}\n\nfunction isSchemaObj(it: SchemaCxt): it is SchemaObjCxt {\n  return typeof it.schema != \"boolean\"\n}\n\nfunction subSchemaObjCode(it: SchemaObjCxt, valid: Name): void {\n  const {schema, gen, opts} = it\n  if (opts.$comment && schema.$comment) commentKeyword(it)\n  updateContext(it)\n  checkAsyncSchema(it)\n  const errsCount = gen.const(\"_errs\", N.errors)\n  typeAndKeywords(it, errsCount)\n  // TODO var\n  gen.var(valid, _`${errsCount} === ${N.errors}`)\n}\n\nfunction checkKeywords(it: SchemaObjCxt): void {\n  checkUnknownRules(it)\n  checkRefsAndKeywords(it)\n}\n\nfunction typeAndKeywords(it: SchemaObjCxt, errsCount?: Name): void {\n  if (it.opts.jtd) return schemaKeywords(it, [], false, errsCount)\n  const types = getSchemaTypes(it.schema)\n  const checkedTypes = coerceAndCheckDataType(it, types)\n  schemaKeywords(it, types, !checkedTypes, errsCount)\n}\n\nfunction checkRefsAndKeywords(it: SchemaObjCxt): void {\n  const {schema, errSchemaPath, opts, self} = it\n  if (schema.$ref && opts.ignoreKeywordsWithRef && schemaHasRulesButRef(schema, self.RULES)) {\n    self.logger.warn(`$ref: keywords ignored in schema at path \"${errSchemaPath}\"`)\n  }\n}\n\nfunction checkNoDefault(it: SchemaObjCxt): void {\n  const {schema, opts} = it\n  if (schema.default !== undefined && opts.useDefaults && opts.strictSchema) {\n    checkStrictMode(it, \"default is ignored in the schema root\")\n  }\n}\n\nfunction updateContext(it: SchemaObjCxt): void {\n  const schId = it.schema[it.opts.schemaId]\n  if (schId) it.baseId = resolveUrl(it.opts.uriResolver, it.baseId, schId)\n}\n\nfunction checkAsyncSchema(it: SchemaObjCxt): void {\n  if (it.schema.$async && !it.schemaEnv.$async) throw new Error(\"async schema in sync schema\")\n}\n\nfunction commentKeyword({gen, schemaEnv, schema, errSchemaPath, opts}: SchemaObjCxt): void {\n  const msg = schema.$comment\n  if (opts.$comment === true) {\n    gen.code(_`${N.self}.logger.log(${msg})`)\n  } else if (typeof opts.$comment == \"function\") {\n    const schemaPath = str`${errSchemaPath}/$comment`\n    const rootName = gen.scopeValue(\"root\", {ref: schemaEnv.root})\n    gen.code(_`${N.self}.opts.$comment(${msg}, ${schemaPath}, ${rootName}.schema)`)\n  }\n}\n\nfunction returnResults(it: SchemaCxt): void {\n  const {gen, schemaEnv, validateName, ValidationError, opts} = it\n  if (schemaEnv.$async) {\n    // TODO assign unevaluated\n    gen.if(\n      _`${N.errors} === 0`,\n      () => gen.return(N.data),\n      () => gen.throw(_`new ${ValidationError as Name}(${N.vErrors})`)\n    )\n  } else {\n    gen.assign(_`${validateName}.errors`, N.vErrors)\n    if (opts.unevaluated) assignEvaluated(it)\n    gen.return(_`${N.errors} === 0`)\n  }\n}\n\nfunction assignEvaluated({gen, evaluated, props, items}: SchemaCxt): void {\n  if (props instanceof Name) gen.assign(_`${evaluated}.props`, props)\n  if (items instanceof Name) gen.assign(_`${evaluated}.items`, items)\n}\n\nfunction schemaKeywords(\n  it: SchemaObjCxt,\n  types: JSONType[],\n  typeErrors: boolean,\n  errsCount?: Name\n): void {\n  const {gen, schema, data, allErrors, opts, self} = it\n  const {RULES} = self\n  if (schema.$ref && (opts.ignoreKeywordsWithRef || !schemaHasRulesButRef(schema, RULES))) {\n    gen.block(() => keywordCode(it, \"$ref\", (RULES.all.$ref as Rule).definition)) // TODO typecast\n    return\n  }\n  if (!opts.jtd) checkStrictTypes(it, types)\n  gen.block(() => {\n    for (const group of RULES.rules) groupKeywords(group)\n    groupKeywords(RULES.post)\n  })\n\n  function groupKeywords(group: RuleGroup): void {\n    if (!shouldUseGroup(schema, group)) return\n    if (group.type) {\n      gen.if(checkDataType(group.type, data, opts.strictNumbers))\n      iterateKeywords(it, group)\n      if (types.length === 1 && types[0] === group.type && typeErrors) {\n        gen.else()\n        reportTypeError(it)\n      }\n      gen.endIf()\n    } else {\n      iterateKeywords(it, group)\n    }\n    // TODO make it \"ok\" call?\n    if (!allErrors) gen.if(_`${N.errors} === ${errsCount || 0}`)\n  }\n}\n\nfunction iterateKeywords(it: SchemaObjCxt, group: RuleGroup): void {\n  const {\n    gen,\n    schema,\n    opts: {useDefaults},\n  } = it\n  if (useDefaults) assignDefaults(it, group.type)\n  gen.block(() => {\n    for (const rule of group.rules) {\n      if (shouldUseRule(schema, rule)) {\n        keywordCode(it, rule.keyword, rule.definition, group.type)\n      }\n    }\n  })\n}\n\nfunction checkStrictTypes(it: SchemaObjCxt, types: JSONType[]): void {\n  if (it.schemaEnv.meta || !it.opts.strictTypes) return\n  checkContextTypes(it, types)\n  if (!it.opts.allowUnionTypes) checkMultipleTypes(it, types)\n  checkKeywordTypes(it, it.dataTypes)\n}\n\nfunction checkContextTypes(it: SchemaObjCxt, types: JSONType[]): void {\n  if (!types.length) return\n  if (!it.dataTypes.length) {\n    it.dataTypes = types\n    return\n  }\n  types.forEach((t) => {\n    if (!includesType(it.dataTypes, t)) {\n      strictTypesError(it, `type \"${t}\" not allowed by context \"${it.dataTypes.join(\",\")}\"`)\n    }\n  })\n  narrowSchemaTypes(it, types)\n}\n\nfunction checkMultipleTypes(it: SchemaObjCxt, ts: JSONType[]): void {\n  if (ts.length > 1 && !(ts.length === 2 && ts.includes(\"null\"))) {\n    strictTypesError(it, \"use allowUnionTypes to allow union type keyword\")\n  }\n}\n\nfunction checkKeywordTypes(it: SchemaObjCxt, ts: JSONType[]): void {\n  const rules = it.self.RULES.all\n  for (const keyword in rules) {\n    const rule = rules[keyword]\n    if (typeof rule == \"object\" && shouldUseRule(it.schema, rule)) {\n      const {type} = rule.definition\n      if (type.length && !type.some((t) => hasApplicableType(ts, t))) {\n        strictTypesError(it, `missing type \"${type.join(\",\")}\" for keyword \"${keyword}\"`)\n      }\n    }\n  }\n}\n\nfunction hasApplicableType(schTs: JSONType[], kwdT: JSONType): boolean {\n  return schTs.includes(kwdT) || (kwdT === \"number\" && schTs.includes(\"integer\"))\n}\n\nfunction includesType(ts: JSONType[], t: JSONType): boolean {\n  return ts.includes(t) || (t === \"integer\" && ts.includes(\"number\"))\n}\n\nfunction narrowSchemaTypes(it: SchemaObjCxt, withTypes: JSONType[]): void {\n  const ts: JSONType[] = []\n  for (const t of it.dataTypes) {\n    if (includesType(withTypes, t)) ts.push(t)\n    else if (withTypes.includes(\"integer\") && t === \"number\") ts.push(\"integer\")\n  }\n  it.dataTypes = ts\n}\n\nfunction strictTypesError(it: SchemaObjCxt, msg: string): void {\n  const schemaPath = it.schemaEnv.baseId + it.errSchemaPath\n  msg += ` at \"${schemaPath}\" (strictTypes)`\n  checkStrictMode(it, msg, it.opts.strictTypes)\n}\n\nexport class KeywordCxt implements KeywordErrorCxt {\n  readonly gen: CodeGen\n  readonly allErrors?: boolean\n  readonly keyword: string\n  readonly data: Name // Name referencing the current level of the data instance\n  readonly $data?: string | false\n  schema: any // keyword value in the schema\n  readonly schemaValue: Code | number | boolean // Code reference to keyword schema value or primitive value\n  readonly schemaCode: Code | number | boolean // Code reference to resolved schema value (different if schema is $data)\n  readonly schemaType: JSONType[] // allowed type(s) of keyword value in the schema\n  readonly parentSchema: AnySchemaObject\n  readonly errsCount?: Name // Name reference to the number of validation errors collected before this keyword,\n  // requires option trackErrors in keyword definition\n  params: KeywordCxtParams // object to pass parameters to error messages from keyword code\n  readonly it: SchemaObjCxt // schema compilation context (schema is guaranteed to be an object, not boolean)\n  readonly def: AddedKeywordDefinition\n\n  constructor(it: SchemaObjCxt, def: AddedKeywordDefinition, keyword: string) {\n    validateKeywordUsage(it, def, keyword)\n    this.gen = it.gen\n    this.allErrors = it.allErrors\n    this.keyword = keyword\n    this.data = it.data\n    this.schema = it.schema[keyword]\n    this.$data = def.$data && it.opts.$data && this.schema && this.schema.$data\n    this.schemaValue = schemaRefOrVal(it, this.schema, keyword, this.$data)\n    this.schemaType = def.schemaType\n    this.parentSchema = it.schema\n    this.params = {}\n    this.it = it\n    this.def = def\n\n    if (this.$data) {\n      this.schemaCode = it.gen.const(\"vSchema\", getData(this.$data, it))\n    } else {\n      this.schemaCode = this.schemaValue\n      if (!validSchemaType(this.schema, def.schemaType, def.allowUndefined)) {\n        throw new Error(`${keyword} value must be ${JSON.stringify(def.schemaType)}`)\n      }\n    }\n\n    if (\"code\" in def ? def.trackErrors : def.errors !== false) {\n      this.errsCount = it.gen.const(\"_errs\", N.errors)\n    }\n  }\n\n  result(condition: Code, successAction?: () => void, failAction?: () => void): void {\n    this.failResult(not(condition), successAction, failAction)\n  }\n\n  failResult(condition: Code, successAction?: () => void, failAction?: () => void): void {\n    this.gen.if(condition)\n    if (failAction) failAction()\n    else this.error()\n    if (successAction) {\n      this.gen.else()\n      successAction()\n      if (this.allErrors) this.gen.endIf()\n    } else {\n      if (this.allErrors) this.gen.endIf()\n      else this.gen.else()\n    }\n  }\n\n  pass(condition: Code, failAction?: () => void): void {\n    this.failResult(not(condition), undefined, failAction)\n  }\n\n  fail(condition?: Code): void {\n    if (condition === undefined) {\n      this.error()\n      if (!this.allErrors) this.gen.if(false) // this branch will be removed by gen.optimize\n      return\n    }\n    this.gen.if(condition)\n    this.error()\n    if (this.allErrors) this.gen.endIf()\n    else this.gen.else()\n  }\n\n  fail$data(condition: Code): void {\n    if (!this.$data) return this.fail(condition)\n    const {schemaCode} = this\n    this.fail(_`${schemaCode} !== undefined && (${or(this.invalid$data(), condition)})`)\n  }\n\n  error(append?: boolean, errorParams?: KeywordCxtParams, errorPaths?: ErrorPaths): void {\n    if (errorParams) {\n      this.setParams(errorParams)\n      this._error(append, errorPaths)\n      this.setParams({})\n      return\n    }\n    this._error(append, errorPaths)\n  }\n\n  private _error(append?: boolean, errorPaths?: ErrorPaths): void {\n    ;(append ? reportExtraError : reportError)(this, this.def.error, errorPaths)\n  }\n\n  $dataError(): void {\n    reportError(this, this.def.$dataError || keyword$DataError)\n  }\n\n  reset(): void {\n    if (this.errsCount === undefined) throw new Error('add \"trackErrors\" to keyword definition')\n    resetErrorsCount(this.gen, this.errsCount)\n  }\n\n  ok(cond: Code | boolean): void {\n    if (!this.allErrors) this.gen.if(cond)\n  }\n\n  setParams(obj: KeywordCxtParams, assign?: true): void {\n    if (assign) Object.assign(this.params, obj)\n    else this.params = obj\n  }\n\n  block$data(valid: Name, codeBlock: () => void, $dataValid: Code = nil): void {\n    this.gen.block(() => {\n      this.check$data(valid, $dataValid)\n      codeBlock()\n    })\n  }\n\n  check$data(valid: Name = nil, $dataValid: Code = nil): void {\n    if (!this.$data) return\n    const {gen, schemaCode, schemaType, def} = this\n    gen.if(or(_`${schemaCode} === undefined`, $dataValid))\n    if (valid !== nil) gen.assign(valid, true)\n    if (schemaType.length || def.validateSchema) {\n      gen.elseIf(this.invalid$data())\n      this.$dataError()\n      if (valid !== nil) gen.assign(valid, false)\n    }\n    gen.else()\n  }\n\n  invalid$data(): Code {\n    const {gen, schemaCode, schemaType, def, it} = this\n    return or(wrong$DataType(), invalid$DataSchema())\n\n    function wrong$DataType(): Code {\n      if (schemaType.length) {\n        /* istanbul ignore if */\n        if (!(schemaCode instanceof Name)) throw new Error(\"ajv implementation error\")\n        const st = Array.isArray(schemaType) ? schemaType : [schemaType]\n        return _`${checkDataTypes(st, schemaCode, it.opts.strictNumbers, DataType.Wrong)}`\n      }\n      return nil\n    }\n\n    function invalid$DataSchema(): Code {\n      if (def.validateSchema) {\n        const validateSchemaRef = gen.scopeValue(\"validate$data\", {ref: def.validateSchema}) // TODO value.code for standalone\n        return _`!${validateSchemaRef}(${schemaCode})`\n      }\n      return nil\n    }\n  }\n\n  subschema(appl: SubschemaArgs, valid: Name): SchemaCxt {\n    const subschema = getSubschema(this.it, appl)\n    extendSubschemaData(subschema, this.it, appl)\n    extendSubschemaMode(subschema, appl)\n    const nextContext = {...this.it, ...subschema, items: undefined, props: undefined}\n    subschemaCode(nextContext, valid)\n    return nextContext\n  }\n\n  mergeEvaluated(schemaCxt: SchemaCxt, toName?: typeof Name): void {\n    const {it, gen} = this\n    if (!it.opts.unevaluated) return\n    if (it.props !== true && schemaCxt.props !== undefined) {\n      it.props = mergeEvaluated.props(gen, schemaCxt.props, it.props, toName)\n    }\n    if (it.items !== true && schemaCxt.items !== undefined) {\n      it.items = mergeEvaluated.items(gen, schemaCxt.items, it.items, toName)\n    }\n  }\n\n  mergeValidEvaluated(schemaCxt: SchemaCxt, valid: Name): boolean | void {\n    const {it, gen} = this\n    if (it.opts.unevaluated && (it.props !== true || it.items !== true)) {\n      gen.if(valid, () => this.mergeEvaluated(schemaCxt, Name))\n      return true\n    }\n  }\n}\n\nfunction keywordCode(\n  it: SchemaObjCxt,\n  keyword: string,\n  def: AddedKeywordDefinition,\n  ruleType?: JSONType\n): void {\n  const cxt = new KeywordCxt(it, def, keyword)\n  if (\"code\" in def) {\n    def.code(cxt, ruleType)\n  } else if (cxt.$data && def.validate) {\n    funcKeywordCode(cxt, def)\n  } else if (\"macro\" in def) {\n    macroKeywordCode(cxt, def)\n  } else if (def.compile || def.validate) {\n    funcKeywordCode(cxt, def)\n  }\n}\n\nconst JSON_POINTER = /^\\/(?:[^~]|~0|~1)*$/\nconst RELATIVE_JSON_POINTER = /^([0-9]+)(#|\\/(?:[^~]|~0|~1)*)?$/\nexport function getData(\n  $data: string,\n  {dataLevel, dataNames, dataPathArr}: SchemaCxt\n): Code | number {\n  let jsonPointer\n  let data: Code\n  if ($data === \"\") return N.rootData\n  if ($data[0] === \"/\") {\n    if (!JSON_POINTER.test($data)) throw new Error(`Invalid JSON-pointer: ${$data}`)\n    jsonPointer = $data\n    data = N.rootData\n  } else {\n    const matches = RELATIVE_JSON_POINTER.exec($data)\n    if (!matches) throw new Error(`Invalid JSON-pointer: ${$data}`)\n    const up: number = +matches[1]\n    jsonPointer = matches[2]\n    if (jsonPointer === \"#\") {\n      if (up >= dataLevel) throw new Error(errorMsg(\"property/index\", up))\n      return dataPathArr[dataLevel - up]\n    }\n    if (up > dataLevel) throw new Error(errorMsg(\"data\", up))\n    data = dataNames[dataLevel - up]\n    if (!jsonPointer) return data\n  }\n\n  let expr = data\n  const segments = jsonPointer.split(\"/\")\n  for (const segment of segments) {\n    if (segment) {\n      data = _`${data}${getProperty(unescapeJsonPointer(segment))}`\n      expr = _`${expr} && ${data}`\n    }\n  }\n  return expr\n\n  function errorMsg(pointerType: string, up: number): string {\n    return `Cannot access ${pointerType} ${up} levels up, current level is ${dataLevel}`\n  }\n}\n", "import type {ErrorObject} from \"../types\"\n\nexport default class ValidationError extends Error {\n  readonly errors: Partial<ErrorObject>[]\n  readonly ajv: true\n  readonly validation: true\n\n  constructor(errors: Partial<ErrorObject>[]) {\n    super(\"validation failed\")\n    this.errors = errors\n    this.ajv = this.validation = true\n  }\n}\n", "import {resolveUrl, normalizeId, getFullPath} from \"./resolve\"\nimport type {UriResolver} from \"../types\"\n\nexport default class MissingRefError extends Error {\n  readonly missingRef: string\n  readonly missingSchema: string\n\n  constructor(resolver: UriResolver, baseId: string, ref: string, msg?: string) {\n    super(msg || `can't resolve reference ${ref} from id ${baseId}`)\n    this.missingRef = resolveUrl(resolver, baseId, ref)\n    this.missingSchema = normalizeId(getFullPath(resolver, this.missingRef))\n  }\n}\n", "import type {\n  AnySchema,\n  AnySchemaObject,\n  AnyValidateFunction,\n  AsyncValidateFunction,\n  EvaluatedProperties,\n  EvaluatedItems,\n} from \"../types\"\nimport type Ajv from \"../core\"\nimport type {InstanceOptions} from \"../core\"\nimport {CodeGen, _, nil, stringify, Name, Code, ValueScopeName} from \"./codegen\"\nimport ValidationError from \"../runtime/validation_error\"\nimport N from \"./names\"\nimport {LocalRefs, getFullPath, _getFullPath, inlineRef, normalizeId, resolveUrl} from \"./resolve\"\nimport {schemaHasRulesButRef, unescapeFragment} from \"./util\"\nimport {validateFunctionCode} from \"./validate\"\nimport {URIComponent} from \"fast-uri\"\nimport {JSONType} from \"./rules\"\n\nexport type SchemaRefs = {\n  [Ref in string]?: SchemaEnv | AnySchema\n}\n\nexport interface SchemaCxt {\n  readonly gen: CodeGen\n  readonly allErrors?: boolean // validation mode - whether to collect all errors or break on error\n  readonly data: Name // Name with reference to the current part of data instance\n  readonly parentData: Name // should be used in keywords modifying data\n  readonly parentDataProperty: Code | number // should be used in keywords modifying data\n  readonly dataNames: Name[]\n  readonly dataPathArr: (Code | number)[]\n  readonly dataLevel: number // the level of the currently validated data,\n  // it can be used to access both the property names and the data on all levels from the top.\n  dataTypes: JSONType[] // data types applied to the current part of data instance\n  definedProperties: Set<string> // set of properties to keep track of for required checks\n  readonly topSchemaRef: Code\n  readonly validateName: Name\n  evaluated?: Name\n  readonly ValidationError?: Name\n  readonly schema: AnySchema // current schema object - equal to parentSchema passed via KeywordCxt\n  readonly schemaEnv: SchemaEnv\n  readonly rootId: string\n  baseId: string // the current schema base URI that should be used as the base for resolving URIs in references (\\$ref)\n  readonly schemaPath: Code // the run-time expression that evaluates to the property name of the current schema\n  readonly errSchemaPath: string // this is actual string, should not be changed to Code\n  readonly errorPath: Code\n  readonly propertyName?: Name\n  readonly compositeRule?: boolean // true indicates that the current schema is inside the compound keyword,\n  // where failing some rule doesn't mean validation failure (`anyOf`, `oneOf`, `not`, `if`).\n  // This flag is used to determine whether you can return validation result immediately after any error in case the option `allErrors` is not `true.\n  // You only need to use it if you have many steps in your keywords and potentially can define multiple errors.\n  props?: EvaluatedProperties | Name // properties evaluated by this schema - used by parent schema or assigned to validation function\n  items?: EvaluatedItems | Name // last item evaluated by this schema - used by parent schema or assigned to validation function\n  jtdDiscriminator?: string\n  jtdMetadata?: boolean\n  readonly createErrors?: boolean\n  readonly opts: InstanceOptions // Ajv instance option.\n  readonly self: Ajv // current Ajv instance\n}\n\nexport interface SchemaObjCxt extends SchemaCxt {\n  readonly schema: AnySchemaObject\n}\ninterface SchemaEnvArgs {\n  readonly schema: AnySchema\n  readonly schemaId?: \"$id\" | \"id\"\n  readonly root?: SchemaEnv\n  readonly baseId?: string\n  readonly schemaPath?: string\n  readonly localRefs?: LocalRefs\n  readonly meta?: boolean\n}\n\nexport class SchemaEnv implements SchemaEnvArgs {\n  readonly schema: AnySchema\n  readonly schemaId?: \"$id\" | \"id\"\n  readonly root: SchemaEnv\n  baseId: string // TODO possibly, it should be readonly\n  schemaPath?: string\n  localRefs?: LocalRefs\n  readonly meta?: boolean\n  readonly $async?: boolean // true if the current schema is asynchronous.\n  readonly refs: SchemaRefs = {}\n  readonly dynamicAnchors: {[Ref in string]?: true} = {}\n  validate?: AnyValidateFunction\n  validateName?: ValueScopeName\n  serialize?: (data: unknown) => string\n  serializeName?: ValueScopeName\n  parse?: (data: string) => unknown\n  parseName?: ValueScopeName\n\n  constructor(env: SchemaEnvArgs) {\n    let schema: AnySchemaObject | undefined\n    if (typeof env.schema == \"object\") schema = env.schema\n    this.schema = env.schema\n    this.schemaId = env.schemaId\n    this.root = env.root || this\n    this.baseId = env.baseId ?? normalizeId(schema?.[env.schemaId || \"$id\"])\n    this.schemaPath = env.schemaPath\n    this.localRefs = env.localRefs\n    this.meta = env.meta\n    this.$async = schema?.$async\n    this.refs = {}\n  }\n}\n\n// let codeSize = 0\n// let nodeCount = 0\n\n// Compiles schema in SchemaEnv\nexport function compileSchema(this: Ajv, sch: SchemaEnv): SchemaEnv {\n  // TODO refactor - remove compilations\n  const _sch = getCompilingSchema.call(this, sch)\n  if (_sch) return _sch\n  const rootId = getFullPath(this.opts.uriResolver, sch.root.baseId) // TODO if getFullPath removed 1 tests fails\n  const {es5, lines} = this.opts.code\n  const {ownProperties} = this.opts\n  const gen = new CodeGen(this.scope, {es5, lines, ownProperties})\n  let _ValidationError\n  if (sch.$async) {\n    _ValidationError = gen.scopeValue(\"Error\", {\n      ref: ValidationError,\n      code: _`require(\"ajv/dist/runtime/validation_error\").default`,\n    })\n  }\n\n  const validateName = gen.scopeName(\"validate\")\n  sch.validateName = validateName\n\n  const schemaCxt: SchemaCxt = {\n    gen,\n    allErrors: this.opts.allErrors,\n    data: N.data,\n    parentData: N.parentData,\n    parentDataProperty: N.parentDataProperty,\n    dataNames: [N.data],\n    dataPathArr: [nil], // TODO can its length be used as dataLevel if nil is removed?\n    dataLevel: 0,\n    dataTypes: [],\n    definedProperties: new Set<string>(),\n    topSchemaRef: gen.scopeValue(\n      \"schema\",\n      this.opts.code.source === true\n        ? {ref: sch.schema, code: stringify(sch.schema)}\n        : {ref: sch.schema}\n    ),\n    validateName,\n    ValidationError: _ValidationError,\n    schema: sch.schema,\n    schemaEnv: sch,\n    rootId,\n    baseId: sch.baseId || rootId,\n    schemaPath: nil,\n    errSchemaPath: sch.schemaPath || (this.opts.jtd ? \"\" : \"#\"),\n    errorPath: _`\"\"`,\n    opts: this.opts,\n    self: this,\n  }\n\n  let sourceCode: string | undefined\n  try {\n    this._compilations.add(sch)\n    validateFunctionCode(schemaCxt)\n    gen.optimize(this.opts.code.optimize)\n    // gen.optimize(1)\n    const validateCode = gen.toString()\n    sourceCode = `${gen.scopeRefs(N.scope)}return ${validateCode}`\n    // console.log((codeSize += sourceCode.length), (nodeCount += gen.nodeCount))\n    if (this.opts.code.process) sourceCode = this.opts.code.process(sourceCode, sch)\n    // console.log(\"\\n\\n\\n *** \\n\", sourceCode)\n    const makeValidate = new Function(`${N.self}`, `${N.scope}`, sourceCode)\n    const validate: AnyValidateFunction = makeValidate(this, this.scope.get())\n    this.scope.value(validateName, {ref: validate})\n\n    validate.errors = null\n    validate.schema = sch.schema\n    validate.schemaEnv = sch\n    if (sch.$async) (validate as AsyncValidateFunction).$async = true\n    if (this.opts.code.source === true) {\n      validate.source = {validateName, validateCode, scopeValues: gen._values}\n    }\n    if (this.opts.unevaluated) {\n      const {props, items} = schemaCxt\n      validate.evaluated = {\n        props: props instanceof Name ? undefined : props,\n        items: items instanceof Name ? undefined : items,\n        dynamicProps: props instanceof Name,\n        dynamicItems: items instanceof Name,\n      }\n      if (validate.source) validate.source.evaluated = stringify(validate.evaluated)\n    }\n    sch.validate = validate\n    return sch\n  } catch (e) {\n    delete sch.validate\n    delete sch.validateName\n    if (sourceCode) this.logger.error(\"Error compiling schema, function code:\", sourceCode)\n    // console.log(\"\\n\\n\\n *** \\n\", sourceCode, this.opts)\n    throw e\n  } finally {\n    this._compilations.delete(sch)\n  }\n}\n\nexport function resolveRef(\n  this: Ajv,\n  root: SchemaEnv,\n  baseId: string,\n  ref: string\n): AnySchema | SchemaEnv | undefined {\n  ref = resolveUrl(this.opts.uriResolver, baseId, ref)\n  const schOrFunc = root.refs[ref]\n  if (schOrFunc) return schOrFunc\n\n  let _sch = resolve.call(this, root, ref)\n  if (_sch === undefined) {\n    const schema = root.localRefs?.[ref] // TODO maybe localRefs should hold SchemaEnv\n    const {schemaId} = this.opts\n    if (schema) _sch = new SchemaEnv({schema, schemaId, root, baseId})\n  }\n\n  if (_sch === undefined) return\n  return (root.refs[ref] = inlineOrCompile.call(this, _sch))\n}\n\nfunction inlineOrCompile(this: Ajv, sch: SchemaEnv): AnySchema | SchemaEnv {\n  if (inlineRef(sch.schema, this.opts.inlineRefs)) return sch.schema\n  return sch.validate ? sch : compileSchema.call(this, sch)\n}\n\n// Index of schema compilation in the currently compiled list\nexport function getCompilingSchema(this: Ajv, schEnv: SchemaEnv): SchemaEnv | void {\n  for (const sch of this._compilations) {\n    if (sameSchemaEnv(sch, schEnv)) return sch\n  }\n}\n\nfunction sameSchemaEnv(s1: SchemaEnv, s2: SchemaEnv): boolean {\n  return s1.schema === s2.schema && s1.root === s2.root && s1.baseId === s2.baseId\n}\n\n// resolve and compile the references ($ref)\n// TODO returns AnySchemaObject (if the schema can be inlined) or validation function\nfunction resolve(\n  this: Ajv,\n  root: SchemaEnv, // information about the root schema for the current schema\n  ref: string // reference to resolve\n): SchemaEnv | undefined {\n  let sch\n  while (typeof (sch = this.refs[ref]) == \"string\") ref = sch\n  return sch || this.schemas[ref] || resolveSchema.call(this, root, ref)\n}\n\n// Resolve schema, its root and baseId\nexport function resolveSchema(\n  this: Ajv,\n  root: SchemaEnv, // root object with properties schema, refs TODO below SchemaEnv is assigned to it\n  ref: string // reference to resolve\n): SchemaEnv | undefined {\n  const p = this.opts.uriResolver.parse(ref)\n  const refPath = _getFullPath(this.opts.uriResolver, p)\n  let baseId = getFullPath(this.opts.uriResolver, root.baseId, undefined)\n  // TODO `Object.keys(root.schema).length > 0` should not be needed - but removing breaks 2 tests\n  if (Object.keys(root.schema).length > 0 && refPath === baseId) {\n    return getJsonPointer.call(this, p, root)\n  }\n\n  const id = normalizeId(refPath)\n  const schOrRef = this.refs[id] || this.schemas[id]\n  if (typeof schOrRef == \"string\") {\n    const sch = resolveSchema.call(this, root, schOrRef)\n    if (typeof sch?.schema !== \"object\") return\n    return getJsonPointer.call(this, p, sch)\n  }\n\n  if (typeof schOrRef?.schema !== \"object\") return\n  if (!schOrRef.validate) compileSchema.call(this, schOrRef)\n  if (id === normalizeId(ref)) {\n    const {schema} = schOrRef\n    const {schemaId} = this.opts\n    const schId = schema[schemaId]\n    if (schId) baseId = resolveUrl(this.opts.uriResolver, baseId, schId)\n    return new SchemaEnv({schema, schemaId, root, baseId})\n  }\n  return getJsonPointer.call(this, p, schOrRef)\n}\n\nconst PREVENT_SCOPE_CHANGE = new Set([\n  \"properties\",\n  \"patternProperties\",\n  \"enum\",\n  \"dependencies\",\n  \"definitions\",\n])\n\nfunction getJsonPointer(\n  this: Ajv,\n  parsedRef: URIComponent,\n  {baseId, schema, root}: SchemaEnv\n): SchemaEnv | undefined {\n  if (parsedRef.fragment?.[0] !== \"/\") return\n  for (const part of parsedRef.fragment.slice(1).split(\"/\")) {\n    if (typeof schema === \"boolean\") return\n    const partSchema = schema[unescapeFragment(part)]\n    if (partSchema === undefined) return\n    schema = partSchema\n    // TODO PREVENT_SCOPE_CHANGE could be defined in keyword def?\n    const schId = typeof schema === \"object\" && schema[this.opts.schemaId]\n    if (!PREVENT_SCOPE_CHANGE.has(part) && schId) {\n      baseId = resolveUrl(this.opts.uriResolver, baseId, schId)\n    }\n  }\n  let env: SchemaEnv | undefined\n  if (typeof schema != \"boolean\" && schema.$ref && !schemaHasRulesButRef(schema, this.RULES)) {\n    const $ref = resolveUrl(this.opts.uriResolver, baseId, schema.$ref)\n    env = resolveSchema.call(this, root, $ref)\n  }\n  // even though resolution failed we need to return SchemaEnv to throw exception\n  // so that compileAsync loads missing schema.\n  const {schemaId} = this.opts\n  env = env || new SchemaEnv({schema, schemaId, root, baseId})\n  if (env.schema !== env.root.schema) return env\n  return undefined\n}\n", "{\n  \"$id\": \"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#\",\n  \"description\": \"Meta-schema for $data reference (JSON AnySchema extension proposal)\",\n  \"type\": \"object\",\n  \"required\": [\"$data\"],\n  \"properties\": {\n    \"$data\": {\n      \"type\": \"string\",\n      \"anyOf\": [{\"format\": \"relative-json-pointer\"}, {\"format\": \"json-pointer\"}]\n    }\n  },\n  \"additionalProperties\": false\n}\n", "'use strict'\n\n/** @type {(value: string) => boolean} */\nconst isUUID = RegExp.prototype.test.bind(/^[\\da-f]{8}-[\\da-f]{4}-[\\da-f]{4}-[\\da-f]{4}-[\\da-f]{12}$/iu)\n\n/** @type {(value: string) => boolean} */\nconst isIPv4 = RegExp.prototype.test.bind(/^(?:(?:25[0-5]|2[0-4]\\d|1\\d{2}|[1-9]\\d|\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|1\\d{2}|[1-9]\\d|\\d)$/u)\n\n/**\n * @param {Array<string>} input\n * @returns {string}\n */\nfunction stringArrayToHexStripped (input) {\n  let acc = ''\n  let code = 0\n  let i = 0\n\n  for (i = 0; i < input.length; i++) {\n    code = input[i].charCodeAt(0)\n    if (code === 48) {\n      continue\n    }\n    if (!((code >= 48 && code <= 57) || (code >= 65 && code <= 70) || (code >= 97 && code <= 102))) {\n      return ''\n    }\n    acc += input[i]\n    break\n  }\n\n  for (i += 1; i < input.length; i++) {\n    code = input[i].charCodeAt(0)\n    if (!((code >= 48 && code <= 57) || (code >= 65 && code <= 70) || (code >= 97 && code <= 102))) {\n      return ''\n    }\n    acc += input[i]\n  }\n  return acc\n}\n\n/**\n * @typedef {Object} GetIPV6Result\n * @property {boolean} error - Indicates if there was an error parsing the IPv6 address.\n * @property {string} address - The parsed IPv6 address.\n * @property {string} [zone] - The zone identifier, if present.\n */\n\n/**\n * @param {string} value\n * @returns {boolean}\n */\nconst nonSimpleDomain = RegExp.prototype.test.bind(/[^!\"$&'()*+,\\-.;=_`a-z{}~]/u)\n\n/**\n * @param {Array<string>} buffer\n * @returns {boolean}\n */\nfunction consumeIsZone (buffer) {\n  buffer.length = 0\n  return true\n}\n\n/**\n * @param {Array<string>} buffer\n * @param {Array<string>} address\n * @param {GetIPV6Result} output\n * @returns {boolean}\n */\nfunction consumeHextets (buffer, address, output) {\n  if (buffer.length) {\n    const hex = stringArrayToHexStripped(buffer)\n    if (hex !== '') {\n      address.push(hex)\n    } else {\n      output.error = true\n      return false\n    }\n    buffer.length = 0\n  }\n  return true\n}\n\n/**\n * @param {string} input\n * @returns {GetIPV6Result}\n */\nfunction getIPV6 (input) {\n  let tokenCount = 0\n  const output = { error: false, address: '', zone: '' }\n  /** @type {Array<string>} */\n  const address = []\n  /** @type {Array<string>} */\n  const buffer = []\n  let endipv6Encountered = false\n  let endIpv6 = false\n\n  let consume = consumeHextets\n\n  for (let i = 0; i < input.length; i++) {\n    const cursor = input[i]\n    if (cursor === '[' || cursor === ']') { continue }\n    if (cursor === ':') {\n      if (endipv6Encountered === true) {\n        endIpv6 = true\n      }\n      if (!consume(buffer, address, output)) { break }\n      if (++tokenCount > 7) {\n        // not valid\n        output.error = true\n        break\n      }\n      if (i > 0 && input[i - 1] === ':') {\n        endipv6Encountered = true\n      }\n      address.push(':')\n      continue\n    } else if (cursor === '%') {\n      if (!consume(buffer, address, output)) { break }\n      // switch to zone detection\n      consume = consumeIsZone\n    } else {\n      buffer.push(cursor)\n      continue\n    }\n  }\n  if (buffer.length) {\n    if (consume === consumeIsZone) {\n      output.zone = buffer.join('')\n    } else if (endIpv6) {\n      address.push(buffer.join(''))\n    } else {\n      address.push(stringArrayToHexStripped(buffer))\n    }\n  }\n  output.address = address.join('')\n  return output\n}\n\n/**\n * @typedef {Object} NormalizeIPv6Result\n * @property {string} host - The normalized host.\n * @property {string} [escapedHost] - The escaped host.\n * @property {boolean} isIPV6 - Indicates if the host is an IPv6 address.\n */\n\n/**\n * @param {string} host\n * @returns {NormalizeIPv6Result}\n */\nfunction normalizeIPv6 (host) {\n  if (findToken(host, ':') < 2) { return { host, isIPV6: false } }\n  const ipv6 = getIPV6(host)\n\n  if (!ipv6.error) {\n    let newHost = ipv6.address\n    let escapedHost = ipv6.address\n    if (ipv6.zone) {\n      newHost += '%' + ipv6.zone\n      escapedHost += '%25' + ipv6.zone\n    }\n    return { host: newHost, isIPV6: true, escapedHost }\n  } else {\n    return { host, isIPV6: false }\n  }\n}\n\n/**\n * @param {string} str\n * @param {string} token\n * @returns {number}\n */\nfunction findToken (str, token) {\n  let ind = 0\n  for (let i = 0; i < str.length; i++) {\n    if (str[i] === token) ind++\n  }\n  return ind\n}\n\n/**\n * @param {string} path\n * @returns {string}\n *\n * @see https://datatracker.ietf.org/doc/html/rfc3986#section-5.2.4\n */\nfunction removeDotSegments (path) {\n  let input = path\n  const output = []\n  let nextSlash = -1\n  let len = 0\n\n  // eslint-disable-next-line no-cond-assign\n  while (len = input.length) {\n    if (len === 1) {\n      if (input === '.') {\n        break\n      } else if (input === '/') {\n        output.push('/')\n        break\n      } else {\n        output.push(input)\n        break\n      }\n    } else if (len === 2) {\n      if (input[0] === '.') {\n        if (input[1] === '.') {\n          break\n        } else if (input[1] === '/') {\n          input = input.slice(2)\n          continue\n        }\n      } else if (input[0] === '/') {\n        if (input[1] === '.' || input[1] === '/') {\n          output.push('/')\n          break\n        }\n      }\n    } else if (len === 3) {\n      if (input === '/..') {\n        if (output.length !== 0) {\n          output.pop()\n        }\n        output.push('/')\n        break\n      }\n    }\n    if (input[0] === '.') {\n      if (input[1] === '.') {\n        if (input[2] === '/') {\n          input = input.slice(3)\n          continue\n        }\n      } else if (input[1] === '/') {\n        input = input.slice(2)\n        continue\n      }\n    } else if (input[0] === '/') {\n      if (input[1] === '.') {\n        if (input[2] === '/') {\n          input = input.slice(2)\n          continue\n        } else if (input[2] === '.') {\n          if (input[3] === '/') {\n            input = input.slice(3)\n            if (output.length !== 0) {\n              output.pop()\n            }\n            continue\n          }\n        }\n      }\n    }\n\n    // Rule 2E: Move normal path segment to output\n    if ((nextSlash = input.indexOf('/', 1)) === -1) {\n      output.push(input)\n      break\n    } else {\n      output.push(input.slice(0, nextSlash))\n      input = input.slice(nextSlash)\n    }\n  }\n\n  return output.join('')\n}\n\n/**\n * @param {import('../types/index').URIComponent} component\n * @param {boolean} esc\n * @returns {import('../types/index').URIComponent}\n */\nfunction normalizeComponentEncoding (component, esc) {\n  const func = esc !== true ? escape : unescape\n  if (component.scheme !== undefined) {\n    component.scheme = func(component.scheme)\n  }\n  if (component.userinfo !== undefined) {\n    component.userinfo = func(component.userinfo)\n  }\n  if (component.host !== undefined) {\n    component.host = func(component.host)\n  }\n  if (component.path !== undefined) {\n    component.path = func(component.path)\n  }\n  if (component.query !== undefined) {\n    component.query = func(component.query)\n  }\n  if (component.fragment !== undefined) {\n    component.fragment = func(component.fragment)\n  }\n  return component\n}\n\n/**\n * @param {import('../types/index').URIComponent} component\n * @returns {string|undefined}\n */\nfunction recomposeAuthority (component) {\n  const uriTokens = []\n\n  if (component.userinfo !== undefined) {\n    uriTokens.push(component.userinfo)\n    uriTokens.push('@')\n  }\n\n  if (component.host !== undefined) {\n    let host = unescape(component.host)\n    if (!isIPv4(host)) {\n      const ipV6res = normalizeIPv6(host)\n      if (ipV6res.isIPV6 === true) {\n        host = `[${ipV6res.escapedHost}]`\n      } else {\n        host = component.host\n      }\n    }\n    uriTokens.push(host)\n  }\n\n  if (typeof component.port === 'number' || typeof component.port === 'string') {\n    uriTokens.push(':')\n    uriTokens.push(String(component.port))\n  }\n\n  return uriTokens.length ? uriTokens.join('') : undefined\n};\n\nmodule.exports = {\n  nonSimpleDomain,\n  recomposeAuthority,\n  normalizeComponentEncoding,\n  removeDotSegments,\n  isIPv4,\n  isUUID,\n  normalizeIPv6,\n  stringArrayToHexStripped\n}\n", "'use strict'\n\nconst { isUUID } = require('./utils')\nconst URN_REG = /([\\da-z][\\d\\-a-z]{0,31}):((?:[\\w!$'()*+,\\-.:;=@]|%[\\da-f]{2})+)/iu\n\nconst supportedSchemeNames = /** @type {const} */ (['http', 'https', 'ws',\n  'wss', 'urn', 'urn:uuid'])\n\n/** @typedef {supportedSchemeNames[number]} SchemeName */\n\n/**\n * @param {string} name\n * @returns {name is SchemeName}\n */\nfunction isValidSchemeName (name) {\n  return supportedSchemeNames.indexOf(/** @type {*} */ (name)) !== -1\n}\n\n/**\n * @callback SchemeFn\n * @param {import('../types/index').URIComponent} component\n * @param {import('../types/index').Options} options\n * @returns {import('../types/index').URIComponent}\n */\n\n/**\n * @typedef {Object} SchemeHandler\n * @property {SchemeName} scheme - The scheme name.\n * @property {boolean} [domainHost] - Indicates if the scheme supports domain hosts.\n * @property {SchemeFn} parse - Function to parse the URI component for this scheme.\n * @property {SchemeFn} serialize - Function to serialize the URI component for this scheme.\n * @property {boolean} [skipNormalize] - Indicates if normalization should be skipped for this scheme.\n * @property {boolean} [absolutePath] - Indicates if the scheme uses absolute paths.\n * @property {boolean} [unicodeSupport] - Indicates if the scheme supports Unicode.\n */\n\n/**\n * @param {import('../types/index').URIComponent} wsComponent\n * @returns {boolean}\n */\nfunction wsIsSecure (wsComponent) {\n  if (wsComponent.secure === true) {\n    return true\n  } else if (wsComponent.secure === false) {\n    return false\n  } else if (wsComponent.scheme) {\n    return (\n      wsComponent.scheme.length === 3 &&\n      (wsComponent.scheme[0] === 'w' || wsComponent.scheme[0] === 'W') &&\n      (wsComponent.scheme[1] === 's' || wsComponent.scheme[1] === 'S') &&\n      (wsComponent.scheme[2] === 's' || wsComponent.scheme[2] === 'S')\n    )\n  } else {\n    return false\n  }\n}\n\n/** @type {SchemeFn} */\nfunction httpParse (component) {\n  if (!component.host) {\n    component.error = component.error || 'HTTP URIs must have a host.'\n  }\n\n  return component\n}\n\n/** @type {SchemeFn} */\nfunction httpSerialize (component) {\n  const secure = String(component.scheme).toLowerCase() === 'https'\n\n  // normalize the default port\n  if (component.port === (secure ? 443 : 80) || component.port === '') {\n    component.port = undefined\n  }\n\n  // normalize the empty path\n  if (!component.path) {\n    component.path = '/'\n  }\n\n  // NOTE: We do not parse query strings for HTTP URIs\n  // as WWW Form Url Encoded query strings are part of the HTML4+ spec,\n  // and not the HTTP spec.\n\n  return component\n}\n\n/** @type {SchemeFn} */\nfunction wsParse (wsComponent) {\n// indicate if the secure flag is set\n  wsComponent.secure = wsIsSecure(wsComponent)\n\n  // construct resouce name\n  wsComponent.resourceName = (wsComponent.path || '/') + (wsComponent.query ? '?' + wsComponent.query : '')\n  wsComponent.path = undefined\n  wsComponent.query = undefined\n\n  return wsComponent\n}\n\n/** @type {SchemeFn} */\nfunction wsSerialize (wsComponent) {\n// normalize the default port\n  if (wsComponent.port === (wsIsSecure(wsComponent) ? 443 : 80) || wsComponent.port === '') {\n    wsComponent.port = undefined\n  }\n\n  // ensure scheme matches secure flag\n  if (typeof wsComponent.secure === 'boolean') {\n    wsComponent.scheme = (wsComponent.secure ? 'wss' : 'ws')\n    wsComponent.secure = undefined\n  }\n\n  // reconstruct path from resource name\n  if (wsComponent.resourceName) {\n    const [path, query] = wsComponent.resourceName.split('?')\n    wsComponent.path = (path && path !== '/' ? path : undefined)\n    wsComponent.query = query\n    wsComponent.resourceName = undefined\n  }\n\n  // forbid fragment component\n  wsComponent.fragment = undefined\n\n  return wsComponent\n}\n\n/** @type {SchemeFn} */\nfunction urnParse (urnComponent, options) {\n  if (!urnComponent.path) {\n    urnComponent.error = 'URN can not be parsed'\n    return urnComponent\n  }\n  const matches = urnComponent.path.match(URN_REG)\n  if (matches) {\n    const scheme = options.scheme || urnComponent.scheme || 'urn'\n    urnComponent.nid = matches[1].toLowerCase()\n    urnComponent.nss = matches[2]\n    const urnScheme = `${scheme}:${options.nid || urnComponent.nid}`\n    const schemeHandler = getSchemeHandler(urnScheme)\n    urnComponent.path = undefined\n\n    if (schemeHandler) {\n      urnComponent = schemeHandler.parse(urnComponent, options)\n    }\n  } else {\n    urnComponent.error = urnComponent.error || 'URN can not be parsed.'\n  }\n\n  return urnComponent\n}\n\n/** @type {SchemeFn} */\nfunction urnSerialize (urnComponent, options) {\n  if (urnComponent.nid === undefined) {\n    throw new Error('URN without nid cannot be serialized')\n  }\n  const scheme = options.scheme || urnComponent.scheme || 'urn'\n  const nid = urnComponent.nid.toLowerCase()\n  const urnScheme = `${scheme}:${options.nid || nid}`\n  const schemeHandler = getSchemeHandler(urnScheme)\n\n  if (schemeHandler) {\n    urnComponent = schemeHandler.serialize(urnComponent, options)\n  }\n\n  const uriComponent = urnComponent\n  const nss = urnComponent.nss\n  uriComponent.path = `${nid || options.nid}:${nss}`\n\n  options.skipEscape = true\n  return uriComponent\n}\n\n/** @type {SchemeFn} */\nfunction urnuuidParse (urnComponent, options) {\n  const uuidComponent = urnComponent\n  uuidComponent.uuid = uuidComponent.nss\n  uuidComponent.nss = undefined\n\n  if (!options.tolerant && (!uuidComponent.uuid || !isUUID(uuidComponent.uuid))) {\n    uuidComponent.error = uuidComponent.error || 'UUID is not valid.'\n  }\n\n  return uuidComponent\n}\n\n/** @type {SchemeFn} */\nfunction urnuuidSerialize (uuidComponent) {\n  const urnComponent = uuidComponent\n  // normalize UUID\n  urnComponent.nss = (uuidComponent.uuid || '').toLowerCase()\n  return urnComponent\n}\n\nconst http = /** @type {SchemeHandler} */ ({\n  scheme: 'http',\n  domainHost: true,\n  parse: httpParse,\n  serialize: httpSerialize\n})\n\nconst https = /** @type {SchemeHandler} */ ({\n  scheme: 'https',\n  domainHost: http.domainHost,\n  parse: httpParse,\n  serialize: httpSerialize\n})\n\nconst ws = /** @type {SchemeHandler} */ ({\n  scheme: 'ws',\n  domainHost: true,\n  parse: wsParse,\n  serialize: wsSerialize\n})\n\nconst wss = /** @type {SchemeHandler} */ ({\n  scheme: 'wss',\n  domainHost: ws.domainHost,\n  parse: ws.parse,\n  serialize: ws.serialize\n})\n\nconst urn = /** @type {SchemeHandler} */ ({\n  scheme: 'urn',\n  parse: urnParse,\n  serialize: urnSerialize,\n  skipNormalize: true\n})\n\nconst urnuuid = /** @type {SchemeHandler} */ ({\n  scheme: 'urn:uuid',\n  parse: urnuuidParse,\n  serialize: urnuuidSerialize,\n  skipNormalize: true\n})\n\nconst SCHEMES = /** @type {Record<SchemeName, SchemeHandler>} */ ({\n  http,\n  https,\n  ws,\n  wss,\n  urn,\n  'urn:uuid': urnuuid\n})\n\nObject.setPrototypeOf(SCHEMES, null)\n\n/**\n * @param {string|undefined} scheme\n * @returns {SchemeHandler|undefined}\n */\nfunction getSchemeHandler (scheme) {\n  return (\n    scheme && (\n      SCHEMES[/** @type {SchemeName} */ (scheme)] ||\n      SCHEMES[/** @type {SchemeName} */(scheme.toLowerCase())])\n  ) ||\n    undefined\n}\n\nmodule.exports = {\n  wsIsSecure,\n  SCHEMES,\n  isValidSchemeName,\n  getSchemeHandler,\n}\n", "'use strict'\n\nconst { normalizeIPv6, removeDotSegments, recomposeAuthority, normalizeComponentEncoding, isIPv4, nonSimpleDomain } = require('./lib/utils')\nconst { SCHEMES, getSchemeHandler } = require('./lib/schemes')\n\n/**\n * @template {import('./types/index').URIComponent|string} T\n * @param {T} uri\n * @param {import('./types/index').Options} [options]\n * @returns {T}\n */\nfunction normalize (uri, options) {\n  if (typeof uri === 'string') {\n    uri = /** @type {T} */ (serialize(parse(uri, options), options))\n  } else if (typeof uri === 'object') {\n    uri = /** @type {T} */ (parse(serialize(uri, options), options))\n  }\n  return uri\n}\n\n/**\n * @param {string} baseURI\n * @param {string} relativeURI\n * @param {import('./types/index').Options} [options]\n * @returns {string}\n */\nfunction resolve (baseURI, relativeURI, options) {\n  const schemelessOptions = options ? Object.assign({ scheme: 'null' }, options) : { scheme: 'null' }\n  const resolved = resolveComponent(parse(baseURI, schemelessOptions), parse(relativeURI, schemelessOptions), schemelessOptions, true)\n  schemelessOptions.skipEscape = true\n  return serialize(resolved, schemelessOptions)\n}\n\n/**\n * @param {import ('./types/index').URIComponent} base\n * @param {import ('./types/index').URIComponent} relative\n * @param {import('./types/index').Options} [options]\n * @param {boolean} [skipNormalization=false]\n * @returns {import ('./types/index').URIComponent}\n */\nfunction resolveComponent (base, relative, options, skipNormalization) {\n  /** @type {import('./types/index').URIComponent} */\n  const target = {}\n  if (!skipNormalization) {\n    base = parse(serialize(base, options), options) // normalize base component\n    relative = parse(serialize(relative, options), options) // normalize relative component\n  }\n  options = options || {}\n\n  if (!options.tolerant && relative.scheme) {\n    target.scheme = relative.scheme\n    // target.authority = relative.authority;\n    target.userinfo = relative.userinfo\n    target.host = relative.host\n    target.port = relative.port\n    target.path = removeDotSegments(relative.path || '')\n    target.query = relative.query\n  } else {\n    if (relative.userinfo !== undefined || relative.host !== undefined || relative.port !== undefined) {\n      // target.authority = relative.authority;\n      target.userinfo = relative.userinfo\n      target.host = relative.host\n      target.port = relative.port\n      target.path = removeDotSegments(relative.path || '')\n      target.query = relative.query\n    } else {\n      if (!relative.path) {\n        target.path = base.path\n        if (relative.query !== undefined) {\n          target.query = relative.query\n        } else {\n          target.query = base.query\n        }\n      } else {\n        if (relative.path[0] === '/') {\n          target.path = removeDotSegments(relative.path)\n        } else {\n          if ((base.userinfo !== undefined || base.host !== undefined || base.port !== undefined) && !base.path) {\n            target.path = '/' + relative.path\n          } else if (!base.path) {\n            target.path = relative.path\n          } else {\n            target.path = base.path.slice(0, base.path.lastIndexOf('/') + 1) + relative.path\n          }\n          target.path = removeDotSegments(target.path)\n        }\n        target.query = relative.query\n      }\n      // target.authority = base.authority;\n      target.userinfo = base.userinfo\n      target.host = base.host\n      target.port = base.port\n    }\n    target.scheme = base.scheme\n  }\n\n  target.fragment = relative.fragment\n\n  return target\n}\n\n/**\n * @param {import ('./types/index').URIComponent|string} uriA\n * @param {import ('./types/index').URIComponent|string} uriB\n * @param {import ('./types/index').Options} options\n * @returns {boolean}\n */\nfunction equal (uriA, uriB, options) {\n  if (typeof uriA === 'string') {\n    uriA = unescape(uriA)\n    uriA = serialize(normalizeComponentEncoding(parse(uriA, options), true), { ...options, skipEscape: true })\n  } else if (typeof uriA === 'object') {\n    uriA = serialize(normalizeComponentEncoding(uriA, true), { ...options, skipEscape: true })\n  }\n\n  if (typeof uriB === 'string') {\n    uriB = unescape(uriB)\n    uriB = serialize(normalizeComponentEncoding(parse(uriB, options), true), { ...options, skipEscape: true })\n  } else if (typeof uriB === 'object') {\n    uriB = serialize(normalizeComponentEncoding(uriB, true), { ...options, skipEscape: true })\n  }\n\n  return uriA.toLowerCase() === uriB.toLowerCase()\n}\n\n/**\n * @param {Readonly<import('./types/index').URIComponent>} cmpts\n * @param {import('./types/index').Options} [opts]\n * @returns {string}\n */\nfunction serialize (cmpts, opts) {\n  const component = {\n    host: cmpts.host,\n    scheme: cmpts.scheme,\n    userinfo: cmpts.userinfo,\n    port: cmpts.port,\n    path: cmpts.path,\n    query: cmpts.query,\n    nid: cmpts.nid,\n    nss: cmpts.nss,\n    uuid: cmpts.uuid,\n    fragment: cmpts.fragment,\n    reference: cmpts.reference,\n    resourceName: cmpts.resourceName,\n    secure: cmpts.secure,\n    error: ''\n  }\n  const options = Object.assign({}, opts)\n  const uriTokens = []\n\n  // find scheme handler\n  const schemeHandler = getSchemeHandler(options.scheme || component.scheme)\n\n  // perform scheme specific serialization\n  if (schemeHandler && schemeHandler.serialize) schemeHandler.serialize(component, options)\n\n  if (component.path !== undefined) {\n    if (!options.skipEscape) {\n      component.path = escape(component.path)\n\n      if (component.scheme !== undefined) {\n        component.path = component.path.split('%3A').join(':')\n      }\n    } else {\n      component.path = unescape(component.path)\n    }\n  }\n\n  if (options.reference !== 'suffix' && component.scheme) {\n    uriTokens.push(component.scheme, ':')\n  }\n\n  const authority = recomposeAuthority(component)\n  if (authority !== undefined) {\n    if (options.reference !== 'suffix') {\n      uriTokens.push('//')\n    }\n\n    uriTokens.push(authority)\n\n    if (component.path && component.path[0] !== '/') {\n      uriTokens.push('/')\n    }\n  }\n  if (component.path !== undefined) {\n    let s = component.path\n\n    if (!options.absolutePath && (!schemeHandler || !schemeHandler.absolutePath)) {\n      s = removeDotSegments(s)\n    }\n\n    if (\n      authority === undefined &&\n      s[0] === '/' &&\n      s[1] === '/'\n    ) {\n      // don't allow the path to start with \"//\"\n      s = '/%2F' + s.slice(2)\n    }\n\n    uriTokens.push(s)\n  }\n\n  if (component.query !== undefined) {\n    uriTokens.push('?', component.query)\n  }\n\n  if (component.fragment !== undefined) {\n    uriTokens.push('#', component.fragment)\n  }\n  return uriTokens.join('')\n}\n\nconst URI_PARSE = /^(?:([^#/:?]+):)?(?:\\/\\/((?:([^#/?@]*)@)?(\\[[^#/?\\]]+\\]|[^#/:?]*)(?::(\\d*))?))?([^#?]*)(?:\\?([^#]*))?(?:#((?:.|[\\n\\r])*))?/u\n\n/**\n * @param {string} uri\n * @param {import('./types/index').Options} [opts]\n * @returns\n */\nfunction parse (uri, opts) {\n  const options = Object.assign({}, opts)\n  /** @type {import('./types/index').URIComponent} */\n  const parsed = {\n    scheme: undefined,\n    userinfo: undefined,\n    host: '',\n    port: undefined,\n    path: '',\n    query: undefined,\n    fragment: undefined\n  }\n\n  let isIP = false\n  if (options.reference === 'suffix') {\n    if (options.scheme) {\n      uri = options.scheme + ':' + uri\n    } else {\n      uri = '//' + uri\n    }\n  }\n\n  const matches = uri.match(URI_PARSE)\n\n  if (matches) {\n    // store each component\n    parsed.scheme = matches[1]\n    parsed.userinfo = matches[3]\n    parsed.host = matches[4]\n    parsed.port = parseInt(matches[5], 10)\n    parsed.path = matches[6] || ''\n    parsed.query = matches[7]\n    parsed.fragment = matches[8]\n\n    // fix port number\n    if (isNaN(parsed.port)) {\n      parsed.port = matches[5]\n    }\n    if (parsed.host) {\n      const ipv4result = isIPv4(parsed.host)\n      if (ipv4result === false) {\n        const ipv6result = normalizeIPv6(parsed.host)\n        parsed.host = ipv6result.host.toLowerCase()\n        isIP = ipv6result.isIPV6\n      } else {\n        isIP = true\n      }\n    }\n    if (parsed.scheme === undefined && parsed.userinfo === undefined && parsed.host === undefined && parsed.port === undefined && parsed.query === undefined && !parsed.path) {\n      parsed.reference = 'same-document'\n    } else if (parsed.scheme === undefined) {\n      parsed.reference = 'relative'\n    } else if (parsed.fragment === undefined) {\n      parsed.reference = 'absolute'\n    } else {\n      parsed.reference = 'uri'\n    }\n\n    // check for reference errors\n    if (options.reference && options.reference !== 'suffix' && options.reference !== parsed.reference) {\n      parsed.error = parsed.error || 'URI is not a ' + options.reference + ' reference.'\n    }\n\n    // find scheme handler\n    const schemeHandler = getSchemeHandler(options.scheme || parsed.scheme)\n\n    // check if scheme can't handle IRIs\n    if (!options.unicodeSupport && (!schemeHandler || !schemeHandler.unicodeSupport)) {\n      // if host component is a domain name\n      if (parsed.host && (options.domainHost || (schemeHandler && schemeHandler.domainHost)) && isIP === false && nonSimpleDomain(parsed.host)) {\n        // convert Unicode IDN -> ASCII IDN\n        try {\n          parsed.host = URL.domainToASCII(parsed.host.toLowerCase())\n        } catch (e) {\n          parsed.error = parsed.error || \"Host's domain name can not be converted to ASCII: \" + e\n        }\n      }\n      // convert IRI -> URI\n    }\n\n    if (!schemeHandler || (schemeHandler && !schemeHandler.skipNormalize)) {\n      if (uri.indexOf('%') !== -1) {\n        if (parsed.scheme !== undefined) {\n          parsed.scheme = unescape(parsed.scheme)\n        }\n        if (parsed.host !== undefined) {\n          parsed.host = unescape(parsed.host)\n        }\n      }\n      if (parsed.path) {\n        parsed.path = escape(unescape(parsed.path))\n      }\n      if (parsed.fragment) {\n        parsed.fragment = encodeURI(decodeURIComponent(parsed.fragment))\n      }\n    }\n\n    // perform scheme specific parsing\n    if (schemeHandler && schemeHandler.parse) {\n      schemeHandler.parse(parsed, options)\n    }\n  } else {\n    parsed.error = parsed.error || 'URI can not be parsed.'\n  }\n  return parsed\n}\n\nconst fastUri = {\n  SCHEMES,\n  normalize,\n  resolve,\n  resolveComponent,\n  equal,\n  serialize,\n  parse\n}\n\nmodule.exports = fastUri\nmodule.exports.default = fastUri\nmodule.exports.fastUri = fastUri\n", "import * as uri from \"fast-uri\"\n\ntype URI = typeof uri & {code: string}\n;(uri as URI).code = 'require(\"ajv/dist/runtime/uri\").default'\n\nexport default uri as URI\n", "export {\n  Format,\n  FormatDefinition,\n  AsyncFormatDefinition,\n  KeywordDefinition,\n  KeywordErrorDefinition,\n  CodeKeywordDefinition,\n  MacroKeywordDefinition,\n  FuncKeywordDefinition,\n  Vocabulary,\n  Schema,\n  SchemaObject,\n  AnySchemaObject,\n  AsyncSchema,\n  AnySchema,\n  ValidateFunction,\n  AsyncValidateFunction,\n  AnyValidateFunction,\n  ErrorObject,\n  ErrorNoParams,\n} from \"./types\"\n\nexport {SchemaCxt, SchemaObjCxt} from \"./compile\"\nexport interface Plugin<Opts> {\n  (ajv: Ajv, options?: Opts): Ajv\n  [prop: string]: any\n}\n\nexport {KeywordCxt} from \"./compile/validate\"\nexport {DefinedError} from \"./vocabularies/errors\"\nexport {JSONType} from \"./compile/rules\"\nexport {JSONSchemaType} from \"./types/json-schema\"\nexport {JTDSchemaType, SomeJTDSchemaType, JTDDataType} from \"./types/jtd-schema\"\nexport {_, str, stringify, nil, Name, Code, CodeGen, CodeGenOptions} from \"./compile/codegen\"\n\nimport type {\n  Schema,\n  AnySchema,\n  AnySchemaObject,\n  SchemaObject,\n  AsyncSchema,\n  Vocabulary,\n  KeywordDefinition,\n  AddedKeywordDefinition,\n  AnyValidateFunction,\n  ValidateFunction,\n  AsyncValidateFunction,\n  ErrorObject,\n  Format,\n  AddedFormat,\n  RegExpEngine,\n  UriResolver,\n} from \"./types\"\nimport type {JSONSchemaType} from \"./types/json-schema\"\nimport type {JTDSchemaType, SomeJTDSchemaType, JTDDataType} from \"./types/jtd-schema\"\nimport ValidationError from \"./runtime/validation_error\"\nimport MissingRefError from \"./compile/ref_error\"\nimport {getRules, ValidationRules, Rule, RuleGroup, JSONType} from \"./compile/rules\"\nimport {SchemaEnv, compileSchema, resolveSchema} from \"./compile\"\nimport {Code, ValueScope} from \"./compile/codegen\"\nimport {normalizeId, getSchemaRefs} from \"./compile/resolve\"\nimport {getJSONTypes} from \"./compile/validate/dataType\"\nimport {eachItem} from \"./compile/util\"\nimport * as $dataRefSchema from \"./refs/data.json\"\n\nimport DefaultUriResolver from \"./runtime/uri\"\n\nconst defaultRegExp: RegExpEngine = (str, flags) => new RegExp(str, flags)\ndefaultRegExp.code = \"new RegExp\"\n\nconst META_IGNORE_OPTIONS: (keyof Options)[] = [\"removeAdditional\", \"useDefaults\", \"coerceTypes\"]\nconst EXT_SCOPE_NAMES = new Set([\n  \"validate\",\n  \"serialize\",\n  \"parse\",\n  \"wrapper\",\n  \"root\",\n  \"schema\",\n  \"keyword\",\n  \"pattern\",\n  \"formats\",\n  \"validate$data\",\n  \"func\",\n  \"obj\",\n  \"Error\",\n])\n\nexport type Options = CurrentOptions & DeprecatedOptions\n\nexport interface CurrentOptions {\n  // strict mode options (NEW)\n  strict?: boolean | \"log\"\n  strictSchema?: boolean | \"log\"\n  strictNumbers?: boolean | \"log\"\n  strictTypes?: boolean | \"log\"\n  strictTuples?: boolean | \"log\"\n  strictRequired?: boolean | \"log\"\n  allowMatchingProperties?: boolean // disables a strict mode restriction\n  allowUnionTypes?: boolean\n  validateFormats?: boolean\n  // validation and reporting options:\n  $data?: boolean\n  allErrors?: boolean\n  verbose?: boolean\n  discriminator?: boolean\n  unicodeRegExp?: boolean\n  timestamp?: \"string\" | \"date\" // JTD only\n  parseDate?: boolean // JTD only\n  allowDate?: boolean // JTD only\n  specialNumbers?: \"fast\" | \"null\" // JTD only\n  $comment?:\n    | true\n    | ((comment: string, schemaPath?: string, rootSchema?: AnySchemaObject) => unknown)\n  formats?: {[Name in string]?: Format}\n  keywords?: Vocabulary\n  schemas?: AnySchema[] | {[Key in string]?: AnySchema}\n  logger?: Logger | false\n  loadSchema?: (uri: string) => Promise<AnySchemaObject>\n  // options to modify validated data:\n  removeAdditional?: boolean | \"all\" | \"failing\"\n  useDefaults?: boolean | \"empty\"\n  coerceTypes?: boolean | \"array\"\n  // advanced options:\n  next?: boolean // NEW\n  unevaluated?: boolean // NEW\n  dynamicRef?: boolean // NEW\n  schemaId?: \"id\" | \"$id\"\n  jtd?: boolean // NEW\n  meta?: SchemaObject | boolean\n  defaultMeta?: string | AnySchemaObject\n  validateSchema?: boolean | \"log\"\n  addUsedSchema?: boolean\n  inlineRefs?: boolean | number\n  passContext?: boolean\n  loopRequired?: number\n  loopEnum?: number // NEW\n  ownProperties?: boolean\n  multipleOfPrecision?: number\n  int32range?: boolean // JTD only\n  messages?: boolean\n  code?: CodeOptions // NEW\n  uriResolver?: UriResolver\n}\n\nexport interface CodeOptions {\n  es5?: boolean\n  esm?: boolean\n  lines?: boolean\n  optimize?: boolean | number\n  formats?: Code // code to require (or construct) map of available formats - for standalone code\n  source?: boolean\n  process?: (code: string, schema?: SchemaEnv) => string\n  regExp?: RegExpEngine\n}\n\ninterface InstanceCodeOptions extends CodeOptions {\n  regExp: RegExpEngine\n  optimize: number\n}\n\ninterface DeprecatedOptions {\n  /** @deprecated */\n  ignoreKeywordsWithRef?: boolean\n  /** @deprecated */\n  jsPropertySyntax?: boolean // added instead of jsonPointers\n  /** @deprecated */\n  unicode?: boolean\n}\n\ninterface RemovedOptions {\n  format?: boolean\n  errorDataPath?: \"object\" | \"property\"\n  nullable?: boolean // \"nullable\" keyword is supported by default\n  jsonPointers?: boolean\n  extendRefs?: true | \"ignore\" | \"fail\"\n  missingRefs?: true | \"ignore\" | \"fail\"\n  processCode?: (code: string, schema?: SchemaEnv) => string\n  sourceCode?: boolean\n  strictDefaults?: boolean\n  strictKeywords?: boolean\n  uniqueItems?: boolean\n  unknownFormats?: true | string[] | \"ignore\"\n  cache?: any\n  serialize?: (schema: AnySchema) => unknown\n  ajvErrors?: boolean\n}\n\ntype OptionsInfo<T extends RemovedOptions | DeprecatedOptions> = {\n  [K in keyof T]-?: string | undefined\n}\n\nconst removedOptions: OptionsInfo<RemovedOptions> = {\n  errorDataPath: \"\",\n  format: \"`validateFormats: false` can be used instead.\",\n  nullable: '\"nullable\" keyword is supported by default.',\n  jsonPointers: \"Deprecated jsPropertySyntax can be used instead.\",\n  extendRefs: \"Deprecated ignoreKeywordsWithRef can be used instead.\",\n  missingRefs: \"Pass empty schema with $id that should be ignored to ajv.addSchema.\",\n  processCode: \"Use option `code: {process: (code, schemaEnv: object) => string}`\",\n  sourceCode: \"Use option `code: {source: true}`\",\n  strictDefaults: \"It is default now, see option `strict`.\",\n  strictKeywords: \"It is default now, see option `strict`.\",\n  uniqueItems: '\"uniqueItems\" keyword is always validated.',\n  unknownFormats: \"Disable strict mode or pass `true` to `ajv.addFormat` (or `formats` option).\",\n  cache: \"Map is used as cache, schema object as key.\",\n  serialize: \"Map is used as cache, schema object as key.\",\n  ajvErrors: \"It is default now.\",\n}\n\nconst deprecatedOptions: OptionsInfo<DeprecatedOptions> = {\n  ignoreKeywordsWithRef: \"\",\n  jsPropertySyntax: \"\",\n  unicode: '\"minLength\"/\"maxLength\" account for unicode characters by default.',\n}\n\ntype RequiredInstanceOptions = {\n  [K in\n    | \"strictSchema\"\n    | \"strictNumbers\"\n    | \"strictTypes\"\n    | \"strictTuples\"\n    | \"strictRequired\"\n    | \"inlineRefs\"\n    | \"loopRequired\"\n    | \"loopEnum\"\n    | \"meta\"\n    | \"messages\"\n    | \"schemaId\"\n    | \"addUsedSchema\"\n    | \"validateSchema\"\n    | \"validateFormats\"\n    | \"int32range\"\n    | \"unicodeRegExp\"\n    | \"uriResolver\"]: NonNullable<Options[K]>\n} & {code: InstanceCodeOptions}\n\nexport type InstanceOptions = Options & RequiredInstanceOptions\n\nconst MAX_EXPRESSION = 200\n\n// eslint-disable-next-line complexity\nfunction requiredOptions(o: Options): RequiredInstanceOptions {\n  const s = o.strict\n  const _optz = o.code?.optimize\n  const optimize = _optz === true || _optz === undefined ? 1 : _optz || 0\n  const regExp = o.code?.regExp ?? defaultRegExp\n  const uriResolver = o.uriResolver ?? DefaultUriResolver\n  return {\n    strictSchema: o.strictSchema ?? s ?? true,\n    strictNumbers: o.strictNumbers ?? s ?? true,\n    strictTypes: o.strictTypes ?? s ?? \"log\",\n    strictTuples: o.strictTuples ?? s ?? \"log\",\n    strictRequired: o.strictRequired ?? s ?? false,\n    code: o.code ? {...o.code, optimize, regExp} : {optimize, regExp},\n    loopRequired: o.loopRequired ?? MAX_EXPRESSION,\n    loopEnum: o.loopEnum ?? MAX_EXPRESSION,\n    meta: o.meta ?? true,\n    messages: o.messages ?? true,\n    inlineRefs: o.inlineRefs ?? true,\n    schemaId: o.schemaId ?? \"$id\",\n    addUsedSchema: o.addUsedSchema ?? true,\n    validateSchema: o.validateSchema ?? true,\n    validateFormats: o.validateFormats ?? true,\n    unicodeRegExp: o.unicodeRegExp ?? true,\n    int32range: o.int32range ?? true,\n    uriResolver: uriResolver,\n  }\n}\n\nexport interface Logger {\n  log(...args: unknown[]): unknown\n  warn(...args: unknown[]): unknown\n  error(...args: unknown[]): unknown\n}\n\nexport default class Ajv {\n  opts: InstanceOptions\n  errors?: ErrorObject[] | null // errors from the last validation\n  logger: Logger\n  // shared external scope values for compiled functions\n  readonly scope: ValueScope\n  readonly schemas: {[Key in string]?: SchemaEnv} = {}\n  readonly refs: {[Ref in string]?: SchemaEnv | string} = {}\n  readonly formats: {[Name in string]?: AddedFormat} = {}\n  readonly RULES: ValidationRules\n  readonly _compilations: Set<SchemaEnv> = new Set()\n  private readonly _loading: {[Ref in string]?: Promise<AnySchemaObject>} = {}\n  private readonly _cache: Map<AnySchema, SchemaEnv> = new Map()\n  private readonly _metaOpts: InstanceOptions\n\n  static ValidationError = ValidationError\n  static MissingRefError = MissingRefError\n\n  constructor(opts: Options = {}) {\n    opts = this.opts = {...opts, ...requiredOptions(opts)}\n    const {es5, lines} = this.opts.code\n\n    this.scope = new ValueScope({scope: {}, prefixes: EXT_SCOPE_NAMES, es5, lines})\n    this.logger = getLogger(opts.logger)\n    const formatOpt = opts.validateFormats\n    opts.validateFormats = false\n\n    this.RULES = getRules()\n    checkOptions.call(this, removedOptions, opts, \"NOT SUPPORTED\")\n    checkOptions.call(this, deprecatedOptions, opts, \"DEPRECATED\", \"warn\")\n    this._metaOpts = getMetaSchemaOptions.call(this)\n\n    if (opts.formats) addInitialFormats.call(this)\n    this._addVocabularies()\n    this._addDefaultMetaSchema()\n    if (opts.keywords) addInitialKeywords.call(this, opts.keywords)\n    if (typeof opts.meta == \"object\") this.addMetaSchema(opts.meta)\n    addInitialSchemas.call(this)\n    opts.validateFormats = formatOpt\n  }\n\n  _addVocabularies(): void {\n    this.addKeyword(\"$async\")\n  }\n\n  _addDefaultMetaSchema(): void {\n    const {$data, meta, schemaId} = this.opts\n    let _dataRefSchema: SchemaObject = $dataRefSchema\n    if (schemaId === \"id\") {\n      _dataRefSchema = {...$dataRefSchema}\n      _dataRefSchema.id = _dataRefSchema.$id\n      delete _dataRefSchema.$id\n    }\n    if (meta && $data) this.addMetaSchema(_dataRefSchema, _dataRefSchema[schemaId], false)\n  }\n\n  defaultMeta(): string | AnySchemaObject | undefined {\n    const {meta, schemaId} = this.opts\n    return (this.opts.defaultMeta = typeof meta == \"object\" ? meta[schemaId] || meta : undefined)\n  }\n\n  // Validate data using schema\n  // AnySchema will be compiled and cached using schema itself as a key for Map\n  validate(schema: Schema | string, data: unknown): boolean\n  validate(schemaKeyRef: AnySchema | string, data: unknown): boolean | Promise<unknown>\n  validate<T>(schema: Schema | JSONSchemaType<T> | string, data: unknown): data is T\n  // Separated for type inference to work\n  // eslint-disable-next-line @typescript-eslint/unified-signatures\n  validate<T>(schema: JTDSchemaType<T>, data: unknown): data is T\n  // This overload is only intended for typescript inference, the first\n  // argument prevents manual type annotation from matching this overload\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  validate<N extends never, T extends SomeJTDSchemaType>(\n    schema: T,\n    data: unknown\n  ): data is JTDDataType<T>\n  // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n  validate<T>(schema: AsyncSchema, data: unknown | T): Promise<T>\n  validate<T>(schemaKeyRef: AnySchema | string, data: unknown): data is T | Promise<T>\n  validate<T>(\n    schemaKeyRef: AnySchema | string, // key, ref or schema object\n    // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n    data: unknown | T // to be validated\n  ): boolean | Promise<T> {\n    let v: AnyValidateFunction | undefined\n    if (typeof schemaKeyRef == \"string\") {\n      v = this.getSchema<T>(schemaKeyRef)\n      if (!v) throw new Error(`no schema with key or ref \"${schemaKeyRef}\"`)\n    } else {\n      v = this.compile<T>(schemaKeyRef)\n    }\n\n    const valid = v(data)\n    if (!(\"$async\" in v)) this.errors = v.errors\n    return valid\n  }\n\n  // Create validation function for passed schema\n  // _meta: true if schema is a meta-schema. Used internally to compile meta schemas of user-defined keywords.\n  compile<T = unknown>(schema: Schema | JSONSchemaType<T>, _meta?: boolean): ValidateFunction<T>\n  // Separated for type inference to work\n  // eslint-disable-next-line @typescript-eslint/unified-signatures\n  compile<T = unknown>(schema: JTDSchemaType<T>, _meta?: boolean): ValidateFunction<T>\n  // This overload is only intended for typescript inference, the first\n  // argument prevents manual type annotation from matching this overload\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  compile<N extends never, T extends SomeJTDSchemaType>(\n    schema: T,\n    _meta?: boolean\n  ): ValidateFunction<JTDDataType<T>>\n  compile<T = unknown>(schema: AsyncSchema, _meta?: boolean): AsyncValidateFunction<T>\n  compile<T = unknown>(schema: AnySchema, _meta?: boolean): AnyValidateFunction<T>\n  compile<T = unknown>(schema: AnySchema, _meta?: boolean): AnyValidateFunction<T> {\n    const sch = this._addSchema(schema, _meta)\n    return (sch.validate || this._compileSchemaEnv(sch)) as AnyValidateFunction<T>\n  }\n\n  // Creates validating function for passed schema with asynchronous loading of missing schemas.\n  // `loadSchema` option should be a function that accepts schema uri and returns promise that resolves with the schema.\n  // TODO allow passing schema URI\n  // meta - optional true to compile meta-schema\n  compileAsync<T = unknown>(\n    schema: SchemaObject | JSONSchemaType<T>,\n    _meta?: boolean\n  ): Promise<ValidateFunction<T>>\n  // Separated for type inference to work\n  // eslint-disable-next-line @typescript-eslint/unified-signatures\n  compileAsync<T = unknown>(schema: JTDSchemaType<T>, _meta?: boolean): Promise<ValidateFunction<T>>\n  compileAsync<T = unknown>(schema: AsyncSchema, meta?: boolean): Promise<AsyncValidateFunction<T>>\n  // eslint-disable-next-line @typescript-eslint/unified-signatures\n  compileAsync<T = unknown>(\n    schema: AnySchemaObject,\n    meta?: boolean\n  ): Promise<AnyValidateFunction<T>>\n  compileAsync<T = unknown>(\n    schema: AnySchemaObject,\n    meta?: boolean\n  ): Promise<AnyValidateFunction<T>> {\n    if (typeof this.opts.loadSchema != \"function\") {\n      throw new Error(\"options.loadSchema should be a function\")\n    }\n    const {loadSchema} = this.opts\n    return runCompileAsync.call(this, schema, meta)\n\n    async function runCompileAsync(\n      this: Ajv,\n      _schema: AnySchemaObject,\n      _meta?: boolean\n    ): Promise<AnyValidateFunction> {\n      await loadMetaSchema.call(this, _schema.$schema)\n      const sch = this._addSchema(_schema, _meta)\n      return sch.validate || _compileAsync.call(this, sch)\n    }\n\n    async function loadMetaSchema(this: Ajv, $ref?: string): Promise<void> {\n      if ($ref && !this.getSchema($ref)) {\n        await runCompileAsync.call(this, {$ref}, true)\n      }\n    }\n\n    async function _compileAsync(this: Ajv, sch: SchemaEnv): Promise<AnyValidateFunction> {\n      try {\n        return this._compileSchemaEnv(sch)\n      } catch (e) {\n        if (!(e instanceof MissingRefError)) throw e\n        checkLoaded.call(this, e)\n        await loadMissingSchema.call(this, e.missingSchema)\n        return _compileAsync.call(this, sch)\n      }\n    }\n\n    function checkLoaded(this: Ajv, {missingSchema: ref, missingRef}: MissingRefError): void {\n      if (this.refs[ref]) {\n        throw new Error(`AnySchema ${ref} is loaded but ${missingRef} cannot be resolved`)\n      }\n    }\n\n    async function loadMissingSchema(this: Ajv, ref: string): Promise<void> {\n      const _schema = await _loadSchema.call(this, ref)\n      if (!this.refs[ref]) await loadMetaSchema.call(this, _schema.$schema)\n      if (!this.refs[ref]) this.addSchema(_schema, ref, meta)\n    }\n\n    async function _loadSchema(this: Ajv, ref: string): Promise<AnySchemaObject> {\n      const p = this._loading[ref]\n      if (p) return p\n      try {\n        return await (this._loading[ref] = loadSchema(ref))\n      } finally {\n        delete this._loading[ref]\n      }\n    }\n  }\n\n  // Adds schema to the instance\n  addSchema(\n    schema: AnySchema | AnySchema[], // If array is passed, `key` will be ignored\n    key?: string, // Optional schema key. Can be passed to `validate` method instead of schema object or id/ref. One schema per instance can have empty `id` and `key`.\n    _meta?: boolean, // true if schema is a meta-schema. Used internally, addMetaSchema should be used instead.\n    _validateSchema = this.opts.validateSchema // false to skip schema validation. Used internally, option validateSchema should be used instead.\n  ): Ajv {\n    if (Array.isArray(schema)) {\n      for (const sch of schema) this.addSchema(sch, undefined, _meta, _validateSchema)\n      return this\n    }\n    let id: string | undefined\n    if (typeof schema === \"object\") {\n      const {schemaId} = this.opts\n      id = schema[schemaId]\n      if (id !== undefined && typeof id != \"string\") {\n        throw new Error(`schema ${schemaId} must be string`)\n      }\n    }\n    key = normalizeId(key || id)\n    this._checkUnique(key)\n    this.schemas[key] = this._addSchema(schema, _meta, key, _validateSchema, true)\n    return this\n  }\n\n  // Add schema that will be used to validate other schemas\n  // options in META_IGNORE_OPTIONS are alway set to false\n  addMetaSchema(\n    schema: AnySchemaObject,\n    key?: string, // schema key\n    _validateSchema = this.opts.validateSchema // false to skip schema validation, can be used to override validateSchema option for meta-schema\n  ): Ajv {\n    this.addSchema(schema, key, true, _validateSchema)\n    return this\n  }\n\n  //  Validate schema against its meta-schema\n  validateSchema(schema: AnySchema, throwOrLogError?: boolean): boolean | Promise<unknown> {\n    if (typeof schema == \"boolean\") return true\n    let $schema: string | AnySchemaObject | undefined\n    $schema = schema.$schema\n    if ($schema !== undefined && typeof $schema != \"string\") {\n      throw new Error(\"$schema must be a string\")\n    }\n    $schema = $schema || this.opts.defaultMeta || this.defaultMeta()\n    if (!$schema) {\n      this.logger.warn(\"meta-schema not available\")\n      this.errors = null\n      return true\n    }\n    const valid = this.validate($schema, schema)\n    if (!valid && throwOrLogError) {\n      const message = \"schema is invalid: \" + this.errorsText()\n      if (this.opts.validateSchema === \"log\") this.logger.error(message)\n      else throw new Error(message)\n    }\n    return valid\n  }\n\n  // Get compiled schema by `key` or `ref`.\n  // (`key` that was passed to `addSchema` or full schema reference - `schema.$id` or resolved id)\n  getSchema<T = unknown>(keyRef: string): AnyValidateFunction<T> | undefined {\n    let sch\n    while (typeof (sch = getSchEnv.call(this, keyRef)) == \"string\") keyRef = sch\n    if (sch === undefined) {\n      const {schemaId} = this.opts\n      const root = new SchemaEnv({schema: {}, schemaId})\n      sch = resolveSchema.call(this, root, keyRef)\n      if (!sch) return\n      this.refs[keyRef] = sch\n    }\n    return (sch.validate || this._compileSchemaEnv(sch)) as AnyValidateFunction<T> | undefined\n  }\n\n  // Remove cached schema(s).\n  // If no parameter is passed all schemas but meta-schemas are removed.\n  // If RegExp is passed all schemas with key/id matching pattern but meta-schemas are removed.\n  // Even if schema is referenced by other schemas it still can be removed as other schemas have local references.\n  removeSchema(schemaKeyRef?: AnySchema | string | RegExp): Ajv {\n    if (schemaKeyRef instanceof RegExp) {\n      this._removeAllSchemas(this.schemas, schemaKeyRef)\n      this._removeAllSchemas(this.refs, schemaKeyRef)\n      return this\n    }\n    switch (typeof schemaKeyRef) {\n      case \"undefined\":\n        this._removeAllSchemas(this.schemas)\n        this._removeAllSchemas(this.refs)\n        this._cache.clear()\n        return this\n      case \"string\": {\n        const sch = getSchEnv.call(this, schemaKeyRef)\n        if (typeof sch == \"object\") this._cache.delete(sch.schema)\n        delete this.schemas[schemaKeyRef]\n        delete this.refs[schemaKeyRef]\n        return this\n      }\n      case \"object\": {\n        const cacheKey = schemaKeyRef\n        this._cache.delete(cacheKey)\n        let id = schemaKeyRef[this.opts.schemaId]\n        if (id) {\n          id = normalizeId(id)\n          delete this.schemas[id]\n          delete this.refs[id]\n        }\n        return this\n      }\n      default:\n        throw new Error(\"ajv.removeSchema: invalid parameter\")\n    }\n  }\n\n  // add \"vocabulary\" - a collection of keywords\n  addVocabulary(definitions: Vocabulary): Ajv {\n    for (const def of definitions) this.addKeyword(def)\n    return this\n  }\n\n  addKeyword(\n    kwdOrDef: string | KeywordDefinition,\n    def?: KeywordDefinition // deprecated\n  ): Ajv {\n    let keyword: string | string[]\n    if (typeof kwdOrDef == \"string\") {\n      keyword = kwdOrDef\n      if (typeof def == \"object\") {\n        this.logger.warn(\"these parameters are deprecated, see docs for addKeyword\")\n        def.keyword = keyword\n      }\n    } else if (typeof kwdOrDef == \"object\" && def === undefined) {\n      def = kwdOrDef\n      keyword = def.keyword\n      if (Array.isArray(keyword) && !keyword.length) {\n        throw new Error(\"addKeywords: keyword must be string or non-empty array\")\n      }\n    } else {\n      throw new Error(\"invalid addKeywords parameters\")\n    }\n\n    checkKeyword.call(this, keyword, def)\n    if (!def) {\n      eachItem(keyword, (kwd) => addRule.call(this, kwd))\n      return this\n    }\n    keywordMetaschema.call(this, def)\n    const definition: AddedKeywordDefinition = {\n      ...def,\n      type: getJSONTypes(def.type),\n      schemaType: getJSONTypes(def.schemaType),\n    }\n    eachItem(\n      keyword,\n      definition.type.length === 0\n        ? (k) => addRule.call(this, k, definition)\n        : (k) => definition.type.forEach((t) => addRule.call(this, k, definition, t))\n    )\n    return this\n  }\n\n  getKeyword(keyword: string): AddedKeywordDefinition | boolean {\n    const rule = this.RULES.all[keyword]\n    return typeof rule == \"object\" ? rule.definition : !!rule\n  }\n\n  // Remove keyword\n  removeKeyword(keyword: string): Ajv {\n    // TODO return type should be Ajv\n    const {RULES} = this\n    delete RULES.keywords[keyword]\n    delete RULES.all[keyword]\n    for (const group of RULES.rules) {\n      const i = group.rules.findIndex((rule) => rule.keyword === keyword)\n      if (i >= 0) group.rules.splice(i, 1)\n    }\n    return this\n  }\n\n  // Add format\n  addFormat(name: string, format: Format): Ajv {\n    if (typeof format == \"string\") format = new RegExp(format)\n    this.formats[name] = format\n    return this\n  }\n\n  errorsText(\n    errors: ErrorObject[] | null | undefined = this.errors, // optional array of validation errors\n    {separator = \", \", dataVar = \"data\"}: ErrorsTextOptions = {} // optional options with properties `separator` and `dataVar`\n  ): string {\n    if (!errors || errors.length === 0) return \"No errors\"\n    return errors\n      .map((e) => `${dataVar}${e.instancePath} ${e.message}`)\n      .reduce((text, msg) => text + separator + msg)\n  }\n\n  $dataMetaSchema(metaSchema: AnySchemaObject, keywordsJsonPointers: string[]): AnySchemaObject {\n    const rules = this.RULES.all\n    metaSchema = JSON.parse(JSON.stringify(metaSchema))\n    for (const jsonPointer of keywordsJsonPointers) {\n      const segments = jsonPointer.split(\"/\").slice(1) // first segment is an empty string\n      let keywords = metaSchema\n      for (const seg of segments) keywords = keywords[seg] as AnySchemaObject\n\n      for (const key in rules) {\n        const rule = rules[key]\n        if (typeof rule != \"object\") continue\n        const {$data} = rule.definition\n        const schema = keywords[key] as AnySchemaObject | undefined\n        if ($data && schema) keywords[key] = schemaOrData(schema)\n      }\n    }\n\n    return metaSchema\n  }\n\n  private _removeAllSchemas(schemas: {[Ref in string]?: SchemaEnv | string}, regex?: RegExp): void {\n    for (const keyRef in schemas) {\n      const sch = schemas[keyRef]\n      if (!regex || regex.test(keyRef)) {\n        if (typeof sch == \"string\") {\n          delete schemas[keyRef]\n        } else if (sch && !sch.meta) {\n          this._cache.delete(sch.schema)\n          delete schemas[keyRef]\n        }\n      }\n    }\n  }\n\n  _addSchema(\n    schema: AnySchema,\n    meta?: boolean,\n    baseId?: string,\n    validateSchema = this.opts.validateSchema,\n    addSchema = this.opts.addUsedSchema\n  ): SchemaEnv {\n    let id: string | undefined\n    const {schemaId} = this.opts\n    if (typeof schema == \"object\") {\n      id = schema[schemaId]\n    } else {\n      if (this.opts.jtd) throw new Error(\"schema must be object\")\n      else if (typeof schema != \"boolean\") throw new Error(\"schema must be object or boolean\")\n    }\n    let sch = this._cache.get(schema)\n    if (sch !== undefined) return sch\n\n    baseId = normalizeId(id || baseId)\n    const localRefs = getSchemaRefs.call(this, schema, baseId)\n    sch = new SchemaEnv({schema, schemaId, meta, baseId, localRefs})\n    this._cache.set(sch.schema, sch)\n    if (addSchema && !baseId.startsWith(\"#\")) {\n      // TODO atm it is allowed to overwrite schemas without id (instead of not adding them)\n      if (baseId) this._checkUnique(baseId)\n      this.refs[baseId] = sch\n    }\n    if (validateSchema) this.validateSchema(schema, true)\n    return sch\n  }\n\n  private _checkUnique(id: string): void {\n    if (this.schemas[id] || this.refs[id]) {\n      throw new Error(`schema with key or id \"${id}\" already exists`)\n    }\n  }\n\n  private _compileSchemaEnv(sch: SchemaEnv): AnyValidateFunction {\n    if (sch.meta) this._compileMetaSchema(sch)\n    else compileSchema.call(this, sch)\n\n    /* istanbul ignore if */\n    if (!sch.validate) throw new Error(\"ajv implementation error\")\n    return sch.validate\n  }\n\n  private _compileMetaSchema(sch: SchemaEnv): void {\n    const currentOpts = this.opts\n    this.opts = this._metaOpts\n    try {\n      compileSchema.call(this, sch)\n    } finally {\n      this.opts = currentOpts\n    }\n  }\n}\n\nexport interface ErrorsTextOptions {\n  separator?: string\n  dataVar?: string\n}\n\nfunction checkOptions(\n  this: Ajv,\n  checkOpts: OptionsInfo<RemovedOptions | DeprecatedOptions>,\n  options: Options & RemovedOptions,\n  msg: string,\n  log: \"warn\" | \"error\" = \"error\"\n): void {\n  for (const key in checkOpts) {\n    const opt = key as keyof typeof checkOpts\n    if (opt in options) this.logger[log](`${msg}: option ${key}. ${checkOpts[opt]}`)\n  }\n}\n\nfunction getSchEnv(this: Ajv, keyRef: string): SchemaEnv | string | undefined {\n  keyRef = normalizeId(keyRef) // TODO tests fail without this line\n  return this.schemas[keyRef] || this.refs[keyRef]\n}\n\nfunction addInitialSchemas(this: Ajv): void {\n  const optsSchemas = this.opts.schemas\n  if (!optsSchemas) return\n  if (Array.isArray(optsSchemas)) this.addSchema(optsSchemas)\n  else for (const key in optsSchemas) this.addSchema(optsSchemas[key] as AnySchema, key)\n}\n\nfunction addInitialFormats(this: Ajv): void {\n  for (const name in this.opts.formats) {\n    const format = this.opts.formats[name]\n    if (format) this.addFormat(name, format)\n  }\n}\n\nfunction addInitialKeywords(\n  this: Ajv,\n  defs: Vocabulary | {[K in string]?: KeywordDefinition}\n): void {\n  if (Array.isArray(defs)) {\n    this.addVocabulary(defs)\n    return\n  }\n  this.logger.warn(\"keywords option as map is deprecated, pass array\")\n  for (const keyword in defs) {\n    const def = defs[keyword] as KeywordDefinition\n    if (!def.keyword) def.keyword = keyword\n    this.addKeyword(def)\n  }\n}\n\nfunction getMetaSchemaOptions(this: Ajv): InstanceOptions {\n  const metaOpts = {...this.opts}\n  for (const opt of META_IGNORE_OPTIONS) delete metaOpts[opt]\n  return metaOpts\n}\n\nconst noLogs = {log() {}, warn() {}, error() {}}\n\nfunction getLogger(logger?: Partial<Logger> | false): Logger {\n  if (logger === false) return noLogs\n  if (logger === undefined) return console\n  if (logger.log && logger.warn && logger.error) return logger as Logger\n  throw new Error(\"logger must implement log, warn and error methods\")\n}\n\nconst KEYWORD_NAME = /^[a-z_$][a-z0-9_$:-]*$/i\n\nfunction checkKeyword(this: Ajv, keyword: string | string[], def?: KeywordDefinition): void {\n  const {RULES} = this\n  eachItem(keyword, (kwd) => {\n    if (RULES.keywords[kwd]) throw new Error(`Keyword ${kwd} is already defined`)\n    if (!KEYWORD_NAME.test(kwd)) throw new Error(`Keyword ${kwd} has invalid name`)\n  })\n  if (!def) return\n  if (def.$data && !(\"code\" in def || \"validate\" in def)) {\n    throw new Error('$data keyword must have \"code\" or \"validate\" function')\n  }\n}\n\nfunction addRule(\n  this: Ajv,\n  keyword: string,\n  definition?: AddedKeywordDefinition,\n  dataType?: JSONType\n): void {\n  const post = definition?.post\n  if (dataType && post) throw new Error('keyword with \"post\" flag cannot have \"type\"')\n  const {RULES} = this\n  let ruleGroup = post ? RULES.post : RULES.rules.find(({type: t}) => t === dataType)\n  if (!ruleGroup) {\n    ruleGroup = {type: dataType, rules: []}\n    RULES.rules.push(ruleGroup)\n  }\n  RULES.keywords[keyword] = true\n  if (!definition) return\n\n  const rule: Rule = {\n    keyword,\n    definition: {\n      ...definition,\n      type: getJSONTypes(definition.type),\n      schemaType: getJSONTypes(definition.schemaType),\n    },\n  }\n  if (definition.before) addBeforeRule.call(this, ruleGroup, rule, definition.before)\n  else ruleGroup.rules.push(rule)\n  RULES.all[keyword] = rule\n  definition.implements?.forEach((kwd) => this.addKeyword(kwd))\n}\n\nfunction addBeforeRule(this: Ajv, ruleGroup: RuleGroup, rule: Rule, before: string): void {\n  const i = ruleGroup.rules.findIndex((_rule) => _rule.keyword === before)\n  if (i >= 0) {\n    ruleGroup.rules.splice(i, 0, rule)\n  } else {\n    ruleGroup.rules.push(rule)\n    this.logger.warn(`rule ${before} is not defined`)\n  }\n}\n\nfunction keywordMetaschema(this: Ajv, def: KeywordDefinition): void {\n  let {metaSchema} = def\n  if (metaSchema === undefined) return\n  if (def.$data && this.opts.$data) metaSchema = schemaOrData(metaSchema)\n  def.validateSchema = this.compile(metaSchema, true)\n}\n\nconst $dataRef = {\n  $ref: \"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#\",\n}\n\nfunction schemaOrData(schema: AnySchema): AnySchemaObject {\n  return {anyOf: [schema, $dataRef]}\n}\n", "import type {CodeKeywordDefinition} from \"../../types\"\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"id\",\n  code() {\n    throw new Error('NOT SUPPORTED: keyword \"id\", use \"$id\" for schema ID')\n  },\n}\n\nexport default def\n", "import type {CodeKeywordDefinition, AnySchema} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport MissingRefError from \"../../compile/ref_error\"\nimport {callValidateCode} from \"../code\"\nimport {_, nil, stringify, Code, Name} from \"../../compile/codegen\"\nimport N from \"../../compile/names\"\nimport {SchemaEnv, resolveRef} from \"../../compile\"\nimport {mergeEvaluated} from \"../../compile/util\"\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"$ref\",\n  schemaType: \"string\",\n  code(cxt: KeywordCxt): void {\n    const {gen, schema: $ref, it} = cxt\n    const {baseId, schemaEnv: env, validateName, opts, self} = it\n    const {root} = env\n    if (($ref === \"#\" || $ref === \"#/\") && baseId === root.baseId) return callRootRef()\n    const schOrEnv = resolveRef.call(self, root, baseId, $ref)\n    if (schOrEnv === undefined) throw new MissingRefError(it.opts.uriResolver, baseId, $ref)\n    if (schOrEnv instanceof SchemaEnv) return callValidate(schOrEnv)\n    return inlineRefSchema(schOrEnv)\n\n    function callRootRef(): void {\n      if (env === root) return callRef(cxt, validateName, env, env.$async)\n      const rootName = gen.scopeValue(\"root\", {ref: root})\n      return callRef(cxt, _`${rootName}.validate`, root, root.$async)\n    }\n\n    function callValidate(sch: SchemaEnv): void {\n      const v = getValidate(cxt, sch)\n      callRef(cxt, v, sch, sch.$async)\n    }\n\n    function inlineRefSchema(sch: AnySchema): void {\n      const schName = gen.scopeValue(\n        \"schema\",\n        opts.code.source === true ? {ref: sch, code: stringify(sch)} : {ref: sch}\n      )\n      const valid = gen.name(\"valid\")\n      const schCxt = cxt.subschema(\n        {\n          schema: sch,\n          dataTypes: [],\n          schemaPath: nil,\n          topSchemaRef: schName,\n          errSchemaPath: $ref,\n        },\n        valid\n      )\n      cxt.mergeEvaluated(schCxt)\n      cxt.ok(valid)\n    }\n  },\n}\n\nexport function getValidate(cxt: KeywordCxt, sch: SchemaEnv): Code {\n  const {gen} = cxt\n  return sch.validate\n    ? gen.scopeValue(\"validate\", {ref: sch.validate})\n    : _`${gen.scopeValue(\"wrapper\", {ref: sch})}.validate`\n}\n\nexport function callRef(cxt: KeywordCxt, v: Code, sch?: SchemaEnv, $async?: boolean): void {\n  const {gen, it} = cxt\n  const {allErrors, schemaEnv: env, opts} = it\n  const passCxt = opts.passContext ? N.this : nil\n  if ($async) callAsyncRef()\n  else callSyncRef()\n\n  function callAsyncRef(): void {\n    if (!env.$async) throw new Error(\"async schema referenced by sync schema\")\n    const valid = gen.let(\"valid\")\n    gen.try(\n      () => {\n        gen.code(_`await ${callValidateCode(cxt, v, passCxt)}`)\n        addEvaluatedFrom(v) // TODO will not work with async, it has to be returned with the result\n        if (!allErrors) gen.assign(valid, true)\n      },\n      (e) => {\n        gen.if(_`!(${e} instanceof ${it.ValidationError as Name})`, () => gen.throw(e))\n        addErrorsFrom(e)\n        if (!allErrors) gen.assign(valid, false)\n      }\n    )\n    cxt.ok(valid)\n  }\n\n  function callSyncRef(): void {\n    cxt.result(\n      callValidateCode(cxt, v, passCxt),\n      () => addEvaluatedFrom(v),\n      () => addErrorsFrom(v)\n    )\n  }\n\n  function addErrorsFrom(source: Code): void {\n    const errs = _`${source}.errors`\n    gen.assign(N.vErrors, _`${N.vErrors} === null ? ${errs} : ${N.vErrors}.concat(${errs})`) // TODO tagged\n    gen.assign(N.errors, _`${N.vErrors}.length`)\n  }\n\n  function addEvaluatedFrom(source: Code): void {\n    if (!it.opts.unevaluated) return\n    const schEvaluated = sch?.validate?.evaluated\n    // TODO refactor\n    if (it.props !== true) {\n      if (schEvaluated && !schEvaluated.dynamicProps) {\n        if (schEvaluated.props !== undefined) {\n          it.props = mergeEvaluated.props(gen, schEvaluated.props, it.props)\n        }\n      } else {\n        const props = gen.var(\"props\", _`${source}.evaluated.props`)\n        it.props = mergeEvaluated.props(gen, props, it.props, Name)\n      }\n    }\n    if (it.items !== true) {\n      if (schEvaluated && !schEvaluated.dynamicItems) {\n        if (schEvaluated.items !== undefined) {\n          it.items = mergeEvaluated.items(gen, schEvaluated.items, it.items)\n        }\n      } else {\n        const items = gen.var(\"items\", _`${source}.evaluated.items`)\n        it.items = mergeEvaluated.items(gen, items, it.items, Name)\n      }\n    }\n  }\n}\n\nexport default def\n", "import type {Vocabulary} from \"../../types\"\nimport idKeyword from \"./id\"\nimport refKeyword from \"./ref\"\n\nconst core: Vocabulary = [\n  \"$schema\",\n  \"$id\",\n  \"$defs\",\n  \"$vocabulary\",\n  {keyword: \"$comment\"},\n  \"definitions\",\n  idKeyword,\n  refKeyword,\n]\n\nexport default core\n", "import type {CodeKeywordDefinition, ErrorObject, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str, operators, Code} from \"../../compile/codegen\"\n\nconst ops = operators\n\ntype Kwd = \"maximum\" | \"minimum\" | \"exclusiveMaximum\" | \"exclusiveMinimum\"\n\ntype Comparison = \"<=\" | \">=\" | \"<\" | \">\"\n\nconst KWDs: {[K in Kwd]: {okStr: Comparison; ok: Code; fail: Code}} = {\n  maximum: {okStr: \"<=\", ok: ops.LTE, fail: ops.GT},\n  minimum: {okStr: \">=\", ok: ops.GTE, fail: ops.LT},\n  exclusiveMaximum: {okStr: \"<\", ok: ops.LT, fail: ops.GTE},\n  exclusiveMinimum: {okStr: \">\", ok: ops.GT, fail: ops.LTE},\n}\n\nexport type LimitNumberError = ErrorObject<\n  Kwd,\n  {limit: number; comparison: Comparison},\n  number | {$data: string}\n>\n\nconst error: KeywordErrorDefinition = {\n  message: ({keyword, schemaCode}) => str`must be ${KWDs[keyword as Kwd].okStr} ${schemaCode}`,\n  params: ({keyword, schemaCode}) =>\n    _`{comparison: ${KWDs[keyword as Kwd].okStr}, limit: ${schemaCode}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: Object.keys(KWDs),\n  type: \"number\",\n  schemaType: \"number\",\n  $data: true,\n  error,\n  code(cxt: KeywordCxt) {\n    const {keyword, data, schemaCode} = cxt\n    cxt.fail$data(_`${data} ${KWDs[keyword as Kwd].fail} ${schemaCode} || isNaN(${data})`)\n  },\n}\n\nexport default def\n", "import type {CodeKeywordDefinition, ErrorObject, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str} from \"../../compile/codegen\"\n\nexport type MultipleOfError = ErrorObject<\n  \"multipleOf\",\n  {multipleOf: number},\n  number | {$data: string}\n>\n\nconst error: KeywordErrorDefinition = {\n  message: ({schemaCode}) => str`must be multiple of ${schemaCode}`,\n  params: ({schemaCode}) => _`{multipleOf: ${schemaCode}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"multipleOf\",\n  type: \"number\",\n  schemaType: \"number\",\n  $data: true,\n  error,\n  code(cxt: KeywordCxt) {\n    const {gen, data, schemaCode, it} = cxt\n    // const bdt = bad$DataType(schemaCode, <string>def.schemaType, $data)\n    const prec = it.opts.multipleOfPrecision\n    const res = gen.let(\"res\")\n    const invalid = prec\n      ? _`Math.abs(Math.round(${res}) - ${res}) > 1e-${prec}`\n      : _`${res} !== parseInt(${res})`\n    cxt.fail$data(_`(${schemaCode} === 0 || (${res} = ${data}/${schemaCode}, ${invalid}))`)\n  },\n}\n\nexport default def\n", "// https://mathiasbynens.be/notes/javascript-encoding\n// https://github.com/bestiejs/punycode.js - punycode.ucs2.decode\nexport default function ucs2length(str: string): number {\n  const len = str.length\n  let length = 0\n  let pos = 0\n  let value: number\n  while (pos < len) {\n    length++\n    value = str.charCodeAt(pos++)\n    if (value >= 0xd800 && value <= 0xdbff && pos < len) {\n      // high surrogate, and there is a next character\n      value = str.charCodeAt(pos)\n      if ((value & 0xfc00) === 0xdc00) pos++ // low surrogate\n    }\n  }\n  return length\n}\n\nucs2length.code = 'require(\"ajv/dist/runtime/ucs2length\").default'\n", "import type {CodeKeywordDefinition, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str, operators} from \"../../compile/codegen\"\nimport {useFunc} from \"../../compile/util\"\nimport ucs2length from \"../../runtime/ucs2length\"\n\nconst error: KeywordErrorDefinition = {\n  message({keyword, schemaCode}) {\n    const comp = keyword === \"maxLength\" ? \"more\" : \"fewer\"\n    return str`must NOT have ${comp} than ${schemaCode} characters`\n  },\n  params: ({schemaCode}) => _`{limit: ${schemaCode}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: [\"maxLength\", \"minLength\"],\n  type: \"string\",\n  schemaType: \"number\",\n  $data: true,\n  error,\n  code(cxt: KeywordCxt) {\n    const {keyword, data, schemaCode, it} = cxt\n    const op = keyword === \"maxLength\" ? operators.GT : operators.LT\n    const len =\n      it.opts.unicode === false ? _`${data}.length` : _`${useFunc(cxt.gen, ucs2length)}(${data})`\n    cxt.fail$data(_`${len} ${op} ${schemaCode}`)\n  },\n}\n\nexport default def\n", "import type {CodeKeywordDefinition, ErrorObject, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {usePattern} from \"../code\"\nimport {useFunc} from \"../../compile/util\"\nimport {_, str} from \"../../compile/codegen\"\n\nexport type PatternError = ErrorObject<\"pattern\", {pattern: string}, string | {$data: string}>\n\nconst error: KeywordErrorDefinition = {\n  message: ({schemaCode}) => str`must match pattern \"${schemaCode}\"`,\n  params: ({schemaCode}) => _`{pattern: ${schemaCode}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"pattern\",\n  type: \"string\",\n  schemaType: \"string\",\n  $data: true,\n  error,\n  code(cxt: KeywordCxt) {\n    const {gen, data, $data, schema, schemaCode, it} = cxt\n    const u = it.opts.unicodeRegExp ? \"u\" : \"\"\n    if ($data) {\n      const {regExp} = it.opts.code\n      const regExpCode = regExp.code === \"new RegExp\" ? _`new RegExp` : useFunc(gen, regExp)\n      const valid = gen.let(\"valid\")\n      gen.try(\n        () => gen.assign(valid, _`${regExpCode}(${schemaCode}, ${u}).test(${data})`),\n        () => gen.assign(valid, false)\n      )\n      cxt.fail$data(_`!${valid}`)\n    } else {\n      const regExp = usePattern(cxt, schema)\n      cxt.fail$data(_`!${regExp}.test(${data})`)\n    }\n  },\n}\n\nexport default def\n", "import type {CodeKeywordDefinition, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str, operators} from \"../../compile/codegen\"\n\nconst error: KeywordErrorDefinition = {\n  message({keyword, schemaCode}) {\n    const comp = keyword === \"maxProperties\" ? \"more\" : \"fewer\"\n    return str`must NOT have ${comp} than ${schemaCode} properties`\n  },\n  params: ({schemaCode}) => _`{limit: ${schemaCode}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: [\"maxProperties\", \"minProperties\"],\n  type: \"object\",\n  schemaType: \"number\",\n  $data: true,\n  error,\n  code(cxt: KeywordCxt) {\n    const {keyword, data, schemaCode} = cxt\n    const op = keyword === \"maxProperties\" ? operators.GT : operators.LT\n    cxt.fail$data(_`Object.keys(${data}).length ${op} ${schemaCode}`)\n  },\n}\n\nexport default def\n", "import type {CodeKeywordDefinition, ErrorObject, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {\n  checkReportMissingProp,\n  checkMissingProp,\n  reportMissingProp,\n  propertyInData,\n  noPropertyInData,\n} from \"../code\"\nimport {_, str, nil, not, Name, Code} from \"../../compile/codegen\"\nimport {checkStrictMode} from \"../../compile/util\"\n\nexport type RequiredError = ErrorObject<\n  \"required\",\n  {missingProperty: string},\n  string[] | {$data: string}\n>\n\nconst error: KeywordErrorDefinition = {\n  message: ({params: {missingProperty}}) => str`must have required property '${missingProperty}'`,\n  params: ({params: {missingProperty}}) => _`{missingProperty: ${missingProperty}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"required\",\n  type: \"object\",\n  schemaType: \"array\",\n  $data: true,\n  error,\n  code(cxt: KeywordCxt) {\n    const {gen, schema, schemaCode, data, $data, it} = cxt\n    const {opts} = it\n    if (!$data && schema.length === 0) return\n    const useLoop = schema.length >= opts.loopRequired\n    if (it.allErrors) allErrorsMode()\n    else exitOnErrorMode()\n\n    if (opts.strictRequired) {\n      const props = cxt.parentSchema.properties\n      const {definedProperties} = cxt.it\n      for (const requiredKey of schema) {\n        if (props?.[requiredKey] === undefined && !definedProperties.has(requiredKey)) {\n          const schemaPath = it.schemaEnv.baseId + it.errSchemaPath\n          const msg = `required property \"${requiredKey}\" is not defined at \"${schemaPath}\" (strictRequired)`\n          checkStrictMode(it, msg, it.opts.strictRequired)\n        }\n      }\n    }\n\n    function allErrorsMode(): void {\n      if (useLoop || $data) {\n        cxt.block$data(nil, loopAllRequired)\n      } else {\n        for (const prop of schema) {\n          checkReportMissingProp(cxt, prop)\n        }\n      }\n    }\n\n    function exitOnErrorMode(): void {\n      const missing = gen.let(\"missing\")\n      if (useLoop || $data) {\n        const valid = gen.let(\"valid\", true)\n        cxt.block$data(valid, () => loopUntilMissing(missing, valid))\n        cxt.ok(valid)\n      } else {\n        gen.if(checkMissingProp(cxt, schema, missing))\n        reportMissingProp(cxt, missing)\n        gen.else()\n      }\n    }\n\n    function loopAllRequired(): void {\n      gen.forOf(\"prop\", schemaCode as Code, (prop) => {\n        cxt.setParams({missingProperty: prop})\n        gen.if(noPropertyInData(gen, data, prop, opts.ownProperties), () => cxt.error())\n      })\n    }\n\n    function loopUntilMissing(missing: Name, valid: Name): void {\n      cxt.setParams({missingProperty: missing})\n      gen.forOf(\n        missing,\n        schemaCode as Code,\n        () => {\n          gen.assign(valid, propertyInData(gen, data, missing, opts.ownProperties))\n          gen.if(not(valid), () => {\n            cxt.error()\n            gen.break()\n          })\n        },\n        nil\n      )\n    }\n  },\n}\n\nexport default def\n", "import type {CodeKeywordDefinition, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str, operators} from \"../../compile/codegen\"\n\nconst error: KeywordErrorDefinition = {\n  message({keyword, schemaCode}) {\n    const comp = keyword === \"maxItems\" ? \"more\" : \"fewer\"\n    return str`must NOT have ${comp} than ${schemaCode} items`\n  },\n  params: ({schemaCode}) => _`{limit: ${schemaCode}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: [\"maxItems\", \"minItems\"],\n  type: \"array\",\n  schemaType: \"number\",\n  $data: true,\n  error,\n  code(cxt: KeywordCxt) {\n    const {keyword, data, schemaCode} = cxt\n    const op = keyword === \"maxItems\" ? operators.GT : operators.LT\n    cxt.fail$data(_`${data}.length ${op} ${schemaCode}`)\n  },\n}\n\nexport default def\n", "// https://github.com/ajv-validator/ajv/issues/889\nimport * as equal from \"fast-deep-equal\"\n\ntype Equal = typeof equal & {code: string}\n;(equal as Equal).code = 'require(\"ajv/dist/runtime/equal\").default'\n\nexport default equal as Equal\n", "import type {CodeKeywordDefinition, ErrorObject, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {checkDataTypes, getSchemaTypes, DataType} from \"../../compile/validate/dataType\"\nimport {_, str, Name} from \"../../compile/codegen\"\nimport {useFunc} from \"../../compile/util\"\nimport equal from \"../../runtime/equal\"\n\nexport type UniqueItemsError = ErrorObject<\n  \"uniqueItems\",\n  {i: number; j: number},\n  boolean | {$data: string}\n>\n\nconst error: KeywordErrorDefinition = {\n  message: ({params: {i, j}}) =>\n    str`must NOT have duplicate items (items ## ${j} and ${i} are identical)`,\n  params: ({params: {i, j}}) => _`{i: ${i}, j: ${j}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"uniqueItems\",\n  type: \"array\",\n  schemaType: \"boolean\",\n  $data: true,\n  error,\n  code(cxt: KeywordCxt) {\n    const {gen, data, $data, schema, parentSchema, schemaCode, it} = cxt\n    if (!$data && !schema) return\n    const valid = gen.let(\"valid\")\n    const itemTypes = parentSchema.items ? getSchemaTypes(parentSchema.items) : []\n    cxt.block$data(valid, validateUniqueItems, _`${schemaCode} === false`)\n    cxt.ok(valid)\n\n    function validateUniqueItems(): void {\n      const i = gen.let(\"i\", _`${data}.length`)\n      const j = gen.let(\"j\")\n      cxt.setParams({i, j})\n      gen.assign(valid, true)\n      gen.if(_`${i} > 1`, () => (canOptimize() ? loopN : loopN2)(i, j))\n    }\n\n    function canOptimize(): boolean {\n      return itemTypes.length > 0 && !itemTypes.some((t) => t === \"object\" || t === \"array\")\n    }\n\n    function loopN(i: Name, j: Name): void {\n      const item = gen.name(\"item\")\n      const wrongType = checkDataTypes(itemTypes, item, it.opts.strictNumbers, DataType.Wrong)\n      const indices = gen.const(\"indices\", _`{}`)\n      gen.for(_`;${i}--;`, () => {\n        gen.let(item, _`${data}[${i}]`)\n        gen.if(wrongType, _`continue`)\n        if (itemTypes.length > 1) gen.if(_`typeof ${item} == \"string\"`, _`${item} += \"_\"`)\n        gen\n          .if(_`typeof ${indices}[${item}] == \"number\"`, () => {\n            gen.assign(j, _`${indices}[${item}]`)\n            cxt.error()\n            gen.assign(valid, false).break()\n          })\n          .code(_`${indices}[${item}] = ${i}`)\n      })\n    }\n\n    function loopN2(i: Name, j: Name): void {\n      const eql = useFunc(gen, equal)\n      const outer = gen.name(\"outer\")\n      gen.label(outer).for(_`;${i}--;`, () =>\n        gen.for(_`${j} = ${i}; ${j}--;`, () =>\n          gen.if(_`${eql}(${data}[${i}], ${data}[${j}])`, () => {\n            cxt.error()\n            gen.assign(valid, false).break(outer)\n          })\n        )\n      )\n    }\n  },\n}\n\nexport default def\n", "import type {CodeKeywordDefinition, ErrorObject, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_} from \"../../compile/codegen\"\nimport {useFunc} from \"../../compile/util\"\nimport equal from \"../../runtime/equal\"\n\nexport type ConstError = ErrorObject<\"const\", {allowedValue: any}>\n\nconst error: KeywordErrorDefinition = {\n  message: \"must be equal to constant\",\n  params: ({schemaCode}) => _`{allowedValue: ${schemaCode}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"const\",\n  $data: true,\n  error,\n  code(cxt: KeywordCxt) {\n    const {gen, data, $data, schemaCode, schema} = cxt\n    if ($data || (schema && typeof schema == \"object\")) {\n      cxt.fail$data(_`!${useFunc(gen, equal)}(${data}, ${schemaCode})`)\n    } else {\n      cxt.fail(_`${schema} !== ${data}`)\n    }\n  },\n}\n\nexport default def\n", "import type {CodeKeywordDefinition, ErrorObject, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, or, Name, Code} from \"../../compile/codegen\"\nimport {useFunc} from \"../../compile/util\"\nimport equal from \"../../runtime/equal\"\n\nexport type EnumError = ErrorObject<\"enum\", {allowedValues: any[]}, any[] | {$data: string}>\n\nconst error: KeywordErrorDefinition = {\n  message: \"must be equal to one of the allowed values\",\n  params: ({schemaCode}) => _`{allowedValues: ${schemaCode}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"enum\",\n  schemaType: \"array\",\n  $data: true,\n  error,\n  code(cxt: KeywordCxt) {\n    const {gen, data, $data, schema, schemaCode, it} = cxt\n    if (!$data && schema.length === 0) throw new Error(\"enum must have non-empty array\")\n    const useLoop = schema.length >= it.opts.loopEnum\n    let eql: Name | undefined\n    const getEql = (): Name => (eql ??= useFunc(gen, equal))\n\n    let valid: Code\n    if (useLoop || $data) {\n      valid = gen.let(\"valid\")\n      cxt.block$data(valid, loopEnum)\n    } else {\n      /* istanbul ignore if */\n      if (!Array.isArray(schema)) throw new Error(\"ajv implementation error\")\n      const vSchema = gen.const(\"vSchema\", schemaCode)\n      valid = or(...schema.map((_x: unknown, i: number) => equalCode(vSchema, i)))\n    }\n    cxt.pass(valid)\n\n    function loopEnum(): void {\n      gen.assign(valid, false)\n      gen.forOf(\"v\", schemaCode as Code, (v) =>\n        gen.if(_`${getEql()}(${data}, ${v})`, () => gen.assign(valid, true).break())\n      )\n    }\n\n    function equalCode(vSchema: Name, i: number): Code {\n      const sch = schema[i]\n      return typeof sch === \"object\" && sch !== null\n        ? _`${getEql()}(${data}, ${vSchema}[${i}])`\n        : _`${data} === ${sch}`\n    }\n  },\n}\n\nexport default def\n", "import type {ErrorObject, Vocabulary} from \"../../types\"\nimport limitNumber, {LimitNumberError} from \"./limitNumber\"\nimport multipleOf, {MultipleOfError} from \"./multipleOf\"\nimport limitLength from \"./limitLength\"\nimport pattern, {PatternError} from \"./pattern\"\nimport limitProperties from \"./limitProperties\"\nimport required, {RequiredError} from \"./required\"\nimport limitItems from \"./limitItems\"\nimport uniqueItems, {UniqueItemsError} from \"./uniqueItems\"\nimport constKeyword, {ConstError} from \"./const\"\nimport enumKeyword, {EnumError} from \"./enum\"\n\nconst validation: Vocabulary = [\n  // number\n  limitNumber,\n  multipleOf,\n  // string\n  limitLength,\n  pattern,\n  // object\n  limitProperties,\n  required,\n  // array\n  limitItems,\n  uniqueItems,\n  // any\n  {keyword: \"type\", schemaType: [\"string\", \"array\"]},\n  {keyword: \"nullable\", schemaType: \"boolean\"},\n  constKeyword,\n  enumKeyword,\n]\n\nexport default validation\n\ntype LimitError = ErrorObject<\n  \"maxItems\" | \"minItems\" | \"minProperties\" | \"maxProperties\" | \"minLength\" | \"maxLength\",\n  {limit: number},\n  number | {$data: string}\n>\n\nexport type ValidationKeywordError =\n  | LimitError\n  | LimitNumberError\n  | MultipleOfError\n  | PatternError\n  | RequiredError\n  | UniqueItemsError\n  | ConstError\n  | EnumError\n", "import type {\n  CodeKeywordDefinition,\n  ErrorObject,\n  KeywordErrorDefinition,\n  AnySchema,\n} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str, not, Name} from \"../../compile/codegen\"\nimport {alwaysValidSchema, checkStrictMode, Type} from \"../../compile/util\"\n\nexport type AdditionalItemsError = ErrorObject<\"additionalItems\", {limit: number}, AnySchema>\n\nconst error: KeywordErrorDefinition = {\n  message: ({params: {len}}) => str`must NOT have more than ${len} items`,\n  params: ({params: {len}}) => _`{limit: ${len}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"additionalItems\" as const,\n  type: \"array\",\n  schemaType: [\"boolean\", \"object\"],\n  before: \"uniqueItems\",\n  error,\n  code(cxt: KeywordCxt) {\n    const {parentSchema, it} = cxt\n    const {items} = parentSchema\n    if (!Array.isArray(items)) {\n      checkStrictMode(it, '\"additionalItems\" is ignored when \"items\" is not an array of schemas')\n      return\n    }\n    validateAdditionalItems(cxt, items)\n  },\n}\n\nexport function validateAdditionalItems(cxt: KeywordCxt, items: AnySchema[]): void {\n  const {gen, schema, data, keyword, it} = cxt\n  it.items = true\n  const len = gen.const(\"len\", _`${data}.length`)\n  if (schema === false) {\n    cxt.setParams({len: items.length})\n    cxt.pass(_`${len} <= ${items.length}`)\n  } else if (typeof schema == \"object\" && !alwaysValidSchema(it, schema)) {\n    const valid = gen.var(\"valid\", _`${len} <= ${items.length}`) // TODO var\n    gen.if(not(valid), () => validateItems(valid))\n    cxt.ok(valid)\n  }\n\n  function validateItems(valid: Name): void {\n    gen.forRange(\"i\", items.length, len, (i) => {\n      cxt.subschema({keyword, dataProp: i, dataPropType: Type.Num}, valid)\n      if (!it.allErrors) gen.if(not(valid), () => gen.break())\n    })\n  }\n}\n\nexport default def\n", "import type {CodeKeywordDefinition, AnySchema, AnySchemaObject} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_} from \"../../compile/codegen\"\nimport {alwaysValidSchema, mergeEvaluated, checkStrictMode} from \"../../compile/util\"\nimport {validateArray} from \"../code\"\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"items\",\n  type: \"array\",\n  schemaType: [\"object\", \"array\", \"boolean\"],\n  before: \"uniqueItems\",\n  code(cxt: KeywordCxt) {\n    const {schema, it} = cxt\n    if (Array.isArray(schema)) return validateTuple(cxt, \"additionalItems\", schema)\n    it.items = true\n    if (alwaysValidSchema(it, schema)) return\n    cxt.ok(validateArray(cxt))\n  },\n}\n\nexport function validateTuple(\n  cxt: KeywordCxt,\n  extraItems: string,\n  schArr: AnySchema[] = cxt.schema\n): void {\n  const {gen, parentSchema, data, keyword, it} = cxt\n  checkStrictTuple(parentSchema)\n  if (it.opts.unevaluated && schArr.length && it.items !== true) {\n    it.items = mergeEvaluated.items(gen, schArr.length, it.items)\n  }\n  const valid = gen.name(\"valid\")\n  const len = gen.const(\"len\", _`${data}.length`)\n  schArr.forEach((sch: AnySchema, i: number) => {\n    if (alwaysValidSchema(it, sch)) return\n    gen.if(_`${len} > ${i}`, () =>\n      cxt.subschema(\n        {\n          keyword,\n          schemaProp: i,\n          dataProp: i,\n        },\n        valid\n      )\n    )\n    cxt.ok(valid)\n  })\n\n  function checkStrictTuple(sch: AnySchemaObject): void {\n    const {opts, errSchemaPath} = it\n    const l = schArr.length\n    const fullTuple = l === sch.minItems && (l === sch.maxItems || sch[extraItems] === false)\n    if (opts.strictTuples && !fullTuple) {\n      const msg = `\"${keyword}\" is ${l}-tuple, but minItems or maxItems/${extraItems} are not specified or different at path \"${errSchemaPath}\"`\n      checkStrictMode(it, msg, opts.strictTuples)\n    }\n  }\n}\n\nexport default def\n", "import type {CodeKeywordDefinition} from \"../../types\"\nimport {validateTuple} from \"./items\"\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"prefixItems\",\n  type: \"array\",\n  schemaType: [\"array\"],\n  before: \"uniqueItems\",\n  code: (cxt) => validateTuple(cxt, \"items\"),\n}\n\nexport default def\n", "import type {\n  CodeKeywordDefinition,\n  KeywordErrorDefinition,\n  ErrorObject,\n  AnySchema,\n} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str} from \"../../compile/codegen\"\nimport {alwaysValidSchema} from \"../../compile/util\"\nimport {validateArray} from \"../code\"\nimport {validateAdditionalItems} from \"./additionalItems\"\n\nexport type ItemsError = ErrorObject<\"items\", {limit: number}, AnySchema>\n\nconst error: KeywordErrorDefinition = {\n  message: ({params: {len}}) => str`must NOT have more than ${len} items`,\n  params: ({params: {len}}) => _`{limit: ${len}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"items\",\n  type: \"array\",\n  schemaType: [\"object\", \"boolean\"],\n  before: \"uniqueItems\",\n  error,\n  code(cxt: KeywordCxt) {\n    const {schema, parentSchema, it} = cxt\n    const {prefixItems} = parentSchema\n    it.items = true\n    if (alwaysValidSchema(it, schema)) return\n    if (prefixItems) validateAdditionalItems(cxt, prefixItems)\n    else cxt.ok(validateArray(cxt))\n  },\n}\n\nexport default def\n", "import type {\n  CodeKeywordDefinition,\n  KeywordErrorDefinition,\n  ErrorObject,\n  AnySchema,\n} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str, Name} from \"../../compile/codegen\"\nimport {alwaysValidSchema, checkStrictMode, Type} from \"../../compile/util\"\n\nexport type ContainsError = ErrorObject<\n  \"contains\",\n  {minContains: number; maxContains?: number},\n  AnySchema\n>\n\nconst error: KeywordErrorDefinition = {\n  message: ({params: {min, max}}) =>\n    max === undefined\n      ? str`must contain at least ${min} valid item(s)`\n      : str`must contain at least ${min} and no more than ${max} valid item(s)`,\n  params: ({params: {min, max}}) =>\n    max === undefined ? _`{minContains: ${min}}` : _`{minContains: ${min}, maxContains: ${max}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"contains\",\n  type: \"array\",\n  schemaType: [\"object\", \"boolean\"],\n  before: \"uniqueItems\",\n  trackErrors: true,\n  error,\n  code(cxt: KeywordCxt) {\n    const {gen, schema, parentSchema, data, it} = cxt\n    let min: number\n    let max: number | undefined\n    const {minContains, maxContains} = parentSchema\n    if (it.opts.next) {\n      min = minContains === undefined ? 1 : minContains\n      max = maxContains\n    } else {\n      min = 1\n    }\n    const len = gen.const(\"len\", _`${data}.length`)\n    cxt.setParams({min, max})\n    if (max === undefined && min === 0) {\n      checkStrictMode(it, `\"minContains\" == 0 without \"maxContains\": \"contains\" keyword ignored`)\n      return\n    }\n    if (max !== undefined && min > max) {\n      checkStrictMode(it, `\"minContains\" > \"maxContains\" is always invalid`)\n      cxt.fail()\n      return\n    }\n    if (alwaysValidSchema(it, schema)) {\n      let cond = _`${len} >= ${min}`\n      if (max !== undefined) cond = _`${cond} && ${len} <= ${max}`\n      cxt.pass(cond)\n      return\n    }\n\n    it.items = true\n    const valid = gen.name(\"valid\")\n    if (max === undefined && min === 1) {\n      validateItems(valid, () => gen.if(valid, () => gen.break()))\n    } else if (min === 0) {\n      gen.let(valid, true)\n      if (max !== undefined) gen.if(_`${data}.length > 0`, validateItemsWithCount)\n    } else {\n      gen.let(valid, false)\n      validateItemsWithCount()\n    }\n    cxt.result(valid, () => cxt.reset())\n\n    function validateItemsWithCount(): void {\n      const schValid = gen.name(\"_valid\")\n      const count = gen.let(\"count\", 0)\n      validateItems(schValid, () => gen.if(schValid, () => checkLimits(count)))\n    }\n\n    function validateItems(_valid: Name, block: () => void): void {\n      gen.forRange(\"i\", 0, len, (i) => {\n        cxt.subschema(\n          {\n            keyword: \"contains\",\n            dataProp: i,\n            dataPropType: Type.Num,\n            compositeRule: true,\n          },\n          _valid\n        )\n        block()\n      })\n    }\n\n    function checkLimits(count: Name): void {\n      gen.code(_`${count}++`)\n      if (max === undefined) {\n        gen.if(_`${count} >= ${min}`, () => gen.assign(valid, true).break())\n      } else {\n        gen.if(_`${count} > ${max}`, () => gen.assign(valid, false).break())\n        if (min === 1) gen.assign(valid, true)\n        else gen.if(_`${count} >= ${min}`, () => gen.assign(valid, true))\n      }\n    }\n  },\n}\n\nexport default def\n", "import type {\n  CodeKeywordDefinition,\n  ErrorObject,\n  KeywordErrorDefinition,\n  SchemaMap,\n  AnySchema,\n} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str} from \"../../compile/codegen\"\nimport {alwaysValidSchema} from \"../../compile/util\"\nimport {checkReportMissingProp, checkMissingProp, reportMissingProp, propertyInData} from \"../code\"\n\nexport type PropertyDependencies = {[K in string]?: string[]}\n\nexport interface DependenciesErrorParams {\n  property: string\n  missingProperty: string\n  depsCount: number\n  deps: string // TODO change to string[]\n}\n\ntype SchemaDependencies = SchemaMap\n\nexport type DependenciesError = ErrorObject<\n  \"dependencies\",\n  DependenciesErrorParams,\n  {[K in string]?: string[] | AnySchema}\n>\n\nexport const error: KeywordErrorDefinition = {\n  message: ({params: {property, depsCount, deps}}) => {\n    const property_ies = depsCount === 1 ? \"property\" : \"properties\"\n    return str`must have ${property_ies} ${deps} when property ${property} is present`\n  },\n  params: ({params: {property, depsCount, deps, missingProperty}}) =>\n    _`{property: ${property},\n    missingProperty: ${missingProperty},\n    depsCount: ${depsCount},\n    deps: ${deps}}`, // TODO change to reference\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"dependencies\",\n  type: \"object\",\n  schemaType: \"object\",\n  error,\n  code(cxt: KeywordCxt) {\n    const [propDeps, schDeps] = splitDependencies(cxt)\n    validatePropertyDeps(cxt, propDeps)\n    validateSchemaDeps(cxt, schDeps)\n  },\n}\n\nfunction splitDependencies({schema}: KeywordCxt): [PropertyDependencies, SchemaDependencies] {\n  const propertyDeps: PropertyDependencies = {}\n  const schemaDeps: SchemaDependencies = {}\n  for (const key in schema) {\n    if (key === \"__proto__\") continue\n    const deps = Array.isArray(schema[key]) ? propertyDeps : schemaDeps\n    deps[key] = schema[key]\n  }\n  return [propertyDeps, schemaDeps]\n}\n\nexport function validatePropertyDeps(\n  cxt: KeywordCxt,\n  propertyDeps: {[K in string]?: string[]} = cxt.schema\n): void {\n  const {gen, data, it} = cxt\n  if (Object.keys(propertyDeps).length === 0) return\n  const missing = gen.let(\"missing\")\n  for (const prop in propertyDeps) {\n    const deps = propertyDeps[prop] as string[]\n    if (deps.length === 0) continue\n    const hasProperty = propertyInData(gen, data, prop, it.opts.ownProperties)\n    cxt.setParams({\n      property: prop,\n      depsCount: deps.length,\n      deps: deps.join(\", \"),\n    })\n    if (it.allErrors) {\n      gen.if(hasProperty, () => {\n        for (const depProp of deps) {\n          checkReportMissingProp(cxt, depProp)\n        }\n      })\n    } else {\n      gen.if(_`${hasProperty} && (${checkMissingProp(cxt, deps, missing)})`)\n      reportMissingProp(cxt, missing)\n      gen.else()\n    }\n  }\n}\n\nexport function validateSchemaDeps(cxt: KeywordCxt, schemaDeps: SchemaMap = cxt.schema): void {\n  const {gen, data, keyword, it} = cxt\n  const valid = gen.name(\"valid\")\n  for (const prop in schemaDeps) {\n    if (alwaysValidSchema(it, schemaDeps[prop] as AnySchema)) continue\n    gen.if(\n      propertyInData(gen, data, prop, it.opts.ownProperties),\n      () => {\n        const schCxt = cxt.subschema({keyword, schemaProp: prop}, valid)\n        cxt.mergeValidEvaluated(schCxt, valid)\n      },\n      () => gen.var(valid, true) // TODO var\n    )\n    cxt.ok(valid)\n  }\n}\n\nexport default def\n", "import type {\n  CodeKeywordDefinition,\n  ErrorObject,\n  KeywordErrorDefinition,\n  AnySchema,\n} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, not} from \"../../compile/codegen\"\nimport {alwaysValidSchema} from \"../../compile/util\"\n\nexport type PropertyNamesError = ErrorObject<\"propertyNames\", {propertyName: string}, AnySchema>\n\nconst error: KeywordErrorDefinition = {\n  message: \"property name must be valid\",\n  params: ({params}) => _`{propertyName: ${params.propertyName}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"propertyNames\",\n  type: \"object\",\n  schemaType: [\"object\", \"boolean\"],\n  error,\n  code(cxt: KeywordCxt) {\n    const {gen, schema, data, it} = cxt\n    if (alwaysValidSchema(it, schema)) return\n    const valid = gen.name(\"valid\")\n\n    gen.forIn(\"key\", data, (key) => {\n      cxt.setParams({propertyName: key})\n      cxt.subschema(\n        {\n          keyword: \"propertyNames\",\n          data: key,\n          dataTypes: [\"string\"],\n          propertyName: key,\n          compositeRule: true,\n        },\n        valid\n      )\n      gen.if(not(valid), () => {\n        cxt.error(true)\n        if (!it.allErrors) gen.break()\n      })\n    })\n\n    cxt.ok(valid)\n  },\n}\n\nexport default def\n", "import type {\n  CodeKeywordDefinition,\n  AddedKeywordDefinition,\n  ErrorObject,\n  KeywordErrorDefinition,\n  AnySchema,\n} from \"../../types\"\nimport {allSchemaProperties, usePattern, isOwnProperty} from \"../code\"\nimport {_, nil, or, not, Code, Name} from \"../../compile/codegen\"\nimport N from \"../../compile/names\"\nimport type {SubschemaArgs} from \"../../compile/validate/subschema\"\nimport {alwaysValidSchema, schemaRefOrVal, Type} from \"../../compile/util\"\n\nexport type AdditionalPropertiesError = ErrorObject<\n  \"additionalProperties\",\n  {additionalProperty: string},\n  AnySchema\n>\n\nconst error: KeywordErrorDefinition = {\n  message: \"must NOT have additional properties\",\n  params: ({params}) => _`{additionalProperty: ${params.additionalProperty}}`,\n}\n\nconst def: CodeKeywordDefinition & AddedKeywordDefinition = {\n  keyword: \"additionalProperties\",\n  type: [\"object\"],\n  schemaType: [\"boolean\", \"object\"],\n  allowUndefined: true,\n  trackErrors: true,\n  error,\n  code(cxt) {\n    const {gen, schema, parentSchema, data, errsCount, it} = cxt\n    /* istanbul ignore if */\n    if (!errsCount) throw new Error(\"ajv implementation error\")\n    const {allErrors, opts} = it\n    it.props = true\n    if (opts.removeAdditional !== \"all\" && alwaysValidSchema(it, schema)) return\n    const props = allSchemaProperties(parentSchema.properties)\n    const patProps = allSchemaProperties(parentSchema.patternProperties)\n    checkAdditionalProperties()\n    cxt.ok(_`${errsCount} === ${N.errors}`)\n\n    function checkAdditionalProperties(): void {\n      gen.forIn(\"key\", data, (key: Name) => {\n        if (!props.length && !patProps.length) additionalPropertyCode(key)\n        else gen.if(isAdditional(key), () => additionalPropertyCode(key))\n      })\n    }\n\n    function isAdditional(key: Name): Code {\n      let definedProp: Code\n      if (props.length > 8) {\n        // TODO maybe an option instead of hard-coded 8?\n        const propsSchema = schemaRefOrVal(it, parentSchema.properties, \"properties\")\n        definedProp = isOwnProperty(gen, propsSchema as Code, key)\n      } else if (props.length) {\n        definedProp = or(...props.map((p) => _`${key} === ${p}`))\n      } else {\n        definedProp = nil\n      }\n      if (patProps.length) {\n        definedProp = or(definedProp, ...patProps.map((p) => _`${usePattern(cxt, p)}.test(${key})`))\n      }\n      return not(definedProp)\n    }\n\n    function deleteAdditional(key: Name): void {\n      gen.code(_`delete ${data}[${key}]`)\n    }\n\n    function additionalPropertyCode(key: Name): void {\n      if (opts.removeAdditional === \"all\" || (opts.removeAdditional && schema === false)) {\n        deleteAdditional(key)\n        return\n      }\n\n      if (schema === false) {\n        cxt.setParams({additionalProperty: key})\n        cxt.error()\n        if (!allErrors) gen.break()\n        return\n      }\n\n      if (typeof schema == \"object\" && !alwaysValidSchema(it, schema)) {\n        const valid = gen.name(\"valid\")\n        if (opts.removeAdditional === \"failing\") {\n          applyAdditionalSchema(key, valid, false)\n          gen.if(not(valid), () => {\n            cxt.reset()\n            deleteAdditional(key)\n          })\n        } else {\n          applyAdditionalSchema(key, valid)\n          if (!allErrors) gen.if(not(valid), () => gen.break())\n        }\n      }\n    }\n\n    function applyAdditionalSchema(key: Name, valid: Name, errors?: false): void {\n      const subschema: SubschemaArgs = {\n        keyword: \"additionalProperties\",\n        dataProp: key,\n        dataPropType: Type.Str,\n      }\n      if (errors === false) {\n        Object.assign(subschema, {\n          compositeRule: true,\n          createErrors: false,\n          allErrors: false,\n        })\n      }\n      cxt.subschema(subschema, valid)\n    }\n  },\n}\n\nexport default def\n", "import type {CodeKeywordDefinition} from \"../../types\"\nimport {KeywordCxt} from \"../../compile/validate\"\nimport {propertyInData, allSchemaProperties} from \"../code\"\nimport {alwaysValidSchema, toHash, mergeEvaluated} from \"../../compile/util\"\nimport apDef from \"./additionalProperties\"\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"properties\",\n  type: \"object\",\n  schemaType: \"object\",\n  code(cxt: KeywordCxt) {\n    const {gen, schema, parentSchema, data, it} = cxt\n    if (it.opts.removeAdditional === \"all\" && parentSchema.additionalProperties === undefined) {\n      apDef.code(new KeywordCxt(it, apDef, \"additionalProperties\"))\n    }\n    const allProps = allSchemaProperties(schema)\n    for (const prop of allProps) {\n      it.definedProperties.add(prop)\n    }\n    if (it.opts.unevaluated && allProps.length && it.props !== true) {\n      it.props = mergeEvaluated.props(gen, toHash(allProps), it.props)\n    }\n    const properties = allProps.filter((p) => !alwaysValidSchema(it, schema[p]))\n    if (properties.length === 0) return\n    const valid = gen.name(\"valid\")\n\n    for (const prop of properties) {\n      if (hasDefault(prop)) {\n        applyPropertySchema(prop)\n      } else {\n        gen.if(propertyInData(gen, data, prop, it.opts.ownProperties))\n        applyPropertySchema(prop)\n        if (!it.allErrors) gen.else().var(valid, true)\n        gen.endIf()\n      }\n      cxt.it.definedProperties.add(prop)\n      cxt.ok(valid)\n    }\n\n    function hasDefault(prop: string): boolean | undefined {\n      return it.opts.useDefaults && !it.compositeRule && schema[prop].default !== undefined\n    }\n\n    function applyPropertySchema(prop: string): void {\n      cxt.subschema(\n        {\n          keyword: \"properties\",\n          schemaProp: prop,\n          dataProp: prop,\n        },\n        valid\n      )\n    }\n  },\n}\n\nexport default def\n", "import type {CodeKeywordDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {allSchemaProperties, usePattern} from \"../code\"\nimport {_, not, Name} from \"../../compile/codegen\"\nimport {alwaysValidSchema, checkStrictMode} from \"../../compile/util\"\nimport {evaluatedPropsToName, Type} from \"../../compile/util\"\nimport {AnySchema} from \"../../types\"\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"patternProperties\",\n  type: \"object\",\n  schemaType: \"object\",\n  code(cxt: KeywordCxt) {\n    const {gen, schema, data, parentSchema, it} = cxt\n    const {opts} = it\n    const patterns = allSchemaProperties(schema)\n    const alwaysValidPatterns = patterns.filter((p) =>\n      alwaysValidSchema(it, schema[p] as AnySchema)\n    )\n\n    if (\n      patterns.length === 0 ||\n      (alwaysValidPatterns.length === patterns.length &&\n        (!it.opts.unevaluated || it.props === true))\n    ) {\n      return\n    }\n\n    const checkProperties =\n      opts.strictSchema && !opts.allowMatchingProperties && parentSchema.properties\n    const valid = gen.name(\"valid\")\n    if (it.props !== true && !(it.props instanceof Name)) {\n      it.props = evaluatedPropsToName(gen, it.props)\n    }\n    const {props} = it\n    validatePatternProperties()\n\n    function validatePatternProperties(): void {\n      for (const pat of patterns) {\n        if (checkProperties) checkMatchingProperties(pat)\n        if (it.allErrors) {\n          validateProperties(pat)\n        } else {\n          gen.var(valid, true) // TODO var\n          validateProperties(pat)\n          gen.if(valid)\n        }\n      }\n    }\n\n    function checkMatchingProperties(pat: string): void {\n      for (const prop in checkProperties) {\n        if (new RegExp(pat).test(prop)) {\n          checkStrictMode(\n            it,\n            `property ${prop} matches pattern ${pat} (use allowMatchingProperties)`\n          )\n        }\n      }\n    }\n\n    function validateProperties(pat: string): void {\n      gen.forIn(\"key\", data, (key) => {\n        gen.if(_`${usePattern(cxt, pat)}.test(${key})`, () => {\n          const alwaysValid = alwaysValidPatterns.includes(pat)\n          if (!alwaysValid) {\n            cxt.subschema(\n              {\n                keyword: \"patternProperties\",\n                schemaProp: pat,\n                dataProp: key,\n                dataPropType: Type.Str,\n              },\n              valid\n            )\n          }\n\n          if (it.opts.unevaluated && props !== true) {\n            gen.assign(_`${props}[${key}]`, true)\n          } else if (!alwaysValid && !it.allErrors) {\n            // can short-circuit if `unevaluatedProperties` is not supported (opts.next === false)\n            // or if all properties were evaluated (props === true)\n            gen.if(not(valid), () => gen.break())\n          }\n        })\n      })\n    }\n  },\n}\n\nexport default def\n", "import type {CodeKeywordDefinition, ErrorNoParams, AnySchema} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {alwaysValidSchema} from \"../../compile/util\"\n\nexport type NotKeywordError = ErrorNoParams<\"not\", AnySchema>\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"not\",\n  schemaType: [\"object\", \"boolean\"],\n  trackErrors: true,\n  code(cxt: KeywordCxt) {\n    const {gen, schema, it} = cxt\n    if (alwaysValidSchema(it, schema)) {\n      cxt.fail()\n      return\n    }\n\n    const valid = gen.name(\"valid\")\n    cxt.subschema(\n      {\n        keyword: \"not\",\n        compositeRule: true,\n        createErrors: false,\n        allErrors: false,\n      },\n      valid\n    )\n\n    cxt.failResult(\n      valid,\n      () => cxt.reset(),\n      () => cxt.error()\n    )\n  },\n  error: {message: \"must NOT be valid\"},\n}\n\nexport default def\n", "import type {CodeKeywordDefinition, ErrorNoParams, AnySchema} from \"../../types\"\nimport {validateUnion} from \"../code\"\n\nexport type AnyOfError = ErrorNoParams<\"anyOf\", AnySchema[]>\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"anyOf\",\n  schemaType: \"array\",\n  trackErrors: true,\n  code: validateUnion,\n  error: {message: \"must match a schema in anyOf\"},\n}\n\nexport default def\n", "import type {\n  CodeKeywordDefinition,\n  ErrorObject,\n  KeywordErrorDefinition,\n  AnySchema,\n} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, Name} from \"../../compile/codegen\"\nimport {alwaysValidSchema} from \"../../compile/util\"\nimport {SchemaCxt} from \"../../compile\"\n\nexport type OneOfError = ErrorObject<\n  \"oneOf\",\n  {passingSchemas: [number, number] | null},\n  AnySchema[]\n>\n\nconst error: KeywordErrorDefinition = {\n  message: \"must match exactly one schema in oneOf\",\n  params: ({params}) => _`{passingSchemas: ${params.passing}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"oneOf\",\n  schemaType: \"array\",\n  trackErrors: true,\n  error,\n  code(cxt: KeywordCxt) {\n    const {gen, schema, parentSchema, it} = cxt\n    /* istanbul ignore if */\n    if (!Array.isArray(schema)) throw new Error(\"ajv implementation error\")\n    if (it.opts.discriminator && parentSchema.discriminator) return\n    const schArr: AnySchema[] = schema\n    const valid = gen.let(\"valid\", false)\n    const passing = gen.let(\"passing\", null)\n    const schValid = gen.name(\"_valid\")\n    cxt.setParams({passing})\n    // TODO possibly fail straight away (with warning or exception) if there are two empty always valid schemas\n\n    gen.block(validateOneOf)\n\n    cxt.result(\n      valid,\n      () => cxt.reset(),\n      () => cxt.error(true)\n    )\n\n    function validateOneOf(): void {\n      schArr.forEach((sch: AnySchema, i: number) => {\n        let schCxt: SchemaCxt | undefined\n        if (alwaysValidSchema(it, sch)) {\n          gen.var(schValid, true)\n        } else {\n          schCxt = cxt.subschema(\n            {\n              keyword: \"oneOf\",\n              schemaProp: i,\n              compositeRule: true,\n            },\n            schValid\n          )\n        }\n\n        if (i > 0) {\n          gen\n            .if(_`${schValid} && ${valid}`)\n            .assign(valid, false)\n            .assign(passing, _`[${passing}, ${i}]`)\n            .else()\n        }\n\n        gen.if(schValid, () => {\n          gen.assign(valid, true)\n          gen.assign(passing, i)\n          if (schCxt) cxt.mergeEvaluated(schCxt, Name)\n        })\n      })\n    }\n  },\n}\n\nexport default def\n", "import type {CodeKeywordDefinition, AnySchema} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {alwaysValidSchema} from \"../../compile/util\"\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"allOf\",\n  schemaType: \"array\",\n  code(cxt: KeywordCxt) {\n    const {gen, schema, it} = cxt\n    /* istanbul ignore if */\n    if (!Array.isArray(schema)) throw new Error(\"ajv implementation error\")\n    const valid = gen.name(\"valid\")\n    schema.forEach((sch: AnySchema, i: number) => {\n      if (alwaysValidSchema(it, sch)) return\n      const schCxt = cxt.subschema({keyword: \"allOf\", schemaProp: i}, valid)\n      cxt.ok(valid)\n      cxt.mergeEvaluated(schCxt)\n    })\n  },\n}\n\nexport default def\n", "import type {\n  CodeKeywordDefinition,\n  ErrorObject,\n  KeywordErrorDefinition,\n  AnySchema,\n} from \"../../types\"\nimport type {SchemaObjCxt} from \"../../compile\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str, not, Name} from \"../../compile/codegen\"\nimport {alwaysValidSchema, checkStrictMode} from \"../../compile/util\"\n\nexport type IfKeywordError = ErrorObject<\"if\", {failingKeyword: string}, AnySchema>\n\nconst error: KeywordErrorDefinition = {\n  message: ({params}) => str`must match \"${params.ifClause}\" schema`,\n  params: ({params}) => _`{failingKeyword: ${params.ifClause}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"if\",\n  schemaType: [\"object\", \"boolean\"],\n  trackErrors: true,\n  error,\n  code(cxt: KeywordCxt) {\n    const {gen, parentSchema, it} = cxt\n    if (parentSchema.then === undefined && parentSchema.else === undefined) {\n      checkStrictMode(it, '\"if\" without \"then\" and \"else\" is ignored')\n    }\n    const hasThen = hasSchema(it, \"then\")\n    const hasElse = hasSchema(it, \"else\")\n    if (!hasThen && !hasElse) return\n\n    const valid = gen.let(\"valid\", true)\n    const schValid = gen.name(\"_valid\")\n    validateIf()\n    cxt.reset()\n\n    if (hasThen && hasElse) {\n      const ifClause = gen.let(\"ifClause\")\n      cxt.setParams({ifClause})\n      gen.if(schValid, validateClause(\"then\", ifClause), validateClause(\"else\", ifClause))\n    } else if (hasThen) {\n      gen.if(schValid, validateClause(\"then\"))\n    } else {\n      gen.if(not(schValid), validateClause(\"else\"))\n    }\n\n    cxt.pass(valid, () => cxt.error(true))\n\n    function validateIf(): void {\n      const schCxt = cxt.subschema(\n        {\n          keyword: \"if\",\n          compositeRule: true,\n          createErrors: false,\n          allErrors: false,\n        },\n        schValid\n      )\n      cxt.mergeEvaluated(schCxt)\n    }\n\n    function validateClause(keyword: string, ifClause?: Name): () => void {\n      return () => {\n        const schCxt = cxt.subschema({keyword}, schValid)\n        gen.assign(valid, schValid)\n        cxt.mergeValidEvaluated(schCxt, valid)\n        if (ifClause) gen.assign(ifClause, _`${keyword}`)\n        else cxt.setParams({ifClause: keyword})\n      }\n    }\n  },\n}\n\nfunction hasSchema(it: SchemaObjCxt, keyword: string): boolean {\n  const schema = it.schema[keyword]\n  return schema !== undefined && !alwaysValidSchema(it, schema)\n}\n\nexport default def\n", "import type {CodeKeywordDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {checkStrictMode} from \"../../compile/util\"\n\nconst def: CodeKeywordDefinition = {\n  keyword: [\"then\", \"else\"],\n  schemaType: [\"object\", \"boolean\"],\n  code({keyword, parentSchema, it}: KeywordCxt) {\n    if (parentSchema.if === undefined) checkStrictMode(it, `\"${keyword}\" without \"if\" is ignored`)\n  },\n}\n\nexport default def\n", "import type {ErrorNoParams, Vocabulary} from \"../../types\"\nimport additionalItems, {AdditionalItemsError} from \"./additionalItems\"\nimport prefixItems from \"./prefixItems\"\nimport items from \"./items\"\nimport items2020, {ItemsError} from \"./items2020\"\nimport contains, {ContainsError} from \"./contains\"\nimport dependencies, {DependenciesError} from \"./dependencies\"\nimport propertyNames, {PropertyNamesError} from \"./propertyNames\"\nimport additionalProperties, {AdditionalPropertiesError} from \"./additionalProperties\"\nimport properties from \"./properties\"\nimport patternProperties from \"./patternProperties\"\nimport notKeyword, {NotKeywordError} from \"./not\"\nimport anyOf, {AnyOfError} from \"./anyOf\"\nimport oneOf, {OneOfError} from \"./oneOf\"\nimport allOf from \"./allOf\"\nimport ifKeyword, {IfKeywordError} from \"./if\"\nimport thenElse from \"./thenElse\"\n\nexport default function getApplicator(draft2020 = false): Vocabulary {\n  const applicator = [\n    // any\n    notKeyword,\n    anyOf,\n    oneOf,\n    allOf,\n    ifKeyword,\n    thenElse,\n    // object\n    propertyNames,\n    additionalProperties,\n    dependencies,\n    properties,\n    patternProperties,\n  ]\n  // array\n  if (draft2020) applicator.push(prefixItems, items2020)\n  else applicator.push(additionalItems, items)\n  applicator.push(contains)\n  return applicator\n}\n\nexport type ApplicatorKeywordError =\n  | ErrorNoParams<\"false schema\">\n  | AdditionalItemsError\n  | ItemsError\n  | ContainsError\n  | AdditionalPropertiesError\n  | DependenciesError\n  | IfKeywordError\n  | AnyOfError\n  | OneOfError\n  | NotKeywordError\n  | PropertyNamesError\n", "import type {\n  AddedFormat,\n  FormatValidator,\n  AsyncFormatValidator,\n  CodeKeywordDefinition,\n  KeywordErrorDefinition,\n  ErrorObject,\n} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str, nil, or, Code, getProperty, regexpCode} from \"../../compile/codegen\"\n\ntype FormatValidate =\n  | FormatValidator<string>\n  | FormatValidator<number>\n  | AsyncFormatValidator<string>\n  | AsyncFormatValidator<number>\n  | RegExp\n  | string\n  | true\n\nexport type FormatError = ErrorObject<\"format\", {format: string}, string | {$data: string}>\n\nconst error: KeywordErrorDefinition = {\n  message: ({schemaCode}) => str`must match format \"${schemaCode}\"`,\n  params: ({schemaCode}) => _`{format: ${schemaCode}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"format\",\n  type: [\"number\", \"string\"],\n  schemaType: \"string\",\n  $data: true,\n  error,\n  code(cxt: KeywordCxt, ruleType?: string) {\n    const {gen, data, $data, schema, schemaCode, it} = cxt\n    const {opts, errSchemaPath, schemaEnv, self} = it\n    if (!opts.validateFormats) return\n\n    if ($data) validate$DataFormat()\n    else validateFormat()\n\n    function validate$DataFormat(): void {\n      const fmts = gen.scopeValue(\"formats\", {\n        ref: self.formats,\n        code: opts.code.formats,\n      })\n      const fDef = gen.const(\"fDef\", _`${fmts}[${schemaCode}]`)\n      const fType = gen.let(\"fType\")\n      const format = gen.let(\"format\")\n      // TODO simplify\n      gen.if(\n        _`typeof ${fDef} == \"object\" && !(${fDef} instanceof RegExp)`,\n        () => gen.assign(fType, _`${fDef}.type || \"string\"`).assign(format, _`${fDef}.validate`),\n        () => gen.assign(fType, _`\"string\"`).assign(format, fDef)\n      )\n      cxt.fail$data(or(unknownFmt(), invalidFmt()))\n\n      function unknownFmt(): Code {\n        if (opts.strictSchema === false) return nil\n        return _`${schemaCode} && !${format}`\n      }\n\n      function invalidFmt(): Code {\n        const callFormat = schemaEnv.$async\n          ? _`(${fDef}.async ? await ${format}(${data}) : ${format}(${data}))`\n          : _`${format}(${data})`\n        const validData = _`(typeof ${format} == \"function\" ? ${callFormat} : ${format}.test(${data}))`\n        return _`${format} && ${format} !== true && ${fType} === ${ruleType} && !${validData}`\n      }\n    }\n\n    function validateFormat(): void {\n      const formatDef: AddedFormat | undefined = self.formats[schema]\n      if (!formatDef) {\n        unknownFormat()\n        return\n      }\n      if (formatDef === true) return\n      const [fmtType, format, fmtRef] = getFormat(formatDef)\n      if (fmtType === ruleType) cxt.pass(validCondition())\n\n      function unknownFormat(): void {\n        if (opts.strictSchema === false) {\n          self.logger.warn(unknownMsg())\n          return\n        }\n        throw new Error(unknownMsg())\n\n        function unknownMsg(): string {\n          return `unknown format \"${schema as string}\" ignored in schema at path \"${errSchemaPath}\"`\n        }\n      }\n\n      function getFormat(fmtDef: AddedFormat): [string, FormatValidate, Code] {\n        const code =\n          fmtDef instanceof RegExp\n            ? regexpCode(fmtDef)\n            : opts.code.formats\n            ? _`${opts.code.formats}${getProperty(schema)}`\n            : undefined\n        const fmt = gen.scopeValue(\"formats\", {key: schema, ref: fmtDef, code})\n        if (typeof fmtDef == \"object\" && !(fmtDef instanceof RegExp)) {\n          return [fmtDef.type || \"string\", fmtDef.validate, _`${fmt}.validate`]\n        }\n\n        return [\"string\", fmtDef, fmt]\n      }\n\n      function validCondition(): Code {\n        if (typeof formatDef == \"object\" && !(formatDef instanceof RegExp) && formatDef.async) {\n          if (!schemaEnv.$async) throw new Error(\"async format in sync schema\")\n          return _`await ${fmtRef}(${data})`\n        }\n        return typeof format == \"function\" ? _`${fmtRef}(${data})` : _`${fmtRef}.test(${data})`\n      }\n    }\n  },\n}\n\nexport default def\n", "import type {Vocabulary} from \"../../types\"\nimport formatKeyword from \"./format\"\n\nconst format: Vocabulary = [formatKeyword]\n\nexport default format\n", "import type {Vocabulary} from \"../types\"\n\nexport const metadataVocabulary: Vocabulary = [\n  \"title\",\n  \"description\",\n  \"default\",\n  \"deprecated\",\n  \"readOnly\",\n  \"writeOnly\",\n  \"examples\",\n]\n\nexport const contentVocabulary: Vocabulary = [\n  \"contentMediaType\",\n  \"contentEncoding\",\n  \"contentSchema\",\n]\n", "import type {Vocabulary} from \"../types\"\nimport coreVocabulary from \"./core\"\nimport validationVocabulary from \"./validation\"\nimport getApplicatorVocabulary from \"./applicator\"\nimport formatVocabulary from \"./format\"\nimport {metadataVocabulary, contentVocabulary} from \"./metadata\"\n\nconst draft7Vocabularies: Vocabulary[] = [\n  coreVocabulary,\n  validationVocabulary,\n  getApplicatorVocabulary(),\n  formatVocabulary,\n  metadataVocabulary,\n  contentVocabulary,\n]\n\nexport default draft7Vocabularies\n", "import type {ErrorObject} from \"../../types\"\n\nexport enum DiscrError {\n  Tag = \"tag\",\n  Mapping = \"mapping\",\n}\n\nexport type DiscrErrorObj<E extends DiscrError> = ErrorObject<\n  \"discriminator\",\n  {error: E; tag: string; tagValue: unknown},\n  string\n>\n", "import type {CodeKeywordDefinition, AnySchemaObject, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, getProperty, Name} from \"../../compile/codegen\"\nimport {DiscrError, DiscrErrorObj} from \"../discriminator/types\"\nimport {resolveRef, SchemaEnv} from \"../../compile\"\nimport MissingRefError from \"../../compile/ref_error\"\nimport {schemaHasRulesButRef} from \"../../compile/util\"\n\nexport type DiscriminatorError = DiscrErrorObj<DiscrError.Tag> | DiscrErrorObj<DiscrError.Mapping>\n\nconst error: KeywordErrorDefinition = {\n  message: ({params: {discrError, tagName}}) =>\n    discrError === DiscrError.Tag\n      ? `tag \"${tagName}\" must be string`\n      : `value of tag \"${tagName}\" must be in oneOf`,\n  params: ({params: {discrError, tag, tagName}}) =>\n    _`{error: ${discrError}, tag: ${tagName}, tagValue: ${tag}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"discriminator\",\n  type: \"object\",\n  schemaType: \"object\",\n  error,\n  code(cxt: KeywordCxt) {\n    const {gen, data, schema, parentSchema, it} = cxt\n    const {oneOf} = parentSchema\n    if (!it.opts.discriminator) {\n      throw new Error(\"discriminator: requires discriminator option\")\n    }\n    const tagName = schema.propertyName\n    if (typeof tagName != \"string\") throw new Error(\"discriminator: requires propertyName\")\n    if (schema.mapping) throw new Error(\"discriminator: mapping is not supported\")\n    if (!oneOf) throw new Error(\"discriminator: requires oneOf keyword\")\n    const valid = gen.let(\"valid\", false)\n    const tag = gen.const(\"tag\", _`${data}${getProperty(tagName)}`)\n    gen.if(\n      _`typeof ${tag} == \"string\"`,\n      () => validateMapping(),\n      () => cxt.error(false, {discrError: DiscrError.Tag, tag, tagName})\n    )\n    cxt.ok(valid)\n\n    function validateMapping(): void {\n      const mapping = getMapping()\n      gen.if(false)\n      for (const tagValue in mapping) {\n        gen.elseIf(_`${tag} === ${tagValue}`)\n        gen.assign(valid, applyTagSchema(mapping[tagValue]))\n      }\n      gen.else()\n      cxt.error(false, {discrError: DiscrError.Mapping, tag, tagName})\n      gen.endIf()\n    }\n\n    function applyTagSchema(schemaProp?: number): Name {\n      const _valid = gen.name(\"valid\")\n      const schCxt = cxt.subschema({keyword: \"oneOf\", schemaProp}, _valid)\n      cxt.mergeEvaluated(schCxt, Name)\n      return _valid\n    }\n\n    function getMapping(): {[T in string]?: number} {\n      const oneOfMapping: {[T in string]?: number} = {}\n      const topRequired = hasRequired(parentSchema)\n      let tagRequired = true\n      for (let i = 0; i < oneOf.length; i++) {\n        let sch = oneOf[i]\n        if (sch?.$ref && !schemaHasRulesButRef(sch, it.self.RULES)) {\n          const ref = sch.$ref\n          sch = resolveRef.call(it.self, it.schemaEnv.root, it.baseId, ref)\n          if (sch instanceof SchemaEnv) sch = sch.schema\n          if (sch === undefined) throw new MissingRefError(it.opts.uriResolver, it.baseId, ref)\n        }\n        const propSch = sch?.properties?.[tagName]\n        if (typeof propSch != \"object\") {\n          throw new Error(\n            `discriminator: oneOf subschemas (or referenced schemas) must have \"properties/${tagName}\"`\n          )\n        }\n        tagRequired = tagRequired && (topRequired || hasRequired(sch))\n        addMappings(propSch, i)\n      }\n      if (!tagRequired) throw new Error(`discriminator: \"${tagName}\" must be required`)\n      return oneOfMapping\n\n      function hasRequired({required}: AnySchemaObject): boolean {\n        return Array.isArray(required) && required.includes(tagName)\n      }\n\n      function addMappings(sch: AnySchemaObject, i: number): void {\n        if (sch.const) {\n          addMapping(sch.const, i)\n        } else if (sch.enum) {\n          for (const tagValue of sch.enum) {\n            addMapping(tagValue, i)\n          }\n        } else {\n          throw new Error(`discriminator: \"properties/${tagName}\" must have \"const\" or \"enum\"`)\n        }\n      }\n\n      function addMapping(tagValue: unknown, i: number): void {\n        if (typeof tagValue != \"string\" || tagValue in oneOfMapping) {\n          throw new Error(`discriminator: \"${tagName}\" values must be unique strings`)\n        }\n        oneOfMapping[tagValue] = i\n      }\n    }\n  },\n}\n\nexport default def\n", "{\n  \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n  \"$id\": \"http://json-schema.org/draft-07/schema#\",\n  \"title\": \"Core schema meta-schema\",\n  \"definitions\": {\n    \"schemaArray\": {\n      \"type\": \"array\",\n      \"minItems\": 1,\n      \"items\": {\"$ref\": \"#\"}\n    },\n    \"nonNegativeInteger\": {\n      \"type\": \"integer\",\n      \"minimum\": 0\n    },\n    \"nonNegativeIntegerDefault0\": {\n      \"allOf\": [{\"$ref\": \"#/definitions/nonNegativeInteger\"}, {\"default\": 0}]\n    },\n    \"simpleTypes\": {\n      \"enum\": [\"array\", \"boolean\", \"integer\", \"null\", \"number\", \"object\", \"string\"]\n    },\n    \"stringArray\": {\n      \"type\": \"array\",\n      \"items\": {\"type\": \"string\"},\n      \"uniqueItems\": true,\n      \"default\": []\n    }\n  },\n  \"type\": [\"object\", \"boolean\"],\n  \"properties\": {\n    \"$id\": {\n      \"type\": \"string\",\n      \"format\": \"uri-reference\"\n    },\n    \"$schema\": {\n      \"type\": \"string\",\n      \"format\": \"uri\"\n    },\n    \"$ref\": {\n      \"type\": \"string\",\n      \"format\": \"uri-reference\"\n    },\n    \"$comment\": {\n      \"type\": \"string\"\n    },\n    \"title\": {\n      \"type\": \"string\"\n    },\n    \"description\": {\n      \"type\": \"string\"\n    },\n    \"default\": true,\n    \"readOnly\": {\n      \"type\": \"boolean\",\n      \"default\": false\n    },\n    \"examples\": {\n      \"type\": \"array\",\n      \"items\": true\n    },\n    \"multipleOf\": {\n      \"type\": \"number\",\n      \"exclusiveMinimum\": 0\n    },\n    \"maximum\": {\n      \"type\": \"number\"\n    },\n    \"exclusiveMaximum\": {\n      \"type\": \"number\"\n    },\n    \"minimum\": {\n      \"type\": \"number\"\n    },\n    \"exclusiveMinimum\": {\n      \"type\": \"number\"\n    },\n    \"maxLength\": {\"$ref\": \"#/definitions/nonNegativeInteger\"},\n    \"minLength\": {\"$ref\": \"#/definitions/nonNegativeIntegerDefault0\"},\n    \"pattern\": {\n      \"type\": \"string\",\n      \"format\": \"regex\"\n    },\n    \"additionalItems\": {\"$ref\": \"#\"},\n    \"items\": {\n      \"anyOf\": [{\"$ref\": \"#\"}, {\"$ref\": \"#/definitions/schemaArray\"}],\n      \"default\": true\n    },\n    \"maxItems\": {\"$ref\": \"#/definitions/nonNegativeInteger\"},\n    \"minItems\": {\"$ref\": \"#/definitions/nonNegativeIntegerDefault0\"},\n    \"uniqueItems\": {\n      \"type\": \"boolean\",\n      \"default\": false\n    },\n    \"contains\": {\"$ref\": \"#\"},\n    \"maxProperties\": {\"$ref\": \"#/definitions/nonNegativeInteger\"},\n    \"minProperties\": {\"$ref\": \"#/definitions/nonNegativeIntegerDefault0\"},\n    \"required\": {\"$ref\": \"#/definitions/stringArray\"},\n    \"additionalProperties\": {\"$ref\": \"#\"},\n    \"definitions\": {\n      \"type\": \"object\",\n      \"additionalProperties\": {\"$ref\": \"#\"},\n      \"default\": {}\n    },\n    \"properties\": {\n      \"type\": \"object\",\n      \"additionalProperties\": {\"$ref\": \"#\"},\n      \"default\": {}\n    },\n    \"patternProperties\": {\n      \"type\": \"object\",\n      \"additionalProperties\": {\"$ref\": \"#\"},\n      \"propertyNames\": {\"format\": \"regex\"},\n      \"default\": {}\n    },\n    \"dependencies\": {\n      \"type\": \"object\",\n      \"additionalProperties\": {\n        \"anyOf\": [{\"$ref\": \"#\"}, {\"$ref\": \"#/definitions/stringArray\"}]\n      }\n    },\n    \"propertyNames\": {\"$ref\": \"#\"},\n    \"const\": true,\n    \"enum\": {\n      \"type\": \"array\",\n      \"items\": true,\n      \"minItems\": 1,\n      \"uniqueItems\": true\n    },\n    \"type\": {\n      \"anyOf\": [\n        {\"$ref\": \"#/definitions/simpleTypes\"},\n        {\n          \"type\": \"array\",\n          \"items\": {\"$ref\": \"#/definitions/simpleTypes\"},\n          \"minItems\": 1,\n          \"uniqueItems\": true\n        }\n      ]\n    },\n    \"format\": {\"type\": \"string\"},\n    \"contentMediaType\": {\"type\": \"string\"},\n    \"contentEncoding\": {\"type\": \"string\"},\n    \"if\": {\"$ref\": \"#\"},\n    \"then\": {\"$ref\": \"#\"},\n    \"else\": {\"$ref\": \"#\"},\n    \"allOf\": {\"$ref\": \"#/definitions/schemaArray\"},\n    \"anyOf\": {\"$ref\": \"#/definitions/schemaArray\"},\n    \"oneOf\": {\"$ref\": \"#/definitions/schemaArray\"},\n    \"not\": {\"$ref\": \"#\"}\n  },\n  \"default\": true\n}\n", "import type {AnySchemaObject} from \"./types\"\nimport AjvCore from \"./core\"\nimport draft7Vocabularies from \"./vocabularies/draft7\"\nimport discriminator from \"./vocabularies/discriminator\"\nimport * as draft7MetaSchema from \"./refs/json-schema-draft-07.json\"\n\nconst META_SUPPORT_DATA = [\"/properties\"]\n\nconst META_SCHEMA_ID = \"http://json-schema.org/draft-07/schema\"\n\nexport class Ajv extends AjvCore {\n  _addVocabularies(): void {\n    super._addVocabularies()\n    draft7Vocabularies.forEach((v) => this.addVocabulary(v))\n    if (this.opts.discriminator) this.addKeyword(discriminator)\n  }\n\n  _addDefaultMetaSchema(): void {\n    super._addDefaultMetaSchema()\n    if (!this.opts.meta) return\n    const metaSchema = this.opts.$data\n      ? this.$dataMetaSchema(draft7MetaSchema, META_SUPPORT_DATA)\n      : draft7MetaSchema\n    this.addMetaSchema(metaSchema, META_SCHEMA_ID, false)\n    this.refs[\"http://json-schema.org/schema\"] = META_SCHEMA_ID\n  }\n\n  defaultMeta(): string | AnySchemaObject | undefined {\n    return (this.opts.defaultMeta =\n      super.defaultMeta() || (this.getSchema(META_SCHEMA_ID) ? META_SCHEMA_ID : undefined))\n  }\n}\n\nmodule.exports = exports = Ajv\nmodule.exports.Ajv = Ajv\nObject.defineProperty(exports, \"__esModule\", {value: true})\n\nexport default Ajv\n\nexport {\n  Format,\n  FormatDefinition,\n  AsyncFormatDefinition,\n  KeywordDefinition,\n  KeywordErrorDefinition,\n  CodeKeywordDefinition,\n  MacroKeywordDefinition,\n  FuncKeywordDefinition,\n  Vocabulary,\n  Schema,\n  SchemaObject,\n  AnySchemaObject,\n  AsyncSchema,\n  AnySchema,\n  ValidateFunction,\n  AsyncValidateFunction,\n  SchemaValidateFunction,\n  ErrorObject,\n  ErrorNoParams,\n} from \"./types\"\n\nexport {Plugin, Options, CodeOptions, InstanceOptions, Logger, ErrorsTextOptions} from \"./core\"\nexport {SchemaCxt, SchemaObjCxt} from \"./compile\"\nexport {KeywordCxt} from \"./compile/validate\"\nexport {DefinedError} from \"./vocabularies/errors\"\nexport {JSONType} from \"./compile/rules\"\nexport {JSONSchemaType} from \"./types/json-schema\"\nexport {_, str, stringify, nil, Name, Code, CodeGen, CodeGenOptions} from \"./compile/codegen\"\nexport {default as ValidationError} from \"./runtime/validation_error\"\nexport {default as MissingRefError} from \"./compile/ref_error\"\n", "import type {Format, FormatDefinition} from \"ajv\"\nimport type {FormatValidator, FormatCompare} from \"ajv/dist/types\"\n\nexport type FormatMode = \"fast\" | \"full\"\n\nexport type FormatName =\n  | \"date\"\n  | \"time\"\n  | \"date-time\"\n  | \"iso-time\"\n  | \"iso-date-time\"\n  | \"duration\"\n  | \"uri\"\n  | \"uri-reference\"\n  | \"uri-template\"\n  | \"url\"\n  | \"email\"\n  | \"hostname\"\n  | \"ipv4\"\n  | \"ipv6\"\n  | \"regex\"\n  | \"uuid\"\n  | \"json-pointer\"\n  | \"json-pointer-uri-fragment\"\n  | \"relative-json-pointer\"\n  | \"byte\"\n  | \"int32\"\n  | \"int64\"\n  | \"float\"\n  | \"double\"\n  | \"password\"\n  | \"binary\"\n\nexport type DefinedFormats = {\n  [key in FormatName]: Format\n}\n\nfunction fmtDef(\n  validate: RegExp | FormatValidator<string>,\n  compare: FormatCompare<string>\n): FormatDefinition<string> {\n  return {validate, compare}\n}\n\nexport const fullFormats: DefinedFormats = {\n  // date: http://tools.ietf.org/html/rfc3339#section-5.6\n  date: fmtDef(date, compareDate),\n  // date-time: http://tools.ietf.org/html/rfc3339#section-5.6\n  time: fmtDef(getTime(true), compareTime),\n  \"date-time\": fmtDef(getDateTime(true), compareDateTime),\n  \"iso-time\": fmtDef(getTime(), compareIsoTime),\n  \"iso-date-time\": fmtDef(getDateTime(), compareIsoDateTime),\n  // duration: https://tools.ietf.org/html/rfc3339#appendix-A\n  duration: /^P(?!$)((\\d+Y)?(\\d+M)?(\\d+D)?(T(?=\\d)(\\d+H)?(\\d+M)?(\\d+S)?)?|(\\d+W)?)$/,\n  uri,\n  \"uri-reference\":\n    /^(?:[a-z][a-z0-9+\\-.]*:)?(?:\\/?\\/(?:(?:[a-z0-9\\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\\.[a-z0-9\\-._~!$&'()*+,;=:]+)\\]|(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)|(?:[a-z0-9\\-._~!$&'\"()*+,;=]|%[0-9a-f]{2})*)(?::\\d*)?(?:\\/(?:[a-z0-9\\-._~!$&'\"()*+,;=:@]|%[0-9a-f]{2})*)*|\\/(?:(?:[a-z0-9\\-._~!$&'\"()*+,;=:@]|%[0-9a-f]{2})+(?:\\/(?:[a-z0-9\\-._~!$&'\"()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\\-._~!$&'\"()*+,;=:@]|%[0-9a-f]{2})+(?:\\/(?:[a-z0-9\\-._~!$&'\"()*+,;=:@]|%[0-9a-f]{2})*)*)?(?:\\?(?:[a-z0-9\\-._~!$&'\"()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\\-._~!$&'\"()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i,\n  // uri-template: https://tools.ietf.org/html/rfc6570\n  \"uri-template\":\n    /^(?:(?:[^\\x00-\\x20\"'<>%\\\\^`{|}]|%[0-9a-f]{2})|\\{[+#./;?&=,!@|]?(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\\*)?(?:,(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\\*)?)*\\})*$/i,\n  // For the source: https://gist.github.com/dperini/729294\n  // For test cases: https://mathiasbynens.be/demo/url-regex\n  url: /^(?:https?|ftp):\\/\\/(?:\\S+(?::\\S*)?@)?(?:(?!(?:10|127)(?:\\.\\d{1,3}){3})(?!(?:169\\.254|192\\.168)(?:\\.\\d{1,3}){2})(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z0-9\\u{00a1}-\\u{ffff}]+-)*[a-z0-9\\u{00a1}-\\u{ffff}]+)(?:\\.(?:[a-z0-9\\u{00a1}-\\u{ffff}]+-)*[a-z0-9\\u{00a1}-\\u{ffff}]+)*(?:\\.(?:[a-z\\u{00a1}-\\u{ffff}]{2,})))(?::\\d{2,5})?(?:\\/[^\\s]*)?$/iu,\n  email:\n    /^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i,\n  hostname:\n    /^(?=.{1,253}\\.?$)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[-0-9a-z]{0,61}[0-9a-z])?)*\\.?$/i,\n  // optimized https://www.safaribooksonline.com/library/view/regular-expressions-cookbook/9780596802837/ch07s16.html\n  ipv4: /^(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)$/,\n  ipv6: /^((([0-9a-f]{1,4}:){7}([0-9a-f]{1,4}|:))|(([0-9a-f]{1,4}:){6}(:[0-9a-f]{1,4}|((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9a-f]{1,4}:){5}(((:[0-9a-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9a-f]{1,4}:){4}(((:[0-9a-f]{1,4}){1,3})|((:[0-9a-f]{1,4})?:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9a-f]{1,4}:){3}(((:[0-9a-f]{1,4}){1,4})|((:[0-9a-f]{1,4}){0,2}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9a-f]{1,4}:){2}(((:[0-9a-f]{1,4}){1,5})|((:[0-9a-f]{1,4}){0,3}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9a-f]{1,4}:){1}(((:[0-9a-f]{1,4}){1,6})|((:[0-9a-f]{1,4}){0,4}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(:(((:[0-9a-f]{1,4}){1,7})|((:[0-9a-f]{1,4}){0,5}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))$/i,\n  regex,\n  // uuid: http://tools.ietf.org/html/rfc4122\n  uuid: /^(?:urn:uuid:)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i,\n  // JSON-pointer: https://tools.ietf.org/html/rfc6901\n  // uri fragment: https://tools.ietf.org/html/rfc3986#appendix-A\n  \"json-pointer\": /^(?:\\/(?:[^~/]|~0|~1)*)*$/,\n  \"json-pointer-uri-fragment\": /^#(?:\\/(?:[a-z0-9_\\-.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)*)*$/i,\n  // relative JSON-pointer: http://tools.ietf.org/html/draft-luff-relative-json-pointer-00\n  \"relative-json-pointer\": /^(?:0|[1-9][0-9]*)(?:#|(?:\\/(?:[^~/]|~0|~1)*)*)$/,\n  // the following formats are used by the openapi specification: https://spec.openapis.org/oas/v3.0.0#data-types\n  // byte: https://github.com/miguelmota/is-base64\n  byte,\n  // signed 32 bit integer\n  int32: {type: \"number\", validate: validateInt32},\n  // signed 64 bit integer\n  int64: {type: \"number\", validate: validateInt64},\n  // C-type float\n  float: {type: \"number\", validate: validateNumber},\n  // C-type double\n  double: {type: \"number\", validate: validateNumber},\n  // hint to the UI to hide input strings\n  password: true,\n  // unchecked string payload\n  binary: true,\n}\n\nexport const fastFormats: DefinedFormats = {\n  ...fullFormats,\n  date: fmtDef(/^\\d\\d\\d\\d-[0-1]\\d-[0-3]\\d$/, compareDate),\n  time: fmtDef(\n    /^(?:[0-2]\\d:[0-5]\\d:[0-5]\\d|23:59:60)(?:\\.\\d+)?(?:z|[+-]\\d\\d(?::?\\d\\d)?)$/i,\n    compareTime\n  ),\n  \"date-time\": fmtDef(\n    /^\\d\\d\\d\\d-[0-1]\\d-[0-3]\\dt(?:[0-2]\\d:[0-5]\\d:[0-5]\\d|23:59:60)(?:\\.\\d+)?(?:z|[+-]\\d\\d(?::?\\d\\d)?)$/i,\n    compareDateTime\n  ),\n  \"iso-time\": fmtDef(\n    /^(?:[0-2]\\d:[0-5]\\d:[0-5]\\d|23:59:60)(?:\\.\\d+)?(?:z|[+-]\\d\\d(?::?\\d\\d)?)?$/i,\n    compareIsoTime\n  ),\n  \"iso-date-time\": fmtDef(\n    /^\\d\\d\\d\\d-[0-1]\\d-[0-3]\\d[t\\s](?:[0-2]\\d:[0-5]\\d:[0-5]\\d|23:59:60)(?:\\.\\d+)?(?:z|[+-]\\d\\d(?::?\\d\\d)?)?$/i,\n    compareIsoDateTime\n  ),\n  // uri: https://github.com/mafintosh/is-my-json-valid/blob/master/formats.js\n  uri: /^(?:[a-z][a-z0-9+\\-.]*:)(?:\\/?\\/)?[^\\s]*$/i,\n  \"uri-reference\": /^(?:(?:[a-z][a-z0-9+\\-.]*:)?\\/?\\/)?(?:[^\\\\\\s#][^\\s#]*)?(?:#[^\\\\\\s]*)?$/i,\n  // email (sources from jsen validator):\n  // http://stackoverflow.com/questions/201323/using-a-regular-expression-to-validate-an-email-address#answer-8829363\n  // http://www.w3.org/TR/html5/forms.html#valid-e-mail-address (search for 'wilful violation')\n  email:\n    /^[a-z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i,\n}\n\nexport const formatNames = Object.keys(fullFormats) as FormatName[]\n\nfunction isLeapYear(year: number): boolean {\n  // https://tools.ietf.org/html/rfc3339#appendix-C\n  return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0)\n}\n\nconst DATE = /^(\\d\\d\\d\\d)-(\\d\\d)-(\\d\\d)$/\nconst DAYS = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\n\nfunction date(str: string): boolean {\n  // full-date from http://tools.ietf.org/html/rfc3339#section-5.6\n  const matches: string[] | null = DATE.exec(str)\n  if (!matches) return false\n  const year: number = +matches[1]\n  const month: number = +matches[2]\n  const day: number = +matches[3]\n  return (\n    month >= 1 &&\n    month <= 12 &&\n    day >= 1 &&\n    day <= (month === 2 && isLeapYear(year) ? 29 : DAYS[month])\n  )\n}\n\nfunction compareDate(d1: string, d2: string): number | undefined {\n  if (!(d1 && d2)) return undefined\n  if (d1 > d2) return 1\n  if (d1 < d2) return -1\n  return 0\n}\n\nconst TIME = /^(\\d\\d):(\\d\\d):(\\d\\d(?:\\.\\d+)?)(z|([+-])(\\d\\d)(?::?(\\d\\d))?)?$/i\n\nfunction getTime(strictTimeZone?: boolean): (str: string) => boolean {\n  return function time(str: string): boolean {\n    const matches: string[] | null = TIME.exec(str)\n    if (!matches) return false\n    const hr: number = +matches[1]\n    const min: number = +matches[2]\n    const sec: number = +matches[3]\n    const tz: string | undefined = matches[4]\n    const tzSign: number = matches[5] === \"-\" ? -1 : 1\n    const tzH: number = +(matches[6] || 0)\n    const tzM: number = +(matches[7] || 0)\n    if (tzH > 23 || tzM > 59 || (strictTimeZone && !tz)) return false\n    if (hr <= 23 && min <= 59 && sec < 60) return true\n    // leap second\n    const utcMin = min - tzM * tzSign\n    const utcHr = hr - tzH * tzSign - (utcMin < 0 ? 1 : 0)\n    return (utcHr === 23 || utcHr === -1) && (utcMin === 59 || utcMin === -1) && sec < 61\n  }\n}\n\nfunction compareTime(s1: string, s2: string): number | undefined {\n  if (!(s1 && s2)) return undefined\n  const t1 = new Date(\"2020-01-01T\" + s1).valueOf()\n  const t2 = new Date(\"2020-01-01T\" + s2).valueOf()\n  if (!(t1 && t2)) return undefined\n  return t1 - t2\n}\n\nfunction compareIsoTime(t1: string, t2: string): number | undefined {\n  if (!(t1 && t2)) return undefined\n  const a1 = TIME.exec(t1)\n  const a2 = TIME.exec(t2)\n  if (!(a1 && a2)) return undefined\n  t1 = a1[1] + a1[2] + a1[3]\n  t2 = a2[1] + a2[2] + a2[3]\n  if (t1 > t2) return 1\n  if (t1 < t2) return -1\n  return 0\n}\n\nconst DATE_TIME_SEPARATOR = /t|\\s/i\nfunction getDateTime(strictTimeZone?: boolean): (str: string) => boolean {\n  const time = getTime(strictTimeZone)\n\n  return function date_time(str: string): boolean {\n    // http://tools.ietf.org/html/rfc3339#section-5.6\n    const dateTime: string[] = str.split(DATE_TIME_SEPARATOR)\n    return dateTime.length === 2 && date(dateTime[0]) && time(dateTime[1])\n  }\n}\n\nfunction compareDateTime(dt1: string, dt2: string): number | undefined {\n  if (!(dt1 && dt2)) return undefined\n  const d1 = new Date(dt1).valueOf()\n  const d2 = new Date(dt2).valueOf()\n  if (!(d1 && d2)) return undefined\n  return d1 - d2\n}\n\nfunction compareIsoDateTime(dt1: string, dt2: string): number | undefined {\n  if (!(dt1 && dt2)) return undefined\n  const [d1, t1] = dt1.split(DATE_TIME_SEPARATOR)\n  const [d2, t2] = dt2.split(DATE_TIME_SEPARATOR)\n  const res = compareDate(d1, d2)\n  if (res === undefined) return undefined\n  return res || compareTime(t1, t2)\n}\n\nconst NOT_URI_FRAGMENT = /\\/|:/\nconst URI =\n  /^(?:[a-z][a-z0-9+\\-.]*:)(?:\\/?\\/(?:(?:[a-z0-9\\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\\.[a-z0-9\\-._~!$&'()*+,;=:]+)\\]|(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)|(?:[a-z0-9\\-._~!$&'()*+,;=]|%[0-9a-f]{2})*)(?::\\d*)?(?:\\/(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*|\\/(?:(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\\/(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\\/(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)(?:\\?(?:[a-z0-9\\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i\n\nfunction uri(str: string): boolean {\n  // http://jmrware.com/articles/2009/uri_regexp/URI_regex.html + optional protocol + required \".\"\n  return NOT_URI_FRAGMENT.test(str) && URI.test(str)\n}\n\nconst BYTE = /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/gm\n\nfunction byte(str: string): boolean {\n  BYTE.lastIndex = 0\n  return BYTE.test(str)\n}\n\nconst MIN_INT32 = -(2 ** 31)\nconst MAX_INT32 = 2 ** 31 - 1\n\nfunction validateInt32(value: number): boolean {\n  return Number.isInteger(value) && value <= MAX_INT32 && value >= MIN_INT32\n}\n\nfunction validateInt64(value: number): boolean {\n  // JSON and javascript max Int is 2**53, so any int that passes isInteger is valid for Int64\n  return Number.isInteger(value)\n}\n\nfunction validateNumber(): boolean {\n  return true\n}\n\nconst Z_ANCHOR = /[^\\\\]\\\\Z/\nfunction regex(str: string): boolean {\n  if (Z_ANCHOR.test(str)) return false\n  try {\n    new RegExp(str)\n    return true\n  } catch (e) {\n    return false\n  }\n}\n", "import type Ajv from \"ajv\"\nimport type {\n  Plugin,\n  CodeKeywordDefinition,\n  KeywordErrorDefinition,\n  Code,\n  Name,\n  ErrorObject,\n} from \"ajv\"\nimport type {AddedFormat} from \"ajv/dist/types\"\nimport type {Rule} from \"ajv/dist/compile/rules\"\nimport {KeywordCxt} from \"ajv\"\nimport {_, str, or, getProperty, operators} from \"ajv/dist/compile/codegen\"\n\ntype Kwd = \"formatMaximum\" | \"formatMinimum\" | \"formatExclusiveMaximum\" | \"formatExclusiveMinimum\"\n\ntype Comparison = \"<=\" | \">=\" | \"<\" | \">\"\n\nconst ops = operators\n\nconst KWDs: {[K in Kwd]: {okStr: Comparison; ok: Code; fail: Code}} = {\n  formatMaximum: {okStr: \"<=\", ok: ops.LTE, fail: ops.GT},\n  formatMinimum: {okStr: \">=\", ok: ops.GTE, fail: ops.LT},\n  formatExclusiveMaximum: {okStr: \"<\", ok: ops.LT, fail: ops.GTE},\n  formatExclusiveMinimum: {okStr: \">\", ok: ops.GT, fail: ops.LTE},\n}\n\nexport type LimitFormatError = ErrorObject<Kwd, {limit: string; comparison: Comparison}>\n\nconst error: KeywordErrorDefinition = {\n  message: ({keyword, schemaCode}) => str`should be ${KWDs[keyword as Kwd].okStr} ${schemaCode}`,\n  params: ({keyword, schemaCode}) =>\n    _`{comparison: ${KWDs[keyword as Kwd].okStr}, limit: ${schemaCode}}`,\n}\n\nexport const formatLimitDefinition: CodeKeywordDefinition = {\n  keyword: Object.keys(KWDs),\n  type: \"string\",\n  schemaType: \"string\",\n  $data: true,\n  error,\n  code(cxt) {\n    const {gen, data, schemaCode, keyword, it} = cxt\n    const {opts, self} = it\n    if (!opts.validateFormats) return\n\n    const fCxt = new KeywordCxt(it, (self.RULES.all.format as Rule).definition, \"format\")\n    if (fCxt.$data) validate$DataFormat()\n    else validateFormat()\n\n    function validate$DataFormat(): void {\n      const fmts = gen.scopeValue(\"formats\", {\n        ref: self.formats,\n        code: opts.code.formats,\n      })\n      const fmt = gen.const(\"fmt\", _`${fmts}[${fCxt.schemaCode}]`)\n      cxt.fail$data(\n        or(\n          _`typeof ${fmt} != \"object\"`,\n          _`${fmt} instanceof RegExp`,\n          _`typeof ${fmt}.compare != \"function\"`,\n          compareCode(fmt)\n        )\n      )\n    }\n\n    function validateFormat(): void {\n      const format = fCxt.schema as string\n      const fmtDef: AddedFormat | undefined = self.formats[format]\n      if (!fmtDef || fmtDef === true) return\n      if (\n        typeof fmtDef != \"object\" ||\n        fmtDef instanceof RegExp ||\n        typeof fmtDef.compare != \"function\"\n      ) {\n        throw new Error(`\"${keyword}\": format \"${format}\" does not define \"compare\" function`)\n      }\n      const fmt = gen.scopeValue(\"formats\", {\n        key: format,\n        ref: fmtDef,\n        code: opts.code.formats ? _`${opts.code.formats}${getProperty(format)}` : undefined,\n      })\n\n      cxt.fail$data(compareCode(fmt))\n    }\n\n    function compareCode(fmt: Name): Code {\n      return _`${fmt}.compare(${data}, ${schemaCode}) ${KWDs[keyword as Kwd].fail} 0`\n    }\n  },\n  dependencies: [\"format\"],\n}\n\nconst formatLimitPlugin: Plugin<undefined> = (ajv: Ajv): Ajv => {\n  ajv.addKeyword(formatLimitDefinition)\n  return ajv\n}\n\nexport default formatLimitPlugin\n", "import {\n  DefinedFormats,\n  FormatMode,\n  FormatName,\n  formatNames,\n  fastFormats,\n  fullFormats,\n} from \"./formats\"\nimport formatLimit from \"./limit\"\nimport type Ajv from \"ajv\"\nimport type {Plugin, Format} from \"ajv\"\nimport {_, Name} from \"ajv/dist/compile/codegen\"\n\nexport {FormatMode, FormatName} from \"./formats\"\nexport {LimitFormatError} from \"./limit\"\nexport interface FormatOptions {\n  mode?: FormatMode\n  formats?: FormatName[]\n  keywords?: boolean\n}\n\nexport type FormatsPluginOptions = FormatName[] | FormatOptions\n\nexport interface FormatsPlugin extends Plugin<FormatsPluginOptions> {\n  get: (format: FormatName, mode?: FormatMode) => Format\n}\n\nconst fullName = new Name(\"fullFormats\")\nconst fastName = new Name(\"fastFormats\")\n\nconst formatsPlugin: FormatsPlugin = (\n  ajv: Ajv,\n  opts: FormatsPluginOptions = {keywords: true}\n): Ajv => {\n  if (Array.isArray(opts)) {\n    addFormats(ajv, opts, fullFormats, fullName)\n    return ajv\n  }\n  const [formats, exportName] =\n    opts.mode === \"fast\" ? [fastFormats, fastName] : [fullFormats, fullName]\n  const list = opts.formats || formatNames\n  addFormats(ajv, list, formats, exportName)\n  if (opts.keywords) formatLimit(ajv)\n  return ajv\n}\n\nformatsPlugin.get = (name: FormatName, mode: FormatMode = \"full\"): Format => {\n  const formats = mode === \"fast\" ? fastFormats : fullFormats\n  const f = formats[name]\n  if (!f) throw new Error(`Unknown format \"${name}\"`)\n  return f\n}\n\nfunction addFormats(ajv: Ajv, list: FormatName[], fs: DefinedFormats, exportName: Name): void {\n  ajv.opts.code.formats ??= _`require(\"ajv-formats/dist/formats\").${exportName}`\n  for (const f of list) ajv.addFormat(f, fs[f])\n}\n\nmodule.exports = exports = formatsPlugin\nObject.defineProperty(exports, \"__esModule\", {value: true})\n\nexport default formatsPlugin\n", "'use strict'\n\nmodule.exports = {\n  kClose: Symbol('close'),\n  kDestroy: Symbol('destroy'),\n  kDispatch: Symbol('dispatch'),\n  kUrl: Symbol('url'),\n  kWriting: Symbol('writing'),\n  kResuming: Symbol('resuming'),\n  kQueue: Symbol('queue'),\n  kConnect: Symbol('connect'),\n  kConnecting: Symbol('connecting'),\n  kKeepAliveDefaultTimeout: Symbol('default keep alive timeout'),\n  kKeepAliveMaxTimeout: Symbol('max keep alive timeout'),\n  kKeepAliveTimeoutThreshold: Symbol('keep alive timeout threshold'),\n  kKeepAliveTimeoutValue: Symbol('keep alive timeout'),\n  kKeepAlive: Symbol('keep alive'),\n  kHeadersTimeout: Symbol('headers timeout'),\n  kBodyTimeout: Symbol('body timeout'),\n  kServerName: Symbol('server name'),\n  kLocalAddress: Symbol('local address'),\n  kHost: Symbol('host'),\n  kNoRef: Symbol('no ref'),\n  kBodyUsed: Symbol('used'),\n  kBody: Symbol('abstracted request body'),\n  kRunning: Symbol('running'),\n  kBlocking: Symbol('blocking'),\n  kPending: Symbol('pending'),\n  kSize: Symbol('size'),\n  kBusy: Symbol('busy'),\n  kQueued: Symbol('queued'),\n  kFree: Symbol('free'),\n  kConnected: Symbol('connected'),\n  kClosed: Symbol('closed'),\n  kNeedDrain: Symbol('need drain'),\n  kReset: Symbol('reset'),\n  kDestroyed: Symbol.for('nodejs.stream.destroyed'),\n  kResume: Symbol('resume'),\n  kOnError: Symbol('on error'),\n  kMaxHeadersSize: Symbol('max headers size'),\n  kRunningIdx: Symbol('running index'),\n  kPendingIdx: Symbol('pending index'),\n  kError: Symbol('error'),\n  kClients: Symbol('clients'),\n  kClient: Symbol('client'),\n  kParser: Symbol('parser'),\n  kOnDestroyed: Symbol('destroy callbacks'),\n  kPipelining: Symbol('pipelining'),\n  kSocket: Symbol('socket'),\n  kHostHeader: Symbol('host header'),\n  kConnector: Symbol('connector'),\n  kStrictContentLength: Symbol('strict content length'),\n  kMaxRedirections: Symbol('maxRedirections'),\n  kMaxRequests: Symbol('maxRequestsPerClient'),\n  kProxy: Symbol('proxy agent options'),\n  kCounter: Symbol('socket request counter'),\n  kMaxResponseSize: Symbol('max response size'),\n  kHTTP2Session: Symbol('http2Session'),\n  kHTTP2SessionState: Symbol('http2Session state'),\n  kRetryHandlerDefaultRetry: Symbol('retry agent default retry'),\n  kConstruct: Symbol('constructable'),\n  kListeners: Symbol('listeners'),\n  kHTTPContext: Symbol('http context'),\n  kMaxConcurrentStreams: Symbol('max concurrent streams'),\n  kHTTP2InitialWindowSize: Symbol('http2 initial window size'),\n  kHTTP2ConnectionWindowSize: Symbol('http2 connection window size'),\n  kEnableConnectProtocol: Symbol('http2session connect protocol'),\n  kRemoteSettings: Symbol('http2session remote settings'),\n  kHTTP2Stream: Symbol('http2session client stream'),\n  kPingInterval: Symbol('ping interval'),\n  kNoProxyAgent: Symbol('no proxy agent'),\n  kHttpProxyAgent: Symbol('http proxy agent'),\n  kHttpsProxyAgent: Symbol('https proxy agent'),\n  kSocks5ProxyAgent: Symbol('socks5 proxy agent')\n}\n", "'use strict'\n\n/**\n * This module offers an optimized timer implementation designed for scenarios\n * where high precision is not critical.\n *\n * The timer achieves faster performance by using a low-resolution approach,\n * with an accuracy target of within 500ms. This makes it particularly useful\n * for timers with delays of 1 second or more, where exact timing is less\n * crucial.\n *\n * It's important to note that Node.js timers are inherently imprecise, as\n * delays can occur due to the event loop being blocked by other operations.\n * Consequently, timers may trigger later than their scheduled time.\n */\n\n/**\n * The fastNow variable contains the internal fast timer clock value.\n *\n * @type {number}\n */\nlet fastNow = 0\n\n/**\n * RESOLUTION_MS represents the target resolution time in milliseconds.\n *\n * @type {number}\n * @default 1000\n */\nconst RESOLUTION_MS = 1e3\n\n/**\n * TICK_MS defines the desired interval in milliseconds between each tick.\n * The target value is set to half the resolution time, minus 1 ms, to account\n * for potential event loop overhead.\n *\n * @type {number}\n * @default 499\n */\nconst TICK_MS = (RESOLUTION_MS >> 1) - 1\n\n/**\n * fastNowTimeout is a Node.js timer used to manage and process\n * the FastTimers stored in the `fastTimers` array.\n *\n * @type {NodeJS.Timeout}\n */\nlet fastNowTimeout\n\n/**\n * The kFastTimer symbol is used to identify FastTimer instances.\n *\n * @type {Symbol}\n */\nconst kFastTimer = Symbol('kFastTimer')\n\n/**\n * The fastTimers array contains all active FastTimers.\n *\n * @type {FastTimer[]}\n */\nconst fastTimers = []\n\n/**\n * These constants represent the various states of a FastTimer.\n */\n\n/**\n * The `NOT_IN_LIST` constant indicates that the FastTimer is not included\n * in the `fastTimers` array. Timers with this status will not be processed\n * during the next tick by the `onTick` function.\n *\n * A FastTimer can be re-added to the `fastTimers` array by invoking the\n * `refresh` method on the FastTimer instance.\n *\n * @type {-2}\n */\nconst NOT_IN_LIST = -2\n\n/**\n * The `TO_BE_CLEARED` constant indicates that the FastTimer is scheduled\n * for removal from the `fastTimers` array. A FastTimer in this state will\n * be removed in the next tick by the `onTick` function and will no longer\n * be processed.\n *\n * This status is also set when the `clear` method is called on the FastTimer instance.\n *\n * @type {-1}\n */\nconst TO_BE_CLEARED = -1\n\n/**\n * The `PENDING` constant signifies that the FastTimer is awaiting processing\n * in the next tick by the `onTick` function. Timers with this status will have\n * their `_idleStart` value set and their status updated to `ACTIVE` in the next tick.\n *\n * @type {0}\n */\nconst PENDING = 0\n\n/**\n * The `ACTIVE` constant indicates that the FastTimer is active and waiting\n * for its timer to expire. During the next tick, the `onTick` function will\n * check if the timer has expired, and if so, it will execute the associated callback.\n *\n * @type {1}\n */\nconst ACTIVE = 1\n\n/**\n * The onTick function processes the fastTimers array.\n *\n * @returns {void}\n */\nfunction onTick () {\n  /**\n   * Increment the fastNow value by the TICK_MS value, despite the actual time\n   * that has passed since the last tick. This approach ensures independence\n   * from the system clock and delays caused by a blocked event loop.\n   *\n   * @type {number}\n   */\n  fastNow += TICK_MS\n\n  /**\n   * The `idx` variable is used to iterate over the `fastTimers` array.\n   * Expired timers are removed by replacing them with the last element in the array.\n   * Consequently, `idx` is only incremented when the current element is not removed.\n   *\n   * @type {number}\n   */\n  let idx = 0\n\n  /**\n   * The len variable will contain the length of the fastTimers array\n   * and will be decremented when a FastTimer should be removed from the\n   * fastTimers array.\n   *\n   * @type {number}\n   */\n  let len = fastTimers.length\n\n  while (idx < len) {\n    /**\n     * @type {FastTimer}\n     */\n    const timer = fastTimers[idx]\n\n    // If the timer is in the ACTIVE state and the timer has expired, it will\n    // be processed in the next tick.\n    if (timer._state === PENDING) {\n      // Set the _idleStart value to the fastNow value minus the TICK_MS value\n      // to account for the time the timer was in the PENDING state.\n      timer._idleStart = fastNow - TICK_MS\n      timer._state = ACTIVE\n    } else if (\n      timer._state === ACTIVE &&\n      fastNow >= timer._idleStart + timer._idleTimeout\n    ) {\n      timer._state = TO_BE_CLEARED\n      timer._idleStart = -1\n      timer._onTimeout(timer._timerArg)\n    }\n\n    if (timer._state === TO_BE_CLEARED) {\n      timer._state = NOT_IN_LIST\n\n      // Move the last element to the current index and decrement len if it is\n      // not the only element in the array.\n      if (--len !== 0) {\n        fastTimers[idx] = fastTimers[len]\n      }\n    } else {\n      ++idx\n    }\n  }\n\n  // Set the length of the fastTimers array to the new length and thus\n  // removing the excess FastTimers elements from the array.\n  fastTimers.length = len\n\n  // If there are still active FastTimers in the array, refresh the Timer.\n  // If there are no active FastTimers, the timer will be refreshed again\n  // when a new FastTimer is instantiated.\n  if (fastTimers.length !== 0) {\n    refreshTimeout()\n  }\n}\n\nfunction refreshTimeout () {\n  // If the fastNowTimeout is already set and the Timer has the refresh()-\n  // method available, call it to refresh the timer.\n  // Some timer objects returned by setTimeout may not have a .refresh()\n  // method (e.g. mocked timers in tests).\n  if (fastNowTimeout?.refresh) {\n    fastNowTimeout.refresh()\n    // fastNowTimeout is not instantiated yet or refresh is not availabe,\n    // create a new Timer.\n  } else {\n    clearTimeout(fastNowTimeout)\n    fastNowTimeout = setTimeout(onTick, TICK_MS)\n    // If the Timer has an unref method, call it to allow the process to exit,\n    // if there are no other active handles. When using fake timers or mocked\n    // environments (like Jest), .unref() may not be defined,\n    fastNowTimeout?.unref()\n  }\n}\n\n/**\n * The `FastTimer` class is a data structure designed to store and manage\n * timer information.\n */\nclass FastTimer {\n  [kFastTimer] = true\n\n  /**\n   * The state of the timer, which can be one of the following:\n   * - NOT_IN_LIST (-2)\n   * - TO_BE_CLEARED (-1)\n   * - PENDING (0)\n   * - ACTIVE (1)\n   *\n   * @type {-2|-1|0|1}\n   * @private\n   */\n  _state = NOT_IN_LIST\n\n  /**\n   * The number of milliseconds to wait before calling the callback.\n   *\n   * @type {number}\n   * @private\n   */\n  _idleTimeout = -1\n\n  /**\n   * The time in milliseconds when the timer was started. This value is used to\n   * calculate when the timer should expire.\n   *\n   * @type {number}\n   * @default -1\n   * @private\n   */\n  _idleStart = -1\n\n  /**\n   * The function to be executed when the timer expires.\n   * @type {Function}\n   * @private\n   */\n  _onTimeout\n\n  /**\n   * The argument to be passed to the callback when the timer expires.\n   *\n   * @type {*}\n   * @private\n   */\n  _timerArg\n\n  /**\n   * @constructor\n   * @param {Function} callback A function to be executed after the timer\n   * expires.\n   * @param {number} delay The time, in milliseconds that the timer should wait\n   * before the specified function or code is executed.\n   * @param {*} arg\n   */\n  constructor (callback, delay, arg) {\n    this._onTimeout = callback\n    this._idleTimeout = delay\n    this._timerArg = arg\n\n    this.refresh()\n  }\n\n  /**\n   * Sets the timer's start time to the current time, and reschedules the timer\n   * to call its callback at the previously specified duration adjusted to the\n   * current time.\n   * Using this on a timer that has already called its callback will reactivate\n   * the timer.\n   *\n   * @returns {void}\n   */\n  refresh () {\n    // In the special case that the timer is not in the list of active timers,\n    // add it back to the array to be processed in the next tick by the onTick\n    // function.\n    if (this._state === NOT_IN_LIST) {\n      fastTimers.push(this)\n    }\n\n    // If the timer is the only active timer, refresh the fastNowTimeout for\n    // better resolution.\n    if (!fastNowTimeout || fastTimers.length === 1) {\n      refreshTimeout()\n    }\n\n    // Setting the state to PENDING will cause the timer to be reset in the\n    // next tick by the onTick function.\n    this._state = PENDING\n  }\n\n  /**\n   * The `clear` method cancels the timer, preventing it from executing.\n   *\n   * @returns {void}\n   * @private\n   */\n  clear () {\n    // Set the state to TO_BE_CLEARED to mark the timer for removal in the next\n    // tick by the onTick function.\n    this._state = TO_BE_CLEARED\n\n    // Reset the _idleStart value to -1 to indicate that the timer is no longer\n    // active.\n    this._idleStart = -1\n  }\n}\n\n/**\n * This module exports a setTimeout and clearTimeout function that can be\n * used as a drop-in replacement for the native functions.\n */\nmodule.exports = {\n  /**\n   * The setTimeout() method sets a timer which executes a function once the\n   * timer expires.\n   * @param {Function} callback A function to be executed after the timer\n   * expires.\n   * @param {number} delay The time, in milliseconds that the timer should\n   * wait before the specified function or code is executed.\n   * @param {*} [arg] An optional argument to be passed to the callback function\n   * when the timer expires.\n   * @returns {NodeJS.Timeout|FastTimer}\n   */\n  setTimeout (callback, delay, arg) {\n    // If the delay is less than or equal to the RESOLUTION_MS value return a\n    // native Node.js Timer instance.\n    return delay <= RESOLUTION_MS\n      ? setTimeout(callback, delay, arg)\n      : new FastTimer(callback, delay, arg)\n  },\n  /**\n   * The clearTimeout method cancels an instantiated Timer previously created\n   * by calling setTimeout.\n   *\n   * @param {NodeJS.Timeout|FastTimer} timeout\n   */\n  clearTimeout (timeout) {\n    // If the timeout is a FastTimer, call its own clear method.\n    if (timeout[kFastTimer]) {\n      /**\n       * @type {FastTimer}\n       */\n      timeout.clear()\n      // Otherwise it is an instance of a native NodeJS.Timeout, so call the\n      // Node.js native clearTimeout function.\n    } else {\n      clearTimeout(timeout)\n    }\n  },\n  /**\n   * The setFastTimeout() method sets a fastTimer which executes a function once\n   * the timer expires.\n   * @param {Function} callback A function to be executed after the timer\n   * expires.\n   * @param {number} delay The time, in milliseconds that the timer should\n   * wait before the specified function or code is executed.\n   * @param {*} [arg] An optional argument to be passed to the callback function\n   * when the timer expires.\n   * @returns {FastTimer}\n   */\n  setFastTimeout (callback, delay, arg) {\n    return new FastTimer(callback, delay, arg)\n  },\n  /**\n   * The clearTimeout method cancels an instantiated FastTimer previously\n   * created by calling setFastTimeout.\n   *\n   * @param {FastTimer} timeout\n   */\n  clearFastTimeout (timeout) {\n    timeout.clear()\n  },\n  /**\n   * The now method returns the value of the internal fast timer clock.\n   *\n   * @returns {number}\n   */\n  now () {\n    return fastNow\n  },\n  /**\n   * Trigger the onTick function to process the fastTimers array.\n   * Exported for testing purposes only.\n   * Marking as deprecated to discourage any use outside of testing.\n   * @deprecated\n   * @param {number} [delay=0] The delay in milliseconds to add to the now value.\n   */\n  tick (delay = 0) {\n    fastNow += delay - RESOLUTION_MS + 1\n    onTick()\n    onTick()\n  },\n  /**\n   * Reset FastTimers.\n   * Exported for testing purposes only.\n   * Marking as deprecated to discourage any use outside of testing.\n   * @deprecated\n   */\n  reset () {\n    fastNow = 0\n    fastTimers.length = 0\n    clearTimeout(fastNowTimeout)\n    fastNowTimeout = null\n  },\n  /**\n   * Exporting for testing purposes only.\n   * Marking as deprecated to discourage any use outside of testing.\n   * @deprecated\n   */\n  kFastTimer\n}\n", "'use strict'\n\nconst kUndiciError = Symbol.for('undici.error.UND_ERR')\nclass UndiciError extends Error {\n  constructor (message, options) {\n    super(message, options)\n    this.name = 'UndiciError'\n    this.code = 'UND_ERR'\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kUndiciError] === true\n  }\n\n  get [kUndiciError] () {\n    return true\n  }\n}\n\nconst kConnectTimeoutError = Symbol.for('undici.error.UND_ERR_CONNECT_TIMEOUT')\nclass ConnectTimeoutError extends UndiciError {\n  constructor (message) {\n    super(message)\n    this.name = 'ConnectTimeoutError'\n    this.message = message || 'Connect Timeout Error'\n    this.code = 'UND_ERR_CONNECT_TIMEOUT'\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kConnectTimeoutError] === true\n  }\n\n  get [kConnectTimeoutError] () {\n    return true\n  }\n}\n\nconst kHeadersTimeoutError = Symbol.for('undici.error.UND_ERR_HEADERS_TIMEOUT')\nclass HeadersTimeoutError extends UndiciError {\n  constructor (message) {\n    super(message)\n    this.name = 'HeadersTimeoutError'\n    this.message = message || 'Headers Timeout Error'\n    this.code = 'UND_ERR_HEADERS_TIMEOUT'\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kHeadersTimeoutError] === true\n  }\n\n  get [kHeadersTimeoutError] () {\n    return true\n  }\n}\n\nconst kHeadersOverflowError = Symbol.for('undici.error.UND_ERR_HEADERS_OVERFLOW')\nclass HeadersOverflowError extends UndiciError {\n  constructor (message) {\n    super(message)\n    this.name = 'HeadersOverflowError'\n    this.message = message || 'Headers Overflow Error'\n    this.code = 'UND_ERR_HEADERS_OVERFLOW'\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kHeadersOverflowError] === true\n  }\n\n  get [kHeadersOverflowError] () {\n    return true\n  }\n}\n\nconst kBodyTimeoutError = Symbol.for('undici.error.UND_ERR_BODY_TIMEOUT')\nclass BodyTimeoutError extends UndiciError {\n  constructor (message) {\n    super(message)\n    this.name = 'BodyTimeoutError'\n    this.message = message || 'Body Timeout Error'\n    this.code = 'UND_ERR_BODY_TIMEOUT'\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kBodyTimeoutError] === true\n  }\n\n  get [kBodyTimeoutError] () {\n    return true\n  }\n}\n\nconst kInvalidArgumentError = Symbol.for('undici.error.UND_ERR_INVALID_ARG')\nclass InvalidArgumentError extends UndiciError {\n  constructor (message) {\n    super(message)\n    this.name = 'InvalidArgumentError'\n    this.message = message || 'Invalid Argument Error'\n    this.code = 'UND_ERR_INVALID_ARG'\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kInvalidArgumentError] === true\n  }\n\n  get [kInvalidArgumentError] () {\n    return true\n  }\n}\n\nconst kInvalidReturnValueError = Symbol.for('undici.error.UND_ERR_INVALID_RETURN_VALUE')\nclass InvalidReturnValueError extends UndiciError {\n  constructor (message) {\n    super(message)\n    this.name = 'InvalidReturnValueError'\n    this.message = message || 'Invalid Return Value Error'\n    this.code = 'UND_ERR_INVALID_RETURN_VALUE'\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kInvalidReturnValueError] === true\n  }\n\n  get [kInvalidReturnValueError] () {\n    return true\n  }\n}\n\nconst kAbortError = Symbol.for('undici.error.UND_ERR_ABORT')\nclass AbortError extends UndiciError {\n  constructor (message) {\n    super(message)\n    this.name = 'AbortError'\n    this.message = message || 'The operation was aborted'\n    this.code = 'UND_ERR_ABORT'\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kAbortError] === true\n  }\n\n  get [kAbortError] () {\n    return true\n  }\n}\n\nconst kRequestAbortedError = Symbol.for('undici.error.UND_ERR_ABORTED')\nclass RequestAbortedError extends AbortError {\n  constructor (message) {\n    super(message)\n    this.name = 'AbortError'\n    this.message = message || 'Request aborted'\n    this.code = 'UND_ERR_ABORTED'\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kRequestAbortedError] === true\n  }\n\n  get [kRequestAbortedError] () {\n    return true\n  }\n}\n\nconst kInformationalError = Symbol.for('undici.error.UND_ERR_INFO')\nclass InformationalError extends UndiciError {\n  constructor (message) {\n    super(message)\n    this.name = 'InformationalError'\n    this.message = message || 'Request information'\n    this.code = 'UND_ERR_INFO'\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kInformationalError] === true\n  }\n\n  get [kInformationalError] () {\n    return true\n  }\n}\n\nconst kRequestContentLengthMismatchError = Symbol.for('undici.error.UND_ERR_REQ_CONTENT_LENGTH_MISMATCH')\nclass RequestContentLengthMismatchError extends UndiciError {\n  constructor (message) {\n    super(message)\n    this.name = 'RequestContentLengthMismatchError'\n    this.message = message || 'Request body length does not match content-length header'\n    this.code = 'UND_ERR_REQ_CONTENT_LENGTH_MISMATCH'\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kRequestContentLengthMismatchError] === true\n  }\n\n  get [kRequestContentLengthMismatchError] () {\n    return true\n  }\n}\n\nconst kResponseContentLengthMismatchError = Symbol.for('undici.error.UND_ERR_RES_CONTENT_LENGTH_MISMATCH')\nclass ResponseContentLengthMismatchError extends UndiciError {\n  constructor (message) {\n    super(message)\n    this.name = 'ResponseContentLengthMismatchError'\n    this.message = message || 'Response body length does not match content-length header'\n    this.code = 'UND_ERR_RES_CONTENT_LENGTH_MISMATCH'\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kResponseContentLengthMismatchError] === true\n  }\n\n  get [kResponseContentLengthMismatchError] () {\n    return true\n  }\n}\n\nconst kClientDestroyedError = Symbol.for('undici.error.UND_ERR_DESTROYED')\nclass ClientDestroyedError extends UndiciError {\n  constructor (message) {\n    super(message)\n    this.name = 'ClientDestroyedError'\n    this.message = message || 'The client is destroyed'\n    this.code = 'UND_ERR_DESTROYED'\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kClientDestroyedError] === true\n  }\n\n  get [kClientDestroyedError] () {\n    return true\n  }\n}\n\nconst kClientClosedError = Symbol.for('undici.error.UND_ERR_CLOSED')\nclass ClientClosedError extends UndiciError {\n  constructor (message) {\n    super(message)\n    this.name = 'ClientClosedError'\n    this.message = message || 'The client is closed'\n    this.code = 'UND_ERR_CLOSED'\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kClientClosedError] === true\n  }\n\n  get [kClientClosedError] () {\n    return true\n  }\n}\n\nconst kSocketError = Symbol.for('undici.error.UND_ERR_SOCKET')\nclass SocketError extends UndiciError {\n  constructor (message, socket) {\n    super(message)\n    this.name = 'SocketError'\n    this.message = message || 'Socket error'\n    this.code = 'UND_ERR_SOCKET'\n    this.socket = socket\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kSocketError] === true\n  }\n\n  get [kSocketError] () {\n    return true\n  }\n}\n\nconst kNotSupportedError = Symbol.for('undici.error.UND_ERR_NOT_SUPPORTED')\nclass NotSupportedError extends UndiciError {\n  constructor (message) {\n    super(message)\n    this.name = 'NotSupportedError'\n    this.message = message || 'Not supported error'\n    this.code = 'UND_ERR_NOT_SUPPORTED'\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kNotSupportedError] === true\n  }\n\n  get [kNotSupportedError] () {\n    return true\n  }\n}\n\nconst kBalancedPoolMissingUpstreamError = Symbol.for('undici.error.UND_ERR_BPL_MISSING_UPSTREAM')\nclass BalancedPoolMissingUpstreamError extends UndiciError {\n  constructor (message) {\n    super(message)\n    this.name = 'MissingUpstreamError'\n    this.message = message || 'No upstream has been added to the BalancedPool'\n    this.code = 'UND_ERR_BPL_MISSING_UPSTREAM'\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kBalancedPoolMissingUpstreamError] === true\n  }\n\n  get [kBalancedPoolMissingUpstreamError] () {\n    return true\n  }\n}\n\nconst kHTTPParserError = Symbol.for('undici.error.UND_ERR_HTTP_PARSER')\nclass HTTPParserError extends Error {\n  constructor (message, code, data) {\n    super(message)\n    this.name = 'HTTPParserError'\n    this.code = code ? `HPE_${code}` : undefined\n    this.data = data ? data.toString() : undefined\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kHTTPParserError] === true\n  }\n\n  get [kHTTPParserError] () {\n    return true\n  }\n}\n\nconst kResponseExceededMaxSizeError = Symbol.for('undici.error.UND_ERR_RES_EXCEEDED_MAX_SIZE')\nclass ResponseExceededMaxSizeError extends UndiciError {\n  constructor (message) {\n    super(message)\n    this.name = 'ResponseExceededMaxSizeError'\n    this.message = message || 'Response content exceeded max size'\n    this.code = 'UND_ERR_RES_EXCEEDED_MAX_SIZE'\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kResponseExceededMaxSizeError] === true\n  }\n\n  get [kResponseExceededMaxSizeError] () {\n    return true\n  }\n}\n\nconst kRequestRetryError = Symbol.for('undici.error.UND_ERR_REQ_RETRY')\nclass RequestRetryError extends UndiciError {\n  constructor (message, code, { headers, data }) {\n    super(message)\n    this.name = 'RequestRetryError'\n    this.message = message || 'Request retry error'\n    this.code = 'UND_ERR_REQ_RETRY'\n    this.statusCode = code\n    this.data = data\n    this.headers = headers\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kRequestRetryError] === true\n  }\n\n  get [kRequestRetryError] () {\n    return true\n  }\n}\n\nconst kResponseError = Symbol.for('undici.error.UND_ERR_RESPONSE')\nclass ResponseError extends UndiciError {\n  constructor (message, code, { headers, body }) {\n    super(message)\n    this.name = 'ResponseError'\n    this.message = message || 'Response error'\n    this.code = 'UND_ERR_RESPONSE'\n    this.statusCode = code\n    this.body = body\n    this.headers = headers\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kResponseError] === true\n  }\n\n  get [kResponseError] () {\n    return true\n  }\n}\n\nconst kSecureProxyConnectionError = Symbol.for('undici.error.UND_ERR_PRX_TLS')\nclass SecureProxyConnectionError extends UndiciError {\n  constructor (cause, message, options = {}) {\n    super(message, { cause, ...options })\n    this.name = 'SecureProxyConnectionError'\n    this.message = message || 'Secure Proxy Connection failed'\n    this.code = 'UND_ERR_PRX_TLS'\n    this.cause = cause\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kSecureProxyConnectionError] === true\n  }\n\n  get [kSecureProxyConnectionError] () {\n    return true\n  }\n}\n\nconst kMaxOriginsReachedError = Symbol.for('undici.error.UND_ERR_MAX_ORIGINS_REACHED')\nclass MaxOriginsReachedError extends UndiciError {\n  constructor (message) {\n    super(message)\n    this.name = 'MaxOriginsReachedError'\n    this.message = message || 'Maximum allowed origins reached'\n    this.code = 'UND_ERR_MAX_ORIGINS_REACHED'\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kMaxOriginsReachedError] === true\n  }\n\n  get [kMaxOriginsReachedError] () {\n    return true\n  }\n}\n\nclass Socks5ProxyError extends UndiciError {\n  constructor (message, code) {\n    super(message)\n    this.name = 'Socks5ProxyError'\n    this.message = message || 'SOCKS5 proxy error'\n    this.code = code || 'UND_ERR_SOCKS5'\n  }\n}\n\nconst kMessageSizeExceededError = Symbol.for('undici.error.UND_ERR_WS_MESSAGE_SIZE_EXCEEDED')\nclass MessageSizeExceededError extends UndiciError {\n  constructor (message) {\n    super(message)\n    this.name = 'MessageSizeExceededError'\n    this.message = message || 'Max decompressed message size exceeded'\n    this.code = 'UND_ERR_WS_MESSAGE_SIZE_EXCEEDED'\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kMessageSizeExceededError] === true\n  }\n\n  get [kMessageSizeExceededError] () {\n    return true\n  }\n}\n\nmodule.exports = {\n  AbortError,\n  HTTPParserError,\n  UndiciError,\n  HeadersTimeoutError,\n  HeadersOverflowError,\n  BodyTimeoutError,\n  RequestContentLengthMismatchError,\n  ConnectTimeoutError,\n  InvalidArgumentError,\n  InvalidReturnValueError,\n  RequestAbortedError,\n  ClientDestroyedError,\n  ClientClosedError,\n  InformationalError,\n  SocketError,\n  NotSupportedError,\n  ResponseContentLengthMismatchError,\n  BalancedPoolMissingUpstreamError,\n  ResponseExceededMaxSizeError,\n  RequestRetryError,\n  ResponseError,\n  SecureProxyConnectionError,\n  MaxOriginsReachedError,\n  Socks5ProxyError,\n  MessageSizeExceededError\n}\n", "'use strict'\n\n/**\n * @see https://developer.mozilla.org/docs/Web/HTTP/Headers\n */\nconst wellknownHeaderNames = /** @type {const} */ ([\n  'Accept',\n  'Accept-Encoding',\n  'Accept-Language',\n  'Accept-Ranges',\n  'Access-Control-Allow-Credentials',\n  'Access-Control-Allow-Headers',\n  'Access-Control-Allow-Methods',\n  'Access-Control-Allow-Origin',\n  'Access-Control-Expose-Headers',\n  'Access-Control-Max-Age',\n  'Access-Control-Request-Headers',\n  'Access-Control-Request-Method',\n  'Age',\n  'Allow',\n  'Alt-Svc',\n  'Alt-Used',\n  'Authorization',\n  'Cache-Control',\n  'Clear-Site-Data',\n  'Connection',\n  'Content-Disposition',\n  'Content-Encoding',\n  'Content-Language',\n  'Content-Length',\n  'Content-Location',\n  'Content-Range',\n  'Content-Security-Policy',\n  'Content-Security-Policy-Report-Only',\n  'Content-Type',\n  'Cookie',\n  'Cross-Origin-Embedder-Policy',\n  'Cross-Origin-Opener-Policy',\n  'Cross-Origin-Resource-Policy',\n  'Date',\n  'Device-Memory',\n  'Downlink',\n  'ECT',\n  'ETag',\n  'Expect',\n  'Expect-CT',\n  'Expires',\n  'Forwarded',\n  'From',\n  'Host',\n  'If-Match',\n  'If-Modified-Since',\n  'If-None-Match',\n  'If-Range',\n  'If-Unmodified-Since',\n  'Keep-Alive',\n  'Last-Modified',\n  'Link',\n  'Location',\n  'Max-Forwards',\n  'Origin',\n  'Permissions-Policy',\n  'Pragma',\n  'Proxy-Authenticate',\n  'Proxy-Authorization',\n  'RTT',\n  'Range',\n  'Referer',\n  'Referrer-Policy',\n  'Refresh',\n  'Retry-After',\n  'Sec-WebSocket-Accept',\n  'Sec-WebSocket-Extensions',\n  'Sec-WebSocket-Key',\n  'Sec-WebSocket-Protocol',\n  'Sec-WebSocket-Version',\n  'Server',\n  'Server-Timing',\n  'Service-Worker-Allowed',\n  'Service-Worker-Navigation-Preload',\n  'Set-Cookie',\n  'SourceMap',\n  'Strict-Transport-Security',\n  'Supports-Loading-Mode',\n  'TE',\n  'Timing-Allow-Origin',\n  'Trailer',\n  'Transfer-Encoding',\n  'Upgrade',\n  'Upgrade-Insecure-Requests',\n  'User-Agent',\n  'Vary',\n  'Via',\n  'WWW-Authenticate',\n  'X-Content-Type-Options',\n  'X-DNS-Prefetch-Control',\n  'X-Frame-Options',\n  'X-Permitted-Cross-Domain-Policies',\n  'X-Powered-By',\n  'X-Requested-With',\n  'X-XSS-Protection'\n])\n\n/** @type {Record<typeof wellknownHeaderNames[number]|Lowercase<typeof wellknownHeaderNames[number]>, string>} */\nconst headerNameLowerCasedRecord = {}\n\n// Note: object prototypes should not be able to be referenced. e.g. `Object#hasOwnProperty`.\nObject.setPrototypeOf(headerNameLowerCasedRecord, null)\n\n/**\n * @type {Record<Lowercase<typeof wellknownHeaderNames[number]>, Buffer>}\n */\nconst wellknownHeaderNameBuffers = {}\n\n// Note: object prototypes should not be able to be referenced. e.g. `Object#hasOwnProperty`.\nObject.setPrototypeOf(wellknownHeaderNameBuffers, null)\n\n/**\n * @param {string} header Lowercased header\n * @returns {Buffer}\n */\nfunction getHeaderNameAsBuffer (header) {\n  let buffer = wellknownHeaderNameBuffers[header]\n\n  if (buffer === undefined) {\n    buffer = Buffer.from(header)\n  }\n\n  return buffer\n}\n\nfor (let i = 0; i < wellknownHeaderNames.length; ++i) {\n  const key = wellknownHeaderNames[i]\n  const lowerCasedKey = key.toLowerCase()\n  headerNameLowerCasedRecord[key] = headerNameLowerCasedRecord[lowerCasedKey] =\n    lowerCasedKey\n}\n\nmodule.exports = {\n  wellknownHeaderNames,\n  headerNameLowerCasedRecord,\n  getHeaderNameAsBuffer\n}\n", "'use strict'\n\nconst {\n  wellknownHeaderNames,\n  headerNameLowerCasedRecord\n} = require('./constants')\n\nclass TstNode {\n  /** @type {any} */\n  value = null\n  /** @type {null | TstNode} */\n  left = null\n  /** @type {null | TstNode} */\n  middle = null\n  /** @type {null | TstNode} */\n  right = null\n  /** @type {number} */\n  code\n  /**\n   * @param {string} key\n   * @param {any} value\n   * @param {number} index\n   */\n  constructor (key, value, index) {\n    if (index === undefined || index >= key.length) {\n      throw new TypeError('Unreachable')\n    }\n    const code = this.code = key.charCodeAt(index)\n    // check code is ascii string\n    if (code > 0x7F) {\n      throw new TypeError('key must be ascii string')\n    }\n    if (key.length !== ++index) {\n      this.middle = new TstNode(key, value, index)\n    } else {\n      this.value = value\n    }\n  }\n\n  /**\n   * @param {string} key\n   * @param {any} value\n   * @returns {void}\n   */\n  add (key, value) {\n    const length = key.length\n    if (length === 0) {\n      throw new TypeError('Unreachable')\n    }\n    let index = 0\n    /**\n     * @type {TstNode}\n     */\n    let node = this\n    while (true) {\n      const code = key.charCodeAt(index)\n      // check code is ascii string\n      if (code > 0x7F) {\n        throw new TypeError('key must be ascii string')\n      }\n      if (node.code === code) {\n        if (length === ++index) {\n          node.value = value\n          break\n        } else if (node.middle !== null) {\n          node = node.middle\n        } else {\n          node.middle = new TstNode(key, value, index)\n          break\n        }\n      } else if (node.code < code) {\n        if (node.left !== null) {\n          node = node.left\n        } else {\n          node.left = new TstNode(key, value, index)\n          break\n        }\n      } else if (node.right !== null) {\n        node = node.right\n      } else {\n        node.right = new TstNode(key, value, index)\n        break\n      }\n    }\n  }\n\n  /**\n   * @param {Uint8Array} key\n   * @returns {TstNode | null}\n   */\n  search (key) {\n    const keylength = key.length\n    let index = 0\n    /**\n     * @type {TstNode|null}\n     */\n    let node = this\n    while (node !== null && index < keylength) {\n      let code = key[index]\n      // A-Z\n      // First check if it is bigger than 0x5a.\n      // Lowercase letters have higher char codes than uppercase ones.\n      // Also we assume that headers will mostly contain lowercase characters.\n      if (code <= 0x5a && code >= 0x41) {\n        // Lowercase for uppercase.\n        code |= 32\n      }\n      while (node !== null) {\n        if (code === node.code) {\n          if (keylength === ++index) {\n            // Returns Node since it is the last key.\n            return node\n          }\n          node = node.middle\n          break\n        }\n        node = node.code < code ? node.left : node.right\n      }\n    }\n    return null\n  }\n}\n\nclass TernarySearchTree {\n  /** @type {TstNode | null} */\n  node = null\n\n  /**\n   * @param {string} key\n   * @param {any} value\n   * @returns {void}\n   * */\n  insert (key, value) {\n    if (this.node === null) {\n      this.node = new TstNode(key, value, 0)\n    } else {\n      this.node.add(key, value)\n    }\n  }\n\n  /**\n   * @param {Uint8Array} key\n   * @returns {any}\n   */\n  lookup (key) {\n    return this.node?.search(key)?.value ?? null\n  }\n}\n\nconst tree = new TernarySearchTree()\n\nfor (let i = 0; i < wellknownHeaderNames.length; ++i) {\n  const key = headerNameLowerCasedRecord[wellknownHeaderNames[i]]\n  tree.insert(key, key)\n}\n\nmodule.exports = {\n  TernarySearchTree,\n  tree\n}\n", "'use strict'\n\nconst assert = require('node:assert')\nconst { kDestroyed, kBodyUsed, kListeners, kBody } = require('./symbols')\nconst { IncomingMessage } = require('node:http')\nconst stream = require('node:stream')\nconst net = require('node:net')\nconst { stringify } = require('node:querystring')\nconst { EventEmitter: EE } = require('node:events')\nconst timers = require('../util/timers')\nconst { InvalidArgumentError, ConnectTimeoutError } = require('./errors')\nconst { headerNameLowerCasedRecord } = require('./constants')\nconst { tree } = require('./tree')\n\nconst [nodeMajor, nodeMinor] = process.versions.node.split('.', 2).map(v => Number(v))\n\nclass BodyAsyncIterable {\n  constructor (body) {\n    this[kBody] = body\n    this[kBodyUsed] = false\n  }\n\n  async * [Symbol.asyncIterator] () {\n    assert(!this[kBodyUsed], 'disturbed')\n    this[kBodyUsed] = true\n    yield * this[kBody]\n  }\n}\n\nfunction noop () {}\n\n/**\n * @param {*} body\n * @returns {*}\n */\nfunction wrapRequestBody (body) {\n  if (isStream(body)) {\n    // TODO (fix): Provide some way for the user to cache the file to e.g. /tmp\n    // so that it can be dispatched again?\n    // TODO (fix): Do we need 100-expect support to provide a way to do this properly?\n    if (bodyLength(body) === 0) {\n      body\n        .on('data', function () {\n          assert(false)\n        })\n    }\n\n    if (typeof body.readableDidRead !== 'boolean') {\n      body[kBodyUsed] = false\n      EE.prototype.on.call(body, 'data', function () {\n        this[kBodyUsed] = true\n      })\n    }\n\n    return body\n  } else if (body && typeof body.pipeTo === 'function') {\n    // TODO (fix): We can't access ReadableStream internal state\n    // to determine whether or not it has been disturbed. This is just\n    // a workaround.\n    return new BodyAsyncIterable(body)\n  } else if (body && isFormDataLike(body)) {\n    return body\n  } else if (\n    body &&\n    typeof body !== 'string' &&\n    !ArrayBuffer.isView(body) &&\n    isIterable(body)\n  ) {\n    // TODO: Should we allow re-using iterable if !this.opts.idempotent\n    // or through some other flag?\n    return new BodyAsyncIterable(body)\n  } else {\n    return body\n  }\n}\n\n/**\n * @param {*} obj\n * @returns {obj is import('node:stream').Stream}\n */\nfunction isStream (obj) {\n  return obj && typeof obj === 'object' && typeof obj.pipe === 'function' && typeof obj.on === 'function'\n}\n\n/**\n * @param {*} object\n * @returns {object is Blob}\n * based on https://github.com/node-fetch/fetch-blob/blob/8ab587d34080de94140b54f07168451e7d0b655e/index.js#L229-L241 (MIT License)\n */\nfunction isBlobLike (object) {\n  if (object === null) {\n    return false\n  } else if (object instanceof Blob) {\n    return true\n  } else if (typeof object !== 'object') {\n    return false\n  } else {\n    const sTag = object[Symbol.toStringTag]\n\n    return (sTag === 'Blob' || sTag === 'File') && (\n      ('stream' in object && typeof object.stream === 'function') ||\n      ('arrayBuffer' in object && typeof object.arrayBuffer === 'function')\n    )\n  }\n}\n\n/**\n * @param {string} url The path to check for query strings or fragments.\n * @returns {boolean} Returns true if the path contains a query string or fragment.\n */\nfunction pathHasQueryOrFragment (url) {\n  return (\n    url.includes('?') ||\n    url.includes('#')\n  )\n}\n\n/**\n * @param {string} url The URL to add the query params to\n * @param {import('node:querystring').ParsedUrlQueryInput} queryParams The object to serialize into a URL query string\n * @returns {string} The URL with the query params added\n */\nfunction serializePathWithQuery (url, queryParams) {\n  if (pathHasQueryOrFragment(url)) {\n    throw new Error('Query params cannot be passed when url already contains \"?\" or \"#\".')\n  }\n\n  const stringified = stringify(queryParams)\n\n  if (stringified) {\n    url += '?' + stringified\n  }\n\n  return url\n}\n\n/**\n * @param {number|string|undefined} port\n * @returns {boolean}\n */\nfunction isValidPort (port) {\n  const value = parseInt(port, 10)\n  return (\n    value === Number(port) &&\n    value >= 0 &&\n    value <= 65535\n  )\n}\n\n/**\n * Check if the value is a valid http or https prefixed string.\n *\n * @param {string} value\n * @returns {boolean}\n */\nfunction isHttpOrHttpsPrefixed (value) {\n  return (\n    value != null &&\n    value[0] === 'h' &&\n    value[1] === 't' &&\n    value[2] === 't' &&\n    value[3] === 'p' &&\n    (\n      value[4] === ':' ||\n      (\n        value[4] === 's' &&\n        value[5] === ':'\n      )\n    )\n  )\n}\n\n/**\n * @param {string|URL|Record<string,string>} url\n * @returns {URL}\n */\nfunction parseURL (url) {\n  if (typeof url === 'string') {\n    /**\n     * @type {URL}\n     */\n    url = new URL(url)\n\n    if (!isHttpOrHttpsPrefixed(url.origin || url.protocol)) {\n      throw new InvalidArgumentError('Invalid URL protocol: the URL must start with `http:` or `https:`.')\n    }\n\n    return url\n  }\n\n  if (!url || typeof url !== 'object') {\n    throw new InvalidArgumentError('Invalid URL: The URL argument must be a non-null object.')\n  }\n\n  if (!(url instanceof URL)) {\n    if (url.port != null && url.port !== '' && isValidPort(url.port) === false) {\n      throw new InvalidArgumentError('Invalid URL: port must be a valid integer or a string representation of an integer.')\n    }\n\n    if (url.path != null && typeof url.path !== 'string') {\n      throw new InvalidArgumentError('Invalid URL path: the path must be a string or null/undefined.')\n    }\n\n    if (url.pathname != null && typeof url.pathname !== 'string') {\n      throw new InvalidArgumentError('Invalid URL pathname: the pathname must be a string or null/undefined.')\n    }\n\n    if (url.hostname != null && typeof url.hostname !== 'string') {\n      throw new InvalidArgumentError('Invalid URL hostname: the hostname must be a string or null/undefined.')\n    }\n\n    if (url.origin != null && typeof url.origin !== 'string') {\n      throw new InvalidArgumentError('Invalid URL origin: the origin must be a string or null/undefined.')\n    }\n\n    if (!isHttpOrHttpsPrefixed(url.origin || url.protocol)) {\n      throw new InvalidArgumentError('Invalid URL protocol: the URL must start with `http:` or `https:`.')\n    }\n\n    const port = url.port != null\n      ? url.port\n      : (url.protocol === 'https:' ? 443 : 80)\n    let origin = url.origin != null\n      ? url.origin\n      : `${url.protocol || ''}//${url.hostname || ''}:${port}`\n    let path = url.path != null\n      ? url.path\n      : `${url.pathname || ''}${url.search || ''}`\n\n    if (origin[origin.length - 1] === '/') {\n      origin = origin.slice(0, origin.length - 1)\n    }\n\n    if (path && path[0] !== '/') {\n      path = `/${path}`\n    }\n    // new URL(path, origin) is unsafe when `path` contains an absolute URL\n    // From https://developer.mozilla.org/en-US/docs/Web/API/URL/URL:\n    // If first parameter is a relative URL, second param is required, and will be used as the base URL.\n    // If first parameter is an absolute URL, a given second param will be ignored.\n    return new URL(`${origin}${path}`)\n  }\n\n  if (!isHttpOrHttpsPrefixed(url.origin || url.protocol)) {\n    throw new InvalidArgumentError('Invalid URL protocol: the URL must start with `http:` or `https:`.')\n  }\n\n  return url\n}\n\n/**\n * @param {string|URL|Record<string, string>} url\n * @returns {URL}\n */\nfunction parseOrigin (url) {\n  url = parseURL(url)\n\n  if (url.pathname !== '/' || url.search || url.hash) {\n    throw new InvalidArgumentError('invalid url')\n  }\n\n  return url\n}\n\n/**\n * @param {string} host\n * @returns {string}\n */\nfunction getHostname (host) {\n  if (host[0] === '[') {\n    const idx = host.indexOf(']')\n\n    assert(idx !== -1)\n    return host.substring(1, idx)\n  }\n\n  const idx = host.indexOf(':')\n  if (idx === -1) return host\n\n  return host.substring(0, idx)\n}\n\n/**\n * IP addresses are not valid server names per RFC6066\n * Currently, the only server names supported are DNS hostnames\n * @param {string|null} host\n * @returns {string|null}\n */\nfunction getServerName (host) {\n  if (!host) {\n    return null\n  }\n\n  assert(typeof host === 'string')\n\n  const servername = getHostname(host)\n  if (net.isIP(servername)) {\n    return ''\n  }\n\n  return servername\n}\n\n/**\n * @function\n * @template T\n * @param {T} obj\n * @returns {T}\n */\nfunction deepClone (obj) {\n  return JSON.parse(JSON.stringify(obj))\n}\n\n/**\n * @param {*} obj\n * @returns {obj is AsyncIterable}\n */\nfunction isAsyncIterable (obj) {\n  return !!(obj != null && typeof obj[Symbol.asyncIterator] === 'function')\n}\n\n/**\n * @param {*} obj\n * @returns {obj is Iterable}\n */\nfunction isIterable (obj) {\n  return !!(obj != null && (typeof obj[Symbol.iterator] === 'function' || typeof obj[Symbol.asyncIterator] === 'function'))\n}\n\n/**\n * Checks whether an object has a safe Symbol.iterator \u2014 i.e. one that is\n * either own or inherited from a non-Object.prototype chain.  This prevents\n * prototype-pollution attacks from injecting a fake iterator on\n * Object.prototype.\n * @param {object} obj\n * @returns {boolean}\n */\nfunction hasSafeIterator (obj) {\n  const prototype = Object.getPrototypeOf(obj)\n  const ownIterator = Object.prototype.hasOwnProperty.call(obj, Symbol.iterator)\n  return ownIterator || (prototype != null && prototype !== Object.prototype && typeof obj[Symbol.iterator] === 'function')\n}\n\n/**\n * @param {Blob|Buffer|import ('stream').Stream} body\n * @returns {number|null}\n */\nfunction bodyLength (body) {\n  if (body == null) {\n    return 0\n  } else if (isStream(body)) {\n    const state = body._readableState\n    return state && state.objectMode === false && state.ended === true && Number.isFinite(state.length)\n      ? state.length\n      : null\n  } else if (isBlobLike(body)) {\n    return body.size != null ? body.size : null\n  } else if (isBuffer(body)) {\n    return body.byteLength\n  }\n\n  return null\n}\n\n/**\n * @param {import ('stream').Stream} body\n * @returns {boolean}\n */\nfunction isDestroyed (body) {\n  return body && !!(body.destroyed || body[kDestroyed] || (stream.isDestroyed?.(body)))\n}\n\n/**\n * @param {import ('stream').Stream} stream\n * @param {Error} [err]\n * @returns {void}\n */\nfunction destroy (stream, err) {\n  if (stream == null || !isStream(stream) || isDestroyed(stream)) {\n    return\n  }\n\n  if (typeof stream.destroy === 'function') {\n    if (Object.getPrototypeOf(stream).constructor === IncomingMessage) {\n      // See: https://github.com/nodejs/node/pull/38505/files\n      stream.socket = null\n    }\n\n    stream.destroy(err)\n  } else if (err) {\n    queueMicrotask(() => {\n      stream.emit('error', err)\n    })\n  }\n\n  if (stream.destroyed !== true) {\n    stream[kDestroyed] = true\n  }\n}\n\nconst KEEPALIVE_TIMEOUT_EXPR = /timeout=(\\d+)/\n/**\n * @param {string} val\n * @returns {number | null}\n */\nfunction parseKeepAliveTimeout (val) {\n  const m = val.match(KEEPALIVE_TIMEOUT_EXPR)\n  return m ? parseInt(m[1], 10) * 1000 : null\n}\n\n/**\n * Retrieves a header name and returns its lowercase value.\n * @param {string | Buffer} value Header name\n * @returns {string}\n */\nfunction headerNameToString (value) {\n  return typeof value === 'string'\n    ? headerNameLowerCasedRecord[value] ?? value.toLowerCase()\n    : tree.lookup(value) ?? value.toString('latin1').toLowerCase()\n}\n\n/**\n * Receive the buffer as a string and return its lowercase value.\n * @param {Buffer} value Header name\n * @returns {string}\n */\nfunction bufferToLowerCasedHeaderName (value) {\n  return tree.lookup(value) ?? value.toString('latin1').toLowerCase()\n}\n\n/**\n * @param {(Buffer | string)[]} headers\n * @param {Record<string, string | string[]>} [obj]\n * @returns {Record<string, string | string[]>}\n */\nfunction parseHeaders (headers, obj) {\n  if (obj === undefined) obj = {}\n\n  for (let i = 0; i < headers.length; i += 2) {\n    const key = headerNameToString(headers[i])\n    let val = obj[key]\n\n    if (val) {\n      if (typeof val === 'string') {\n        val = [val]\n        obj[key] = val\n      }\n      val.push(headers[i + 1].toString('latin1'))\n    } else {\n      const headersValue = headers[i + 1]\n      if (typeof headersValue === 'string') {\n        obj[key] = headersValue\n      } else {\n        obj[key] = Array.isArray(headersValue) ? headersValue.map(x => x.toString('latin1')) : headersValue.toString('latin1')\n      }\n    }\n  }\n\n  return obj\n}\n\n/**\n * @param {Buffer[]} headers\n * @returns {string[]}\n */\nfunction parseRawHeaders (headers) {\n  const headersLength = headers.length\n  /**\n   * @type {string[]}\n   */\n  const ret = new Array(headersLength)\n\n  let key\n  let val\n\n  for (let n = 0; n < headersLength; n += 2) {\n    key = headers[n]\n    val = headers[n + 1]\n\n    typeof key !== 'string' && (key = key.toString())\n    typeof val !== 'string' && (val = val.toString('latin1'))\n\n    ret[n] = key\n    ret[n + 1] = val\n  }\n\n  return ret\n}\n\n/**\n * @param {string[]} headers\n * @param {Buffer[]} headers\n */\nfunction encodeRawHeaders (headers) {\n  if (!Array.isArray(headers)) {\n    throw new TypeError('expected headers to be an array')\n  }\n  return headers.map(x => Buffer.from(x))\n}\n\n/**\n * @param {*} buffer\n * @returns {buffer is Buffer}\n */\nfunction isBuffer (buffer) {\n  // See, https://github.com/mcollina/undici/pull/319\n  return buffer instanceof Uint8Array || Buffer.isBuffer(buffer)\n}\n\n/**\n * Asserts that the handler object is a request handler.\n *\n * @param {object} handler\n * @param {string} method\n * @param {string} [upgrade]\n * @returns {asserts handler is import('../api/api-request').RequestHandler}\n */\nfunction assertRequestHandler (handler, method, upgrade) {\n  if (!handler || typeof handler !== 'object') {\n    throw new InvalidArgumentError('handler must be an object')\n  }\n\n  if (typeof handler.onRequestStart === 'function') {\n    // TODO (fix): More checks...\n    return\n  }\n\n  if (typeof handler.onConnect !== 'function') {\n    throw new InvalidArgumentError('invalid onConnect method')\n  }\n\n  if (typeof handler.onError !== 'function') {\n    throw new InvalidArgumentError('invalid onError method')\n  }\n\n  if (typeof handler.onBodySent !== 'function' && handler.onBodySent !== undefined) {\n    throw new InvalidArgumentError('invalid onBodySent method')\n  }\n\n  if (upgrade || method === 'CONNECT') {\n    if (typeof handler.onUpgrade !== 'function') {\n      throw new InvalidArgumentError('invalid onUpgrade method')\n    }\n  } else {\n    if (typeof handler.onHeaders !== 'function') {\n      throw new InvalidArgumentError('invalid onHeaders method')\n    }\n\n    if (typeof handler.onData !== 'function') {\n      throw new InvalidArgumentError('invalid onData method')\n    }\n\n    if (typeof handler.onComplete !== 'function') {\n      throw new InvalidArgumentError('invalid onComplete method')\n    }\n  }\n}\n\n/**\n * A body is disturbed if it has been read from and it cannot be re-used without\n * losing state or data.\n * @param {import('node:stream').Readable} body\n * @returns {boolean}\n */\nfunction isDisturbed (body) {\n  // TODO (fix): Why is body[kBodyUsed] needed?\n  return !!(body && (stream.isDisturbed(body) || body[kBodyUsed]))\n}\n\n/**\n * @typedef {object} SocketInfo\n * @property {string} [localAddress]\n * @property {number} [localPort]\n * @property {string} [remoteAddress]\n * @property {number} [remotePort]\n * @property {string} [remoteFamily]\n * @property {number} [timeout]\n * @property {number} bytesWritten\n * @property {number} bytesRead\n */\n\n/**\n * @param {import('net').Socket} socket\n * @returns {SocketInfo}\n */\nfunction getSocketInfo (socket) {\n  return {\n    localAddress: socket.localAddress,\n    localPort: socket.localPort,\n    remoteAddress: socket.remoteAddress,\n    remotePort: socket.remotePort,\n    remoteFamily: socket.remoteFamily,\n    timeout: socket.timeout,\n    bytesWritten: socket.bytesWritten,\n    bytesRead: socket.bytesRead\n  }\n}\n\n/**\n * @param {Iterable} iterable\n * @returns {ReadableStream}\n */\nfunction ReadableStreamFrom (iterable) {\n  // We cannot use ReadableStream.from here because it does not return a byte stream.\n\n  let iterator\n  return new ReadableStream(\n    {\n      start () {\n        iterator = iterable[Symbol.asyncIterator]()\n      },\n      pull (controller) {\n        return iterator.next().then(({ done, value }) => {\n          if (done) {\n            return queueMicrotask(() => {\n              controller.close()\n              controller.byobRequest?.respond(0)\n            })\n          } else {\n            const buf = Buffer.isBuffer(value) ? value : Buffer.from(value)\n            if (buf.byteLength) {\n              return controller.enqueue(new Uint8Array(buf))\n            } else {\n              return this.pull(controller)\n            }\n          }\n        })\n      },\n      cancel () {\n        return iterator.return()\n      },\n      type: 'bytes'\n    }\n  )\n}\n\n/**\n * The object should be a FormData instance and contains all the required\n * methods.\n * @param {*} object\n * @returns {object is FormData}\n */\nfunction isFormDataLike (object) {\n  return (\n    object &&\n    typeof object === 'object' &&\n    typeof object.append === 'function' &&\n    typeof object.delete === 'function' &&\n    typeof object.get === 'function' &&\n    typeof object.getAll === 'function' &&\n    typeof object.has === 'function' &&\n    typeof object.set === 'function' &&\n    object[Symbol.toStringTag] === 'FormData'\n  )\n}\n\nfunction addAbortListener (signal, listener) {\n  if ('addEventListener' in signal) {\n    signal.addEventListener('abort', listener, { once: true })\n    return () => signal.removeEventListener('abort', listener)\n  }\n  signal.once('abort', listener)\n  return () => signal.removeListener('abort', listener)\n}\n\nconst validTokenChars = new Uint8Array([\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0-15\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 16-31\n  0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, // 32-47 (!\"#$%&'()*+,-./)\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, // 48-63 (0-9:;<=>?)\n  0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 64-79 (@A-O)\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, // 80-95 (P-Z[\\]^_)\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 96-111 (`a-o)\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, // 112-127 (p-z{|}~)\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 128-143\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 144-159\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 160-175\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 176-191\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 192-207\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 208-223\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 224-239\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0  // 240-255\n])\n\n/**\n * @see https://tools.ietf.org/html/rfc7230#section-3.2.6\n * @param {number} c\n * @returns {boolean}\n */\nfunction isTokenCharCode (c) {\n  return (validTokenChars[c] === 1)\n}\n\nconst tokenRegExp = /^[\\^_`a-zA-Z\\-0-9!#$%&'*+.|~]+$/\n\n/**\n * @param {string} characters\n * @returns {boolean}\n */\nfunction isValidHTTPToken (characters) {\n  if (characters.length >= 12) return tokenRegExp.test(characters)\n  if (characters.length === 0) return false\n\n  for (let i = 0; i < characters.length; i++) {\n    if (validTokenChars[characters.charCodeAt(i)] !== 1) {\n      return false\n    }\n  }\n  return true\n}\n\n// headerCharRegex have been lifted from\n// https://github.com/nodejs/node/blob/main/lib/_http_common.js\n\n/**\n * Matches if val contains an invalid field-vchar\n *  field-value    = *( field-content / obs-fold )\n *  field-content  = field-vchar [ 1*( SP / HTAB ) field-vchar ]\n *  field-vchar    = VCHAR / obs-text\n */\nconst headerCharRegex = /[^\\t\\x20-\\x7e\\x80-\\xff]/\n\n/**\n * @param {string} characters\n * @returns {boolean}\n */\nfunction isValidHeaderValue (characters) {\n  return !headerCharRegex.test(characters)\n}\n\nconst rangeHeaderRegex = /^bytes (\\d+)-(\\d+)\\/(\\d+)?$/\n\n/**\n * @typedef {object} RangeHeader\n * @property {number} start\n * @property {number | null} end\n * @property {number | null} size\n */\n\n/**\n * Parse accordingly to RFC 9110\n * @see https://www.rfc-editor.org/rfc/rfc9110#field.content-range\n * @param {string} [range]\n * @returns {RangeHeader|null}\n */\nfunction parseRangeHeader (range) {\n  if (range == null || range === '') return { start: 0, end: null, size: null }\n\n  const m = range ? range.match(rangeHeaderRegex) : null\n  return m\n    ? {\n        start: parseInt(m[1]),\n        end: m[2] ? parseInt(m[2]) : null,\n        size: m[3] ? parseInt(m[3]) : null\n      }\n    : null\n}\n\n/**\n * @template {import(\"events\").EventEmitter} T\n * @param {T} obj\n * @param {string} name\n * @param {(...args: any[]) => void} listener\n * @returns {T}\n */\nfunction addListener (obj, name, listener) {\n  const listeners = (obj[kListeners] ??= [])\n  listeners.push([name, listener])\n  obj.on(name, listener)\n  return obj\n}\n\n/**\n * @template {import(\"events\").EventEmitter} T\n * @param {T} obj\n * @returns {T}\n */\nfunction removeAllListeners (obj) {\n  if (obj[kListeners] != null) {\n    for (const [name, listener] of obj[kListeners]) {\n      obj.removeListener(name, listener)\n    }\n    obj[kListeners] = null\n  }\n  return obj\n}\n\n/**\n * @param {import ('../dispatcher/client')} client\n * @param {import ('../core/request')} request\n * @param {Error} err\n */\nfunction errorRequest (client, request, err) {\n  try {\n    request.onError(err)\n    assert(request.aborted)\n  } catch (err) {\n    client.emit('error', err)\n  }\n}\n\n/**\n * @param {WeakRef<net.Socket>} socketWeakRef\n * @param {object} opts\n * @param {number} opts.timeout\n * @param {string} opts.hostname\n * @param {number} opts.port\n * @returns {() => void}\n */\nconst setupConnectTimeout = process.platform === 'win32'\n  ? (socketWeakRef, opts) => {\n      if (!opts.timeout) {\n        return noop\n      }\n\n      let s1 = null\n      let s2 = null\n      const fastTimer = timers.setFastTimeout(() => {\n      // setImmediate is added to make sure that we prioritize socket error events over timeouts\n        s1 = setImmediate(() => {\n        // Windows needs an extra setImmediate probably due to implementation differences in the socket logic\n          s2 = setImmediate(() => onConnectTimeout(socketWeakRef.deref(), opts))\n        })\n      }, opts.timeout)\n      return () => {\n        timers.clearFastTimeout(fastTimer)\n        clearImmediate(s1)\n        clearImmediate(s2)\n      }\n    }\n  : (socketWeakRef, opts) => {\n      if (!opts.timeout) {\n        return noop\n      }\n\n      let s1 = null\n      const fastTimer = timers.setFastTimeout(() => {\n      // setImmediate is added to make sure that we prioritize socket error events over timeouts\n        s1 = setImmediate(() => {\n          onConnectTimeout(socketWeakRef.deref(), opts)\n        })\n      }, opts.timeout)\n      return () => {\n        timers.clearFastTimeout(fastTimer)\n        clearImmediate(s1)\n      }\n    }\n\n/**\n * @param {net.Socket} socket\n * @param {object} opts\n * @param {number} opts.timeout\n * @param {string} opts.hostname\n * @param {number} opts.port\n */\nfunction onConnectTimeout (socket, opts) {\n  // The socket could be already garbage collected\n  if (socket == null) {\n    return\n  }\n\n  let message = 'Connect Timeout Error'\n  if (Array.isArray(socket.autoSelectFamilyAttemptedAddresses)) {\n    message += ` (attempted addresses: ${socket.autoSelectFamilyAttemptedAddresses.join(', ')},`\n  } else {\n    message += ` (attempted address: ${opts.hostname}:${opts.port},`\n  }\n\n  message += ` timeout: ${opts.timeout}ms)`\n\n  destroy(socket, new ConnectTimeoutError(message))\n}\n\n/**\n * @param {string} urlString\n * @returns {string}\n */\nfunction getProtocolFromUrlString (urlString) {\n  if (\n    urlString[0] === 'h' &&\n    urlString[1] === 't' &&\n    urlString[2] === 't' &&\n    urlString[3] === 'p'\n  ) {\n    switch (urlString[4]) {\n      case ':':\n        return 'http:'\n      case 's':\n        if (urlString[5] === ':') {\n          return 'https:'\n        }\n    }\n  }\n  // fallback if none of the usual suspects\n  return urlString.slice(0, urlString.indexOf(':') + 1)\n}\n\nconst kEnumerableProperty = Object.create(null)\nkEnumerableProperty.enumerable = true\n\nconst normalizedMethodRecordsBase = {\n  delete: 'DELETE',\n  DELETE: 'DELETE',\n  get: 'GET',\n  GET: 'GET',\n  head: 'HEAD',\n  HEAD: 'HEAD',\n  options: 'OPTIONS',\n  OPTIONS: 'OPTIONS',\n  post: 'POST',\n  POST: 'POST',\n  put: 'PUT',\n  PUT: 'PUT'\n}\n\nconst normalizedMethodRecords = {\n  ...normalizedMethodRecordsBase,\n  patch: 'patch',\n  PATCH: 'PATCH'\n}\n\n// Note: object prototypes should not be able to be referenced. e.g. `Object#hasOwnProperty`.\nObject.setPrototypeOf(normalizedMethodRecordsBase, null)\nObject.setPrototypeOf(normalizedMethodRecords, null)\n\nmodule.exports = {\n  kEnumerableProperty,\n  isDisturbed,\n  isBlobLike,\n  parseOrigin,\n  parseURL,\n  getServerName,\n  isStream,\n  isIterable,\n  hasSafeIterator,\n  isAsyncIterable,\n  isDestroyed,\n  headerNameToString,\n  bufferToLowerCasedHeaderName,\n  addListener,\n  removeAllListeners,\n  errorRequest,\n  parseRawHeaders,\n  encodeRawHeaders,\n  parseHeaders,\n  parseKeepAliveTimeout,\n  destroy,\n  bodyLength,\n  deepClone,\n  ReadableStreamFrom,\n  isBuffer,\n  assertRequestHandler,\n  getSocketInfo,\n  isFormDataLike,\n  pathHasQueryOrFragment,\n  serializePathWithQuery,\n  addAbortListener,\n  isValidHTTPToken,\n  isValidHeaderValue,\n  isTokenCharCode,\n  parseRangeHeader,\n  normalizedMethodRecordsBase,\n  normalizedMethodRecords,\n  isValidPort,\n  isHttpOrHttpsPrefixed,\n  nodeMajor,\n  nodeMinor,\n  safeHTTPMethods: Object.freeze(['GET', 'HEAD', 'OPTIONS', 'TRACE']),\n  wrapRequestBody,\n  setupConnectTimeout,\n  getProtocolFromUrlString\n}\n", "'use strict'\n\nconst {\n  kConnected,\n  kPending,\n  kRunning,\n  kSize,\n  kFree,\n  kQueued\n} = require('../core/symbols')\n\nclass ClientStats {\n  constructor (client) {\n    this.connected = client[kConnected]\n    this.pending = client[kPending]\n    this.running = client[kRunning]\n    this.size = client[kSize]\n  }\n}\n\nclass PoolStats {\n  constructor (pool) {\n    this.connected = pool[kConnected]\n    this.free = pool[kFree]\n    this.pending = pool[kPending]\n    this.queued = pool[kQueued]\n    this.running = pool[kRunning]\n    this.size = pool[kSize]\n  }\n}\n\nmodule.exports = { ClientStats, PoolStats }\n", "'use strict'\n\nconst diagnosticsChannel = require('node:diagnostics_channel')\nconst util = require('node:util')\n\nconst undiciDebugLog = util.debuglog('undici')\nconst fetchDebuglog = util.debuglog('fetch')\nconst websocketDebuglog = util.debuglog('websocket')\n\nconst channels = {\n  // Client\n  beforeConnect: diagnosticsChannel.channel('undici:client:beforeConnect'),\n  connected: diagnosticsChannel.channel('undici:client:connected'),\n  connectError: diagnosticsChannel.channel('undici:client:connectError'),\n  sendHeaders: diagnosticsChannel.channel('undici:client:sendHeaders'),\n  // Request\n  create: diagnosticsChannel.channel('undici:request:create'),\n  bodySent: diagnosticsChannel.channel('undici:request:bodySent'),\n  bodyChunkSent: diagnosticsChannel.channel('undici:request:bodyChunkSent'),\n  bodyChunkReceived: diagnosticsChannel.channel('undici:request:bodyChunkReceived'),\n  headers: diagnosticsChannel.channel('undici:request:headers'),\n  trailers: diagnosticsChannel.channel('undici:request:trailers'),\n  error: diagnosticsChannel.channel('undici:request:error'),\n  // WebSocket\n  open: diagnosticsChannel.channel('undici:websocket:open'),\n  close: diagnosticsChannel.channel('undici:websocket:close'),\n  socketError: diagnosticsChannel.channel('undici:websocket:socket_error'),\n  ping: diagnosticsChannel.channel('undici:websocket:ping'),\n  pong: diagnosticsChannel.channel('undici:websocket:pong'),\n  // ProxyAgent\n  proxyConnected: diagnosticsChannel.channel('undici:proxy:connected')\n}\n\nlet isTrackingClientEvents = false\n\nfunction trackClientEvents (debugLog = undiciDebugLog) {\n  if (isTrackingClientEvents) {\n    return\n  }\n\n  // Check if any of the channels already have subscribers to prevent duplicate subscriptions\n  // This can happen when both Node.js built-in undici and undici as a dependency are present\n  if (channels.beforeConnect.hasSubscribers || channels.connected.hasSubscribers ||\n      channels.connectError.hasSubscribers || channels.sendHeaders.hasSubscribers) {\n    isTrackingClientEvents = true\n    return\n  }\n\n  isTrackingClientEvents = true\n\n  diagnosticsChannel.subscribe('undici:client:beforeConnect',\n    evt => {\n      const {\n        connectParams: { version, protocol, port, host }\n      } = evt\n      debugLog(\n        'connecting to %s%s using %s%s',\n        host,\n        port ? `:${port}` : '',\n        protocol,\n        version\n      )\n    })\n\n  diagnosticsChannel.subscribe('undici:client:connected',\n    evt => {\n      const {\n        connectParams: { version, protocol, port, host }\n      } = evt\n      debugLog(\n        'connected to %s%s using %s%s',\n        host,\n        port ? `:${port}` : '',\n        protocol,\n        version\n      )\n    })\n\n  diagnosticsChannel.subscribe('undici:client:connectError',\n    evt => {\n      const {\n        connectParams: { version, protocol, port, host },\n        error\n      } = evt\n      debugLog(\n        'connection to %s%s using %s%s errored - %s',\n        host,\n        port ? `:${port}` : '',\n        protocol,\n        version,\n        error.message\n      )\n    })\n\n  diagnosticsChannel.subscribe('undici:client:sendHeaders',\n    evt => {\n      const {\n        request: { method, path, origin }\n      } = evt\n      debugLog('sending request to %s %s%s', method, origin, path)\n    })\n}\n\nlet isTrackingRequestEvents = false\n\nfunction trackRequestEvents (debugLog = undiciDebugLog) {\n  if (isTrackingRequestEvents) {\n    return\n  }\n\n  // Check if any of the channels already have subscribers to prevent duplicate subscriptions\n  // This can happen when both Node.js built-in undici and undici as a dependency are present\n  if (channels.headers.hasSubscribers || channels.trailers.hasSubscribers ||\n      channels.error.hasSubscribers) {\n    isTrackingRequestEvents = true\n    return\n  }\n\n  isTrackingRequestEvents = true\n\n  diagnosticsChannel.subscribe('undici:request:headers',\n    evt => {\n      const {\n        request: { method, path, origin },\n        response: { statusCode }\n      } = evt\n      debugLog(\n        'received response to %s %s%s - HTTP %d',\n        method,\n        origin,\n        path,\n        statusCode\n      )\n    })\n\n  diagnosticsChannel.subscribe('undici:request:trailers',\n    evt => {\n      const {\n        request: { method, path, origin }\n      } = evt\n      debugLog('trailers received from %s %s%s', method, origin, path)\n    })\n\n  diagnosticsChannel.subscribe('undici:request:error',\n    evt => {\n      const {\n        request: { method, path, origin },\n        error\n      } = evt\n      debugLog(\n        'request to %s %s%s errored - %s',\n        method,\n        origin,\n        path,\n        error.message\n      )\n    })\n}\n\nlet isTrackingWebSocketEvents = false\n\nfunction trackWebSocketEvents (debugLog = websocketDebuglog) {\n  if (isTrackingWebSocketEvents) {\n    return\n  }\n\n  // Check if any of the channels already have subscribers to prevent duplicate subscriptions\n  // This can happen when both Node.js built-in undici and undici as a dependency are present\n  if (channels.open.hasSubscribers || channels.close.hasSubscribers ||\n      channels.socketError.hasSubscribers || channels.ping.hasSubscribers ||\n      channels.pong.hasSubscribers) {\n    isTrackingWebSocketEvents = true\n    return\n  }\n\n  isTrackingWebSocketEvents = true\n\n  diagnosticsChannel.subscribe('undici:websocket:open',\n    evt => {\n      const {\n        address: { address, port }\n      } = evt\n      debugLog('connection opened %s%s', address, port ? `:${port}` : '')\n    })\n\n  diagnosticsChannel.subscribe('undici:websocket:close',\n    evt => {\n      const { websocket, code, reason } = evt\n      debugLog(\n        'closed connection to %s - %s %s',\n        websocket.url,\n        code,\n        reason\n      )\n    })\n\n  diagnosticsChannel.subscribe('undici:websocket:socket_error',\n    err => {\n      debugLog('connection errored - %s', err.message)\n    })\n\n  diagnosticsChannel.subscribe('undici:websocket:ping',\n    evt => {\n      debugLog('ping received')\n    })\n\n  diagnosticsChannel.subscribe('undici:websocket:pong',\n    evt => {\n      debugLog('pong received')\n    })\n}\n\nif (undiciDebugLog.enabled || fetchDebuglog.enabled) {\n  trackClientEvents(fetchDebuglog.enabled ? fetchDebuglog : undiciDebugLog)\n  trackRequestEvents(fetchDebuglog.enabled ? fetchDebuglog : undiciDebugLog)\n}\n\nif (websocketDebuglog.enabled) {\n  trackClientEvents(undiciDebugLog.enabled ? undiciDebugLog : websocketDebuglog)\n  trackWebSocketEvents(websocketDebuglog)\n}\n\nmodule.exports = {\n  channels\n}\n", "'use strict'\n\nconst {\n  InvalidArgumentError,\n  NotSupportedError\n} = require('./errors')\nconst assert = require('node:assert')\nconst {\n  isValidHTTPToken,\n  isValidHeaderValue,\n  isStream,\n  destroy,\n  isBuffer,\n  isFormDataLike,\n  isIterable,\n  hasSafeIterator,\n  isBlobLike,\n  serializePathWithQuery,\n  assertRequestHandler,\n  getServerName,\n  normalizedMethodRecords,\n  getProtocolFromUrlString\n} = require('./util')\nconst { channels } = require('./diagnostics.js')\nconst { headerNameLowerCasedRecord } = require('./constants')\n\n// Verifies that a given path is valid does not contain control chars \\x00 to \\x20\nconst invalidPathRegex = /[^\\u0021-\\u00ff]/\n\nconst kHandler = Symbol('handler')\n\nclass Request {\n  constructor (origin, {\n    path,\n    method,\n    body,\n    headers,\n    query,\n    idempotent,\n    blocking,\n    upgrade,\n    headersTimeout,\n    bodyTimeout,\n    reset,\n    expectContinue,\n    servername,\n    throwOnError,\n    maxRedirections,\n    typeOfService\n  }, handler) {\n    if (typeof path !== 'string') {\n      throw new InvalidArgumentError('path must be a string')\n    } else if (\n      path[0] !== '/' &&\n      !(path.startsWith('http://') || path.startsWith('https://')) &&\n      method !== 'CONNECT'\n    ) {\n      throw new InvalidArgumentError('path must be an absolute URL or start with a slash')\n    } else if (invalidPathRegex.test(path)) {\n      throw new InvalidArgumentError('invalid request path')\n    }\n\n    if (typeof method !== 'string') {\n      throw new InvalidArgumentError('method must be a string')\n    } else if (normalizedMethodRecords[method] === undefined && !isValidHTTPToken(method)) {\n      throw new InvalidArgumentError('invalid request method')\n    }\n\n    if (upgrade && typeof upgrade !== 'string') {\n      throw new InvalidArgumentError('upgrade must be a string')\n    }\n\n    if (upgrade && !isValidHeaderValue(upgrade)) {\n      throw new InvalidArgumentError('invalid upgrade header')\n    }\n\n    if (headersTimeout != null && (!Number.isFinite(headersTimeout) || headersTimeout < 0)) {\n      throw new InvalidArgumentError('invalid headersTimeout')\n    }\n\n    if (bodyTimeout != null && (!Number.isFinite(bodyTimeout) || bodyTimeout < 0)) {\n      throw new InvalidArgumentError('invalid bodyTimeout')\n    }\n\n    if (reset != null && typeof reset !== 'boolean') {\n      throw new InvalidArgumentError('invalid reset')\n    }\n\n    if (expectContinue != null && typeof expectContinue !== 'boolean') {\n      throw new InvalidArgumentError('invalid expectContinue')\n    }\n\n    if (throwOnError != null) {\n      throw new InvalidArgumentError('invalid throwOnError')\n    }\n\n    if (maxRedirections != null && maxRedirections !== 0) {\n      throw new InvalidArgumentError('maxRedirections is not supported, use the redirect interceptor')\n    }\n\n    if (typeOfService != null && (!Number.isInteger(typeOfService) || typeOfService < 0 || typeOfService > 255)) {\n      throw new InvalidArgumentError('typeOfService must be an integer between 0 and 255')\n    }\n\n    this.headersTimeout = headersTimeout\n\n    this.bodyTimeout = bodyTimeout\n\n    this.method = method\n\n    this.typeOfService = typeOfService ?? 0\n\n    this.abort = null\n\n    if (body == null) {\n      this.body = null\n    } else if (isStream(body)) {\n      this.body = body\n\n      const rState = this.body._readableState\n      if (!rState || !rState.autoDestroy) {\n        this.endHandler = function autoDestroy () {\n          destroy(this)\n        }\n        this.body.on('end', this.endHandler)\n      }\n\n      this.errorHandler = err => {\n        if (this.abort) {\n          this.abort(err)\n        } else {\n          this.error = err\n        }\n      }\n      this.body.on('error', this.errorHandler)\n    } else if (isBuffer(body)) {\n      this.body = body.byteLength ? body : null\n    } else if (ArrayBuffer.isView(body)) {\n      this.body = body.buffer.byteLength ? Buffer.from(body.buffer, body.byteOffset, body.byteLength) : null\n    } else if (body instanceof ArrayBuffer) {\n      this.body = body.byteLength ? Buffer.from(body) : null\n    } else if (typeof body === 'string') {\n      this.body = body.length ? Buffer.from(body) : null\n    } else if (isFormDataLike(body) || isIterable(body) || isBlobLike(body)) {\n      this.body = body\n    } else {\n      throw new InvalidArgumentError('body must be a string, a Buffer, a Readable stream, an iterable, or an async iterable')\n    }\n\n    this.completed = false\n    this.aborted = false\n\n    this.upgrade = upgrade || null\n\n    this.path = query ? serializePathWithQuery(path, query) : path\n\n    // TODO: shall we maybe standardize it to an URL object?\n    this.origin = origin\n\n    this.protocol = getProtocolFromUrlString(origin)\n\n    this.idempotent = idempotent == null\n      ? method === 'HEAD' || method === 'GET'\n      : idempotent\n\n    this.blocking = blocking ?? this.method !== 'HEAD'\n\n    this.reset = reset == null ? null : reset\n\n    this.host = null\n\n    this.contentLength = null\n\n    this.contentType = null\n\n    this.headers = []\n\n    // Only for H2\n    this.expectContinue = expectContinue != null ? expectContinue : false\n\n    if (Array.isArray(headers)) {\n      if (headers.length % 2 !== 0) {\n        throw new InvalidArgumentError('headers array must be even')\n      }\n      for (let i = 0; i < headers.length; i += 2) {\n        processHeader(this, headers[i], headers[i + 1])\n      }\n    } else if (headers && typeof headers === 'object') {\n      if (hasSafeIterator(headers)) {\n        for (const header of headers) {\n          if (!Array.isArray(header) || header.length !== 2) {\n            throw new InvalidArgumentError('headers must be in key-value pair format')\n          }\n          processHeader(this, header[0], header[1])\n        }\n      } else {\n        const keys = Object.keys(headers)\n        for (let i = 0; i < keys.length; ++i) {\n          processHeader(this, keys[i], headers[keys[i]])\n        }\n      }\n    } else if (headers != null) {\n      throw new InvalidArgumentError('headers must be an object or an array')\n    }\n\n    assertRequestHandler(handler, method, upgrade)\n\n    this.servername = servername || getServerName(this.host) || null\n\n    this[kHandler] = handler\n\n    if (channels.create.hasSubscribers) {\n      channels.create.publish({ request: this })\n    }\n  }\n\n  onBodySent (chunk) {\n    if (channels.bodyChunkSent.hasSubscribers) {\n      channels.bodyChunkSent.publish({ request: this, chunk })\n    }\n    if (this[kHandler].onBodySent) {\n      try {\n        return this[kHandler].onBodySent(chunk)\n      } catch (err) {\n        this.abort(err)\n      }\n    }\n  }\n\n  onRequestSent () {\n    if (channels.bodySent.hasSubscribers) {\n      channels.bodySent.publish({ request: this })\n    }\n\n    if (this[kHandler].onRequestSent) {\n      try {\n        return this[kHandler].onRequestSent()\n      } catch (err) {\n        this.abort(err)\n      }\n    }\n  }\n\n  onConnect (abort) {\n    assert(!this.aborted)\n    assert(!this.completed)\n\n    if (this.error) {\n      abort(this.error)\n    } else {\n      this.abort = abort\n      return this[kHandler].onConnect(abort)\n    }\n  }\n\n  onResponseStarted () {\n    return this[kHandler].onResponseStarted?.()\n  }\n\n  onHeaders (statusCode, headers, resume, statusText) {\n    assert(!this.aborted)\n    assert(!this.completed)\n\n    if (channels.headers.hasSubscribers) {\n      channels.headers.publish({ request: this, response: { statusCode, headers, statusText } })\n    }\n\n    try {\n      return this[kHandler].onHeaders(statusCode, headers, resume, statusText)\n    } catch (err) {\n      this.abort(err)\n    }\n  }\n\n  onData (chunk) {\n    assert(!this.aborted)\n    assert(!this.completed)\n\n    if (channels.bodyChunkReceived.hasSubscribers) {\n      channels.bodyChunkReceived.publish({ request: this, chunk })\n    }\n    try {\n      return this[kHandler].onData(chunk)\n    } catch (err) {\n      this.abort(err)\n      return false\n    }\n  }\n\n  onUpgrade (statusCode, headers, socket) {\n    assert(!this.aborted)\n    assert(!this.completed)\n\n    return this[kHandler].onUpgrade(statusCode, headers, socket)\n  }\n\n  onComplete (trailers) {\n    this.onFinally()\n\n    assert(!this.aborted)\n    assert(!this.completed)\n\n    this.completed = true\n    if (channels.trailers.hasSubscribers) {\n      channels.trailers.publish({ request: this, trailers })\n    }\n\n    try {\n      return this[kHandler].onComplete(trailers)\n    } catch (err) {\n      // TODO (fix): This might be a bad idea?\n      this.onError(err)\n    }\n  }\n\n  onError (error) {\n    this.onFinally()\n\n    if (channels.error.hasSubscribers) {\n      channels.error.publish({ request: this, error })\n    }\n\n    if (this.aborted) {\n      return\n    }\n    this.aborted = true\n\n    return this[kHandler].onError(error)\n  }\n\n  onFinally () {\n    if (this.errorHandler) {\n      this.body.off('error', this.errorHandler)\n      this.errorHandler = null\n    }\n\n    if (this.endHandler) {\n      this.body.off('end', this.endHandler)\n      this.endHandler = null\n    }\n  }\n\n  addHeader (key, value) {\n    processHeader(this, key, value)\n    return this\n  }\n}\n\nfunction processHeader (request, key, val) {\n  if (val && (typeof val === 'object' && !Array.isArray(val))) {\n    throw new InvalidArgumentError(`invalid ${key} header`)\n  } else if (val === undefined) {\n    return\n  }\n\n  let headerName = headerNameLowerCasedRecord[key]\n\n  if (headerName === undefined) {\n    headerName = key.toLowerCase()\n    if (headerNameLowerCasedRecord[headerName] === undefined && !isValidHTTPToken(headerName)) {\n      throw new InvalidArgumentError('invalid header key')\n    }\n  }\n\n  if (Array.isArray(val)) {\n    const arr = []\n    for (let i = 0; i < val.length; i++) {\n      if (typeof val[i] === 'string') {\n        if (!isValidHeaderValue(val[i])) {\n          throw new InvalidArgumentError(`invalid ${key} header`)\n        }\n        arr.push(val[i])\n      } else if (val[i] === null) {\n        arr.push('')\n      } else if (typeof val[i] === 'object') {\n        throw new InvalidArgumentError(`invalid ${key} header`)\n      } else {\n        arr.push(`${val[i]}`)\n      }\n    }\n    val = arr\n  } else if (typeof val === 'string') {\n    if (!isValidHeaderValue(val)) {\n      throw new InvalidArgumentError(`invalid ${key} header`)\n    }\n  } else if (val === null) {\n    val = ''\n  } else {\n    val = `${val}`\n  }\n\n  if (headerName === 'host') {\n    if (request.host !== null) {\n      throw new InvalidArgumentError('duplicate host header')\n    }\n    if (typeof val !== 'string') {\n      throw new InvalidArgumentError('invalid host header')\n    }\n    // Consumed by Client\n    request.host = val\n  } else if (headerName === 'content-length') {\n    if (request.contentLength !== null) {\n      throw new InvalidArgumentError('duplicate content-length header')\n    }\n    request.contentLength = parseInt(val, 10)\n    if (!Number.isFinite(request.contentLength)) {\n      throw new InvalidArgumentError('invalid content-length header')\n    }\n  } else if (request.contentType === null && headerName === 'content-type') {\n    request.contentType = val\n    request.headers.push(key, val)\n  } else if (headerName === 'transfer-encoding' || headerName === 'keep-alive' || headerName === 'upgrade') {\n    throw new InvalidArgumentError(`invalid ${headerName} header`)\n  } else if (headerName === 'connection') {\n    const value = typeof val === 'string' ? val.toLowerCase() : null\n    if (value !== 'close' && value !== 'keep-alive') {\n      throw new InvalidArgumentError('invalid connection header')\n    }\n\n    if (value === 'close') {\n      request.reset = true\n    }\n  } else if (headerName === 'expect') {\n    throw new NotSupportedError('expect header not supported')\n  } else {\n    request.headers.push(key, val)\n  }\n}\n\nmodule.exports = Request\n", "'use strict'\n\nconst { InvalidArgumentError } = require('../core/errors')\n\nmodule.exports = class WrapHandler {\n  #handler\n\n  constructor (handler) {\n    this.#handler = handler\n  }\n\n  static wrap (handler) {\n    // TODO (fix): More checks...\n    return handler.onRequestStart ? handler : new WrapHandler(handler)\n  }\n\n  // Unwrap Interface\n\n  onConnect (abort, context) {\n    return this.#handler.onConnect?.(abort, context)\n  }\n\n  onResponseStarted () {\n    return this.#handler.onResponseStarted?.()\n  }\n\n  onHeaders (statusCode, rawHeaders, resume, statusMessage) {\n    return this.#handler.onHeaders?.(statusCode, rawHeaders, resume, statusMessage)\n  }\n\n  onUpgrade (statusCode, rawHeaders, socket) {\n    return this.#handler.onUpgrade?.(statusCode, rawHeaders, socket)\n  }\n\n  onData (data) {\n    return this.#handler.onData?.(data)\n  }\n\n  onComplete (trailers) {\n    return this.#handler.onComplete?.(trailers)\n  }\n\n  onError (err) {\n    if (!this.#handler.onError) {\n      throw err\n    }\n\n    return this.#handler.onError?.(err)\n  }\n\n  // Wrap Interface\n\n  onRequestStart (controller, context) {\n    this.#handler.onConnect?.((reason) => controller.abort(reason), context)\n  }\n\n  onRequestUpgrade (controller, statusCode, headers, socket) {\n    const rawHeaders = []\n    for (const [key, val] of Object.entries(headers)) {\n      rawHeaders.push(Buffer.from(key, 'latin1'), toRawHeaderValue(val))\n    }\n\n    this.#handler.onUpgrade?.(statusCode, rawHeaders, socket)\n  }\n\n  onResponseStart (controller, statusCode, headers, statusMessage) {\n    const rawHeaders = []\n    for (const [key, val] of Object.entries(headers)) {\n      rawHeaders.push(Buffer.from(key, 'latin1'), toRawHeaderValue(val))\n    }\n\n    if (this.#handler.onHeaders?.(statusCode, rawHeaders, () => controller.resume(), statusMessage) === false) {\n      controller.pause()\n    }\n  }\n\n  onResponseData (controller, data) {\n    if (this.#handler.onData?.(data) === false) {\n      controller.pause()\n    }\n  }\n\n  onResponseEnd (controller, trailers) {\n    const rawTrailers = []\n    for (const [key, val] of Object.entries(trailers)) {\n      rawTrailers.push(Buffer.from(key, 'latin1'), toRawHeaderValue(val))\n    }\n\n    this.#handler.onComplete?.(rawTrailers)\n  }\n\n  onResponseError (controller, err) {\n    if (!this.#handler.onError) {\n      throw new InvalidArgumentError('invalid onError method')\n    }\n\n    this.#handler.onError?.(err)\n  }\n}\n\nfunction toRawHeaderValue (value) {\n  return Array.isArray(value)\n    ? value.map((item) => Buffer.from(item, 'latin1'))\n    : Buffer.from(value, 'latin1')\n}\n", "'use strict'\nconst EventEmitter = require('node:events')\nconst WrapHandler = require('../handler/wrap-handler')\n\nconst wrapInterceptor = (dispatch) => (opts, handler) => dispatch(opts, WrapHandler.wrap(handler))\n\nclass Dispatcher extends EventEmitter {\n  dispatch () {\n    throw new Error('not implemented')\n  }\n\n  close () {\n    throw new Error('not implemented')\n  }\n\n  destroy () {\n    throw new Error('not implemented')\n  }\n\n  compose (...args) {\n    // So we handle [interceptor1, interceptor2] or interceptor1, interceptor2, ...\n    const interceptors = Array.isArray(args[0]) ? args[0] : args\n    let dispatch = this.dispatch.bind(this)\n\n    for (const interceptor of interceptors) {\n      if (interceptor == null) {\n        continue\n      }\n\n      if (typeof interceptor !== 'function') {\n        throw new TypeError(`invalid interceptor, expected function received ${typeof interceptor}`)\n      }\n\n      dispatch = interceptor(dispatch)\n      dispatch = wrapInterceptor(dispatch)\n\n      if (dispatch == null || typeof dispatch !== 'function' || dispatch.length !== 2) {\n        throw new TypeError('invalid interceptor')\n      }\n    }\n\n    return new Proxy(this, {\n      get: (target, key) => key === 'dispatch' ? dispatch : target[key]\n    })\n  }\n}\n\nmodule.exports = Dispatcher\n", "'use strict'\n\nconst { parseHeaders } = require('../core/util')\nconst { InvalidArgumentError } = require('../core/errors')\n\nconst kResume = Symbol('resume')\n\nclass UnwrapController {\n  #paused = false\n  #reason = null\n  #aborted = false\n  #abort\n\n  [kResume] = null\n\n  constructor (abort) {\n    this.#abort = abort\n  }\n\n  pause () {\n    this.#paused = true\n  }\n\n  resume () {\n    if (this.#paused) {\n      this.#paused = false\n      this[kResume]?.()\n    }\n  }\n\n  abort (reason) {\n    if (!this.#aborted) {\n      this.#aborted = true\n      this.#reason = reason\n      this.#abort(reason)\n    }\n  }\n\n  get aborted () {\n    return this.#aborted\n  }\n\n  get reason () {\n    return this.#reason\n  }\n\n  get paused () {\n    return this.#paused\n  }\n}\n\nmodule.exports = class UnwrapHandler {\n  #handler\n  #controller\n\n  constructor (handler) {\n    this.#handler = handler\n  }\n\n  static unwrap (handler) {\n    // TODO (fix): More checks...\n    return !handler.onRequestStart ? handler : new UnwrapHandler(handler)\n  }\n\n  onConnect (abort, context) {\n    this.#controller = new UnwrapController(abort)\n    this.#handler.onRequestStart?.(this.#controller, context)\n  }\n\n  onResponseStarted () {\n    return this.#handler.onResponseStarted?.()\n  }\n\n  onUpgrade (statusCode, rawHeaders, socket) {\n    this.#handler.onRequestUpgrade?.(this.#controller, statusCode, parseHeaders(rawHeaders), socket)\n  }\n\n  onHeaders (statusCode, rawHeaders, resume, statusMessage) {\n    this.#controller[kResume] = resume\n    this.#handler.onResponseStart?.(this.#controller, statusCode, parseHeaders(rawHeaders), statusMessage)\n    return !this.#controller.paused\n  }\n\n  onData (data) {\n    this.#handler.onResponseData?.(this.#controller, data)\n    return !this.#controller.paused\n  }\n\n  onComplete (rawTrailers) {\n    this.#handler.onResponseEnd?.(this.#controller, parseHeaders(rawTrailers))\n  }\n\n  onError (err) {\n    if (!this.#handler.onResponseError) {\n      throw new InvalidArgumentError('invalid onError method')\n    }\n\n    this.#handler.onResponseError?.(this.#controller, err)\n  }\n}\n", "'use strict'\n\nconst Dispatcher = require('./dispatcher')\nconst UnwrapHandler = require('../handler/unwrap-handler')\nconst {\n  ClientDestroyedError,\n  ClientClosedError,\n  InvalidArgumentError\n} = require('../core/errors')\nconst { kDestroy, kClose, kClosed, kDestroyed, kDispatch } = require('../core/symbols')\n\nconst kOnDestroyed = Symbol('onDestroyed')\nconst kOnClosed = Symbol('onClosed')\n\nclass DispatcherBase extends Dispatcher {\n  /** @type {boolean} */\n  [kDestroyed] = false;\n\n  /** @type {Array<Function|null} */\n  [kOnDestroyed] = null;\n\n  /** @type {boolean} */\n  [kClosed] = false;\n\n  /** @type {Array<Function>|null} */\n  [kOnClosed] = null\n\n  /** @returns {boolean} */\n  get destroyed () {\n    return this[kDestroyed]\n  }\n\n  /** @returns {boolean} */\n  get closed () {\n    return this[kClosed]\n  }\n\n  close (callback) {\n    if (callback === undefined) {\n      return new Promise((resolve, reject) => {\n        this.close((err, data) => {\n          return err ? reject(err) : resolve(data)\n        })\n      })\n    }\n\n    if (typeof callback !== 'function') {\n      throw new InvalidArgumentError('invalid callback')\n    }\n\n    if (this[kDestroyed]) {\n      const err = new ClientDestroyedError()\n      queueMicrotask(() => callback(err, null))\n      return\n    }\n\n    if (this[kClosed]) {\n      if (this[kOnClosed]) {\n        this[kOnClosed].push(callback)\n      } else {\n        queueMicrotask(() => callback(null, null))\n      }\n      return\n    }\n\n    this[kClosed] = true\n    this[kOnClosed] ??= []\n    this[kOnClosed].push(callback)\n\n    const onClosed = () => {\n      const callbacks = this[kOnClosed]\n      this[kOnClosed] = null\n      for (let i = 0; i < callbacks.length; i++) {\n        callbacks[i](null, null)\n      }\n    }\n\n    // Should not error.\n    this[kClose]()\n      .then(() => this.destroy())\n      .then(() => queueMicrotask(onClosed))\n  }\n\n  destroy (err, callback) {\n    if (typeof err === 'function') {\n      callback = err\n      err = null\n    }\n\n    if (callback === undefined) {\n      return new Promise((resolve, reject) => {\n        this.destroy(err, (err, data) => {\n          return err ? reject(err) : resolve(data)\n        })\n      })\n    }\n\n    if (typeof callback !== 'function') {\n      throw new InvalidArgumentError('invalid callback')\n    }\n\n    if (this[kDestroyed]) {\n      if (this[kOnDestroyed]) {\n        this[kOnDestroyed].push(callback)\n      } else {\n        queueMicrotask(() => callback(null, null))\n      }\n      return\n    }\n\n    if (!err) {\n      err = new ClientDestroyedError()\n    }\n\n    this[kDestroyed] = true\n    this[kOnDestroyed] ??= []\n    this[kOnDestroyed].push(callback)\n\n    const onDestroyed = () => {\n      const callbacks = this[kOnDestroyed]\n      this[kOnDestroyed] = null\n      for (let i = 0; i < callbacks.length; i++) {\n        callbacks[i](null, null)\n      }\n    }\n\n    // Should not error.\n    this[kDestroy](err)\n      .then(() => queueMicrotask(onDestroyed))\n  }\n\n  dispatch (opts, handler) {\n    if (!handler || typeof handler !== 'object') {\n      throw new InvalidArgumentError('handler must be an object')\n    }\n\n    handler = UnwrapHandler.unwrap(handler)\n\n    try {\n      if (!opts || typeof opts !== 'object') {\n        throw new InvalidArgumentError('opts must be an object.')\n      }\n\n      if (this[kDestroyed] || this[kOnDestroyed]) {\n        throw new ClientDestroyedError()\n      }\n\n      if (this[kClosed]) {\n        throw new ClientClosedError()\n      }\n\n      return this[kDispatch](opts, handler)\n    } catch (err) {\n      if (typeof handler.onError !== 'function') {\n        throw err\n      }\n\n      handler.onError(err)\n\n      return false\n    }\n  }\n}\n\nmodule.exports = DispatcherBase\n", "'use strict'\n\nconst net = require('node:net')\nconst assert = require('node:assert')\nconst util = require('./util')\nconst { InvalidArgumentError } = require('./errors')\n\nlet tls // include tls conditionally since it is not always available\n\n// TODO: session re-use does not wait for the first\n// connection to resolve the session and might therefore\n// resolve the same servername multiple times even when\n// re-use is enabled.\n\nconst SessionCache = class WeakSessionCache {\n  constructor (maxCachedSessions) {\n    this._maxCachedSessions = maxCachedSessions\n    this._sessionCache = new Map()\n    this._sessionRegistry = new FinalizationRegistry((key) => {\n      if (this._sessionCache.size < this._maxCachedSessions) {\n        return\n      }\n\n      const ref = this._sessionCache.get(key)\n      if (ref !== undefined && ref.deref() === undefined) {\n        this._sessionCache.delete(key)\n      }\n    })\n  }\n\n  get (sessionKey) {\n    const ref = this._sessionCache.get(sessionKey)\n    return ref ? ref.deref() : null\n  }\n\n  set (sessionKey, session) {\n    if (this._maxCachedSessions === 0) {\n      return\n    }\n\n    this._sessionCache.set(sessionKey, new WeakRef(session))\n    this._sessionRegistry.register(session, sessionKey)\n  }\n}\n\nfunction buildConnector ({ allowH2, useH2c, maxCachedSessions, socketPath, timeout, session: customSession, ...opts }) {\n  if (maxCachedSessions != null && (!Number.isInteger(maxCachedSessions) || maxCachedSessions < 0)) {\n    throw new InvalidArgumentError('maxCachedSessions must be a positive integer or zero')\n  }\n\n  const options = { path: socketPath, ...opts }\n  const sessionCache = new SessionCache(maxCachedSessions == null ? 100 : maxCachedSessions)\n  timeout = timeout == null ? 10e3 : timeout\n  allowH2 = allowH2 != null ? allowH2 : false\n  return function connect ({ hostname, host, protocol, port, servername, localAddress, httpSocket }, callback) {\n    let socket\n    if (protocol === 'https:') {\n      if (!tls) {\n        tls = require('node:tls')\n      }\n      servername = servername || options.servername || util.getServerName(host) || null\n\n      const sessionKey = servername || hostname\n      assert(sessionKey)\n\n      const session = customSession || sessionCache.get(sessionKey) || null\n\n      port = port || 443\n\n      socket = tls.connect({\n        highWaterMark: 16384, // TLS in node can't have bigger HWM anyway...\n        ...options,\n        servername,\n        session,\n        localAddress,\n        ALPNProtocols: allowH2 ? ['http/1.1', 'h2'] : ['http/1.1'],\n        socket: httpSocket, // upgrade socket connection\n        port,\n        host: hostname\n      })\n\n      socket\n        .on('session', function (session) {\n          // TODO (fix): Can a session become invalid once established? Don't think so?\n          sessionCache.set(sessionKey, session)\n        })\n    } else {\n      assert(!httpSocket, 'httpSocket can only be sent on TLS update')\n\n      port = port || 80\n\n      socket = net.connect({\n        highWaterMark: 64 * 1024, // Same as nodejs fs streams.\n        ...options,\n        localAddress,\n        port,\n        host: hostname\n      })\n      if (useH2c === true) {\n        socket.alpnProtocol = 'h2'\n      }\n    }\n\n    // Set TCP keep alive options on the socket here instead of in connect() for the case of assigning the socket\n    if (options.keepAlive == null || options.keepAlive) {\n      const keepAliveInitialDelay = options.keepAliveInitialDelay === undefined ? 60e3 : options.keepAliveInitialDelay\n      socket.setKeepAlive(true, keepAliveInitialDelay)\n    }\n\n    const clearConnectTimeout = util.setupConnectTimeout(new WeakRef(socket), { timeout, hostname, port })\n\n    socket\n      .setNoDelay(true)\n      .once(protocol === 'https:' ? 'secureConnect' : 'connect', function () {\n        queueMicrotask(clearConnectTimeout)\n\n        if (callback) {\n          const cb = callback\n          callback = null\n          cb(null, this)\n        }\n      })\n      .on('error', function (err) {\n        queueMicrotask(clearConnectTimeout)\n\n        if (callback) {\n          const cb = callback\n          callback = null\n          cb(err)\n        }\n      })\n\n    return socket\n  }\n}\n\nmodule.exports = buildConnector\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.enumToMap = enumToMap;\nfunction enumToMap(obj, filter = [], exceptions = []) {\n    const emptyFilter = (filter?.length ?? 0) === 0;\n    const emptyExceptions = (exceptions?.length ?? 0) === 0;\n    return Object.fromEntries(Object.entries(obj).filter(([, value]) => {\n        return (typeof value === 'number' &&\n            (emptyFilter || filter.includes(value)) &&\n            (emptyExceptions || !exceptions.includes(value)));\n    }));\n}\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SPECIAL_HEADERS = exports.MINOR = exports.MAJOR = exports.HTAB_SP_VCHAR_OBS_TEXT = exports.QUOTED_STRING = exports.CONNECTION_TOKEN_CHARS = exports.HEADER_CHARS = exports.TOKEN = exports.HEX = exports.URL_CHAR = exports.USERINFO_CHARS = exports.MARK = exports.ALPHANUM = exports.NUM = exports.HEX_MAP = exports.NUM_MAP = exports.ALPHA = exports.STATUSES_HTTP = exports.H_METHOD_MAP = exports.METHOD_MAP = exports.METHODS_RTSP = exports.METHODS_ICE = exports.METHODS_HTTP = exports.HEADER_STATE = exports.FINISH = exports.STATUSES = exports.METHODS = exports.LENIENT_FLAGS = exports.FLAGS = exports.TYPE = exports.ERROR = void 0;\nconst utils_1 = require(\"./utils\");\n// Emums\nexports.ERROR = {\n    OK: 0,\n    INTERNAL: 1,\n    STRICT: 2,\n    CR_EXPECTED: 25,\n    LF_EXPECTED: 3,\n    UNEXPECTED_CONTENT_LENGTH: 4,\n    UNEXPECTED_SPACE: 30,\n    CLOSED_CONNECTION: 5,\n    INVALID_METHOD: 6,\n    INVALID_URL: 7,\n    INVALID_CONSTANT: 8,\n    INVALID_VERSION: 9,\n    INVALID_HEADER_TOKEN: 10,\n    INVALID_CONTENT_LENGTH: 11,\n    INVALID_CHUNK_SIZE: 12,\n    INVALID_STATUS: 13,\n    INVALID_EOF_STATE: 14,\n    INVALID_TRANSFER_ENCODING: 15,\n    CB_MESSAGE_BEGIN: 16,\n    CB_HEADERS_COMPLETE: 17,\n    CB_MESSAGE_COMPLETE: 18,\n    CB_CHUNK_HEADER: 19,\n    CB_CHUNK_COMPLETE: 20,\n    PAUSED: 21,\n    PAUSED_UPGRADE: 22,\n    PAUSED_H2_UPGRADE: 23,\n    USER: 24,\n    CB_URL_COMPLETE: 26,\n    CB_STATUS_COMPLETE: 27,\n    CB_METHOD_COMPLETE: 32,\n    CB_VERSION_COMPLETE: 33,\n    CB_HEADER_FIELD_COMPLETE: 28,\n    CB_HEADER_VALUE_COMPLETE: 29,\n    CB_CHUNK_EXTENSION_NAME_COMPLETE: 34,\n    CB_CHUNK_EXTENSION_VALUE_COMPLETE: 35,\n    CB_RESET: 31,\n    CB_PROTOCOL_COMPLETE: 38,\n};\nexports.TYPE = {\n    BOTH: 0, // default\n    REQUEST: 1,\n    RESPONSE: 2,\n};\nexports.FLAGS = {\n    CONNECTION_KEEP_ALIVE: 1 << 0,\n    CONNECTION_CLOSE: 1 << 1,\n    CONNECTION_UPGRADE: 1 << 2,\n    CHUNKED: 1 << 3,\n    UPGRADE: 1 << 4,\n    CONTENT_LENGTH: 1 << 5,\n    SKIPBODY: 1 << 6,\n    TRAILING: 1 << 7,\n    // 1 << 8 is unused\n    TRANSFER_ENCODING: 1 << 9,\n};\nexports.LENIENT_FLAGS = {\n    HEADERS: 1 << 0,\n    CHUNKED_LENGTH: 1 << 1,\n    KEEP_ALIVE: 1 << 2,\n    TRANSFER_ENCODING: 1 << 3,\n    VERSION: 1 << 4,\n    DATA_AFTER_CLOSE: 1 << 5,\n    OPTIONAL_LF_AFTER_CR: 1 << 6,\n    OPTIONAL_CRLF_AFTER_CHUNK: 1 << 7,\n    OPTIONAL_CR_BEFORE_LF: 1 << 8,\n    SPACES_AFTER_CHUNK_SIZE: 1 << 9,\n};\nexports.METHODS = {\n    'DELETE': 0,\n    'GET': 1,\n    'HEAD': 2,\n    'POST': 3,\n    'PUT': 4,\n    /* pathological */\n    'CONNECT': 5,\n    'OPTIONS': 6,\n    'TRACE': 7,\n    /* WebDAV */\n    'COPY': 8,\n    'LOCK': 9,\n    'MKCOL': 10,\n    'MOVE': 11,\n    'PROPFIND': 12,\n    'PROPPATCH': 13,\n    'SEARCH': 14,\n    'UNLOCK': 15,\n    'BIND': 16,\n    'REBIND': 17,\n    'UNBIND': 18,\n    'ACL': 19,\n    /* subversion */\n    'REPORT': 20,\n    'MKACTIVITY': 21,\n    'CHECKOUT': 22,\n    'MERGE': 23,\n    /* upnp */\n    'M-SEARCH': 24,\n    'NOTIFY': 25,\n    'SUBSCRIBE': 26,\n    'UNSUBSCRIBE': 27,\n    /* RFC-5789 */\n    'PATCH': 28,\n    'PURGE': 29,\n    /* CalDAV */\n    'MKCALENDAR': 30,\n    /* RFC-2068, section 19.6.1.2 */\n    'LINK': 31,\n    'UNLINK': 32,\n    /* icecast */\n    'SOURCE': 33,\n    /* RFC-7540, section 11.6 */\n    'PRI': 34,\n    /* RFC-2326 RTSP */\n    'DESCRIBE': 35,\n    'ANNOUNCE': 36,\n    'SETUP': 37,\n    'PLAY': 38,\n    'PAUSE': 39,\n    'TEARDOWN': 40,\n    'GET_PARAMETER': 41,\n    'SET_PARAMETER': 42,\n    'REDIRECT': 43,\n    'RECORD': 44,\n    /* RAOP */\n    'FLUSH': 45,\n    /* DRAFT https://www.ietf.org/archive/id/draft-ietf-httpbis-safe-method-w-body-02.html */\n    'QUERY': 46,\n};\nexports.STATUSES = {\n    CONTINUE: 100,\n    SWITCHING_PROTOCOLS: 101,\n    PROCESSING: 102,\n    EARLY_HINTS: 103,\n    RESPONSE_IS_STALE: 110, // Unofficial\n    REVALIDATION_FAILED: 111, // Unofficial\n    DISCONNECTED_OPERATION: 112, // Unofficial\n    HEURISTIC_EXPIRATION: 113, // Unofficial\n    MISCELLANEOUS_WARNING: 199, // Unofficial\n    OK: 200,\n    CREATED: 201,\n    ACCEPTED: 202,\n    NON_AUTHORITATIVE_INFORMATION: 203,\n    NO_CONTENT: 204,\n    RESET_CONTENT: 205,\n    PARTIAL_CONTENT: 206,\n    MULTI_STATUS: 207,\n    ALREADY_REPORTED: 208,\n    TRANSFORMATION_APPLIED: 214, // Unofficial\n    IM_USED: 226,\n    MISCELLANEOUS_PERSISTENT_WARNING: 299, // Unofficial\n    MULTIPLE_CHOICES: 300,\n    MOVED_PERMANENTLY: 301,\n    FOUND: 302,\n    SEE_OTHER: 303,\n    NOT_MODIFIED: 304,\n    USE_PROXY: 305,\n    SWITCH_PROXY: 306, // No longer used\n    TEMPORARY_REDIRECT: 307,\n    PERMANENT_REDIRECT: 308,\n    BAD_REQUEST: 400,\n    UNAUTHORIZED: 401,\n    PAYMENT_REQUIRED: 402,\n    FORBIDDEN: 403,\n    NOT_FOUND: 404,\n    METHOD_NOT_ALLOWED: 405,\n    NOT_ACCEPTABLE: 406,\n    PROXY_AUTHENTICATION_REQUIRED: 407,\n    REQUEST_TIMEOUT: 408,\n    CONFLICT: 409,\n    GONE: 410,\n    LENGTH_REQUIRED: 411,\n    PRECONDITION_FAILED: 412,\n    PAYLOAD_TOO_LARGE: 413,\n    URI_TOO_LONG: 414,\n    UNSUPPORTED_MEDIA_TYPE: 415,\n    RANGE_NOT_SATISFIABLE: 416,\n    EXPECTATION_FAILED: 417,\n    IM_A_TEAPOT: 418,\n    PAGE_EXPIRED: 419, // Unofficial\n    ENHANCE_YOUR_CALM: 420, // Unofficial\n    MISDIRECTED_REQUEST: 421,\n    UNPROCESSABLE_ENTITY: 422,\n    LOCKED: 423,\n    FAILED_DEPENDENCY: 424,\n    TOO_EARLY: 425,\n    UPGRADE_REQUIRED: 426,\n    PRECONDITION_REQUIRED: 428,\n    TOO_MANY_REQUESTS: 429,\n    REQUEST_HEADER_FIELDS_TOO_LARGE_UNOFFICIAL: 430, // Unofficial\n    REQUEST_HEADER_FIELDS_TOO_LARGE: 431,\n    LOGIN_TIMEOUT: 440, // Unofficial\n    NO_RESPONSE: 444, // Unofficial\n    RETRY_WITH: 449, // Unofficial\n    BLOCKED_BY_PARENTAL_CONTROL: 450, // Unofficial\n    UNAVAILABLE_FOR_LEGAL_REASONS: 451,\n    CLIENT_CLOSED_LOAD_BALANCED_REQUEST: 460, // Unofficial\n    INVALID_X_FORWARDED_FOR: 463, // Unofficial\n    REQUEST_HEADER_TOO_LARGE: 494, // Unofficial\n    SSL_CERTIFICATE_ERROR: 495, // Unofficial\n    SSL_CERTIFICATE_REQUIRED: 496, // Unofficial\n    HTTP_REQUEST_SENT_TO_HTTPS_PORT: 497, // Unofficial\n    INVALID_TOKEN: 498, // Unofficial\n    CLIENT_CLOSED_REQUEST: 499, // Unofficial\n    INTERNAL_SERVER_ERROR: 500,\n    NOT_IMPLEMENTED: 501,\n    BAD_GATEWAY: 502,\n    SERVICE_UNAVAILABLE: 503,\n    GATEWAY_TIMEOUT: 504,\n    HTTP_VERSION_NOT_SUPPORTED: 505,\n    VARIANT_ALSO_NEGOTIATES: 506,\n    INSUFFICIENT_STORAGE: 507,\n    LOOP_DETECTED: 508,\n    BANDWIDTH_LIMIT_EXCEEDED: 509,\n    NOT_EXTENDED: 510,\n    NETWORK_AUTHENTICATION_REQUIRED: 511,\n    WEB_SERVER_UNKNOWN_ERROR: 520, // Unofficial\n    WEB_SERVER_IS_DOWN: 521, // Unofficial\n    CONNECTION_TIMEOUT: 522, // Unofficial\n    ORIGIN_IS_UNREACHABLE: 523, // Unofficial\n    TIMEOUT_OCCURED: 524, // Unofficial\n    SSL_HANDSHAKE_FAILED: 525, // Unofficial\n    INVALID_SSL_CERTIFICATE: 526, // Unofficial\n    RAILGUN_ERROR: 527, // Unofficial\n    SITE_IS_OVERLOADED: 529, // Unofficial\n    SITE_IS_FROZEN: 530, // Unofficial\n    IDENTITY_PROVIDER_AUTHENTICATION_ERROR: 561, // Unofficial\n    NETWORK_READ_TIMEOUT: 598, // Unofficial\n    NETWORK_CONNECT_TIMEOUT: 599, // Unofficial\n};\nexports.FINISH = {\n    SAFE: 0,\n    SAFE_WITH_CB: 1,\n    UNSAFE: 2,\n};\nexports.HEADER_STATE = {\n    GENERAL: 0,\n    CONNECTION: 1,\n    CONTENT_LENGTH: 2,\n    TRANSFER_ENCODING: 3,\n    UPGRADE: 4,\n    CONNECTION_KEEP_ALIVE: 5,\n    CONNECTION_CLOSE: 6,\n    CONNECTION_UPGRADE: 7,\n    TRANSFER_ENCODING_CHUNKED: 8,\n};\n// C headers\nexports.METHODS_HTTP = [\n    exports.METHODS.DELETE,\n    exports.METHODS.GET,\n    exports.METHODS.HEAD,\n    exports.METHODS.POST,\n    exports.METHODS.PUT,\n    exports.METHODS.CONNECT,\n    exports.METHODS.OPTIONS,\n    exports.METHODS.TRACE,\n    exports.METHODS.COPY,\n    exports.METHODS.LOCK,\n    exports.METHODS.MKCOL,\n    exports.METHODS.MOVE,\n    exports.METHODS.PROPFIND,\n    exports.METHODS.PROPPATCH,\n    exports.METHODS.SEARCH,\n    exports.METHODS.UNLOCK,\n    exports.METHODS.BIND,\n    exports.METHODS.REBIND,\n    exports.METHODS.UNBIND,\n    exports.METHODS.ACL,\n    exports.METHODS.REPORT,\n    exports.METHODS.MKACTIVITY,\n    exports.METHODS.CHECKOUT,\n    exports.METHODS.MERGE,\n    exports.METHODS['M-SEARCH'],\n    exports.METHODS.NOTIFY,\n    exports.METHODS.SUBSCRIBE,\n    exports.METHODS.UNSUBSCRIBE,\n    exports.METHODS.PATCH,\n    exports.METHODS.PURGE,\n    exports.METHODS.MKCALENDAR,\n    exports.METHODS.LINK,\n    exports.METHODS.UNLINK,\n    exports.METHODS.PRI,\n    // TODO(indutny): should we allow it with HTTP?\n    exports.METHODS.SOURCE,\n    exports.METHODS.QUERY,\n];\nexports.METHODS_ICE = [\n    exports.METHODS.SOURCE,\n];\nexports.METHODS_RTSP = [\n    exports.METHODS.OPTIONS,\n    exports.METHODS.DESCRIBE,\n    exports.METHODS.ANNOUNCE,\n    exports.METHODS.SETUP,\n    exports.METHODS.PLAY,\n    exports.METHODS.PAUSE,\n    exports.METHODS.TEARDOWN,\n    exports.METHODS.GET_PARAMETER,\n    exports.METHODS.SET_PARAMETER,\n    exports.METHODS.REDIRECT,\n    exports.METHODS.RECORD,\n    exports.METHODS.FLUSH,\n    // For AirPlay\n    exports.METHODS.GET,\n    exports.METHODS.POST,\n];\nexports.METHOD_MAP = (0, utils_1.enumToMap)(exports.METHODS);\nexports.H_METHOD_MAP = Object.fromEntries(Object.entries(exports.METHODS).filter(([k]) => k.startsWith('H')));\nexports.STATUSES_HTTP = [\n    exports.STATUSES.CONTINUE,\n    exports.STATUSES.SWITCHING_PROTOCOLS,\n    exports.STATUSES.PROCESSING,\n    exports.STATUSES.EARLY_HINTS,\n    exports.STATUSES.RESPONSE_IS_STALE,\n    exports.STATUSES.REVALIDATION_FAILED,\n    exports.STATUSES.DISCONNECTED_OPERATION,\n    exports.STATUSES.HEURISTIC_EXPIRATION,\n    exports.STATUSES.MISCELLANEOUS_WARNING,\n    exports.STATUSES.OK,\n    exports.STATUSES.CREATED,\n    exports.STATUSES.ACCEPTED,\n    exports.STATUSES.NON_AUTHORITATIVE_INFORMATION,\n    exports.STATUSES.NO_CONTENT,\n    exports.STATUSES.RESET_CONTENT,\n    exports.STATUSES.PARTIAL_CONTENT,\n    exports.STATUSES.MULTI_STATUS,\n    exports.STATUSES.ALREADY_REPORTED,\n    exports.STATUSES.TRANSFORMATION_APPLIED,\n    exports.STATUSES.IM_USED,\n    exports.STATUSES.MISCELLANEOUS_PERSISTENT_WARNING,\n    exports.STATUSES.MULTIPLE_CHOICES,\n    exports.STATUSES.MOVED_PERMANENTLY,\n    exports.STATUSES.FOUND,\n    exports.STATUSES.SEE_OTHER,\n    exports.STATUSES.NOT_MODIFIED,\n    exports.STATUSES.USE_PROXY,\n    exports.STATUSES.SWITCH_PROXY,\n    exports.STATUSES.TEMPORARY_REDIRECT,\n    exports.STATUSES.PERMANENT_REDIRECT,\n    exports.STATUSES.BAD_REQUEST,\n    exports.STATUSES.UNAUTHORIZED,\n    exports.STATUSES.PAYMENT_REQUIRED,\n    exports.STATUSES.FORBIDDEN,\n    exports.STATUSES.NOT_FOUND,\n    exports.STATUSES.METHOD_NOT_ALLOWED,\n    exports.STATUSES.NOT_ACCEPTABLE,\n    exports.STATUSES.PROXY_AUTHENTICATION_REQUIRED,\n    exports.STATUSES.REQUEST_TIMEOUT,\n    exports.STATUSES.CONFLICT,\n    exports.STATUSES.GONE,\n    exports.STATUSES.LENGTH_REQUIRED,\n    exports.STATUSES.PRECONDITION_FAILED,\n    exports.STATUSES.PAYLOAD_TOO_LARGE,\n    exports.STATUSES.URI_TOO_LONG,\n    exports.STATUSES.UNSUPPORTED_MEDIA_TYPE,\n    exports.STATUSES.RANGE_NOT_SATISFIABLE,\n    exports.STATUSES.EXPECTATION_FAILED,\n    exports.STATUSES.IM_A_TEAPOT,\n    exports.STATUSES.PAGE_EXPIRED,\n    exports.STATUSES.ENHANCE_YOUR_CALM,\n    exports.STATUSES.MISDIRECTED_REQUEST,\n    exports.STATUSES.UNPROCESSABLE_ENTITY,\n    exports.STATUSES.LOCKED,\n    exports.STATUSES.FAILED_DEPENDENCY,\n    exports.STATUSES.TOO_EARLY,\n    exports.STATUSES.UPGRADE_REQUIRED,\n    exports.STATUSES.PRECONDITION_REQUIRED,\n    exports.STATUSES.TOO_MANY_REQUESTS,\n    exports.STATUSES.REQUEST_HEADER_FIELDS_TOO_LARGE_UNOFFICIAL,\n    exports.STATUSES.REQUEST_HEADER_FIELDS_TOO_LARGE,\n    exports.STATUSES.LOGIN_TIMEOUT,\n    exports.STATUSES.NO_RESPONSE,\n    exports.STATUSES.RETRY_WITH,\n    exports.STATUSES.BLOCKED_BY_PARENTAL_CONTROL,\n    exports.STATUSES.UNAVAILABLE_FOR_LEGAL_REASONS,\n    exports.STATUSES.CLIENT_CLOSED_LOAD_BALANCED_REQUEST,\n    exports.STATUSES.INVALID_X_FORWARDED_FOR,\n    exports.STATUSES.REQUEST_HEADER_TOO_LARGE,\n    exports.STATUSES.SSL_CERTIFICATE_ERROR,\n    exports.STATUSES.SSL_CERTIFICATE_REQUIRED,\n    exports.STATUSES.HTTP_REQUEST_SENT_TO_HTTPS_PORT,\n    exports.STATUSES.INVALID_TOKEN,\n    exports.STATUSES.CLIENT_CLOSED_REQUEST,\n    exports.STATUSES.INTERNAL_SERVER_ERROR,\n    exports.STATUSES.NOT_IMPLEMENTED,\n    exports.STATUSES.BAD_GATEWAY,\n    exports.STATUSES.SERVICE_UNAVAILABLE,\n    exports.STATUSES.GATEWAY_TIMEOUT,\n    exports.STATUSES.HTTP_VERSION_NOT_SUPPORTED,\n    exports.STATUSES.VARIANT_ALSO_NEGOTIATES,\n    exports.STATUSES.INSUFFICIENT_STORAGE,\n    exports.STATUSES.LOOP_DETECTED,\n    exports.STATUSES.BANDWIDTH_LIMIT_EXCEEDED,\n    exports.STATUSES.NOT_EXTENDED,\n    exports.STATUSES.NETWORK_AUTHENTICATION_REQUIRED,\n    exports.STATUSES.WEB_SERVER_UNKNOWN_ERROR,\n    exports.STATUSES.WEB_SERVER_IS_DOWN,\n    exports.STATUSES.CONNECTION_TIMEOUT,\n    exports.STATUSES.ORIGIN_IS_UNREACHABLE,\n    exports.STATUSES.TIMEOUT_OCCURED,\n    exports.STATUSES.SSL_HANDSHAKE_FAILED,\n    exports.STATUSES.INVALID_SSL_CERTIFICATE,\n    exports.STATUSES.RAILGUN_ERROR,\n    exports.STATUSES.SITE_IS_OVERLOADED,\n    exports.STATUSES.SITE_IS_FROZEN,\n    exports.STATUSES.IDENTITY_PROVIDER_AUTHENTICATION_ERROR,\n    exports.STATUSES.NETWORK_READ_TIMEOUT,\n    exports.STATUSES.NETWORK_CONNECT_TIMEOUT,\n];\nexports.ALPHA = [];\nfor (let i = 'A'.charCodeAt(0); i <= 'Z'.charCodeAt(0); i++) {\n    // Upper case\n    exports.ALPHA.push(String.fromCharCode(i));\n    // Lower case\n    exports.ALPHA.push(String.fromCharCode(i + 0x20));\n}\nexports.NUM_MAP = {\n    0: 0, 1: 1, 2: 2, 3: 3, 4: 4,\n    5: 5, 6: 6, 7: 7, 8: 8, 9: 9,\n};\nexports.HEX_MAP = {\n    0: 0, 1: 1, 2: 2, 3: 3, 4: 4,\n    5: 5, 6: 6, 7: 7, 8: 8, 9: 9,\n    A: 0XA, B: 0XB, C: 0XC, D: 0XD, E: 0XE, F: 0XF,\n    a: 0xa, b: 0xb, c: 0xc, d: 0xd, e: 0xe, f: 0xf,\n};\nexports.NUM = [\n    '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',\n];\nexports.ALPHANUM = exports.ALPHA.concat(exports.NUM);\nexports.MARK = ['-', '_', '.', '!', '~', '*', '\\'', '(', ')'];\nexports.USERINFO_CHARS = exports.ALPHANUM\n    .concat(exports.MARK)\n    .concat(['%', ';', ':', '&', '=', '+', '$', ',']);\n// TODO(indutny): use RFC\nexports.URL_CHAR = [\n    '!', '\"', '$', '%', '&', '\\'',\n    '(', ')', '*', '+', ',', '-', '.', '/',\n    ':', ';', '<', '=', '>',\n    '@', '[', '\\\\', ']', '^', '_',\n    '`',\n    '{', '|', '}', '~',\n].concat(exports.ALPHANUM);\nexports.HEX = exports.NUM.concat(['a', 'b', 'c', 'd', 'e', 'f', 'A', 'B', 'C', 'D', 'E', 'F']);\n/* Tokens as defined by rfc 2616. Also lowercases them.\n *        token       = 1*<any CHAR except CTLs or separators>\n *     separators     = \"(\" | \")\" | \"<\" | \">\" | \"@\"\n *                    | \",\" | \";\" | \":\" | \"\\\" | <\">\n *                    | \"/\" | \"[\" | \"]\" | \"?\" | \"=\"\n *                    | \"{\" | \"}\" | SP | HT\n */\nexports.TOKEN = [\n    '!', '#', '$', '%', '&', '\\'',\n    '*', '+', '-', '.',\n    '^', '_', '`',\n    '|', '~',\n].concat(exports.ALPHANUM);\n/*\n * Verify that a char is a valid visible (printable) US-ASCII\n * character or %x80-FF\n */\nexports.HEADER_CHARS = ['\\t'];\nfor (let i = 32; i <= 255; i++) {\n    if (i !== 127) {\n        exports.HEADER_CHARS.push(i);\n    }\n}\n// ',' = \\x44\nexports.CONNECTION_TOKEN_CHARS = exports.HEADER_CHARS.filter((c) => c !== 44);\nexports.QUOTED_STRING = ['\\t', ' '];\nfor (let i = 0x21; i <= 0xff; i++) {\n    if (i !== 0x22 && i !== 0x5c) { // All characters in ASCII except \\ and \"\n        exports.QUOTED_STRING.push(i);\n    }\n}\nexports.HTAB_SP_VCHAR_OBS_TEXT = ['\\t', ' '];\n// VCHAR: https://tools.ietf.org/html/rfc5234#appendix-B.1\nfor (let i = 0x21; i <= 0x7E; i++) {\n    exports.HTAB_SP_VCHAR_OBS_TEXT.push(i);\n}\n// OBS_TEXT: https://datatracker.ietf.org/doc/html/rfc9110#name-collected-abnf\nfor (let i = 0x80; i <= 0xff; i++) {\n    exports.HTAB_SP_VCHAR_OBS_TEXT.push(i);\n}\nexports.MAJOR = exports.NUM_MAP;\nexports.MINOR = exports.MAJOR;\nexports.SPECIAL_HEADERS = {\n    'connection': exports.HEADER_STATE.CONNECTION,\n    'content-length': exports.HEADER_STATE.CONTENT_LENGTH,\n    'proxy-connection': exports.HEADER_STATE.CONNECTION,\n    'transfer-encoding': exports.HEADER_STATE.TRANSFER_ENCODING,\n    'upgrade': exports.HEADER_STATE.UPGRADE,\n};\nexports.default = {\n    ERROR: exports.ERROR,\n    TYPE: exports.TYPE,\n    FLAGS: exports.FLAGS,\n    LENIENT_FLAGS: exports.LENIENT_FLAGS,\n    METHODS: exports.METHODS,\n    STATUSES: exports.STATUSES,\n    FINISH: exports.FINISH,\n    HEADER_STATE: exports.HEADER_STATE,\n    ALPHA: exports.ALPHA,\n    NUM_MAP: exports.NUM_MAP,\n    HEX_MAP: exports.HEX_MAP,\n    NUM: exports.NUM,\n    ALPHANUM: exports.ALPHANUM,\n    MARK: exports.MARK,\n    USERINFO_CHARS: exports.USERINFO_CHARS,\n    URL_CHAR: exports.URL_CHAR,\n    HEX: exports.HEX,\n    TOKEN: exports.TOKEN,\n    HEADER_CHARS: exports.HEADER_CHARS,\n    CONNECTION_TOKEN_CHARS: exports.CONNECTION_TOKEN_CHARS,\n    QUOTED_STRING: exports.QUOTED_STRING,\n    HTAB_SP_VCHAR_OBS_TEXT: exports.HTAB_SP_VCHAR_OBS_TEXT,\n    MAJOR: exports.MAJOR,\n    MINOR: exports.MINOR,\n    SPECIAL_HEADERS: exports.SPECIAL_HEADERS,\n    METHODS_HTTP: exports.METHODS_HTTP,\n    METHODS_ICE: exports.METHODS_ICE,\n    METHODS_RTSP: exports.METHODS_RTSP,\n    METHOD_MAP: exports.METHOD_MAP,\n    H_METHOD_MAP: exports.H_METHOD_MAP,\n    STATUSES_HTTP: exports.STATUSES_HTTP,\n};\n", "'use strict'\n\nconst { Buffer } = require('node:buffer')\n\nconst wasmBase64 = 'AGFzbQEAAAABJwdgAX8Bf2ADf39/AX9gAn9/AGABfwBgBH9/f38Bf2AAAGADf39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQAEA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAAzU0BQYAAAMAAAAAAAADAQMAAwMDAAACAAAAAAICAgICAgICAgIBAQEBAQEBAQEBAwAAAwAAAAQFAXABExMFAwEAAgYIAX8BQcDZBAsHxQcoBm1lbW9yeQIAC19pbml0aWFsaXplAAgZX19pbmRpcmVjdF9mdW5jdGlvbl90YWJsZQEAC2xsaHR0cF9pbml0AAkYbGxodHRwX3Nob3VsZF9rZWVwX2FsaXZlADcMbGxodHRwX2FsbG9jAAsGbWFsbG9jADkLbGxodHRwX2ZyZWUADARmcmVlAAwPbGxodHRwX2dldF90eXBlAA0VbGxodHRwX2dldF9odHRwX21ham9yAA4VbGxodHRwX2dldF9odHRwX21pbm9yAA8RbGxodHRwX2dldF9tZXRob2QAEBZsbGh0dHBfZ2V0X3N0YXR1c19jb2RlABESbGxodHRwX2dldF91cGdyYWRlABIMbGxodHRwX3Jlc2V0ABMObGxodHRwX2V4ZWN1dGUAFBRsbGh0dHBfc2V0dGluZ3NfaW5pdAAVDWxsaHR0cF9maW5pc2gAFgxsbGh0dHBfcGF1c2UAFw1sbGh0dHBfcmVzdW1lABgbbGxodHRwX3Jlc3VtZV9hZnRlcl91cGdyYWRlABkQbGxodHRwX2dldF9lcnJubwAaF2xsaHR0cF9nZXRfZXJyb3JfcmVhc29uABsXbGxodHRwX3NldF9lcnJvcl9yZWFzb24AHBRsbGh0dHBfZ2V0X2Vycm9yX3BvcwAdEWxsaHR0cF9lcnJub19uYW1lAB4SbGxodHRwX21ldGhvZF9uYW1lAB8SbGxodHRwX3N0YXR1c19uYW1lACAabGxodHRwX3NldF9sZW5pZW50X2hlYWRlcnMAISFsbGh0dHBfc2V0X2xlbmllbnRfY2h1bmtlZF9sZW5ndGgAIh1sbGh0dHBfc2V0X2xlbmllbnRfa2VlcF9hbGl2ZQAjJGxsaHR0cF9zZXRfbGVuaWVudF90cmFuc2Zlcl9lbmNvZGluZwAkGmxsaHR0cF9zZXRfbGVuaWVudF92ZXJzaW9uACUjbGxodHRwX3NldF9sZW5pZW50X2RhdGFfYWZ0ZXJfY2xvc2UAJidsbGh0dHBfc2V0X2xlbmllbnRfb3B0aW9uYWxfbGZfYWZ0ZXJfY3IAJyxsbGh0dHBfc2V0X2xlbmllbnRfb3B0aW9uYWxfY3JsZl9hZnRlcl9jaHVuawAoKGxsaHR0cF9zZXRfbGVuaWVudF9vcHRpb25hbF9jcl9iZWZvcmVfbGYAKSpsbGh0dHBfc2V0X2xlbmllbnRfc3BhY2VzX2FmdGVyX2NodW5rX3NpemUAKhhsbGh0dHBfbWVzc2FnZV9uZWVkc19lb2YANgkYAQBBAQsSAQIDBAUKBgcyNDMuKy8tLDAxCq/ZAjQWAEHA1QAoAgAEQAALQcDVAEEBNgIACxQAIAAQOCAAIAI2AjggACABOgAoCxQAIAAgAC8BNCAALQAwIAAQNxAACx4BAX9BwAAQOiIBEDggAUGACDYCOCABIAA6ACggAQuPDAEHfwJAIABFDQAgAEEIayIBIABBBGsoAgAiAEF4cSIEaiEFAkAgAEEBcQ0AIABBA3FFDQEgASABKAIAIgBrIgFB1NUAKAIASQ0BIAAgBGohBAJAAkBB2NUAKAIAIAFHBEAgAEH/AU0EQCAAQQN2IQMgASgCCCIAIAEoAgwiAkYEQEHE1QBBxNUAKAIAQX4gA3dxNgIADAULIAIgADYCCCAAIAI2AgwMBAsgASgCGCEGIAEgASgCDCIARwRAIAAgASgCCCICNgIIIAIgADYCDAwDCyABQRRqIgMoAgAiAkUEQCABKAIQIgJFDQIgAUEQaiEDCwNAIAMhByACIgBBFGoiAygCACICDQAgAEEQaiEDIAAoAhAiAg0ACyAHQQA2AgAMAgsgBSgCBCIAQQNxQQNHDQIgBSAAQX5xNgIEQczVACAENgIAIAUgBDYCACABIARBAXI2AgQMAwtBACEACyAGRQ0AAkAgASgCHCICQQJ0QfTXAGoiAygCACABRgRAIAMgADYCACAADQFByNUAQcjVACgCAEF+IAJ3cTYCAAwCCyAGQRBBFCAGKAIQIAFGG2ogADYCACAARQ0BCyAAIAY2AhggASgCECICBEAgACACNgIQIAIgADYCGAsgAUEUaigCACICRQ0AIABBFGogAjYCACACIAA2AhgLIAEgBU8NACAFKAIEIgBBAXFFDQACQAJAAkACQCAAQQJxRQRAQdzVACgCACAFRgRAQdzVACABNgIAQdDVAEHQ1QAoAgAgBGoiADYCACABIABBAXI2AgQgAUHY1QAoAgBHDQZBzNUAQQA2AgBB2NUAQQA2AgAMBgtB2NUAKAIAIAVGBEBB2NUAIAE2AgBBzNUAQczVACgCACAEaiIANgIAIAEgAEEBcjYCBCAAIAFqIAA2AgAMBgsgAEF4cSAEaiEEIABB/wFNBEAgAEEDdiEDIAUoAggiACAFKAIMIgJGBEBBxNUAQcTVACgCAEF+IAN3cTYCAAwFCyACIAA2AgggACACNgIMDAQLIAUoAhghBiAFIAUoAgwiAEcEQEHU1QAoAgAaIAAgBSgCCCICNgIIIAIgADYCDAwDCyAFQRRqIgMoAgAiAkUEQCAFKAIQIgJFDQIgBUEQaiEDCwNAIAMhByACIgBBFGoiAygCACICDQAgAEEQaiEDIAAoAhAiAg0ACyAHQQA2AgAMAgsgBSAAQX5xNgIEIAEgBGogBDYCACABIARBAXI2AgQMAwtBACEACyAGRQ0AAkAgBSgCHCICQQJ0QfTXAGoiAygCACAFRgRAIAMgADYCACAADQFByNUAQcjVACgCAEF+IAJ3cTYCAAwCCyAGQRBBFCAGKAIQIAVGG2ogADYCACAARQ0BCyAAIAY2AhggBSgCECICBEAgACACNgIQIAIgADYCGAsgBUEUaigCACICRQ0AIABBFGogAjYCACACIAA2AhgLIAEgBGogBDYCACABIARBAXI2AgQgAUHY1QAoAgBHDQBBzNUAIAQ2AgAMAQsgBEH/AU0EQCAEQXhxQezVAGohAAJ/QcTVACgCACICQQEgBEEDdnQiA3FFBEBBxNUAIAIgA3I2AgAgAAwBCyAAKAIICyICIAE2AgwgACABNgIIIAEgADYCDCABIAI2AggMAQtBHyECIARB////B00EQCAEQSYgBEEIdmciAGt2QQFxIABBAXRrQT5qIQILIAEgAjYCHCABQgA3AhAgAkECdEH01wBqIQACQEHI1QAoAgAiA0EBIAJ0IgdxRQRAIAAgATYCAEHI1QAgAyAHcjYCACABIAA2AhggASABNgIIIAEgATYCDAwBCyAEQRkgAkEBdmtBACACQR9HG3QhAiAAKAIAIQACQANAIAAiAygCBEF4cSAERg0BIAJBHXYhACACQQF0IQIgAyAAQQRxakEQaiIHKAIAIgANAAsgByABNgIAIAEgAzYCGCABIAE2AgwgASABNgIIDAELIAMoAggiACABNgIMIAMgATYCCCABQQA2AhggASADNgIMIAEgADYCCAtB5NUAQeTVACgCAEEBayIAQX8gABs2AgALCwcAIAAtACgLBwAgAC0AKgsHACAALQArCwcAIAAtACkLBwAgAC8BNAsHACAALQAwC0ABBH8gACgCGCEBIAAvAS4hAiAALQAoIQMgACgCOCEEIAAQOCAAIAQ2AjggACADOgAoIAAgAjsBLiAAIAE2AhgL5YUCAgd/A34gASACaiEEAkAgACIDKAIMIgANACADKAIEBEAgAyABNgIECyMAQRBrIgkkAAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAC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C0HjAQwHC0HXAQwGC0HYAQwFC0HZAQwEC0HaAQwDC0HbAQwCC0HdAQwBC0HcAQshAgNAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCADAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAn8CQAJAAkACQAJAAkACQAJ/AkACQAJAAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAMCfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAg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ogKiAqICogKiAqICogKiAqICogKiAqICogIAogILIAQgAUEBaiIBRw0AC0HJACECDOwCCyABQQFqIQEgA0Evai0AAEEBcQ2lAiADQQA2AhwgAyABNgIUIANBlxA2AhAgA0EKNgIMQQAhAgzrAgsgASAERwRAA0AgAS0AAEEgRw0VIAQgAUEBaiIBRw0AC0H4ACECDOsCC0H4ACECDOoCCyADQQI6ACgMOAtBACECIANBADYCHCADQb8LNgIQIANBAjYCDCADIAFBAWo2AhQM6AILQQAhAgzOAgtBDSECDM0CC0ETIQIMzAILQRUhAgzLAgtBFiECDMoCC0EYIQIMyQILQRkhAgzIAgtBGiECDMcCC0EbIQIMxgILQRwhAgzFAgtBHSECDMQCC0EeIQIMwwILQR8hAgzCAgtBICECDMECC0EiIQIMwAILQSMhAgy/AgtBJSECDL4CC0HlACECDL0CCyADQT02AhwgAyABNgIUIAMgADYCDEEAIQIM1QILIANBGzYCHCADIAE2AhQgA0GkHDYCECADQRU2AgxBACECDNQCCyADQSA2AhwgAyABNgIUIANBmBo2AhAgA0EVNgIMQQAhAgzTAgsgA0ETNgIcIAMgATYCFCADQZgaNgIQIANBFTYCDEEAIQIM0gILIANBCzYCHCADIAE2AhQgA0GYGjYCECADQRU2AgxBACECDNECCyADQRA2AhwgAyABNgIUIANBmBo2AhAgA0EVNgIMQQAhAgzQAgsgA0EgNgIcIAMgATYCFCADQaQcNgIQIANBFTYCDEEAIQIMzwILIANBCzYCHCADIAE2AhQgA0GkHDYCECADQRU2AgxBACECDM4CCyADQQw2AhwgAyABNgIUIANBpBw2AhAgA0EVNgIMQQAhAgzNAgtBACECIANBADYCHCADIAE2AhQgA0HdDjYCECADQRI2AgwMzAILAkADQAJAIAEtAABBCmsOBAACAgACCyAEIAFBAWoiAUcNAAtB/QEhAgzMAgsCQAJAIAMtADZBAUcNAEEAIQACQCADKAI4IgJFDQAgAigCYCICRQ0AIAMgAhEAACEACyAARQ0AIABBFUcNASADQfwBNgIcIAMgATYCFCADQdwZNgIQIANBFTYCDEEAIQIMzQILQdwBIQIMswILIANBADYCHCADIAE2AhQgA0H5CzYCECADQR82AgxBACECDMsCCwJAAkAgAy0AKEEBaw4CBAEAC0HbASECDLICC0HUASECDLECCyADQQI6ADFBACEAAkAgAygCOCICRQ0AIAIoAgAiAkUNACADIAIRAAAhAAsgAEUEQEHdASECDLECCyAAQRVHBEAgA0EANgIcIAMgATYCFCADQbQMNgIQIANBEDYCDEEAIQIMygILIANB+wE2AhwgAyABNgIUIANBgRo2AhAgA0EVNgIMQQAhAgzJAgsgASAERgRAQfoBIQIMyQILIAEtAABByABGDQEgA0EBOgAoC0HAASECDK4CC0HaASECDK0CCyABIARHBEAgA0EMNgIIIAMgATYCBEHZASECDK0CC0H5ASECDMUCCyABIARGBEBB+AEhAgzFAgsgAS0AAEHIAEcNBCABQQFqIQFB2AEhAgyrAgsgASAERgRAQfcBIQIMxAILAkACQCABLQAAQcUAaw4QAAUFBQUFBQUFBQUFBQUFAQULIAFBAWohAUHWASECDKsCCyABQQFqIQFB1wEhAgyqAgtB9gEhAiABIARGDcICIAMoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQbrVAGotAABHDQMgAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADMMCCyADKAIEIQAgA0IANwMAIAMgACAGQQFqIgEQLiIARQRAQeMBIQIMqgILIANB9QE2AhwgAyABNgIUIAMgADYCDEEAIQIMwgILQfQBIQIgASAERg3BAiADKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEG41QBqLQAARw0CIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzCAgsgA0GBBDsBKCADKAIEIQAgA0IANwMAIAMgACAGQQFqIgEQLiIADQMMAgsgA0EANgIAC0EAIQIgA0EANgIcIAMgATYCFCADQeUfNgIQIANBCDYCDAy/AgtB1QEhAgylAgsgA0HzATYCHCADIAE2AhQgAyAANgIMQQAhAgy9AgtBACEAAkAgAygCOCICRQ0AIAIoAkAiAkUNACADIAIRAAAhAAsgAEUNbiAAQRVHBEAgA0EANgIcIAMgATYCFCADQYIPNgIQIANBIDYCDEEAIQIMvQILIANBjwE2AhwgAyABNgIUIANB7Bs2AhAgA0EVNgIMQQAhAgy8AgsgASAERwRAIANBDTYCCCADIAE2AgRB0wEhAgyjAgtB8gEhAgy7AgsgASAERgRAQfEBIQIMuwILAkACQAJAIAEtAABByABrDgsAAQgICAgICAgIAggLIAFBAWohAUHQASECDKMCCyABQQFqIQFB0QEhAgyiAgsgAUEBaiEBQdIBIQIMoQILQfABIQIgASAERg25AiADKAIAIgAgBCABa2ohBiABIABrQQJqIQUDQCABLQAAIABBtdUAai0AAEcNBCAAQQJGDQMgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAY2AgAMuQILQe8BIQIgASAERg24AiADKAIAIgAgBCABa2ohBiABIABrQQFqIQUDQCABLQAAIABBs9UAai0AAEcNAyAAQQFGDQIgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAY2AgAMuAILQe4BIQIgASAERg23AiADKAIAIgAgBCABa2ohBiABIABrQQJqIQUDQCABLQAAIABBsNUAai0AAEcNAiAAQQJGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAY2AgAMtwILIAMoAgQhACADQgA3AwAgAyAAIAVBAWoiARArIgBFDQIgA0HsATYCHCADIAE2AhQgAyAANgIMQQAhAgy2AgsgA0EANgIACyADKAIEIQAgA0EANgIEIAMgACABECsiAEUNnAIgA0HtATYCHCADIAE2AhQgAyAANgIMQQAhAgy0AgtBzwEhAgyaAgtBACEAAkAgAygCOCICRQ0AIAIoAjQiAkUNACADIAIRAAAhAAsCQCAABEAgAEEVRg0BIANBADYCHCADIAE2AhQgA0HqDTYCECADQSY2AgxBACECDLQCC0HOASECDJoCCyADQesBNgIcIAMgATYCFCADQYAbNgIQIANBFTYCDEEAIQIMsgILIAEgBEYEQEHrASECDLICCyABLQAAQS9GBEAgAUEBaiEBDAELIANBADYCHCADIAE2AhQgA0GyODYCECADQQg2AgxBACECDLECC0HNASECDJcCCyABIARHBEAgA0EONgIIIAMgATYCBEHMASECDJcCC0HqASECDK8CCyABIARGBEBB6QEhAgyvAgsgAS0AAEEwayIAQf8BcUEKSQRAIAMgADoAKiABQQFqIQFBywEhAgyWAgsgAygCBCEAIANBADYCBCADIAAgARAvIgBFDZcCIANB6AE2AhwgAyABNgIUIAMgADYCDEEAIQIMrgILIAEgBEYEQEHnASECDK4CCwJAIAEtAABBLkYEQCABQQFqIQEMAQsgAygCBCEAIANBADYCBCADIAAgARAvIgBFDZgCIANB5gE2AhwgAyABNgIUIAMgADYCDEEAIQIMrgILQcoBIQIMlAILIAEgBEYEQEHlASECDK0CC0EAIQBBASEFQQEhB0EAIQICQAJAAkACQAJAAn8CQAJAAkACQAJAAkACQCABLQAAQTBrDgoKCQABAgMEBQYICwtBAgwGC0EDDAULQQQMBAtBBQwDC0EGDAILQQcMAQtBCAshAkEAIQVBACEHDAILQQkhAkEBIQBBACEFQQAhBwwBC0EAIQVBASECCyADIAI6ACsgAUEBaiEBAkACQCADLQAuQRBxDQACQAJAAkAgAy0AKg4DAQACBAsgB0UNAwwCCyAADQEMAgsgBUUNAQsgAygCBCEAIANBADYCBCADIAAgARAvIgBFDQIgA0HiATYCHCADIAE2AhQgAyAANgIMQQAhAgyvAgsgAygCBCEAIANBADYCBCADIAAgARAvIgBFDZoCIANB4wE2AhwgAyABNgIUIAMgADYCDEEAIQIMrgILIAMoAgQhACADQQA2AgQgAyAAIAEQLyIARQ2YAiADQeQBNgIcIAMgATYCFCADIAA2AgwMrQILQckBIQIMkwILQQAhAAJAIAMoAjgiAkUNACACKAJEIgJFDQAgAyACEQAAIQALAkAgAARAIABBFUYNASADQQA2AhwgAyABNgIUIANBpA02AhAgA0EhNgIMQQAhAgytAgtByAEhAgyTAgsgA0HhATYCHCADIAE2AhQgA0HQGjYCECADQRU2AgxBACECDKsCCyABIARGBEBB4QEhAgyrAgsCQCABLQAAQSBGBEAgA0EAOwE0IAFBAWohAQwBCyADQQA2AhwgAyABNgIUIANBmRE2AhAgA0EJNgIMQQAhAgyrAgtBxwEhAgyRAgsgASAERgRAQeABIQIMqgILAkAgAS0AAEEwa0H/AXEiAkEKSQRAIAFBAWohAQJAIAMvATQiAEGZM0sNACADIABBCmwiADsBNCAAQf7/A3EgAkH//wNzSw0AIAMgACACajsBNAwCC0EAIQIgA0EANgIcIAMgATYCFCADQZUeNgIQIANBDTYCDAyrAgsgA0EANgIcIAMgATYCFCADQZUeNgIQIANBDTYCDEEAIQIMqgILQcYBIQIMkAILIAEgBEYEQEHfASECDKkCCwJAIAEtAABBMGtB/wFxIgJBCkkEQCABQQFqIQECQCADLwE0IgBBmTNLDQAgAyAAQQpsIgA7ATQgAEH+/wNxIAJB//8Dc0sNACADIAAgAmo7ATQMAgtBACECIANBADYCHCADIAE2AhQgA0GVHjYCECADQQ02AgwMqgILIANBADYCHCADIAE2AhQgA0GVHjYCECADQQ02AgxBACECDKkCC0HFASECDI8CCyABIARGBEBB3gEhAgyoAgsCQCABLQAAQTBrQf8BcSICQQpJBEAgAUEBaiEBAkAgAy8BNCIAQZkzSw0AIAMgAEEKbCIAOwE0IABB/v8DcSACQf//A3NLDQAgAyAAIAJqOwE0DAILQQAhAiADQQA2AhwgAyABNgIUIANBlR42AhAgA0ENNgIMDKkCCyADQQA2AhwgAyABNgIUIANBlR42AhAgA0ENNgIMQQAhAgyoAgtBxAEhAgyOAgsgASAERgRAQd0BIQIMpwILAkACQAJAAkAgAS0AAEEKaw4XAgMDAAMDAwMDAwMDAwMDAwMDAwMDAwEDCyABQQFqDAULIAFBAWohAUHDASECDI8CCyABQQFqIQEgA0Evai0AAEEBcQ0IIANBADYCHCADIAE2AhQgA0GNCzYCECADQQ02AgxBACECDKcCCyADQQA2AhwgAyABNgIUIANBjQs2AhAgA0ENNgIMQQAhAgymAgsgASAERwRAIANBDzYCCCADIAE2AgRBASECDI0CC0HcASECDKUCCwJAAkADQAJAIAEtAABBCmsOBAIAAAMACyAEIAFBAWoiAUcNAAtB2wEhAgymAgsgAygCBCEAIANBADYCBCADIAAgARAtIgBFBEAgAUEBaiEBDAQLIANB2gE2AhwgAyAANgIMIAMgAUEBajYCFEEAIQIMpQILIAMoAgQhACADQQA2AgQgAyAAIAEQLSIADQEgAUEBagshAUHBASECDIoCCyADQdkBNgIcIAMgADYCDCADIAFBAWo2AhRBACECDKICC0HCASECDIgCCyADQS9qLQAAQQFxDQEgA0EANgIcIAMgATYCFCADQeQcNgIQIANBGTYCDEEAIQIMoAILIAEgBEYEQEHZASECDKACCwJAAkACQCABLQAAQQprDgQBAgIAAgsgAUEBaiEBDAILIAFBAWohAQwBCyADLQAuQcAAcUUNAQtBACEAAkAgAygCOCICRQ0AIAIoAjwiAkUNACADIAIRAAAhAAsgAEUNoAEgAEEVRgRAIANB2QA2AhwgAyABNgIUIANBtxo2AhAgA0EVNgIMQQAhAgyfAgsgA0EANgIcIAMgATYCFCADQYANNgIQIANBGzYCDEEAIQIMngILIANBADYCHCADIAE2AhQgA0HcKDYCECADQQI2AgxBACECDJ0CCyABIARHBEAgA0EMNgIIIAMgATYCBEG/ASECDIQCC0HYASECDJwCCyABIARGBEBB1wEhAgycAgsCQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAEtAABBwQBrDhUAAQIDWgQFBlpaWgcICQoLDA0ODxBaCyABQQFqIQFB+wAhAgySAgsgAUEBaiEBQfwAIQIMkQILIAFBAWohAUGBASECDJACCyABQQFqIQFBhQEhAgyPAgsgAUEBaiEBQYYBIQIMjgILIAFBAWohAUGJASECDI0CCyABQQFqIQFBigEhAgyMAgsgAUEBaiEBQY0BIQIMiwILIAFBAWohAUGWASECDIoCCyABQQFqIQFBlwEhAgyJAgsgAUEBaiEBQZgBIQIMiAILIAFBAWohAUGlASECDIcCCyABQQFqIQFBpgEhAgyGAgsgAUEBaiEBQawBIQIMhQILIAFBAWohAUG0ASECDIQCCyABQQFqIQFBtwEhAgyDAgsgAUEBaiEBQb4BIQIMggILIAEgBEYEQEHWASECDJsCCyABLQAAQc4ARw1IIAFBAWohAUG9ASECDIECCyABIARGBEBB1QEhAgyaAgsCQAJAAkAgAS0AAEHCAGsOEgBKSkpKSkpKSkoBSkpKSkpKAkoLIAFBAWohAUG4ASECDIICCyABQQFqIQFBuwEhAgyBAgsgAUEBaiEBQbwBIQIMgAILQdQBIQIgASAERg2YAiADKAIAIgAgBCABa2ohBSABIABrQQdqIQYCQANAIAEtAAAgAEGo1QBqLQAARw1FIABBB0YNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAyZAgsgA0EANgIAIAZBAWohAUEbDEULIAEgBEYEQEHTASECDJgCCwJAAkAgAS0AAEHJAGsOBwBHR0dHRwFHCyABQQFqIQFBuQEhAgz/AQsgAUEBaiEBQboBIQIM/gELQdIBIQIgASAERg2WAiADKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEGm1QBqLQAARw1DIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAyXAgsgA0EANgIAIAZBAWohAUEPDEMLQdEBIQIgASAERg2VAiADKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEGk1QBqLQAARw1CIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAyWAgsgA0EANgIAIAZBAWohAUEgDEILQdABIQIgASAERg2UAiADKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGh1QBqLQAARw1BIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAyVAgsgA0EANgIAIAZBAWohAUESDEELIAEgBEYEQEHPASECDJQCCwJAAkAgAS0AAEHFAGsODgBDQ0NDQ0NDQ0NDQ0MBQwsgAUEBaiEBQbUBIQIM+wELIAFBAWohAUG2ASECDPoBC0HOASECIAEgBEYNkgIgAygCACIAIAQgAWtqIQUgASAAa0ECaiEGAkADQCABLQAAIABBntUAai0AAEcNPyAAQQJGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAMkwILIANBADYCACAGQQFqIQFBBww/C0HNASECIAEgBEYNkQIgAygCACIAIAQgAWtqIQUgASAAa0EFaiEGAkADQCABLQAAIABBmNUAai0AAEcNPiAAQQVGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAMkgILIANBADYCACAGQQFqIQFBKAw+CyABIARGBEBBzAEhAgyRAgsCQAJAAkAgAS0AAEHFAGsOEQBBQUFBQUFBQUEBQUFBQUECQQsgAUEBaiEBQbEBIQIM+QELIAFBAWohAUGyASECDPgBCyABQQFqIQFBswEhAgz3AQtBywEhAiABIARGDY8CIAMoAgAiACAEIAFraiEFIAEgAGtBBmohBgJAA0AgAS0AACAAQZHVAGotAABHDTwgAEEGRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADJACCyADQQA2AgAgBkEBaiEBQRoMPAtBygEhAiABIARGDY4CIAMoAgAiACAEIAFraiEFIAEgAGtBA2ohBgJAA0AgAS0AACAAQY3VAGotAABHDTsgAEEDRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADI8CCyADQQA2AgAgBkEBaiEBQSEMOwsgASAERgRAQckBIQIMjgILAkACQCABLQAAQcEAaw4UAD09PT09PT09PT09PT09PT09PQE9CyABQQFqIQFBrQEhAgz1AQsgAUEBaiEBQbABIQIM9AELIAEgBEYEQEHIASECDI0CCwJAAkAgAS0AAEHVAGsOCwA8PDw8PDw8PDwBPAsgAUEBaiEBQa4BIQIM9AELIAFBAWohAUGvASECDPMBC0HHASECIAEgBEYNiwIgAygCACIAIAQgAWtqIQUgASAAa0EIaiEGAkADQCABLQAAIABBhNUAai0AAEcNOCAAQQhGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAMjAILIANBADYCACAGQQFqIQFBKgw4CyABIARGBEBBxgEhAgyLAgsgAS0AAEHQAEcNOCABQQFqIQFBJQw3C0HFASECIAEgBEYNiQIgAygCACIAIAQgAWtqIQUgASAAa0ECaiEGAkADQCABLQAAIABBgdUAai0AAEcNNiAAQQJGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAMigILIANBADYCACAGQQFqIQFBDgw2CyABIARGBEBBxAEhAgyJAgsgAS0AAEHFAEcNNiABQQFqIQFBqwEhAgzvAQsgASAERgRAQcMBIQIMiAILAkACQAJAAkAgAS0AAEHCAGsODwABAjk5OTk5OTk5OTk5AzkLIAFBAWohAUGnASECDPEBCyABQQFqIQFBqAEhAgzwAQsgAUEBaiEBQakBIQIM7wELIAFBAWohAUGqASECDO4BC0HCASECIAEgBEYNhgIgAygCACIAIAQgAWtqIQUgASAAa0ECaiEGAkADQCABLQAAIABB/tQAai0AAEcNMyAAQQJGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAMhwILIANBADYCACAGQQFqIQFBFAwzC0HBASECIAEgBEYNhQIgAygCACIAIAQgAWtqIQUgASAAa0EEaiEGAkADQCABLQAAIABB+dQAai0AAEcNMiAAQQRGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAMhgILIANBADYCACAGQQFqIQFBKwwyC0HAASECIAEgBEYNhAIgAygCACIAIAQgAWtqIQUgASAAa0ECaiEGAkADQCABLQAAIABB9tQAai0AAEcNMSAAQQJGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAMhQILIANBADYCACAGQQFqIQFBLAwxC0G/ASECIAEgBEYNgwIgAygCACIAIAQgAWtqIQUgASAAa0ECaiEGAkADQCABLQAAIABBodUAai0AAEcNMCAAQQJGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAMhAILIANBADYCACAGQQFqIQFBEQwwC0G+ASECIAEgBEYNggIgAygCACIAIAQgAWtqIQUgASAAa0EDaiEGAkADQCABLQAAIABB8tQAai0AAEcNLyAAQQNGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAMgwILIANBADYCACAGQQFqIQFBLgwvCyABIARGBEBBvQEhAgyCAgsCQAJAAkACQAJAIAEtAABBwQBrDhUANDQ0NDQ0NDQ0NAE0NAI0NAM0NAQ0CyABQQFqIQFBmwEhAgzsAQsgAUEBaiEBQZwBIQIM6wELIAFBAWohAUGdASECDOoBCyABQQFqIQFBogEhAgzpAQsgAUEBaiEBQaQBIQIM6AELIAEgBEYEQEG8ASECDIECCwJAAkAgAS0AAEHSAGsOAwAwATALIAFBAWohAUGjASECDOgBCyABQQFqIQFBBAwtC0G7ASECIAEgBEYN/wEgAygCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABB8NQAai0AAEcNLCAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAMgAILIANBADYCACAGQQFqIQFBHQwsCyABIARGBEBBugEhAgz/AQsCQAJAIAEtAABByQBrDgcBLi4uLi4ALgsgAUEBaiEBQaEBIQIM5gELIAFBAWohAUEiDCsLIAEgBEYEQEG5ASECDP4BCyABLQAAQdAARw0rIAFBAWohAUGgASECDOQBCyABIARGBEBBuAEhAgz9AQsCQAJAIAEtAABBxgBrDgsALCwsLCwsLCwsASwLIAFBAWohAUGeASECDOQBCyABQQFqIQFBnwEhAgzjAQtBtwEhAiABIARGDfsBIAMoAgAiACAEIAFraiEFIAEgAGtBA2ohBgJAA0AgAS0AACAAQezUAGotAABHDSggAEEDRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADPwBCyADQQA2AgAgBkEBaiEBQQ0MKAtBtgEhAiABIARGDfoBIAMoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQaHVAGotAABHDScgAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADPsBCyADQQA2AgAgBkEBaiEBQQwMJwtBtQEhAiABIARGDfkBIAMoAgAiACAEIAFraiEFIAEgAGtBAWohBgJAA0AgAS0AACAAQerUAGotAABHDSYgAEEBRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADPoBCyADQQA2AgAgBkEBaiEBQQMMJgtBtAEhAiABIARGDfgBIAMoAgAiACAEIAFraiEFIAEgAGtBAWohBgJAA0AgAS0AACAAQejUAGotAABHDSUgAEEBRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADPkBCyADQQA2AgAgBkEBaiEBQSYMJQsgASAERgRAQbMBIQIM+AELAkACQCABLQAAQdQAaw4CAAEnCyABQQFqIQFBmQEhAgzfAQsgAUEBaiEBQZoBIQIM3gELQbIBIQIgASAERg32ASADKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHm1ABqLQAARw0jIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAz3AQsgA0EANgIAIAZBAWohAUEnDCMLQbEBIQIgASAERg31ASADKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHk1ABqLQAARw0iIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAz2AQsgA0EANgIAIAZBAWohAUEcDCILQbABIQIgASAERg30ASADKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEHe1ABqLQAARw0hIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAz1AQsgA0EANgIAIAZBAWohAUEGDCELQa8BIQIgASAERg3zASADKAIAIgAgBCABa2ohBSABIABrQQRqIQYCQANAIAEtAAAgAEHZ1ABqLQAARw0gIABBBEYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAz0AQsgA0EANgIAIAZBAWohAUEZDCALIAEgBEYEQEGuASECDPMBCwJAAkACQAJAIAEtAABBLWsOIwAkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJAEkJCQkJAIkJCQDJAsgAUEBaiEBQY4BIQIM3AELIAFBAWohAUGPASECDNsBCyABQQFqIQFBlAEhAgzaAQsgAUEBaiEBQZUBIQIM2QELQa0BIQIgASAERg3xASADKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHX1ABqLQAARw0eIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzyAQsgA0EANgIAIAZBAWohAUELDB4LIAEgBEYEQEGsASECDPEBCwJAAkAgAS0AAEHBAGsOAwAgASALIAFBAWohAUGQASECDNgBCyABQQFqIQFBkwEhAgzXAQsgASAERgRAQasBIQIM8AELAkACQCABLQAAQcEAaw4PAB8fHx8fHx8fHx8fHx8BHwsgAUEBaiEBQZEBIQIM1wELIAFBAWohAUGSASECDNYBCyABIARGBEBBqgEhAgzvAQsgAS0AAEHMAEcNHCABQQFqIQFBCgwbC0GpASECIAEgBEYN7QEgAygCACIAIAQgAWtqIQUgASAAa0EFaiEGAkADQCABLQAAIABB0dQAai0AAEcNGiAAQQVGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM7gELIANBADYCACAGQQFqIQFBHgwaC0GoASECIAEgBEYN7AEgAygCACIAIAQgAWtqIQUgASAAa0EGaiEGAkADQCABLQAAIABBytQAai0AAEcNGSAAQQZGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM7QELIANBADYCACAGQQFqIQFBFQwZC0GnASECIAEgBEYN6wEgAygCACIAIAQgAWtqIQUgASAAa0ECaiEGAkADQCABLQAAIABBx9QAai0AAEcNGCAAQQJGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM7AELIANBADYCACAGQQFqIQFBFwwYC0GmASECIAEgBEYN6gEgAygCACIAIAQgAWtqIQUgASAAa0EFaiEGAkADQCABLQAAIABBwdQAai0AAEcNFyAAQQVGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM6wELIANBADYCACAGQQFqIQFBGAwXCyABIARGBEBBpQEhAgzqAQsCQAJAIAEtAABByQBrDgcAGRkZGRkBGQsgAUEBaiEBQYsBIQIM0QELIAFBAWohAUGMASECDNABC0GkASECIAEgBEYN6AEgAygCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABBptUAai0AAEcNFSAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM6QELIANBADYCACAGQQFqIQFBCQwVC0GjASECIAEgBEYN5wEgAygCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABBpNUAai0AAEcNFCAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM6AELIANBADYCACAGQQFqIQFBHwwUC0GiASECIAEgBEYN5gEgAygCACIAIAQgAWtqIQUgASAAa0ECaiEGAkADQCABLQAAIABBvtQAai0AAEcNEyAAQQJGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM5wELIANBADYCACAGQQFqIQFBAgwTC0GhASECIAEgBEYN5QEgAygCACIAIAQgAWtqIQUgASAAa0EBaiEGA0AgAS0AACAAQbzUAGotAABHDREgAEEBRg0CIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADOUBCyABIARGBEBBoAEhAgzlAQtBASABLQAAQd8ARw0RGiABQQFqIQFBhwEhAgzLAQsgA0EANgIAIAZBAWohAUGIASECDMoBC0GfASECIAEgBEYN4gEgAygCACIAIAQgAWtqIQUgASAAa0EIaiEGAkADQCABLQAAIABBhNUAai0AAEcNDyAAQQhGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM4wELIANBADYCACAGQQFqIQFBKQwPC0GeASECIAEgBEYN4QEgAygCACIAIAQgAWtqIQUgASAAa0EDaiEGAkADQCABLQAAIABBuNQAai0AAEcNDiAAQQNGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM4gELIANBADYCACAGQQFqIQFBLQwOCyABIARGBEBBnQEhAgzhAQsgAS0AAEHFAEcNDiABQQFqIQFBhAEhAgzHAQsgASAERgRAQZwBIQIM4AELAkACQCABLQAAQcwAaw4IAA8PDw8PDwEPCyABQQFqIQFBggEhAgzHAQsgAUEBaiEBQYMBIQIMxgELQZsBIQIgASAERg3eASADKAIAIgAgBCABa2ohBSABIABrQQRqIQYCQANAIAEtAAAgAEGz1ABqLQAARw0LIABBBEYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzfAQsgA0EANgIAIAZBAWohAUEjDAsLQZoBIQIgASAERg3dASADKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGw1ABqLQAARw0KIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzeAQsgA0EANgIAIAZBAWohAUEADAoLIAEgBEYEQEGZASECDN0BCwJAAkAgAS0AAEHIAGsOCAAMDAwMDAwBDAsgAUEBaiEBQf0AIQIMxAELIAFBAWohAUGAASECDMMBCyABIARGBEBBmAEhAgzcAQsCQAJAIAEtAABBzgBrDgMACwELCyABQQFqIQFB/gAhAgzDAQsgAUEBaiEBQf8AIQIMwgELIAEgBEYEQEGXASECDNsBCyABLQAAQdkARw0IIAFBAWohAUEIDAcLQZYBIQIgASAERg3ZASADKAIAIgAgBCABa2ohBSABIABrQQNqIQYCQANAIAEtAAAgAEGs1ABqLQAARw0GIABBA0YNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzaAQsgA0EANgIAIAZBAWohAUEFDAYLQZUBIQIgASAERg3YASADKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEGm1ABqLQAARw0FIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzZAQsgA0EANgIAIAZBAWohAUEWDAULQZQBIQIgASAERg3XASADKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGh1QBqLQAARw0EIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzYAQsgA0EANgIAIAZBAWohAUEQDAQLIAEgBEYEQEGTASECDNcBCwJAAkAgAS0AAEHDAGsODAAGBgYGBgYGBgYGAQYLIAFBAWohAUH5ACECDL4BCyABQQFqIQFB+gAhAgy9AQtBkgEhAiABIARGDdUBIAMoAgAiACAEIAFraiEFIAEgAGtBBWohBgJAA0AgAS0AACAAQaDUAGotAABHDQIgAEEFRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADNYBCyADQQA2AgAgBkEBaiEBQSQMAgsgA0EANgIADAILIAEgBEYEQEGRASECDNQBCyABLQAAQcwARw0BIAFBAWohAUETCzoAKSADKAIEIQAgA0EANgIEIAMgACABEC4iAA0CDAELQQAhAiADQQA2AhwgAyABNgIUIANB/h82AhAgA0EGNgIMDNEBC0H4ACECDLcBCyADQZABNgIcIAMgATYCFCADIAA2AgxBACECDM8BC0EAIQACQCADKAI4IgJFDQAgAigCQCICRQ0AIAMgAhEAACEACyAARQ0AIABBFUYNASADQQA2AhwgAyABNgIUIANBgg82AhAgA0EgNgIMQQAhAgzOAQtB9wAhAgy0AQsgA0GPATYCHCADIAE2AhQgA0HsGzYCECADQRU2AgxBACECDMwBCyABIARGBEBBjwEhAgzMAQsCQCABLQAAQSBGBEAgAUEBaiEBDAELIANBADYCHCADIAE2AhQgA0GbHzYCECADQQY2AgxBACECDMwBC0ECIQIMsgELA0AgAS0AAEEgRw0CIAQgAUEBaiIBRw0AC0GOASECDMoBCyABIARGBEBBjQEhAgzKAQsCQCABLQAAQQlrDgRKAABKAAtB9QAhAgywAQsgAy0AKUEFRgRAQfYAIQIMsAELQfQAIQIMrwELIAEgBEYEQEGMASECDMgBCyADQRA2AgggAyABNgIEDAoLIAEgBEYEQEGLASECDMcBCwJAIAEtAABBCWsOBEcAAEcAC0HzACECDK0BCyABIARHBEAgA0EQNgIIIAMgATYCBEHxACECDK0BC0GKASECDMUBCwJAIAEgBEcEQANAIAEtAABBoNAAai0AACIAQQNHBEACQCAAQQFrDgJJAAQLQfAAIQIMrwELIAQgAUEBaiIBRw0AC0GIASEC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BCABQQFqIgFHDQALQfsAIQIMpwELIAMoAgQhACADQQA2AgQgAyAAIAEQLCIARQ0DIANB2wA2AhwgAyABNgIUIAMgADYCDEEAIQIMpgELIAMoAgQhACADQQA2AgQgAyAAIAEQLCIARQ0DIANB3QA2AhwgAyABNgIUIAMgADYCDEEAIQIMpQELIAMoAgQhACADQQA2AgQgAyAAIAEQLCIARQ0DIANB+gA2AhwgAyABNgIUIAMgADYCDEEAIQIMpAELIANBADYCHCADIAE2AhQgA0G8CjYCECADQQc2AgxBACECDKMBC0HPACECDIkBC0HRACECDIgBC0HnACECDIcBCyABIARGBEBB+gAhAgygAQsCQCABLQAAQQlrDgQgAAAgAAsgAUEBaiEBQeYAIQIMhgELIAEgBEYEQEH5ACECDJ8BCwJAIAEtAABBCWsOBB8AAB8AC0EAIQACQCADKAI4IgJFDQAgAigCOCICRQ0AIAMgAhEAACEACyAARQRAQeIBIQIMhgELIABBFUcEQCADQQA2AhwgAyABNgIUIANByQ02AhAgA0EaNgIMQQAhAgyfAQsgA0H4ADYCHCADIAE2AhQgA0HqGjYCECADQRU2AgxBACECDJ4BCyABIARHBEAgA0ENNgIIIAMgATYCBEHkACECDIUBC0H3ACECDJ0BCyABIARGBEBB9gAhAgydAQsCQAJAAkAgAS0AAEHIAGsOCwABCwsLCwsLCwsCCwsgAUEBaiEBQd0AIQIMhQELIAFBAWohAUHgACECDIQBCyABQQFqIQFB4wAhAgyDAQtB9QAhAiABIARGDZsBIAMoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQbXVAGotAABHDQggAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADJwBCyADKAIEIQAgA0IANwMAIAMgACAGQQFqIgEQKyIABEAgA0H0ADYCHCADIAE2AhQgAyAANgIMQQAhAgycAQtB4gAhAgyCAQtBACEAAkAgAygCOCICRQ0AIAIoAjQiAkUNACADIAIRAAAhAAsCQCAABEAgAEEVRg0BIANBADYCHCADIAE2AhQgA0HqDTYCECADQSY2AgxBACECDJwBC0HhACECDIIBCyADQfMANgIcIAMgATYCFCADQYAbNgIQIANBFTYCDEEAIQIMmgELIAMtACkiAEEja0ELSQ0JAkAgAEEGSw0AQQEgAHRBygBxRQ0ADAoLQQAhAiADQQA2AhwgAyABNgIUIANB7Qk2AhAgA0EINgIMDJkBC0HyACECIAEgBEYNmAEgAygCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABBs9UAai0AAEcNBSAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAMmQELIAMoAgQhACADQgA3AwAgAyAAIAZBAWoiARArIgAEQCADQfEANgIcIAMgATYCFCADIAA2AgxBACECDJkBC0HfACECDH8LQQAhAAJAIAMoAjgiAkUNACACKAI0IgJFDQAgAyACEQAAIQALAkAgAARAIABBFUYNASADQQA2AhwgAyABNgIUIANB6g02AhAgA0EmNgIMQQAhAgyZAQtB3gAhAgx/CyADQfAANgIcIAMgATYCFCADQYAbNgIQIANBFTYCDEEAIQIMlwELIAMtAClBIUYNBiADQQA2AhwgAyABNgIUIANBkQo2AhAgA0EINgIMQQAhAgyWAQtB7wAhAiABIARGDZUBIAMoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQbDVAGotAABHDQIgAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADJYBCyADKAIEIQAgA0IANwMAIAMgACAGQQFqIgEQKyIARQ0CIANB7QA2AhwgAyABNgIUIAMgADYCDEEAIQIMlQELIANBADYCAAsgAygCBCEAIANBADYCBCADIAAgARArIgBFDYABIANB7gA2AhwgAyABNgIUIAMgADYCDEEAIQIMkwELQdwAIQIMeQtBACEAAkAgAygCOCICRQ0AIAIoAjQiAkUNACADIAIRAAAhAAsCQCAABEAgAEEVRg0BIANBADYCHCADIAE2AhQgA0HqDTYCECADQSY2AgxBACECDJMBC0HbACECDHkLIANB7AA2AhwgAyABNgIUIANBgBs2AhAgA0EVNgIMQQAhAgyRAQsgAy0AKSIAQSNJDQAgAEEuRg0AIANBADYCHCADIAE2AhQgA0HJCTYCECADQQg2AgxBACECDJABC0HaACECDHYLIAEgBEYEQEHrACECDI8BCwJAIAEtAABBL0YEQCABQQFqIQEMAQsgA0EANgIcIAMgATYCFCADQbI4NgIQIANBCDYCDEEAIQIMjwELQdkAIQIMdQsgASAERwRAIANBDjYCCCADIAE2AgRB2AAhAgx1C0HqACECDI0BCyABIARGBEBB6QAhAgyNAQsgAS0AAEEwayIAQf8BcUEKSQRAIAMgADoAKiABQQFqIQFB1wAhAgx0CyADKAIEIQAgA0EANgIEIAMgACABEC8iAEUNeiADQegANgIcIAMgATYCFCADIAA2AgxBACECDIwBCyABIARGBEBB5wAhAgyMAQsCQCABLQAAQS5GBEAgAUEBaiEBDAELIAMoAgQhACADQQA2AgQgAyAAIAEQLyIARQ17IANB5gA2AhwgAyABNgIUIAMgADYCDEEAIQIMjAELQdYAIQIMcgsgASAERgRAQeUAIQIMiwELQQAhAEEBIQVBASEHQQAhAgJAAkACQAJAAkACfwJAAkACQAJAAkACQAJAIAEtAABBMGsOCgoJAAECAwQFBggLC0ECDAYLQQMMBQtBBAwEC0EFDAMLQQYMAgtBBwwBC0EICyECQQAhBUEAIQcMAgtBCSECQQEhAEEAIQVBACEHDAELQQAhBUEBIQILIAMgAjoAKyABQQFqIQECQAJAIAMtAC5BEHENAAJAAkACQCADLQAqDgMBAAIECyAHRQ0DDAILIAANAQwCCyAFRQ0BCyADKAIEIQAgA0EANgIEIAMgACABEC8iAEUNAiADQeIANgIcIAMgATYCFCADIAA2AgxBACECDI0BCyADKAIEIQAgA0EANgIEIAMgACABEC8iAEUNfSADQeMANgIcIAMgATYCFCADIAA2AgxBACECDIwBCyADKAIEIQAgA0EANgIEIAMgACABEC8iAEUNeyADQeQANgIcIAMgATYCFCADIAA2AgwMiwELQdQAIQIMcQsgAy0AKUEiRg2GAUHTACECDHALQQAhAAJAIAMoAjgiAkUNACACKAJEIgJFDQAgAyACEQAAIQALIABFBEBB1QAhAgxwCyAAQRVHBEAgA0EANgIcIAMgATYCFCADQaQNNgIQIANBITYCDEEAIQIMiQELIANB4QA2AhwgAyABNgIUIANB0Bo2AhAgA0EVNgIMQQAhAgyIAQsgASAERgRAQeAAIQIMiAELAkACQAJAAkACQCABLQAAQQprDgQBBAQABAsgAUEBaiEBDAELIAFBAWohASADQS9qLQAAQQFxRQ0BC0HSACECDHALIANBADYCHCADIAE2AhQgA0G2ETYCECADQQk2AgxBACECDIgBCyADQQA2AhwgAyABNgIUIANBthE2AhAgA0EJNgIMQQAhAgyHAQsgASAERgRAQd8AIQIMhwELIAEtAABBCkYEQCABQQFqIQEMCQsgAy0ALkHAAHENCCADQQA2AhwgAyABNgIUIANBthE2AhAgA0ECNgIMQQAhAgyGAQsgASAERgRAQd0AIQIMhgELIAEtAAAiAkENRgRAIAFBAWohAUHQACECDG0LIAEhACACQQlrDgQFAQEFAQsgBCABIgBGBEBB3AAhAgyFAQsgAC0AAEEKRw0AIABBAWoMAgtBACECIANBADYCHCADIAA2AhQgA0HKLTYCECADQQc2AgwMgwELIAEgBEYEQEHbACECDIMBCwJAIAEtAABBCWsOBAMAAAMACyABQQFqCyEBQc4AIQIMaAsgASAERgRAQdoAIQIMgQELIAEtAABBCWsOBAABAQABC0EAIQIgA0EANgIcIANBmhI2AhAgA0EHNgIMIAMgAUEBajYCFAx/CyADQYASOwEqQQAhAAJAIAMoAjgiAkUNACACKAI4IgJFDQAgAyACEQAAIQALIABFDQAgAEEVRw0BIANB2QA2AhwgAyABNgIUIANB6ho2AhAgA0EVNgIMQQAhAgx+C0HNACECDGQLIANBADYCHCADIAE2AhQgA0HJDTYCECADQRo2AgxBACECDHwLIAEgBEYEQEHZACECDHwLIAEtAABBIEcNPSABQQFqIQEgAy0ALkEBcQ09IANBADYCHCADIAE2AhQgA0HCHDYCECADQR42AgxBACECDHsLIAEgBEYEQEHYACECDHsLAkACQAJAAkACQCABLQAAIgBBCmsOBAIDAwABCyABQQFqIQFBLCECDGULIABBOkcNASADQQA2AhwgAyABNgIUIANB5xE2AhAgA0EKNgIMQQAhAgx9CyABQQFqIQEgA0Evai0AAEEBcUUNcyADLQAyQYABcUUEQCADQTJqIQIgAxA1QQAhAAJAIAMoAjgiBkUNACAGKAIoIgZFDQAgAyAGEQAAIQALAkACQCAADhZNTEsBAQEBAQEBAQEBAQEBAQEBAQEAAQsgA0EpNgIcIAMgATYCFCADQawZNgIQIANBFTYCDEEAIQIMfgsgA0EANgIcIAMgATYCFCADQeULNgIQIANBETYCDEEAIQIMfQtBACEAAkAgAygCOCICRQ0AIAIoAlwiAkUNACADIAIRAAAhAAsgAEUNWSAAQRVHDQEgA0EFNgIcIAMgATYCFCADQZsbNgIQIANBFTYCDEEAIQIMfAtBywAhAgxiC0EAIQIgA0EANgIcIAMgATYCFCADQZAONgIQIANBFDYCDAx6CyADIAMvATJBgAFyOwEyDDsLIAEgBEcEQCADQRE2AgggAyABNgIEQcoAIQIMYAtB1wAhAgx4CyABIARGBEBB1gAhAgx4CwJAAkACQAJAIAEtAAAiAEEgciAAIABBwQBrQf8BcUEaSRtB/wFxQeMAaw4TAEBAQEBAQEBAQEBAQAFAQEACA0ALIAFBAWohAUHGACECDGELIAFBAWohAUHHACECDGALIAFBAWohAUHIACECDF8LIAFBAWohAUHJACECDF4LQdUAIQIgBCABIgBGDXYgBCABayADKAIAIgFqIQYgACABa0EFaiEHA0AgAUGQyABqLQAAIAAtAAAiBUEgciAFIAVBwQBrQf8BcUEaSRtB/wFxRw0IQQQgAUEFRg0KGiABQQFqIQEgBCAAQQFqIgBHDQALIAMgBjYCAAx2C0HUACECIAQgASIARg11IAQgAWsgAygCACIBaiEGIAAgAWtBD2ohBwNAIAFBgMgAai0AACAALQAAIgVBIHIgBSAFQcEAa0H/AXFBGkkbQf8BcUcNB0EDIAFBD0YNCRogAUEBaiEBIAQgAEEBaiIARw0ACyADIAY2AgAMdQtB0wAhAiAEIAEiAEYNdCAEIAFrIAMoAgAiAWohBiAAIAFrQQ5qIQcDQCABQeLHAGotAAAgAC0AACIFQSByIAUgBUHBAGtB/wFxQRpJG0H/AXFHDQYgAUEORg0HIAFBAWohASAEIABBAWoiAEcNAAsgAyAGNgIADHQLQdIAIQIgBCABIgBGDXMgBCABayADKAIAIgFqIQUgACABa0EBaiEGA0AgAUHgxwBqLQAAIAAtAAAiB0EgciAHIAdBwQBrQf8BcUEaSRtB/wFxRw0FIAFBAUYNAiABQQFqIQEgBCAAQQFqIgBHDQALIAMgBTYCAAxzCyABIARGBEBB0QAhAgxzCwJAAkAgAS0AACIAQSByIAAgAEHBAGtB/wFxQRpJG0H/AXFB7gBrDgcAOTk5OTkBOQsgAUEBaiEBQcMAIQIMWgsgAUEBaiEBQcQAIQIMWQsgA0EANgIAIAZBAWohAUHFACECDFgLQdAAIQIgBCABIgBGDXAgBCABayADKAIAIgFqIQYgACABa0EJaiEHA0AgAUHWxwBqLQAAIAAtAAAiBUEgciAFIAVBwQBrQf8BcUEaSRtB/wFxRw0CQQIgAUEJRg0EGiABQQFqIQEgBCAAQQFqIgBHDQALIAMgBjYCAAxwC0HPACECIAQgASIARg1vIAQgAWsgAygCACIBaiEGIAAgAWtBBWohBwNAIAFB0McAai0AACAALQAAIgVBIHIgBSAFQcEAa0H/AXFBGkkbQf8BcUcNASABQQVGDQIgAUEBaiEBIAQgAEEBaiIARw0ACyADIAY2AgAMbwsgACEBIANBADYCAAwzC0EBCzoALCADQQA2AgAgB0EBaiEBC0EtIQIMUgsCQANAIAEtAABB0MUAai0AAEEBRw0BIAQgAUEBaiIBRw0AC0HNACECDGsLQcIAIQIMUQsgASAERgRAQcwAIQIMagsgAS0AAEE6RgRAIAMoAgQhACADQQA2AgQgAyAAIAEQMCIARQ0zIANBywA2AhwgAyAANgIMIAMgAUEBajYCFEEAIQIMagsgA0EANgIcIAMgATYCFCADQecRNgIQIANBCjYCDEEAIQIMaQsCQAJAIAMtACxBAmsOAgABJwsgA0Ezai0AAEECcUUNJiADLQAuQQJxDSYgA0EANgIcIAMgATYCFCADQaYUNgIQIANBCzYCDEEAIQIMaQsgAy0AMkEgcUUNJSADLQAuQQJxDSUgA0EANgIcIAMgATYCFCADQb0TNgIQIANBDzYCDEEAIQIMaAtBACEAAkAgAygCOCICRQ0AIAIoAkgiAkUNACADIAIRAAAhAAsgAEUEQEHBACECDE8LIABBFUcEQCADQQA2AhwgAyABNgIUIANBpg82AhAgA0EcNgIMQQAhAgxoCyADQcoANgIcIAMgATYCFCADQYUcNgIQIANBFTYCDEEAIQIMZwsgASAERwRAA0AgAS0AAEHAwQBqLQAAQQFHDRcgBCABQQFqIgFHDQALQcQAIQIMZwtBxAAhAgxmCyABIARHBEADQAJAIAEtAAAiAEEgciAAIABBwQBrQf8BcUEaSRtB/wFxIgBBCUYNACAAQSBGDQACQAJAAkACQCAAQeMAaw4TAAMDAwMDAwMBAwMDAwMDAwMDAgMLIAFBAWohAUE2IQIMUgsgAUEBaiEBQTchAgxRCyABQQFqIQFBOCECDFALDBULIAQgAUEBaiIBRw0AC0E8IQIMZgtBPCECDGULIAEgBEYEQEHIACECDGULIANBEjYCCCADIAE2AgQCQAJAAkACQAJAIAMtACxBAWsOBBQAAQIJCyADLQAyQSBxDQNB4AEhAgxPCwJAIAMvATIiAEEIcUUNACADLQAoQQFHDQAgAy0ALkEIcUUNAgsgAyAAQff7A3FBgARyOwEyDAsLIAMgAy8BMkEQcjsBMgwECyADQQA2AgQgAyABIAEQMSIABEAgA0HBADYCHCADIAA2AgwgAyABQQFqNgIUQQAhAgxmCyABQQFqIQEMWAsgA0EANgIcIAMgATYCFCADQfQTNgIQIANBBDYCDEEAIQIMZAtBxwAhAiABIARGDWMgAygCACIAIAQgAWtqIQUgASAAa0EGaiEGAkADQCAAQcDFAGotAAAgAS0AAEEgckcNASAAQQZGDUogAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAMZAsgA0EANgIADAULAkAgASAERwRAA0AgAS0AAEHAwwBqLQAAIgBBAUcEQCAAQQJHDQMgAUEBaiEBDAULIAQgAUEBaiIBRw0AC0HFACECDGQLQcUAIQIMYwsLIANBADoALAwBC0ELIQIMRwtBPyECDEYLAkACQANAIAEtAAAiAEEgRwRAAkAgAEEKaw4EAwUFAwALIABBLEYNAwwECyAEIAFBAWoiAUcNAAtBxgAhAgxgCyADQQg6ACwMDgsgAy0AKEEBRw0CIAMtAC5BCHENAiADKAIEIQAgA0EANgIEIAMgACABEDEiAARAIANBwgA2AhwgAyAANgIMIAMgAUEBajYCFEEAIQIMXwsgAUEBaiEBDFALQTshAgxECwJAA0AgAS0AACIAQSBHIABBCUdxDQEgBCABQQFqIgFHDQALQcMAIQIMXQsLQTwhAgxCCwJAAkAgASAERwRAA0AgAS0AACIAQSBHBEAgAEEKaw4EAwQEAwQLIAQgAUEBaiIBRw0AC0E/IQIMXQtBPyECDFwLIAMgAy8BMkEgcjsBMgwKCyADKAIEIQAgA0EANgIEIAMgACABEDEiAEUNTiADQT42AhwgAyABNgIUIAMgADYCDEEAIQIMWgsCQCABIARHBEADQCABLQAAQcDDAGotAAAiAEEBRwRAIABBAkYNAwwMCyAEIAFBAWoiAUcNAAtBNyECDFsLQTchAgxaCyABQQFqIQEMBAtBOyECIAQgASIARg1YIAQgAWsgAygCACIBaiEGIAAgAWtBBWohBwJAA0AgAUGQyABqLQAAIAAtAAAiBUEgciAFIAVBwQBrQf8BcUEaSRtB/wFxRw0BIAFBBUYEQEEHIQEMPwsgAUEBaiEBIAQgAEEBaiIARw0ACyADIAY2AgAMWQsgA0EANgIAIAAhAQwFC0E6IQIgBCABIgBGDVcgBCABayADKAIAIgFqIQYgACABa0EIaiEHAkADQCABQbTBAGotAAAgAC0AACIFQSByIAUgBUHBAGtB/wFxQRpJG0H/AXFHDQEgAUEIRgRAQQUhAQw+CyABQQFqIQEgBCAAQQFqIgBHDQALIAMgBjYCAAxYCyADQQA2AgAgACEBDAQLQTkhAiAEIAEiAEYNViAEIAFrIAMoAgAiAWohBiAAIAFrQQNqIQcCQANAIAFBsMEAai0AACAALQAAIgVBIHIgBSAFQcEAa0H/AXFBGkkbQf8BcUcNASABQQNGBEBBBiEBDD0LIAFBAWohASAEIABBAWoiAEcNAAsgAyAGNgIADFcLIANBADYCACAAIQEMAwsCQANAIAEtAAAiAEEgRwRAIABBCmsOBAcEBAcCCyAEIAFBAWoiAUcNAAtBOCECDFYLIABBLEcNASABQQFqIQBBASEBAkACQAJAAkACQCADLQAsQQVrDgQDAQIEAAsgACEBDAQLQQIhAQwBC0EEIQELIANBAToALCADIAMvATIgAXI7ATIgACEBDAELIAMgAy8BMkEIcjsBMiAAIQELQT4hAgw7CyADQQA6ACwLQTkhAgw5CyABIARGBEBBNiECDFILAkACQAJAAkACQCABLQAAQQprDgQAAgIBAgsgAygCBCEAIANBADYCBCADIAAgARAxIgBFDQIgA0EzNgIcIAMgATYCFCADIAA2AgxBACECDFULIAMoAgQhACADQQA2AgQgAyAAIAEQMSIARQRAIAFBAWohAQwGCyADQTI2AhwgAyAANgIMIAMgAUEBajYCFEEAIQIMVAsgAy0ALkEBcQRAQd8BIQIMOwsgAygCBCEAIANBADYCBCADIAAgARAxIgANAQxJC0E0IQIMOQsgA0E1NgIcIAMgATYCFCADIAA2AgxBACECDFELQTUhAgw3CyADQS9qLQAAQQFxDQAgA0EANgIcIAMgATYCFCADQesWNgIQIANBGTYCDEEAIQIMTwtBMyECDDULIAEgBEYEQEEyIQIMTgsCQCABLQAAQQpGBEAgAUEBaiEBDAELIANBADYCHCADIAE2AhQgA0GSFzYCECADQQM2AgxBACECDE4LQTIhAgw0CyABIARGBEBBMSECDE0LAkAgAS0AACIAQQlGDQAgAEEgRg0AQQEhAgJAIAMtACxBBWsOBAYEBQANCyADIAMvATJBCHI7ATIMDAsgAy0ALkEBcUUNASADLQAsQQhHDQAgA0EAOgAsC0E9IQIMMgsgA0EANgIcIAMgATYCFCADQcIWNgIQIANBCjYCDEEAIQIMSgtBAiECDAELQQQhAgsgA0EBOgAsIAMgAy8BMiACcjsBMgwGCyABIARGBEBBMCECDEcLIAEtAABBCkYEQCABQQFqIQEMAQsgAy0ALkEBcQ0AIANBADYCHCADIAE2AhQgA0HcKDYCECADQQI2AgxBACECDEYLQTAhAgwsCyABQQFqIQFBMSECDCsLIAEgBEYEQEEvIQIMRAsgAS0AACIAQQlHIABBIEdxRQRAIAFBAWohASADLQAuQQFxDQEgA0EANgIcIAMgATYCFCADQZcQNgIQIANBCjYCDEEAIQIMRAtBASECAkACQAJAAkACQAJAIAMtACxBAmsOBwUEBAMBAgAECyADIAMvATJBCHI7ATIMAwtBAiECDAELQQQhAgsgA0EBOgAsIAMgAy8BMiACcjsBMgtBLyECDCsLIANBADYCHCADIAE2AhQgA0GEEzYCECADQQs2AgxBACECDEMLQeEBIQIMKQsgASAERgRAQS4hAgxCCyADQQA2AgQgA0ESNgIIIAMgASABEDEiAA0BC0EuIQIMJwsgA0EtNgIcIAMgATYCFCADIAA2AgxBACECDD8LQQAhAAJAIAMoAjgiAkUNACACKAJMIgJFDQAgAyACEQAAIQALIABFDQAgAEEVRw0BIANB2AA2AhwgAyABNgIUIANBsxs2AhAgA0EVNgIMQQAhAgw+C0HMACECDCQLIANBADYCHCADIAE2AhQgA0GzDjYCECADQR02AgxBACECDDwLIAEgBEYEQEHOACECDDwLIAEtAAAiAEEgRg0CIABBOkYNAQsgA0EAOgAsQQkhAgwhCyADKAIEIQAgA0EANgIEIAMgACABEDAiAA0BDAILIAMtAC5BAXEEQEHeASECDCALIAMoAgQhACADQQA2AgQgAyAAIAEQMCIARQ0CIANBKjYCHCADIAA2AgwgAyABQQFqNgIUQQAhAgw4CyADQcsANgIcIAMgADYCDCADIAFBAWo2AhRBACECDDcLIAFBAWohAUHAACECDB0LIAFBAWohAQwsCyABIARGBEBBKyECDDULAkAgAS0AAEEKRgRAIAFBAWohAQwBCyADLQAuQcAAcUUNBgsgAy0AMkGAAXEEQEEAIQACQCADKAI4IgJFDQAgAigCXCICRQ0AIAMgAhEAACEACyAARQ0SIABBFUYEQCADQQU2AhwgAyABNgIUIANBmxs2AhAgA0EVNgIMQQAhAgw2CyADQQA2AhwgAyABNgIUIANBkA42AhAgA0EUNgIMQQAhAgw1CyADQTJqIQIgAxA1QQAhAAJAIAMoAjgiBkUNACAGKAIoIgZFDQAgAyAGEQAAIQALIAAOFgIBAAQEBAQEBAQEBAQEBAQEBAQEBAMECyADQQE6ADALIAIgAi8BAEHAAHI7AQALQSshAgwYCyADQSk2AhwgAyABNgIUIANBrBk2AhAgA0EVNgIMQQAhAgwwCyADQQA2AhwgAyABNgIUIANB5Qs2AhAgA0ERNgIMQQAhAgwvCyADQQA2AhwgAyABNgIUIANBpQs2AhAgA0ECNgIMQQAhAgwuC0EBIQcgAy8BMiIFQQhxRQRAIAMpAyBCAFIhBwsCQCADLQAwBEBBASEAIAMtAClBBUYNASAFQcAAcUUgB3FFDQELAkAgAy0AKCICQQJGBEBBASEAIAMvATQiBkHlAEYNAkEAIQAgBUHAAHENAiAGQeQARg0CIAZB5gBrQQJJDQIgBkHMAUYNAiAGQbACRg0CDAELQQAhACAFQcAAcQ0BC0ECIQAgBUEIcQ0AIAVBgARxBEACQCACQQFHDQAgAy0ALkEKcQ0AQQUhAAwCC0EEIQAMAQsgBUEgcUUEQCADEDZBAEdBAnQhAAwBC0EAQQMgAykDIFAbIQALIABBAWsOBQIABwEDBAtBESECDBMLIANBAToAMQwpC0EAIQICQCADKAI4IgBFDQAgACgCMCIARQ0AIAMgABEAACECCyACRQ0mIAJBFUYEQCADQQM2AhwgAyABNgIUIANB0hs2AhAgA0EVNgIMQQAhAgwrC0EAIQIgA0EANgIcIAMgATYCFCADQd0ONgIQIANBEjYCDAwqCyADQQA2AhwgAyABNgIUIANB+SA2AhAgA0EPNgIMQQAhAgwpC0EAIQACQCADKAI4IgJFDQAgAigCMCICRQ0AIAMgAhEAACEACyAADQELQQ4hAgwOCyAAQRVGBEAgA0ECNgIcIAMgATYCFCADQdIbNgIQIANBFTYCDEEAIQIMJwsgA0EANgIcIAMgATYCFCADQd0ONgIQIANBEjYCDEEAIQIMJgtBKiECDAwLIAEgBEcEQCADQQk2AgggAyABNgIEQSkhAgwMC0EmIQIMJAsgAyADKQMgIgwgBCABa60iCn0iC0IAIAsgDFgbNwMgIAogDFQEQEElIQIMJAsgAygCBCEAIANBADYCBCADIAAgASAMp2oiARAyIgBFDQAgA0EFNgIcIAMgATYCFCADIAA2AgxBACECDCMLQQ8hAgwJC0IAIQoCQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAS0AAEEwaw43FxYAAQIDBAUGBxQUFBQUFBQICQoLDA0UFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFA4PEBESExQLQgIhCgwWC0IDIQoMFQtCBCEKDBQLQgUhCgwTC0IGIQoMEgtCByEKDBELQgghCgwQC0IJIQoMDwtCCiEKDA4LQgshCgwNC0IMIQoMDAtCDSEKDAsLQg4hCgwKC0IPIQoMCQtCCiEKDAgLQgshCgwHC0IMIQoMBgtCDSEKDAULQg4hCgwEC0IPIQoMAwsgA0EANgIcIAMgATYCFCADQZ8VNgIQIANBDDYCDEEAIQIMIQsgASAERgRAQSIhAgwhC0IAIQoCQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAEtAABBMGsONxUUAAECAwQFBgcWFhYWFhYWCAkKCwwNFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYODxAREhMWC0ICIQoMFAtCAyEKDBMLQgQhCgwSC0IFIQoMEQtCBiEKDBALQgchCgwPC0IIIQoMDgtCCSEKDA0LQgohCgwMC0ILIQoMCwtCDCEKDAoLQg0hCgwJC0IOIQoMCAtCDyEKDAcLQgohCgwGC0ILIQoMBQtCDCEKDAQLQg0hCgwDC0IOIQoMAgtCDyEKDAELQgEhCgsgAUEBaiEBIAMpAyAiC0L//////////w9YBEAgAyALQgSGIAqENwMgDAILIANBADYCHCADIAE2AhQgA0G1CTYCECADQQw2AgxBACECDB4LQSchAgwEC0EoIQIMAwsgAyABOgAsIANBADYCACAHQQFqIQFBDCECDAILIANBADYCACAGQQFqIQFBCiECDAELIAFBAWohAUEIIQIMAAsAC0EAIQIgA0EANgIcIAMgATYCFCADQbI4NgIQIANBCDYCDAwXC0EAIQIgA0EANgIcIAMgATYCFCADQYMRNgIQIANBCTYCDAwWC0EAIQIgA0EANgIcIAMgATYCFCADQd8KNgIQIANBCTYCDAwVC0EAIQIgA0EANgIcIAMgATYCFCADQe0QNgIQIANBCTYCDAwUC0EAIQIgA0EANgIcIAMgATYCFCADQdIRNgIQIANBCTYCDAwTC0EAIQIgA0EANgIcIAMgATYCFCADQbI4NgIQIANBCDYCDAwSC0EAIQIgA0EANgIcIAMgATYCFCADQYMRNgIQIANBCTYCDAwRC0EAIQIgA0EANgIcIAMgATYCFCADQd8KNgIQIANBCTYCDAwQC0EAIQIgA0EANgIcIAMgATYCFCADQe0QNgIQIANBCTYCDAwPC0EAIQIgA0EANgIcIAMgATYCFCADQdIRNgIQIANBCTYCDAwOC0EAIQIgA0EANgIcIAMgATYCFCADQbkXNgIQIANBDzYCDAwNC0EAIQIgA0EANgIcIAMgATYCFCADQbkXNgIQIANBDzYCDAwMC0EAIQIgA0EANgIcIAMgATYCFCADQZkTNgIQIANBCzYCDAwLC0EAIQIgA0EANgIcIAMgATYCFCADQZ0JNgIQIANBCzYCDAwKC0EAIQIgA0EANgIcIAMgATYCFCADQZcQNgIQIANBCjYCDAwJC0EAIQIgA0EANgIcIAMgATYCFCADQbEQNgIQIANBCjYCDAwIC0EAIQIgA0EANgIcIAMgATYCFCADQbsdNgIQIANBAjYCDAwHC0EAIQIgA0EANgIcIAMgATYCFCADQZYWNgIQIANBAjYCDAwGC0EAIQIgA0EANgIcIAMgATYCFCADQfkYNgIQIANBAjYCDAwFC0EAIQIgA0EANgIcIAMgATYCFCADQcQYNgIQIANBAjYCDAwECyADQQI2AhwgAyABNgIUIANBqR42AhAgA0EWNgIMQQAhAgwDC0HeACECIAEgBEYNAiAJQQhqIQcgAygCACEFAkACQCABIARHBEAgBUGWyABqIQggBCAFaiABayEGIAVBf3NBCmoiBSABaiEAA0AgAS0AACAILQAARwRAQQIhCAwDCyAFRQRAQQAhCCAAIQEMAwsgBUEBayEFIAhBAWohCCAEIAFBAWoiAUcNAAsgBiEFIAQhAQsgB0EBNgIAIAMgBTYCAAwBCyADQQA2AgAgByAINgIACyAHIAE2AgQgCSgCDCEAAkACQCAJKAIIQQFrDgIEAQALIANBADYCHCADQcIeNgIQIANBFzYCDCADIABBAWo2AhRBACECDAMLIANBADYCHCADIAA2AhQgA0HXHjYCECADQQk2AgxBACECDAILIAEgBEYEQEEoIQIMAgsgA0EJNgIIIAMgATYCBEEnIQIMAQsgASAERgRAQQEhAgwBCwNAAkACQAJAIAEtAABBCmsOBAABAQABCyABQQFqIQEMAQsgAUEBaiEBIAMtAC5BIHENAEEAIQIgA0EANgIcIAMgATYCFCADQaEhNgIQIANBBTYCDAwCC0EBIQIgASAERw0ACwsgCUEQaiQAIAJFBEAgAygCDCEADAELIAMgAjYCHEEAIQAgAygCBCIBRQ0AIAMgASAEIAMoAggRAQAiAUUNACADIAQ2AhQgAyABNgIMIAEhAAsgAAu+AgECfyAAQQA6AAAgAEHkAGoiAUEBa0EAOgAAIABBADoAAiAAQQA6AAEgAUEDa0EAOgAAIAFBAmtBADoAACAAQQA6AAMgAUEEa0EAOgAAQQAgAGtBA3EiASAAaiIAQQA2AgBB5AAgAWtBfHEiAiAAaiIBQQRrQQA2AgACQCACQQlJDQAgAEEANgIIIABBADYCBCABQQhrQQA2AgAgAUEMa0EANgIAIAJBGUkNACAAQQA2AhggAEEANgIUIABBADYCECAAQQA2AgwgAUEQa0EANgIAIAFBFGtBADYCACABQRhrQQA2AgAgAUEca0EANgIAIAIgAEEEcUEYciICayIBQSBJDQAgACACaiEAA0AgAEIANwMYIABCADcDECAAQgA3AwggAEIANwMAIABBIGohACABQSBrIgFBH0sNAAsLC1YBAX8CQCAAKAIMDQACQAJAAkACQCAALQAxDgMBAAMCCyAAKAI4IgFFDQAgASgCMCIBRQ0AIAAgAREAACIBDQMLQQAPCwALIABByhk2AhBBDiEBCyABCxoAIAAoAgxFBEAgAEHeHzYCECAAQRU2AgwLCxQAIAAoAgxBFUYEQCAAQQA2AgwLCxQAIAAoAgxBFkYEQCAAQQA2AgwLCwcAIAAoAgwLBwAgACgCEAsJACAAIAE2AhALBwAgACgCFAsrAAJAIABBJ08NAEL//////wkgAK2IQgGDUA0AIABBAnRB0DhqKAIADwsACxcAIABBL08EQAALIABBAnRB7DlqKAIAC78JAQF/QfQtIQECQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCAAQeQAaw70A2NiAAFhYWFhYWECAwQFYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYQYHCAkKCwwNDg9hYWFhYRBhYWFhYWFhYWFhYRFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWESExQVFhcYGRobYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYRwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1NmE3ODk6YWFhYWFhYWE7YWFhPGFhYWE9Pj9hYWFhYWFhYUBhYUFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFCQ0RFRkdISUpLTE1OT1BRUlNhYWFhYWFhYVRVVldYWVpbYVxdYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhXmFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYV9gYQtB6iwPC0GYJg8LQe0xDwtBoDcPC0HJKQ8LQbQpDwtBli0PC0HrKw8LQaI1DwtB2zQPC0HgKQ8LQeMkDwtB1SQPC0HuJA8LQeYlDwtByjQPC0HQNw8LQao1DwtB9SwPC0H2Jg8LQYIiDwtB8jMPC0G+KA8LQec3DwtBzSEPC0HAIQ8LQbglDwtByyUPC0GWJA8LQY80DwtBzTUPC0HdKg8LQe4zDwtBnDQPC0GeMQ8LQfQ1DwtB5SIPC0GvJQ8LQZkxDwtBsjYPC0H5Ng8LQcQyDwtB3SwPC0GCMQ8LQcExDwtBjTcPC0HJJA8LQew2DwtB5yoPC0HIIw8LQeIhDwtByTcPC0GlIg8LQZQiDwtB2zYPC0HeNQ8LQYYmDwtBvCsPC0GLMg8LQaAjDwtB9jAPC0GALA8LQYkrDwtBpCYPC0HyIw8LQYEoDwtBqzIPC0HrJw8LQcI2DwtBoiQPC0HPKg8LQdwjDwtBhycPC0HkNA8LQbciDwtBrTEPC0HVIg8LQa80DwtB3iYPC0HWMg8LQfQ0DwtBgTgPC0H0Nw8LQZI2DwtBnScPC0GCKQ8LQY0jDwtB1zEPC0G9NQ8LQbQ3DwtB2DAPC0G2Jw8LQZo4DwtBpyoPC0HEJw8LQa4jDwtB9SIPCwALQcomIQELIAELFwAgACAALwEuQf7/A3EgAUEAR3I7AS4LGgAgACAALwEuQf3/A3EgAUEAR0EBdHI7AS4LGgAgACAALwEuQfv/A3EgAUEAR0ECdHI7AS4LGgAgACAALwEuQff/A3EgAUEAR0EDdHI7AS4LGgAgACAALwEuQe//A3EgAUEAR0EEdHI7AS4LGgAgACAALwEuQd//A3EgAUEAR0EFdHI7AS4LGgAgACAALwEuQb//A3EgAUEAR0EGdHI7AS4LGgAgACAALwEuQf/+A3EgAUEAR0EHdHI7AS4LGgAgACAALwEuQf/9A3EgAUEAR0EIdHI7AS4LGgAgACAALwEuQf/7A3EgAUEAR0EJdHI7AS4LPgECfwJAIAAoAjgiA0UNACADKAIEIgNFDQAgACABIAIgAWsgAxEBACIEQX9HDQAgAEHhEjYCEEEYIQQLIAQLPgECfwJAIAAoAjgiA0UNACADKAIIIgNFDQAgACABIAIgAWsgAxEBACIEQX9HDQAgAEH8ETYCEEEYIQQLIAQLPgECfwJAIAAoAjgiA0UNACADKAIMIgNFDQAgACABIAIgAWsgAxEBACIEQX9HDQAgAEHsCjYCEEEYIQQLIAQLPgECfwJAIAAoAjgiA0UNACADKAIQIgNFDQAgACABIAIgAWsgAxEBACIEQX9HDQAgAEH6HjYCEEEYIQQLIAQLPgECfwJAIAAoAjgiA0UNACADKAIUIgNFDQAgACABIAIgAWsgAxEBACIEQX9HDQAgAEHLEDYCEEEYIQQLIAQLPgECfwJAIAAoAjgiA0UNACADKAIYIgNFDQAgACABIAIgAWsgAxEBACIEQX9HDQAgAEG3HzYCEEEYIQQLIAQLPgECfwJAIAAoAjgiA0UNACADKAIcIgNFDQAgACABIAIgAWsgAxEBACIEQX9HDQAgAEG/FTYCEEEYIQQLIAQLPgECfwJAIAAoAjgiA0UNACADKAIsIgNFDQAgACABIAIgAWsgAxEBACIEQX9HDQAgAEH+CDYCEEEYIQQLIAQLPgECfwJAIAAoAjgiA0UNACADKAIgIgNFDQAgACABIAIgAWsgAxEBACIEQX9HDQAgAEGMHTYCEEEYIQQLIAQLPgECfwJAIAAoAjgiA0UNACADKAIkIgNFDQAgACABIAIgAWsgAxEBACIEQX9HDQAgAEHmFTYCEEEYIQQLIAQLOAAgAAJ/IAAvATJBFHFBFEYEQEEBIAAtAChBAUYNARogAC8BNEHlAEYMAQsgAC0AKUEFRgs6ADALWQECfwJAIAAtAChBAUYNACAALwE0IgFB5ABrQeQASQ0AIAFBzAFGDQAgAUGwAkYNACAALwEyIgBBwABxDQBBASECIABBiARxQYAERg0AIABBKHFFIQILIAILjAEBAn8CQAJAAkAgAC0AKkUNACAALQArRQ0AIAAvATIiAUECcUUNAQwCCyAALwEyIgFBAXFFDQELQQEhAiAALQAoQQFGDQAgAC8BNCIAQeQAa0HkAEkNACAAQcwBRg0AIABBsAJGDQAgAUHAAHENAEEAIQIgAUGIBHFBgARGDQAgAUEocUEARyECCyACC1cAIABBGGpCADcDACAAQgA3AwAgAEE4akIANwMAIABBMGpCADcDACAAQShqQgA3AwAgAEEgakIANwMAIABBEGpCADcDACAAQQhqQgA3AwAgAEH9ATYCHAsGACAAEDoLmi0BC38jAEEQayIKJABB3NUAKAIAIglFBEBBnNkAKAIAIgVFBEBBqNkAQn83AgBBoNkAQoCAhICAgMAANwIAQZzZACAKQQhqQXBxQdiq1aoFcyIFNgIAQbDZAEEANgIAQYDZAEEANgIAC0GE2QBBwNkENgIAQdTVAEHA2QQ2AgBB6NUAIAU2AgBB5NUAQX82AgBBiNkAQcCmAzYCAANAIAFBgNYAaiABQfTVAGoiAjYCACACIAFB7NUAaiIDNgIAIAFB+NUAaiADNgIAIAFBiNYAaiABQfzVAGoiAzYCACADIAI2AgAgAUGQ1gBqIAFBhNYAaiICNgIAIAIgAzYCACABQYzWAGogAjYCACABQSBqIgFBgAJHDQALQczZBEGBpgM2AgBB4NUAQazZACgCADYCAEHQ1QBBgKYDNgIAQdzVAEHI2QQ2AgBBzP8HQTg2AgBByNkEIQkLAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAEHsAU0EQEHE1QAoAgAiBkEQIABBE2pBcHEgAEELSRsiBEEDdiIAdiIBQQNxBEACQCABQQFxIAByQQFzIgJBA3QiAEHs1QBqIgEgAEH01QBqKAIAIgAoAggiA0YEQEHE1QAgBkF+IAJ3cTYCAAwBCyABIAM2AgggAyABNgIMCyAAQQhqIQEgACACQQN0IgJBA3I2AgQgACACaiIAIAAoAgRBAXI2AgQMEQtBzNUAKAIAIgggBE8NASABBEACQEECIAB0IgJBACACa3IgASAAdHFoIgBBA3QiAkHs1QBqIgEgAkH01QBqKAIAIgIoAggiA0YEQEHE1QAgBkF+IAB3cSIGNgIADAELIAEgAzYCCCADIAE2AgwLIAIgBEEDcjYCBCAAQQN0IgAgBGshBSAAIAJqIAU2AgAgAiAEaiIEIAVBAXI2AgQgCARAIAhBeHFB7NUAaiEAQdjVACgCACEDAn9BASAIQQN2dCIBIAZxRQRAQcTVACABIAZyNgIAIAAMAQsgACgCCAsiASADNgIMIAAgAzYCCCADIAA2AgwgAyABNgIICyACQQhqIQFB2NUAIAQ2AgBBzNUAIAU2AgAMEQtByNUAKAIAIgtFDQEgC2hBAnRB9NcAaigCACIAKAIEQXhxIARrIQUgACECA0ACQCACKAIQIgFFBEAgAkEUaigCACIBRQ0BCyABKAIEQXhxIARrIgMgBUkhAiADIAUgAhshBSABIAAgAhshACABIQIMAQsLIAAoAhghCSAAKAIMIgMgAEcEQEHU1QAoAgAaIAMgACgCCCIBNgIIIAEgAzYCDAwQCyAAQRRqIgIoAgAiAUUEQCAAKAIQIgFFDQMgAEEQaiECCwNAIAIhByABIgNBFGoiAigCACIBDQAgA0EQaiECIAMoAhAiAQ0ACyAHQQA2AgAMDwtBfyEEIABBv39LDQAgAEETaiIBQXBxIQRByNUAKAIAIghFDQBBACAEayEFAkACQAJAAn9BACAEQYACSQ0AGkEfIARB////B0sNABogBEEmIAFBCHZnIgBrdkEBcSAAQQF0a0E+agsiBkECdEH01wBqKAIAIgJFBEBBACEBQQAhAwwBC0EAIQEgBEEZIAZBAXZrQQAgBkEfRxt0IQBBACEDA0ACQCACKAIEQXhxIARrIgcgBU8NACACIQMgByIFDQBBACEFIAIhAQwDCyABIAJBFGooAgAiByAHIAIgAEEddkEEcWpBEGooAgAiAkYbIAEgBxshASAAQQF0IQAgAg0ACwsgASADckUEQEEAIQNBAiAGdCIAQQAgAGtyIAhxIgBFDQMgAGhBAnRB9NcAaigCACEBCyABRQ0BCwNAIAEoAgRBeHEgBGsiAiAFSSEAIAIgBSAAGyEFIAEgAyAAGyEDIAEoAhAiAAR/IAAFIAFBFGooAgALIgENAAsLIANFDQAgBUHM1QAoAgAgBGtPDQAgAygCGCEHIAMgAygCDCIARwRAQdTVACgCABogACADKAIIIgE2AgggASAANgIMDA4LIANBFGoiAigCACIBRQRAIAMoAhAiAUUNAyADQRBqIQILA0AgAiEGIAEiAEEUaiICKAIAIgENACAAQRBqIQIgACgCECIBDQALIAZBADYCAAwNC0HM1QAoAgAiAyAETwRAQdjVACgCACEBAkAgAyAEayICQRBPBEAgASAEaiIAIAJBAXI2AgQgASADaiACNgIAIAEgBEEDcjYCBAwBCyABIANBA3I2AgQgASADaiIAIAAoAgRBAXI2AgRBACEAQQAhAgtBzNUAIAI2AgBB2NUAIAA2AgAgAUEIaiEBDA8LQdDVACgCACIDIARLBEAgBCAJaiIAIAMgBGsiAUEBcjYCBEHc1QAgADYCAEHQ1QAgATYCACAJIARBA3I2AgQgCUEIaiEBDA8LQQAhASAEAn9BnNkAKAIABEBBpNkAKAIADAELQajZAEJ/NwIAQaDZAEKAgISAgIDAADcCAEGc2QAgCkEMakFwcUHYqtWqBXM2AgBBsNkAQQA2AgBBgNkAQQA2AgBBgIAECyIAIARBxwBqIgVqIgZBACAAayIHcSICTwRAQbTZAEEwNgIADA8LAkBB/NgAKAIAIgFFDQBB9NgAKAIAIgggAmohACAAIAFNIAAgCEtxDQBBACEBQbTZAEEwNgIADA8LQYDZAC0AAEEEcQ0EAkACQCAJBEBBhNkAIQEDQCABKAIAIgAgCU0EQCAAIAEoAgRqIAlLDQMLIAEoAggiAQ0ACwtBABA7IgBBf0YNBSACIQZBoNkAKAIAIgFBAWsiAyAAcQRAIAIgAGsgACADakEAIAFrcWohBgsgBCAGTw0FIAZB/v///wdLDQVB/NgAKAIAIgMEQEH02AAoAgAiByAGaiEBIAEgB00NBiABIANLDQYLIAYQOyIBIABHDQEMBwsgBiADayAHcSIGQf7///8HSw0EIAYQOyEAIAAgASgCACABKAIEakYNAyAAIQELAkAgBiAEQcgAak8NACABQX9GDQBBpNkAKAIAIgAgBSAGa2pBACAAa3EiAEH+////B0sEQCABIQAMBwsgABA7QX9HBEAgACAGaiEGIAEhAAwHC0EAIAZrEDsaDAQLIAEiAEF/Rw0FDAMLQQAhAwwMC0EAIQAMCgsgAEF/Rw0CC0GA2QBBgNkAKAIAQQRyNgIACyACQf7///8HSw0BIAIQOyEAQQAQOyEBIABBf0YNASABQX9GDQEgACABTw0BIAEgAGsiBiAEQThqTQ0BC0H02ABB9NgAKAIAIAZqIgE2AgBB+NgAKAIAIAFJBEBB+NgAIAE2AgALAkACQAJAQdzVACgCACICBEBBhNkAIQEDQCAAIAEoAgAiAyABKAIEIgVqRg0CIAEoAggiAQ0ACwwCC0HU1QAoAgAiAUEARyAAIAFPcUUEQEHU1QAgADYCAAtBACEBQYjZACAGNgIAQYTZACAANgIAQeTVAEF/NgIAQejVAEGc2QAoAgA2AgBBkNkAQQA2AgADQCABQYDWAGogAUH01QBqIgI2AgAgAiABQezVAGoiAzYCACABQfjVAGogAzYCACABQYjWAGogAUH81QBqIgM2AgAgAyACNgIAIAFBkNYAaiABQYTWAGoiAjYCACACIAM2AgAgAUGM1gBqIAI2AgAgAUEgaiIBQYACRw0AC0F4IABrQQ9xIgEgAGoiAiAGQThrIgMgAWsiAUEBcjYCBEHg1QBBrNkAKAIANgIAQdDVACABNgIAQdzVACACNgIAIAAgA2pBODYCBAwCCyAAIAJNDQAgAiADSQ0AIAEoAgxBCHENAEF4IAJrQQ9xIgAgAmoiA0HQ1QAoAgAgBmoiByAAayIAQQFyNgIEIAEgBSAGajYCBEHg1QBBrNkAKAIANgIAQdDVACAANgIAQdzVACADNgIAIAIgB2pBODYCBAwBCyAAQdTVACgCAEkEQEHU1QAgADYCAAsgACAGaiEDQYTZACEBAkACQAJAA0AgAyABKAIARwRAIAEoAggiAQ0BDAILCyABLQAMQQhxRQ0BC0GE2QAhAQNAIAEoAgAiAyACTQRAIAMgASgCBGoiBSACSw0DCyABKAIIIQEMAAsACyABIAA2AgAgASABKAIEIAZqNgIEIABBeCAAa0EPcWoiCSAEQQNyNgIEIANBeCADa0EPcWoiBiAEIAlqIgRrIQEgAiAGRgRAQdzVACAENgIAQdDVAEHQ1QAoAgAgAWoiADYCACAEIABBAXI2AgQMCAtB2NUAKAIAIAZGBEBB2NUAIAQ2AgBBzNUAQczVACgCACABaiIANgIAIAQgAEEBcjYCBCAAIARqIAA2AgAMCAsgBigCBCIFQQNxQQFHDQYgBUF4cSEIIAVB/wFNBEAgBUEDdiEDIAYoAggiACAGKAIMIgJGBEBBxNUAQcTVACgCAEF+IAN3cTYCAAwHCyACIAA2AgggACACNgIMDAYLIAYoAhghByAGIAYoAgwiAEcEQCAAIAYoAggiAjYCCCACIAA2AgwMBQsgBkEUaiICKAIAIgVFBEAgBigCECIFRQ0EIAZBEGohAgsDQCACIQMgBSIAQRRqIgIoAgAiBQ0AIABBEGohAiAAKAIQIgUNAAsgA0EANgIADAQLQXggAGtBD3EiASAAaiIHIAZBOGsiAyABayIBQQFyNgIEIAAgA2pBODYCBCACIAVBNyAFa0EPcWpBP2siAyADIAJBEGpJGyIDQSM2AgRB4NUAQazZACgCADYCAEHQ1QAgATYCAEHc1QAgBzYCACADQRBqQYzZACkCADcCACADQYTZACkCADcCCEGM2QAgA0EIajYCAEGI2QAgBjYCAEGE2QAgADYCAEGQ2QBBADYCACADQSRqIQEDQCABQQc2AgAgBSABQQRqIgFLDQALIAIgA0YNACADIAMoAgRBfnE2AgQgAyADIAJrIgU2AgAgAiAFQQFyNgIEIAVB/wFNBEAgBUF4cUHs1QBqIQACf0HE1QAoAgAiAUEBIAVBA3Z0IgNxRQRAQcTVACABIANyNgIAIAAMAQsgACgCCAsiASACNgIMIAAgAjYCCCACIAA2AgwgAiABNgIIDAELQR8hASAFQf///wdNBEAgBUEmIAVBCHZnIgBrdkEBcSAAQQF0a0E+aiEBCyACIAE2AhwgAkIANwIQIAFBAnRB9NcAaiEAQcjVACgCACIDQQEgAXQiBnFFBEAgACACNgIAQcjVACADIAZyNgIAIAIgADYCGCACIAI2AgggAiACNgIMDAELIAVBGSABQQF2a0EAIAFBH0cbdCEBIAAoAgAhAwJAA0AgAyIAKAIEQXhxIAVGDQEgAUEddiEDIAFBAXQhASAAIANBBHFqQRBqIgYoAgAiAw0ACyAGIAI2AgAgAiAANgIYIAIgAjYCDCACIAI2AggMAQsgACgCCCIBIAI2AgwgACACNgIIIAJBADYCGCACIAA2AgwgAiABNgIIC0HQ1QAoAgAiASAETQ0AQdzVACgCACIAIARqIgIgASAEayIBQQFyNgIEQdDVACABNgIAQdzVACACNgIAIAAgBEEDcjYCBCAAQQhqIQEMCAtBACEBQbTZAEEwNgIADAcLQQAhAAsgB0UNAAJAIAYoAhwiAkECdEH01wBqIgMoAgAgBkYEQCADIAA2AgAgAA0BQcjVAEHI1QAoAgBBfiACd3E2AgAMAgsgB0EQQRQgBygCECAGRhtqIAA2AgAgAEUNAQsgACAHNgIYIAYoAhAiAgRAIAAgAjYCECACIAA2AhgLIAZBFGooAgAiAkUNACAAQRRqIAI2AgAgAiAANgIYCyABIAhqIQEgBiAIaiIGKAIEIQULIAYgBUF+cTYCBCABIARqIAE2AgAgBCABQQFyNgIEIAFB/wFNBEAgAUF4cUHs1QBqIQACf0HE1QAoAgAiAkEBIAFBA3Z0IgFxRQRAQcTVACABIAJyNgIAIAAMAQsgACgCCAsiASAENgIMIAAgBDYCCCAEIAA2AgwgBCABNgIIDAELQR8hBSABQf///wdNBEAgAUEmIAFBCHZnIgBrdkEBcSAAQQF0a0E+aiEFCyAEIAU2AhwgBEIANwIQIAVBAnRB9NcAaiEAQcjVACgCACICQQEgBXQiA3FFBEAgACAENgIAQcjVACACIANyNgIAIAQgADYCGCAEIAQ2AgggBCAENgIMDAELIAFBGSAFQQF2a0EAIAVBH0cbdCEFIAAoAgAhAAJAA0AgACICKAIEQXhxIAFGDQEgBUEddiEAIAVBAXQhBSACIABBBHFqQRBqIgMoAgAiAA0ACyADIAQ2AgAgBCACNgIYIAQgBDYCDCAEIAQ2AggMAQsgAigCCCIAIAQ2AgwgAiAENgIIIARBADYCGCAEIAI2AgwgBCAANgIICyAJQQhqIQEMAgsCQCAHRQ0AAkAgAygCHCIBQQJ0QfTXAGoiAigCACADRgRAIAIgADYCACAADQFByNUAIAhBfiABd3EiCDYCAAwCCyAHQRBBFCAHKAIQIANGG2ogADYCACAARQ0BCyAAIAc2AhggAygCECIBBEAgACABNgIQIAEgADYCGAsgA0EUaigCACIBRQ0AIABBFGogATYCACABIAA2AhgLAkAgBUEPTQRAIAMgBCAFaiIAQQNyNgIEIAAgA2oiACAAKAIEQQFyNgIEDAELIAMgBGoiAiAFQQFyNgIEIAMgBEEDcjYCBCACIAVqIAU2AgAgBUH/AU0EQCAFQXhxQezVAGohAAJ/QcTVACgCACIBQQEgBUEDdnQiBXFFBEBBxNUAIAEgBXI2AgAgAAwBCyAAKAIICyIBIAI2AgwgACACNgIIIAIgADYCDCACIAE2AggMAQtBHyEBIAVB////B00EQCAFQSYgBUEIdmciAGt2QQFxIABBAXRrQT5qIQELIAIgATYCHCACQgA3AhAgAUECdEH01wBqIQBBASABdCIEIAhxRQRAIAAgAjYCAEHI1QAgBCAIcjYCACACIAA2AhggAiACNgIIIAIgAjYCDAwBCyAFQRkgAUEBdmtBACABQR9HG3QhASAAKAIAIQQCQANAIAQiACgCBEF4cSAFRg0BIAFBHXYhBCABQQF0IQEgACAEQQRxakEQaiIGKAIAIgQNAAsgBiACNgIAIAIgADYCGCACIAI2AgwgAiACNgIIDAELIAAoAggiASACNgIMIAAgAjYCCCACQQA2AhggAiAANgIMIAIgATYCCAsgA0EIaiEBDAELAkAgCUUNAAJAIAAoAhwiAUECdEH01wBqIgIoAgAgAEYEQCACIAM2AgAgAw0BQcjVACALQX4gAXdxNgIADAILIAlBEEEUIAkoAhAgAEYbaiADNgIAIANFDQELIAMgCTYCGCAAKAIQIgEEQCADIAE2AhAgASADNgIYCyAAQRRqKAIAIgFFDQAgA0EUaiABNgIAIAEgAzYCGAsCQCAFQQ9NBEAgACAEIAVqIgFBA3I2AgQgACABaiIBIAEoAgRBAXI2AgQMAQsgACAEaiIHIAVBAXI2AgQgACAEQQNyNgIEIAUgB2ogBTYCACAIBEAgCEF4cUHs1QBqIQFB2NUAKAIAIQMCf0EBIAhBA3Z0IgIgBnFFBEBBxNUAIAIgBnI2AgAgAQwBCyABKAIICyICIAM2AgwgASADNgIIIAMgATYCDCADIAI2AggLQdjVACAHNgIAQczVACAFNgIACyAAQQhqIQELIApBEGokACABC0MAIABFBEA/AEEQdA8LAkAgAEH//wNxDQAgAEEASA0AIABBEHZAACIAQX9GBEBBtNkAQTA2AgBBfw8LIABBEHQPCwALC5lCIgBBgAgLDQEAAAAAAAAAAgAAAAMAQZgICwUEAAAABQBBqAgLCQYAAAAHAAAACABB5AgLwjJJbnZhbGlkIGNoYXIgaW4gdXJsIHF1ZXJ5AFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fYm9keQBDb250ZW50LUxlbmd0aCBvdmVyZmxvdwBDaHVuayBzaXplIG92ZXJmbG93AEludmFsaWQgbWV0aG9kIGZvciBIVFRQL3gueCByZXF1ZXN0AEludmFsaWQgbWV0aG9kIGZvciBSVFNQL3gueCByZXF1ZXN0AEV4cGVjdGVkIFNPVVJDRSBtZXRob2QgZm9yIElDRS94LnggcmVxdWVzdABJbnZhbGlkIGNoYXIgaW4gdXJsIGZyYWdtZW50IHN0YXJ0AEV4cGVjdGVkIGRvdABTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3N0YXR1cwBJbnZhbGlkIHJlc3BvbnNlIHN0YXR1cwBFeHBlY3RlZCBMRiBhZnRlciBoZWFkZXJzAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMAVXNlciBjYWxsYmFjayBlcnJvcgBgb25fcmVzZXRgIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19oZWFkZXJgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXNzYWdlX2JlZ2luYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfZXh0ZW5zaW9uX3ZhbHVlYCBjYWxsYmFjayBlcnJvcgBgb25fc3RhdHVzX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fdmVyc2lvbl9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3VybF9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3Byb3RvY29sX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9oZWFkZXJfdmFsdWVfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXNzYWdlX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fbWV0aG9kX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25faGVhZGVyX2ZpZWxkX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfZXh0ZW5zaW9uX25hbWVgIGNhbGxiYWNrIGVycm9yAFVuZXhwZWN0ZWQgY2hhciBpbiB1cmwgc2VydmVyAEludmFsaWQgaGVhZGVyIHZhbHVlIGNoYXIASW52YWxpZCBoZWFkZXIgZmllbGQgY2hhcgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3ZlcnNpb24ASW52YWxpZCBtaW5vciB2ZXJzaW9uAEludmFsaWQgbWFqb3IgdmVyc2lvbgBFeHBlY3RlZCBzcGFjZSBhZnRlciB2ZXJzaW9uAEV4cGVjdGVkIENSTEYgYWZ0ZXIgdmVyc2lvbgBJbnZhbGlkIEhUVFAgdmVyc2lvbgBJbnZhbGlkIGhlYWRlciB0b2tlbgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3VybABJbnZhbGlkIGNoYXJhY3RlcnMgaW4gdXJsAFVuZXhwZWN0ZWQgc3RhcnQgY2hhciBpbiB1cmwARG91YmxlIEAgaW4gdXJsAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fcHJvdG9jb2wARW1wdHkgQ29udGVudC1MZW5ndGgASW52YWxpZCBjaGFyYWN0ZXIgaW4gQ29udGVudC1MZW5ndGgAVHJhbnNmZXItRW5jb2RpbmcgY2FuJ3QgYmUgcHJlc2VudCB3aXRoIENvbnRlbnQtTGVuZ3RoAER1cGxpY2F0ZSBDb250ZW50LUxlbmd0aABJbnZhbGlkIGNoYXIgaW4gdXJsIHBhdGgAQ29udGVudC1MZW5ndGggY2FuJ3QgYmUgcHJlc2VudCB3aXRoIFRyYW5zZmVyLUVuY29kaW5nAE1pc3NpbmcgZXhwZWN0ZWQgQ1IgYWZ0ZXIgY2h1bmsgc2l6ZQBFeHBlY3RlZCBMRiBhZnRlciBjaHVuayBzaXplAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIHNpemUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfdmFsdWUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9jaHVua19leHRlbnNpb25fdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyB2YWx1ZQBVbmV4cGVjdGVkIHdoaXRlc3BhY2UgYWZ0ZXIgaGVhZGVyIHZhbHVlAE1pc3NpbmcgZXhwZWN0ZWQgQ1IgYWZ0ZXIgaGVhZGVyIHZhbHVlAE1pc3NpbmcgZXhwZWN0ZWQgTEYgYWZ0ZXIgaGVhZGVyIHZhbHVlAEludmFsaWQgYFRyYW5zZmVyLUVuY29kaW5nYCBoZWFkZXIgdmFsdWUATWlzc2luZyBleHBlY3RlZCBDUiBhZnRlciBjaHVuayBleHRlbnNpb24gdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBxdW90ZSB2YWx1ZQBJbnZhbGlkIHF1b3RlZC1wYWlyIGluIGNodW5rIGV4dGVuc2lvbnMgcXVvdGVkIHZhbHVlAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgcXVvdGVkIHZhbHVlAFBhdXNlZCBieSBvbl9oZWFkZXJzX2NvbXBsZXRlAEludmFsaWQgRU9GIHN0YXRlAG9uX3Jlc2V0IHBhdXNlAG9uX2NodW5rX2hlYWRlciBwYXVzZQBvbl9tZXNzYWdlX2JlZ2luIHBhdXNlAG9uX2NodW5rX2V4dGVuc2lvbl92YWx1ZSBwYXVzZQBvbl9zdGF0dXNfY29tcGxldGUgcGF1c2UAb25fdmVyc2lvbl9jb21wbGV0ZSBwYXVzZQBvbl91cmxfY29tcGxldGUgcGF1c2UAb25fcHJvdG9jb2xfY29tcGxldGUgcGF1c2UAb25fY2h1bmtfY29tcGxldGUgcGF1c2UAb25faGVhZGVyX3ZhbHVlX2NvbXBsZXRlIHBhdXNlAG9uX21lc3NhZ2VfY29tcGxldGUgcGF1c2UAb25fbWV0aG9kX2NvbXBsZXRlIHBhdXNlAG9uX2hlYWRlcl9maWVsZF9jb21wbGV0ZSBwYXVzZQBvbl9jaHVua19leHRlbnNpb25fbmFtZSBwYXVzZQBVbmV4cGVjdGVkIHNwYWNlIGFmdGVyIHN0YXJ0IGxpbmUATWlzc2luZyBleHBlY3RlZCBDUiBhZnRlciByZXNwb25zZSBsaW5lAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fY2h1bmtfZXh0ZW5zaW9uX25hbWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBuYW1lAE1pc3NpbmcgZXhwZWN0ZWQgQ1IgYWZ0ZXIgY2h1bmsgZXh0ZW5zaW9uIG5hbWUASW52YWxpZCBzdGF0dXMgY29kZQBQYXVzZSBvbiBDT05ORUNUL1VwZ3JhZGUAUGF1c2Ugb24gUFJJL1VwZ3JhZGUARXhwZWN0ZWQgSFRUUC8yIENvbm5lY3Rpb24gUHJlZmFjZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX21ldGhvZABFeHBlY3RlZCBzcGFjZSBhZnRlciBtZXRob2QAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfZmllbGQAUGF1c2VkAEludmFsaWQgd29yZCBlbmNvdW50ZXJlZABJbnZhbGlkIG1ldGhvZCBlbmNvdW50ZXJlZABNaXNzaW5nIGV4cGVjdGVkIENSIGFmdGVyIGNodW5rIGRhdGEARXhwZWN0ZWQgTEYgYWZ0ZXIgY2h1bmsgZGF0YQBVbmV4cGVjdGVkIGNoYXIgaW4gdXJsIHNjaGVtYQBSZXF1ZXN0IGhhcyBpbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AARGF0YSBhZnRlciBgQ29ubmVjdGlvbjogY2xvc2VgAFNXSVRDSF9QUk9YWQBVU0VfUFJPWFkATUtBQ1RJVklUWQBVTlBST0NFU1NBQkxFX0VOVElUWQBRVUVSWQBDT1BZAE1PVkVEX1BFUk1BTkVOVExZAFRPT19FQVJMWQBOT1RJRlkARkFJTEVEX0RFUEVOREVOQ1kAQkFEX0dBVEVXQVkAUExBWQBQVVQAQ0hFQ0tPVVQAR0FURVdBWV9USU1FT1VUAFJFUVVFU1RfVElNRU9VVABORVRXT1JLX0NPTk5FQ1RfVElNRU9VVABDT05ORUNUSU9OX1RJTUVPVVQATE9HSU5fVElNRU9VVABORVRXT1JLX1JFQURfVElNRU9VVABQT1NUAE1JU0RJUkVDVEVEX1JFUVVFU1QAQ0xJRU5UX0NMT1NFRF9SRVFVRVNUAENMSUVOVF9DTE9TRURfTE9BRF9CQUxBTkNFRF9SRVFVRVNUAEJBRF9SRVFVRVNUAEhUVFBfUkVRVUVTVF9TRU5UX1RPX0hUVFBTX1BPUlQAUkVQT1JUAElNX0FfVEVBUE9UAFJFU0VUX0NPTlRFTlQATk9fQ09OVEVOVABQQVJUSUFMX0NPTlRFTlQASFBFX0lOVkFMSURfQ09OU1RBTlQASFBFX0NCX1JFU0VUAEdFVABIUEVfU1RSSUNUAENPTkZMSUNUAFRFTVBPUkFSWV9SRURJUkVDVABQRVJNQU5FTlRfUkVESVJFQ1QAQ09OTkVDVABNVUxUSV9TVEFUVVMASFBFX0lOVkFMSURfU1RBVFVTAFRPT19NQU5ZX1JFUVVFU1RTAEVBUkxZX0hJTlRTAFVOQVZBSUxBQkxFX0ZPUl9MRUdBTF9SRUFTT05TAE9QVElPTlMAU1dJVENISU5HX1BST1RPQ09MUwBWQVJJQU5UX0FMU09fTkVHT1RJQVRFUwBNVUxUSVBMRV9DSE9JQ0VTAElOVEVSTkFMX1NFUlZFUl9FUlJPUgBXRUJfU0VSVkVSX1VOS05PV05fRVJST1IAUkFJTEdVTl9FUlJPUgBJREVOVElUWV9QUk9WSURFUl9BVVRIRU5USUNBVElPTl9FUlJPUgBTU0xfQ0VSVElGSUNBVEVfRVJST1IASU5WQUxJRF9YX0ZPUldBUkRFRF9GT1IAU0VUX1BBUkFNRVRFUgBHRVRfUEFSQU1FVEVSAEhQRV9VU0VSAFNFRV9PVEhFUgBIUEVfQ0JfQ0hVTktfSEVBREVSAEV4cGVjdGVkIExGIGFmdGVyIENSAE1LQ0FMRU5EQVIAU0VUVVAAV0VCX1NFUlZFUl9JU19ET1dOAFRFQVJET1dOAEhQRV9DTE9TRURfQ09OTkVDVElPTgBIRVVSSVNUSUNfRVhQSVJBVElPTgBESVNDT05ORUNURURfT1BFUkFUSU9OAE5PTl9BVVRIT1JJVEFUSVZFX0lORk9STUFUSU9OAEhQRV9JTlZBTElEX1ZFUlNJT04ASFBFX0NCX01FU1NBR0VfQkVHSU4AU0lURV9JU19GUk9aRU4ASFBFX0lOVkFMSURfSEVBREVSX1RPS0VOAElOVkFMSURfVE9LRU4ARk9SQklEREVOAEVOSEFOQ0VfWU9VUl9DQUxNAEhQRV9JTlZBTElEX1VSTABCTE9DS0VEX0JZX1BBUkVOVEFMX0NPTlRST0wATUtDT0wAQUNMAEhQRV9JTlRFUk5BTABSRVFVRVNUX0hFQURFUl9GSUVMRFNfVE9PX0xBUkdFX1VOT0ZGSUNJQUwASFBFX09LAFVOTElOSwBVTkxPQ0sAUFJJAFJFVFJZX1dJVEgASFBFX0lOVkFMSURfQ09OVEVOVF9MRU5HVEgASFBFX1VORVhQRUNURURfQ09OVEVOVF9MRU5HVEgARkxVU0gAUFJPUFBBVENIAE0tU0VBUkNIAFVSSV9UT09fTE9ORwBQUk9DRVNTSU5HAE1JU0NFTExBTkVPVVNfUEVSU0lTVEVOVF9XQVJOSU5HAE1JU0NFTExBTkVPVVNfV0FSTklORwBIUEVfSU5WQUxJRF9UUkFOU0ZFUl9FTkNPRElORwBFeHBlY3RlZCBDUkxGAEhQRV9JTlZBTElEX0NIVU5LX1NJWkUATU9WRQBDT05USU5VRQBIUEVfQ0JfU1RBVFVTX0NPTVBMRVRFAEhQRV9DQl9IRUFERVJTX0NPTVBMRVRFAEhQRV9DQl9WRVJTSU9OX0NPTVBMRVRFAEhQRV9DQl9VUkxfQ09NUExFVEUASFBFX0NCX1BST1RPQ09MX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19DT01QTEVURQBIUEVfQ0JfSEVBREVSX1ZBTFVFX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19FWFRFTlNJT05fVkFMVUVfQ09NUExFVEUASFBFX0NCX0NIVU5LX0VYVEVOU0lPTl9OQU1FX0NPTVBMRVRFAEhQRV9DQl9NRVNTQUdFX0NPTVBMRVRFAEhQRV9DQl9NRVRIT0RfQ09NUExFVEUASFBFX0NCX0hFQURFUl9GSUVMRF9DT01QTEVURQBERUxFVEUASFBFX0lOVkFMSURfRU9GX1NUQVRFAElOVkFMSURfU1NMX0NFUlRJRklDQVRFAFBBVVNFAE5PX1JFU1BPTlNFAFVOU1VQUE9SVEVEX01FRElBX1RZUEUAR09ORQBOT1RfQUNDRVBUQUJMRQBTRVJWSUNFX1VOQVZBSUxBQkxFAFJBTkdFX05PVF9TQVRJU0ZJQUJMRQBPUklHSU5fSVNfVU5SRUFDSEFCTEUAUkVTUE9OU0VfSVNfU1RBTEUAUFVSR0UATUVSR0UAUkVRVUVTVF9IRUFERVJfRklFTERTX1RPT19MQVJHRQBSRVFVRVNUX0hFQURFUl9UT09fTEFSR0UAUEFZTE9BRF9UT09fTEFSR0UASU5TVUZGSUNJRU5UX1NUT1JBR0UASFBFX1BBVVNFRF9VUEdSQURFAEhQRV9QQVVTRURfSDJfVVBHUkFERQBTT1VSQ0UAQU5OT1VOQ0UAVFJBQ0UASFBFX1VORVhQRUNURURfU1BBQ0UAREVTQ1JJQkUAVU5TVUJTQ1JJQkUAUkVDT1JEAEhQRV9JTlZBTElEX01FVEhPRABOT1RfRk9VTkQAUFJPUEZJTkQAVU5CSU5EAFJFQklORABVTkFVVEhPUklaRUQATUVUSE9EX05PVF9BTExPV0VEAEhUVFBfVkVSU0lPTl9OT1RfU1VQUE9SVEVEAEFMUkVBRFlfUkVQT1JURUQAQUNDRVBURUQATk9UX0lNUExFTUVOVEVEAExPT1BfREVURUNURUQASFBFX0NSX0VYUEVDVEVEAEhQRV9MRl9FWFBFQ1RFRABDUkVBVEVEAElNX1VTRUQASFBFX1BBVVNFRABUSU1FT1VUX09DQ1VSRUQAUEFZTUVOVF9SRVFVSVJFRABQUkVDT05ESVRJT05fUkVRVUlSRUQAUFJPWFlfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQATkVUV09SS19BVVRIRU5USUNBVElPTl9SRVFVSVJFRABMRU5HVEhfUkVRVUlSRUQAU1NMX0NFUlRJRklDQVRFX1JFUVVJUkVEAFVQR1JBREVfUkVRVUlSRUQAUEFHRV9FWFBJUkVEAFBSRUNPTkRJVElPTl9GQUlMRUQARVhQRUNUQVRJT05fRkFJTEVEAFJFVkFMSURBVElPTl9GQUlMRUQAU1NMX0hBTkRTSEFLRV9GQUlMRUQATE9DS0VEAFRSQU5TRk9STUFUSU9OX0FQUExJRUQATk9UX01PRElGSUVEAE5PVF9FWFRFTkRFRABCQU5EV0lEVEhfTElNSVRfRVhDRUVERUQAU0lURV9JU19PVkVSTE9BREVEAEhFQUQARXhwZWN0ZWQgSFRUUC8sIFJUU1AvIG9yIElDRS8A5xUAAK8VAACkEgAAkhoAACYWAACeFAAA2xkAAHkVAAB+EgAA/hQAADYVAAALFgAA2BYAAPMSAABCGAAArBYAABIVAAAUFwAA7xcAAEgUAABxFwAAshoAAGsZAAB+GQAANRQAAIIaAABEFwAA/RYAAB4YAACHFwAAqhkAAJMSAAAHGAAALBcAAMoXAACkFwAA5xUAAOcVAABYFwAAOxgAAKASAAAtHAAAwxEAAEgRAADeEgAAQhMAAKQZAAD9EAAA9xUAAKUVAADvFgAA+BkAAEoWAABWFgAA9RUAAAoaAAAIGgAAARoAAKsVAABCEgAA1xAAAEwRAAAFGQAAVBYAAB4RAADKGQAAyBkAAE4WAAD/GAAAcRQAAPAVAADuFQAAlBkAAPwVAAC/GQAAmxkAAHwUAABDEQAAcBgAAJUUAAAnFAAAGRQAANUSAADUGQAARBYAAPcQAEG5OwsBAQBB0DsL4AEBAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEDAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBBuj0LBAEAAAIAQdE9C14DBAMDAwMDAAADAwADAwADAwMDAwMDAwMDAAUAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAwADAEG6PwsEAQAAAgBB0T8LXgMAAwMDAwMAAAMDAAMDAAMDAwMDAwMDAwMABAAFAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwADAAMAQbDBAAsNbG9zZWVlcC1hbGl2ZQBBycEACwEBAEHgwQAL4AEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBBycMACwEBAEHgwwAL5wEBAQEBAQEBAQEBAQECAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAWNodW5rZWQAQfHFAAteAQABAQEBAQAAAQEAAQEAAQEBAQEBAQEBAQAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQBB0McACyFlY3Rpb25lbnQtbGVuZ3Rob25yb3h5LWNvbm5lY3Rpb24AQYDIAAsgcmFuc2Zlci1lbmNvZGluZ3BncmFkZQ0KDQpTTQ0KDQoAQanIAAsFAQIAAQMAQcDIAAtfBAUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUAQanKAAsFAQIAAQMAQcDKAAtfBAUFBgUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUAQanMAAsEAQAAAQBBwcwAC14CAgACAgICAgICAgICAgICAgICAgICAgICAgICAgIAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAEGpzgALBQECAAEDAEHAzgALXwQFAAAFBQUFBQUFBQUFBQYFBQUFBQUFBQUFBQUABQAHCAUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQAFAAUABQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUAAAAFAEGp0AALBQEBAAEBAEHA0AALAQEAQdrQAAtBAgAAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAQanSAAsFAQEAAQEAQcDSAAsBAQBBytIACwYCAAAAAAIAQeHSAAs6AwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBBoNQAC50BTk9VTkNFRUNLT1VUTkVDVEVURUNSSUJFTFVTSEVURUFEU0VBUkNIUkdFQ1RJVklUWUxFTkRBUlZFT1RJRllQVElPTlNDSFNFQVlTVEFUQ0hHRVVFUllPUkRJUkVDVE9SVFJDSFBBUkFNRVRFUlVSQ0VCU0NSSUJFQVJET1dOQUNFSU5ETktDS1VCU0NSSUJFVFRQQ0VUU1BBRFRQLw=='\n\nlet wasmBuffer\n\nObject.defineProperty(module, 'exports', {\n  get: () => {\n    return wasmBuffer\n      ? wasmBuffer\n      : (wasmBuffer = Buffer.from(wasmBase64, 'base64'))\n  }\n})\n", "'use strict'\n\nconst { Buffer } = require('node:buffer')\n\nconst wasmBase64 = 'AGFzbQEAAAABJwdgAX8Bf2ADf39/AX9gAn9/AGABfwBgBH9/f38Bf2AAAGADf39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQAEA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAAzU0BQYAAAMAAAAAAAADAQMAAwMDAAACAAAAAAICAgICAgICAgIBAQEBAQEBAQEBAwAAAwAAAAQFAXABExMFAwEAAgYIAX8BQcDZBAsHxQcoBm1lbW9yeQIAC19pbml0aWFsaXplAAgZX19pbmRpcmVjdF9mdW5jdGlvbl90YWJsZQEAC2xsaHR0cF9pbml0AAkYbGxodHRwX3Nob3VsZF9rZWVwX2FsaXZlADcMbGxodHRwX2FsbG9jAAsGbWFsbG9jADkLbGxodHRwX2ZyZWUADARmcmVlAAwPbGxodHRwX2dldF90eXBlAA0VbGxodHRwX2dldF9odHRwX21ham9yAA4VbGxodHRwX2dldF9odHRwX21pbm9yAA8RbGxodHRwX2dldF9tZXRob2QAEBZsbGh0dHBfZ2V0X3N0YXR1c19jb2RlABESbGxodHRwX2dldF91cGdyYWRlABIMbGxodHRwX3Jlc2V0ABMObGxodHRwX2V4ZWN1dGUAFBRsbGh0dHBfc2V0dGluZ3NfaW5pdAAVDWxsaHR0cF9maW5pc2gAFgxsbGh0dHBfcGF1c2UAFw1sbGh0dHBfcmVzdW1lABgbbGxodHRwX3Jlc3VtZV9hZnRlcl91cGdyYWRlABkQbGxodHRwX2dldF9lcnJubwAaF2xsaHR0cF9nZXRfZXJyb3JfcmVhc29uABsXbGxodHRwX3NldF9lcnJvcl9yZWFzb24AHBRsbGh0dHBfZ2V0X2Vycm9yX3BvcwAdEWxsaHR0cF9lcnJub19uYW1lAB4SbGxodHRwX21ldGhvZF9uYW1lAB8SbGxodHRwX3N0YXR1c19uYW1lACAabGxodHRw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AXRrQT5qIQILIAEgAjYCHCABQgA3AhAgAkECdEH01wBqIQACQEHI1QAoAgAiA0EBIAJ0IgdxRQRAIAAgATYCAEHI1QAgAyAHcjYCACABIAA2AhggASABNgIIIAEgATYCDAwBCyAEQRkgAkEBdmtBACACQR9HG3QhAiAAKAIAIQACQANAIAAiAygCBEF4cSAERg0BIAJBHXYhACACQQF0IQIgAyAAQQRxakEQaiIHKAIAIgANAAsgByABNgIAIAEgAzYCGCABIAE2AgwgASABNgIIDAELIAMoAggiACABNgIMIAMgATYCCCABQQA2AhggASADNgIMIAEgADYCCAtB5NUAQeTVACgCAEEBayIAQX8gABs2AgALCwcAIAAtACgLBwAgAC0AKgsHACAALQArCwcAIAAtACkLBwAgAC8BNAsHACAALQAwC0ABBH8gACgCGCEBIAAvAS4hAiAALQAoIQMgACgCOCEEIAAQOCAAIAQ2AjggACADOgAoIAAgAjsBLiAAIAE2AhgLhocCAwd/A34BeyABIAJqIQQCQCAAIgMoAgwiAA0AIAMoAgQEQCADIAE2AgQLIwBBEGsiCSQAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAC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DAgLQeMBDAcLQdcBDAYLQdgBDAULQdkBDAQLQdoBDAMLQdsBDAILQd0BDAELQdwBCyECA0ACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAMCfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACQAJAAkACQAJAAn8CQAJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAwJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAC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A0EXNgIcIAMgADYCDCADIAFBAWo2AhQM+AILIABBFUYNI0EAIQIgA0EANgIcIAMgATYCFCADQdYMNgIQIANBIzYCDAz3AgsgAygCBCEAQQAhAiADQQA2AgQgAyAAIAEQNCIARQRAIAFBAWohAQwdCyADQRk2AhwgAyAANgIMIAMgAUEBajYCFAz2AgsgAygCBCEAQQAhAiADQQA2AgQgAyAAIAEQNCIARQRAIAFBAWohAQzvAgsgA0EaNgIcIAMgADYCDCADIAFBAWo2AhQM9QILIABBFUYNH0EAIQIgA0EANgIcIAMgATYCFCADQdAPNgIQIANBIjYCDAz0AgsgAygCBCEAIANBADYCBCADIAAgARAzIgBFBEAgAUEBaiEBDBsLIANBHDYCHCADIAA2AgwgAyABQQFqNgIUQQAhAgzzAgsgAygCBCEAIANBADYCBCADIAAgARAzIgBFBEAgAUEBaiEBDOsCCyADQR02AhwgAyAANgIMIAMgAUEBajYCFEEAIQIM8gILIABBO0cNASABQQFqIQELQSYhAgzXAgtBACECIANBADYCHCADIAE2AhQgA0GfFTYCECADQQw2AgwM7wILIAEgBEcEQANAIAEtAABBIEcNhAIgBCABQQFqIgFHDQALQSwhAgzvAgtBLCECDO4CCyABIARGBEBBNCECDO4CCwJAAkADQAJAIAEtAABBCmsOBAIAAAMACyAEIAFBAWoiAUcNAAtBNCECDO8CCyADKAIEIQAgA0EANgIEIAMgACABEDEiAEUNnwIgA0EyNgIcIAMgATYCFCADIAA2AgxBACECDO4CCyADKAIEIQAgA0EANgIEIAMgACABEDEiAEUEQCABQQFqIQEMnwILIANBMjYCHCADIAA2AgwgAyABQQFqNgIUQQAhAgztAgsgASAERwRAAkADQCABLQAAQTBrIgBB/wFxQQpPBEBBOiECDNcCCyADKQMgIgtCmbPmzJmz5swZVg0BIAMgC0IKfiIKNwMgIAogAK1C/wGDIgtCf4VWDQEgAyAKIAt8NwMgIAQgAUEBaiIBRw0AC0HAACECDO4CCyADKAIEIQAgA0EANgIEIAMgACABQQFqIgEQMSIADRcM4gILQcAAIQIM7AILIAEgBEYEQEHJACECDOwCCwJAA0ACQCABLQAAQQlrDhgAAqICogKpAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAgCiAgsgBCABQQFqIgFHDQALQckAIQIM7AILIAFBAWohASADQS9qLQAAQQFxDaUCIANBADYCHCADIAE2AhQgA0GXEDYCECADQQo2AgxBACECDOsCCyABIARHBEADQCABLQAAQSBHDRUgBCABQQFqIgFHDQALQfgAIQIM6wILQfgAIQIM6gILIANBAjoAKAw4C0EAIQIgA0EANgIcIANBvws2AhAgA0ECNgIMIAMgAUEBajYCFAzoAgtBACECDM4CC0ENIQIMzQILQRMhAgzMAgtBFSECDMsCC0EWIQIMygILQRghAgzJAgtBGSECDMgCC0EaIQIMxwILQRshAgzGAgtBHCECDMUCC0EdIQIMxAILQR4hAgzDAgtBHyECDMICC0EgIQIMwQILQSIhAgzAAgtBIyECDL8CC0ElIQIMvgILQeUAIQIMvQILIANBPTYCHCADIAE2AhQgAyAANgIMQQAhAgzVAgsgA0EbNgIcIAMgATYCFCADQaQcNgIQIANBFTYCDEEAIQIM1AILIANBIDYCHCADIAE2AhQgA0GYGjYCECADQRU2AgxBACECDNMCCyADQRM2AhwgAyABNgIUIANBmBo2AhAgA0EVNgIMQQAhAgzSAgsgA0ELNgIcIAMgATYCFCADQZgaNgIQIANBFTYCDEEAIQIM0QILIANBEDYCHCADIAE2AhQgA0GYGjYCECADQRU2AgxBACECDNACCyADQSA2AhwgAyABNgIUIANBpBw2AhAgA0EVNgIMQQAhAgzPAgsgA0ELNgIcIAMgATYCFCADQaQcNgIQIANBFTYCDEEAIQIMzgILIANBDDYCHCADIAE2AhQgA0GkHDYCECADQRU2AgxBACECDM0CC0EAIQIgA0EANgIcIAMgATYCFCADQd0ONgIQIANBEjYCDAzMAgsCQANAAkAgAS0AAEEKaw4EAAICAAILIAQgAUEBaiIBRw0AC0H9ASECDMwCCwJAAkAgAy0ANkEBRw0AQQAhAAJAIAMoAjgiAkUNACACKAJgIgJFDQAgAyACEQAAIQALIABFDQAgAEEVRw0BIANB/AE2AhwgAyABNgIUIANB3Bk2AhAgA0EVNgIMQQAhAgzNAgtB3AEhAgyzAgsgA0EANgIcIAMgATYCFCADQfkLNgIQIANBHzYCDEEAIQIMywILAkACQCADLQAoQQFrDgIEAQALQdsBIQIMsgILQdQBIQIMsQILIANBAjoAMUEAIQACQCADKAI4IgJFDQAgAigCACICRQ0AIAMgAhEAACEACyAARQRAQd0BIQIMsQILIABBFUcEQCADQQA2AhwgAyABNgIUIANBtAw2AhAgA0EQNgIMQQAhAgzKAgsgA0H7ATYCHCADIAE2AhQgA0GBGjYCECADQRU2AgxBACECDMkCCyABIARGBEBB+gEhAgzJAgsgAS0AAEHIAEYNASADQQE6ACgLQcABIQIMrgILQdoBIQIMrQILIAEgBEcEQCADQQw2AgggAyABNgIEQdkBIQIMrQILQfkBIQIMxQILIAEgBEYEQEH4ASECDMUCCyABLQAAQcgARw0EIAFBAWohAUHYASECDKsCCyABIARGBEBB9wEhAgzEAgsCQAJAIAEtAABBxQBrDhAABQUFBQUFBQUFBQUFBQUBBQsgAUEBaiEBQdYBIQIMqwILIAFBAWohAUHXASECDKoCC0H2ASECIAEgBEYNwgIgAygCACIAIAQgAWtqIQUgASAAa0ECaiEGAkADQCABLQAAIABButUAai0AAEcNAyAAQQJGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAMwwILIAMoAgQhACADQgA3AwAgAyAAIAZBAWoiARAuIgBFBEBB4wEhAgyqAgsgA0H1ATYCHCADIAE2AhQgAyAANgIMQQAhAgzCAgtB9AEhAiABIARGDcECIAMoAgAiACAEIAFraiEFIAEgAGtBAWohBgJAA0AgAS0AACAAQbjVAGotAABHDQIgAEEBRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADMICCyADQYEEOwEoIAMoAgQhACADQgA3AwAgAyAAIAZBAWoiARAuIgANAwwCCyADQQA2AgALQQAhAiADQQA2AhwgAyABNgIUIANB5R82AhAgA0EINgIMDL8CC0HVASECDKUCCyADQfMBNgIcIAMgATYCFCADIAA2AgxBACECDL0CC0EAIQACQCADKAI4IgJFDQAgAigCQCICRQ0AIAMgAhEAACEACyAARQ1uIABBFUcEQCADQQA2AhwgAyABNgIUIANBgg82AhAgA0EgNgIMQQAhAgy9AgsgA0GPATYCHCADIAE2AhQgA0HsGzYCECADQRU2AgxBACECDLwCCyABIARHBEAgA0ENNgIIIAMgATYCBEHTASECDKMCC0HyASECDLsCCyABIARGBEBB8QEhAgy7AgsCQAJAAkAgAS0AAEHIAGsOCwABCAgICAgICAgCCAsgAUEBaiEBQdABIQIMowILIAFBAWohAUHRASECDKICCyABQQFqIQFB0gEhAgyhAgtB8AEhAiABIARGDbkCIAMoAgAiACAEIAFraiEGIAEgAGtBAmohBQNAIAEtAAAgAEG11QBqLQAARw0EIABBAkYNAyAAQQFqIQAgBCABQQFqIgFHDQALIAMgBjYCAAy5AgtB7wEhAiABIARGDbgCIAMoAgAiACAEIAFraiEGIAEgAGtBAWohBQNAIAEtAAAgAEGz1QBqLQAARw0DIABBAUYNAiAAQQFqIQAgBCABQQFqIgFHDQALIAMgBjYCAAy4AgtB7gEhAiABIARGDbcCIAMoAgAiACAEIAFraiEGIAEgAGtBAmohBQNAIAEtAAAgAEGw1QBqLQAARw0CIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBjYCAAy3AgsgAygCBCEAIANCADcDACADIAAgBUEBaiIBECsiAEUNAiADQewBNgIcIAMgATYCFCADIAA2AgxBACECDLYCCyADQQA2AgALIAMoAgQhACADQQA2AgQgAyAAIAEQKyIARQ2cAiADQe0BNgIcIAMgATYCFCADIAA2AgxBACECDLQCC0HPASECDJoCC0EAIQACQCADKAI4IgJFDQAgAigCNCICRQ0AIAMgAhEAACEACwJAIAAEQCAAQRVGDQEgA0EANgIcIAMgATYCFCADQeoNNgIQIANBJjYCDEEAIQIMtAILQc4BIQIMmgILIANB6wE2AhwgAyABNgIUIANBgBs2AhAgA0EVNgIMQQAhAgyyAgsgASAERgRAQesBIQIMsgILIAEtAABBL0YEQCABQQFqIQEMAQsgA0EANgIcIAMgATYCFCADQbI4NgIQIANBCDYCDEEAIQIMsQILQc0BIQIMlwILIAEgBEcEQCADQQ42AgggAyABNgIEQcwBIQIMlwILQeoBIQIMrwILIAEgBEYEQEHpASECDK8CCyABLQAAQTBrIgBB/wFxQQpJBEAgAyAAOgAqIAFBAWohAUHLASECDJYCCyADKAIEIQAgA0EANgIEIAMgACABEC8iAEUNlwIgA0HoATYCHCADIAE2AhQgAyAANgIMQQAhAgyuAgsgASAERgRAQecBIQIMrgILAkAgAS0AAEEuRgRAIAFBAWohAQwBCyADKAIEIQAgA0EANgIEIAMgACABEC8iAEUNmAIgA0HmATYCHCADIAE2AhQgAyAANgIMQQAhAgyuAgtBygEhAgyUAgsgASAERgRAQeUBIQIMrQILQQAhAEEBIQVBASEHQQAhAgJAAkACQAJAAkACfwJAAkACQAJAAkACQAJAIAEtAABBMGsOCgoJAAECAwQFBggLC0ECDAYLQQMMBQtBBAwEC0EFDAMLQQYMAgtBBwwBC0EICyECQQAhBUEAIQcMAgtBCSECQQEhAEEAIQVBACEHDAELQQAhBUEBIQILIAMgAjoAKyABQQFqIQECQAJAIAMtAC5BEHENAAJAAkACQCADLQAqDgMBAAIECyAHRQ0DDAILIAANAQwCCyAFRQ0BCyADKAIEIQAgA0EANgIEIAMgACABEC8iAEUNAiADQeIBNgIcIAMgATYCFCADIAA2AgxBACECDK8CCyADKAIEIQAgA0EANgIEIAMgACABEC8iAEUNmgIgA0HjATYCHCADIAE2AhQgAyAANgIMQQAhAgyuAgsgAygCBCEAIANBADYCBCADIAAgARAvIgBFDZgCIANB5AE2AhwgAyABNgIUIAMgADYCDAytAgtByQEhAgyTAgtBACEAAkAgAygCOCICRQ0AIAIoAkQiAkUNACADIAIRAAAhAAsCQCAABEAgAEEVRg0BIANBADYCHCADIAE2AhQgA0GkDTYCECADQSE2AgxBACECDK0CC0HIASECDJMCCyADQeEBNgIcIAMgATYCFCADQdAaNgIQIANBFTYCDEEAIQIMqwILIAEgBEYEQEHhASECDKsCCwJAIAEtAABBIEYEQCADQQA7ATQgAUEBaiEBDAELIANBADYCHCADIAE2AhQgA0GZETYCECADQQk2AgxBACECDKsCC0HHASECDJECCyABIARGBEBB4AEhAgyqAgsCQCABLQAAQTBrQf8BcSICQQpJBEAgAUEBaiEBAkAgAy8BNCIAQZkzSw0AIAMgAEEKbCIAOwE0IABB/v8DcSACQf//A3NLDQAgAyAAIAJqOwE0DAILQQAhAiADQQA2AhwgAyABNgIUIANBlR42AhAgA0ENNgIMDKsCCyADQQA2AhwgAyABNgIUIANBlR42AhAgA0ENNgIMQQAhAgyqAgtBxgEhAgyQAgsgASAERgRAQd8BIQIMqQILAkAgAS0AAEEwa0H/AXEiAkEKSQRAIAFBAWohAQJAIAMvATQiAEGZM0sNACADIABBCmwiADsBNCAAQf7/A3EgAkH//wNzSw0AIAMgACACajsBNAwCC0EAIQIgA0EANgIcIAMgATYCFCADQZUeNgIQIANBDTYCDAyqAgsgA0EANgIcIAMgATYCFCADQZUeNgIQIANBDTYCDEEAIQIMqQILQcUBIQIMjwILIAEgBEYEQEHeASECDKgCCwJAIAEtAABBMGtB/wFxIgJBCkkEQCABQQFqIQECQCADLwE0IgBBmTNLDQAgAyAAQQpsIgA7ATQgAEH+/wNxIAJB//8Dc0sNACADIAAgAmo7ATQMAgtBACECIANBADYCHCADIAE2AhQgA0GVHjYCECADQQ02AgwMqQILIANBADYCHCADIAE2AhQgA0GVHjYCECADQQ02AgxBACECDKgCC0HEASECDI4CCyABIARGBEBB3QEhAgynAgsCQAJAAkACQCABLQAAQQprDhcCAwMAAwMDAwMDAwMDAwMDAwMDAwMDAQMLIAFBAWoMBQsgAUEBaiEBQcMBIQIMjwILIAFBAWohASADQS9qLQAAQQFxDQggA0EANgIcIAMgATYCFCADQY0LNgIQIANBDTYCDEEAIQIMpwILIANBADYCHCADIAE2AhQgA0GNCzYCECADQQ02AgxBACECDKYCCyABIARHBEAgA0EPNgIIIAMgATYCBEEBIQIMjQILQdwBIQIMpQILAkACQANAAkAgAS0AAEEKaw4EAgAAAwALIAQgAUEBaiIBRw0AC0HbASECDKYCCyADKAIEIQAgA0EANgIEIAMgACABEC0iAEUEQCABQQFqIQEMBAsgA0HaATYCHCADIAA2AgwgAyABQQFqNgIUQQAhAgylAgsgAygCBCEAIANBADYCBCADIAAgARAtIgANASABQQFqCyEBQcEBIQIMigILIANB2QE2AhwgAyAANgIMIAMgAUEBajYCFEEAIQIMogILQcIBIQIMiAILIANBL2otAABBAXENASADQQA2AhwgAyABNgIUIANB5Bw2AhAgA0EZNgIMQQAhAgygAgsgASAERgRAQdkB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CyADIAU2AgAMkAILIANBADYCACAGQQFqIQFBGgw8C0HKASECIAEgBEYNjgIgAygCACIAIAQgAWtqIQUgASAAa0EDaiEGAkADQCABLQAAIABBjdUAai0AAEcNOyAAQQNGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAMjwILIANBADYCACAGQQFqIQFBIQw7CyABIARGBEBByQEhAgyOAgsCQAJAIAEtAABBwQBrDhQAPT09PT09PT09PT09PT09PT09AT0LIAFBAWohAUGtASECDPUBCyABQQFqIQFBsAEhAgz0AQsgASAERgRAQcgBIQIMjQILAkACQCABLQAAQdUAaw4LADw8PDw8PDw8PAE8CyABQQFqIQFBrgEhAgz0AQsgAUEBaiEBQa8BIQIM8wELQccBIQIgASAERg2LAiADKAIAIgAgBCABa2ohBSABIABrQQhqIQYCQANAIAEtAAAgAEGE1QBqLQAARw04IABBCEYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAyMAgsgA0EANgIAIAZBAWohAUEqDDgLIAEgBEYEQEHGASECDIsCCyABLQAAQdAARw04IAFBAWohAUElDDcLQcUBIQIgASAERg2JAiADKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGB1QBqLQAARw02IABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAyKAgsgA0EANgIAIAZBAWohAUEODDYLIAEgBEYEQEHEASECDIkCCyABLQAAQcUARw02IAFBAWohAUGrASECDO8BCyABIARGBEBBwwEhAgyIAgsCQAJAAkACQCABLQAAQcIAaw4PAAECOTk5OTk5OTk5OTkDOQsgAUEBaiEBQacBIQIM8QELIAFBAWohAUGoASECDPABCyABQQFqIQFBqQEhAgzvAQsgAUEBaiEBQaoBIQIM7gELQcIBIQIgASAERg2GAiADKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEH+1ABqLQAARw0zIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAyHAgsgA0EANgIAIAZBAWohAUEUDDMLQcEBIQIgASAERg2FAiADKAIAIgAgBCABa2ohBSABIABrQQRqIQYCQANA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BTYCAAzsAQsgA0EANgIAIAZBAWohAUEXDBgLQaYBIQIgASAERg3qASADKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEHB1ABqLQAARw0XIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzrAQsgA0EANgIAIAZBAWohAUEYDBcLIAEgBEYEQEGlASECDOoBCwJAAkAgAS0AAEHJAGsOBwAZGRkZGQEZCyABQQFqIQFBiwEhAgzRAQsgAUEBaiEBQYwBIQIM0AELQaQBIQIgASAERg3oASADKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEGm1QBqLQAARw0VIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzpAQsgA0EANgIAIAZBAWohAUEJDBULQaMBIQIgASAERg3nASADKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEGk1QBqLQAARw0UIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzoAQsgA0EANgIAIAZBAWohAUEfDBQLQaIBIQIgASAERg3mASADKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEG+1ABqLQAARw0TIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAznAQsgA0EANgIAIAZBAWohAUECDBMLQaEBIQIgASAERg3lASADKAIAIgAgBCABa2ohBSABIABrQQFqIQYDQCABLQAAIABBvNQAai0AAEcNESAAQQFGDQIgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM5QELIAEgBEYEQEGgASECDOUBC0EBIAEtAABB3wBHDREaIAFBAWohAUGHASECDMsBCyADQQA2AgAgBkEBaiEBQYgBIQIMygELQZ8BIQIgASAERg3iASADKAIAIgAgBCABa2ohBSABIABrQQhqIQYCQANAIAEtAAAgAEGE1QBqLQAARw0PIABBCEYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzjAQsgA0EANgIAIAZBAWohAUEpDA8LQZ4BIQIgASAERg3hASADKAIAIgAgBCABa2ohBSABIABrQQNqIQYCQANAIAEtAAAgAEG41ABqLQAARw0OIABBA0YNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAziAQsgA0EANgIAIAZBAWohAUEtDA4LIAEgBEYEQEGdASECDOEBCyABLQAAQcUARw0OIAFBAWohAUGEASECDMcBCyABIARGBEBBnAEhAgzgAQsCQAJAIAEtAABBzABrDggADw8PDw8PAQ8LIAFBAWohAUGCASECDMcBCyABQQFqIQFBgwEhAgzGAQtBmwEhAiABIARGDd4BIAMoAgAiACAEIAFraiEFIAEgAGtBBGohBgJAA0AgAS0AACAAQbPUAGotAABHDQsgAEEERg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADN8BCyADQQA2AgAgBkEBaiEBQSMMCwtBmgEhAiABIARGDd0BIAMoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQbDUAGotAABHDQogAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADN4BCyADQQA2AgAgBkEBaiEBQQAMCgsgASAERgRAQZkBIQIM3QELAkACQCABLQAAQcgAaw4IAAwMDAwMDAEMCyABQQFqIQFB/QAhAgzEAQsgAUEBaiEBQYABIQIMwwELIAEgBEYEQEGYASECDNwBCwJAAkAgAS0AAEHOAGsOAwALAQsLIAFBAWohAUH+ACECDMMBCyABQQFqIQFB/wAhAgzCAQsgASAERgRAQZcBIQIM2wELIAEtAABB2QBHDQggAUEBaiEBQQgMBwtBlgEhAiABIARGDdkBIAMoAgAiACAEIAFraiEFIAEgAGtBA2ohBgJAA0AgAS0AACAAQazUAGotAABHDQYgAEEDRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADNoBCyADQQA2AgAgBkEBaiEBQQUMBgtBlQEhAiABIARGDdgBIAMoAgAiACAEIAFraiEFIAEgAGtBBWohBgJAA0AgAS0AACAAQabUAGotAABHDQUgAEEFRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADNkBCyADQQA2AgAgBkEBaiEBQRYMBQtBlAEhAiABIARGDdcBIAMoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQaHVAGotAABHDQQgAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADNgBCyADQQA2AgAgBkEBaiEBQRAMBAsgASAERgRAQZMBIQIM1wELAkACQCABLQAAQcMAaw4MAAYGBgYGBgYGBgYBBgsgAUEBaiEBQfkAIQIMvgELIAFBAWohAUH6ACECDL0BC0GSASECIAEgBEYN1QEgAygCACIAIAQgAWtqIQUgASAAa0EFaiEGAkADQCABLQAAIABBoNQAai0AAEcNAiAAQQVGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM1gELIANBADYCACAGQQFqIQFBJAwCCyADQQA2AgAMAgsgASAERgRAQZEBIQIM1AELIAEtAABBzABHDQEgAUEBaiEBQRMLOgApIAMoAgQhACADQQA2AgQgAyAAIAEQLiIADQIMAQtBACECIANBADYCHCADIAE2AhQgA0H+HzYCECADQQY2AgwM0QELQfgAIQIMtwELIANBkAE2AhwgAyABNgIUIAMgADYCDEEAIQIMzwELQQAhAAJAIAMoAjgiAkUNACACKAJAIgJFDQAgAyACEQAAIQALIABFDQAgAEEVRg0BIANBADYCHCADIAE2AhQgA0GCDzYCECADQSA2AgxBACECDM4BC0H3ACECDLQBCyADQY8BNgIcIAMgATYCFCADQewbNgIQIANBFTYCDEEAIQIMzAELIAEgBEYEQEGPASECDMwBCwJAIAEtAABBIEYEQCABQQFqIQEMAQsgA0EANgIcIAMgATYCFCADQZsfNgIQIANBBjYCDEEAIQIMzAELQQIhAgyyAQsDQCABLQAAQSBHDQIgBCABQQFqIgFHDQALQY4BIQIMygELIAEgBEYEQEGNASECDMoBCwJAIAEtAABBCWsOBEoAAEoAC0H1ACECDLABCyADLQApQQVGBEBB9gAhAgywAQtB9AAhAgyvAQsgASAERgRAQYwBIQIMyAELIANBEDYCCCADIAE2AgQMCgsgASAERgRAQYsBIQIMxwELAkAgAS0AAEEJaw4ERwAARwALQfMAIQIMrQELIAEgBEcEQCADQRA2AgggAyABNgIEQfEAIQIMrQELQYoBIQIMxQELAkAgASAERwRAA0AgAS0AAEGg0ABqLQAAIgBBA0cEQAJAIABBAWsOAkkABAtB8AAhAgyvAQsgBCABQQFqIgFHDQALQYgBIQIMxgELQYgBIQIMxQELIANBADYCHCADIAE2AhQgA0HbIDYCECADQQc2AgxBACECDMQBCyABIARGBEBBiQEhAgzEAQsCQAJAAkAgAS0AAEGg0gBqLQAAQQFrDgNGAgABC0HyACECDKwBCyADQQA2AhwgAyABNgIUIANBtBI2AhAgA0EHNgIMQQAhAgzEAQtB6gAhAgyqAQsgASAERwRAIAFBAWohAUHvACECDKoBC0GHASECDMIBCyAEIAEiAEYEQEGGASECDMIBCyAALQAAIgFBL0YEQCAAQQFqIQFB7gAhAgypAQsgAUEJayICQRdLDQEgACEBQQEgAnRBm4CABHENQQwBCyAEIAEiAEYEQEGFASECDMEBCyAALQAAQS9HDQAgAEEBaiEBDAMLQQAhAiADQQA2AhwgAyAANgIUIANB2yA2AhAgA0EHNgIMDL8BCwJAAkACQAJAAkADQCABLQAAQaDOAGotAAAiAEEFRwRAAkACQCAAQQFrDghHBQYHCAAEAQgLQesAIQIMrQELIAFBAWohAUHtACECDKwBCyAEIAFBAWoiAUcNAAtBhAEhAgzDAQsgAUEBagwUCyADKAIEIQAgA0EANgIEIAMgACABECwiAEUNHiADQdsANgIcIAMgATYCFCADIAA2AgxBACECDMEBCyADKAIEIQAgA0EANgIEIAMgACABECwiAEUNHiADQd0ANgIcIAMgATYCFCADIAA2AgxBACECDMABCyADKAIEIQAgA0EANgIEIAMgACABECwiAEUNHiADQfoANgIcIAMgATYCFCADIAA2AgxBACECDL8BCyADQQA2AhwgAyABNgIUIANB+Q82AhAgA0EHNgIMQQAhAgy+AQsgASAERgRAQYMBIQIMvgELAkAgAS0AAEGgzgBqLQAAQQFrDgg+BAUGAAgCAwcLIAFBAWohAQtBAyECDKMBCyABQQFqDA0LQQAhAiADQQA2AhwgA0HREjYCECADQQc2AgwgAyABQQFqNgIUDLoBCyADKAIEIQAgA0EANgIEIAMgACABECwiAEUNFiADQdsANgIcIAMgATYCFCADIAA2AgxBACECDLkBCyADKAIEIQAgA0EANgIEIAMgACABECwiAEUNFiADQd0ANgIcIAMgATYCFCADIAA2AgxBACECDLgBCyADKAIEIQAgA0EANgIEIAMgACABECwiAEUNFiADQfoANgIcIAMgATYCFCADIAA2AgxBACECDLcBCyADQQA2AhwgAyABNgIUIANB+Q82AhAgA0EHNgIMQQAhAgy2AQtB7AAhAgycAQsgASAERgRAQYIBIQIMtQELIAFBAWoMAgsgASAERgRAQYEBIQIMtAELIAFBAWoMAQsgASAERg0BIAFBAWoLIQFBBCECDJgBC0GAASECDLABCwNAIAEtAABBoMwAai0AACIAQQJHBEAgAEEBRwRAQekAIQIMmQELDDELIAQgAUEBaiIBRw0AC0H/ACECDK8BCyABIARGBEBB/gAhAgyvAQsCQCABLQAAQQlrDjcvAwYvBAYGBgYGBgYGBgYGBgYGBgYGBgUGBgIGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYABgsgAUEBagshAUEFIQIMlAELIAFBAWoMBgsgAygCBCEAIANBADYCBCADIAAgARAsIgBFDQggA0HbADYCHCADIAE2AhQgAyAANgIMQQAhAgyrAQsgAygCBCEAIANBADYCBCADIAAgARAsIgBFDQggA0HdADYCHCADIAE2AhQgAyAANgIMQQAhAgyqAQsgAygCBCEAIANBADYCBCADIAAgARAsIgBFDQggA0H6ADYCHCADIAE2AhQgAyAANgIMQQAhAgypAQsgA0EANgIcIAMgATYCFCADQY0UNgIQIANBBzYCDEEAIQIMqAELAkACQAJAAkADQCABLQAAQaDKAGotAAAiAEEFRwRAAkAgAEEBaw4GLgMEBQYABgtB6AAhAgyUAQsgBCABQQFqIgFHDQALQf0AIQIMqwELIAMoAgQhACADQQA2AgQgAyAAIAEQLCIARQ0HIANB2wA2AhwgAyABNgIUIAMgADYCDEEAIQIMqgELIAMoAgQhACADQQA2AgQgAyAAIAEQLCIARQ0HIANB3QA2AhwgAyABNgIUIAMgADYCDEEAIQIMqQELIAMoAgQhACADQQA2AgQgAyAAIAEQLCIARQ0HIANB+gA2AhwgAyABNgIUIAMgADYCDEEAIQIMqAELIANBADYCHCADIAE2AhQgA0HkCDYCECADQQc2AgxBACECDKcBCyABIARGDQEgAUEBagshAUEGIQIMjAELQfwAIQIMpAELAkACQAJAAkADQCABLQAAQaDIAGotAAAiAEEFRwRAIABBAWsOBCkCAwQFCyAEIAFBAWoiAUcNAAtB+wAhAgynAQsgAygCBCEAIANBADYCBCADIAAgARAsIgBFDQMgA0HbADYCHCADIAE2AhQgAyAANgIMQQAhAgymAQsgAygCBCEAIANBADYCBCADIAAgARAsIgBFDQMgA0HdADYCHCADIAE2AhQgAyAANgIMQQAhAgylAQsgAygCBCEAIANBADYCBCADIAAgARAsIgBFDQMgA0H6ADYCHCADIAE2AhQgAyAANgIMQQAhAgykAQsgA0EANgIcIAMgATYCFCADQbwKNgIQIANBBzYCDEEAIQIMowELQc8AIQIMiQELQdEAIQIMiAELQecAIQIMhwELIAEgBEYEQEH6ACECDKABCwJAIAEtAABBCWsOBCAAACAACyABQQFqIQFB5gAhAgyGAQsgASAERgRAQfkAIQIMnwELAkAgAS0AAEEJaw4EHwAAHwALQQAhAAJAIAMoAjgiAkUNACACKAI4IgJFDQAgAyACEQAAIQALIABFBEBB4gEhAgyGAQsgAEEVRwRAIANBADYCHCADIAE2AhQgA0HJDTYCECADQRo2AgxBACECDJ8BCyADQfgANgIcIAMgATYCFCADQeoaNgIQIANBFTYCDEEAIQIMngELIAEgBEcEQCADQQ02AgggAyABNgIEQeQAIQIMhQELQfcAIQIMnQELIAEgBEYEQEH2ACECDJ0BCwJAAkACQCABLQAAQcgAaw4LAAELCwsLCwsLCwILCyABQQFqIQFB3QAhAgyFAQsgAUEBaiEBQeAAIQIMhAELIAFBAWohAUHjACECDIMBC0H1ACECIAEgBEYNmwEgAygCACIAIAQgAWtqIQUgASAAa0ECaiEGAkADQCABLQAAIABBtdUAai0AAEcNCCAAQQJGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAMnAELIAMoAgQhACADQgA3AwAgAyAAIAZBAWoiARArIgAEQCADQfQANgIcIAMgATYCFCADIAA2AgxBACECDJwBC0HiACECDIIBC0EAIQACQCADKAI4IgJFDQAgAigCNCICRQ0AIAMgAhEAACEACwJAIAAEQCAAQRVGDQEgA0EANgIcIAMgATYCFCADQeoNNgIQIANBJjYCDEEAIQIMnAELQeEAIQIMggELIANB8wA2AhwgAyABNgIUIANBgBs2AhAgA0EVNgIMQQAhAgyaAQsgAy0AKSIAQSNrQQtJDQkCQCAAQQZLDQBBASAAdEHKAHFFDQAMCgtBACECIANBADYCHCADIAE2AhQgA0HtCTYCECADQQg2AgwMmQELQfIAIQIgASAERg2YASADKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEGz1QBqLQAARw0FIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAyZAQsgAygCBCEAIANCADcDACADIAAgBkEBaiIBECsiAARAIANB8QA2AhwgAyABNgIUIAMgADYCDEEAIQIMmQELQd8AIQIMfwtBACEAAkAgAygCOCICRQ0AIAIoAjQiAkUNACADIAIRAAAhAAsCQCAABEAgAEEVRg0BIANBADYCHCADIAE2AhQgA0HqDTYCECADQSY2AgxBACECDJkBC0HeACECDH8LIANB8AA2AhwgAyABNgIUIANBgBs2AhAgA0EVNgIMQQAhAgyXAQsgAy0AKUEhRg0GIANBADYCHCADIAE2AhQgA0GRCjYCECADQQg2AgxBACECDJYBC0HvACECIAEgBEYNlQEgAygCACIAIAQgAWtqIQUgASAAa0ECaiEGAkADQCABLQAAIABBsNUAai0AAEcNAiAAQQJGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAMlgELIAMoAgQhACADQgA3AwAgAyAAIAZBAWoiARArIgBFDQIgA0HtADYCHCADIAE2AhQgAyAANgIMQQAhAgyVAQsgA0EANgIACyADKAIEIQAgA0EANgIEIAMgACABECsiAEUNgAEgA0HuADYCHCADIAE2AhQgAyAANgIMQQAhAgyTAQtB3AAhAgx5C0EAIQACQCADKAI4IgJFDQAgAigCNCICRQ0AIAMgAhEAACEACwJAIAAEQCAAQRVGDQEgA0EANgIcIAMgATYCFCADQeoNNgIQIANBJjYCDEEAIQIMkwELQdsAIQIMeQsgA0HsADYCHCADIAE2AhQgA0GAGzYCECADQRU2AgxBACECDJEBCyADLQApIgBBI0kNACAAQS5GDQAgA0EANgIcIAMgATYCFCADQckJNgIQIANBCDYCDEEAIQIMkAELQdoAIQIMdgsgASAERgRAQesAIQIMjwELAkAgAS0AAEEvRgRAIAFBAWohAQwBCyAD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ciBIVFRQL3gueCByZXF1ZXN0AEludmFsaWQgbWV0aG9kIGZvciBSVFNQL3gueCByZXF1ZXN0AEV4cGVjdGVkIFNPVVJDRSBtZXRob2QgZm9yIElDRS94LnggcmVxdWVzdABJbnZhbGlkIGNoYXIgaW4gdXJsIGZyYWdtZW50IHN0YXJ0AEV4cGVjdGVkIGRvdABTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3N0YXR1cwBJbnZhbGlkIHJlc3BvbnNlIHN0YXR1cwBFeHBlY3RlZCBMRiBhZnRlciBoZWFkZXJzAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMAVXNlciBjYWxsYmFjayBlcnJvcgBgb25fcmVzZXRgIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19oZWFkZXJgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXNzYWdlX2JlZ2luYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfZXh0ZW5zaW9uX3ZhbHVlYCBjYWxsYmFjayBlcnJvcgBgb25fc3RhdHVzX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fdmVyc2lvbl9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3VybF9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3Byb3RvY29sX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9oZWFkZXJfdmFsdWVfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXNzYWdlX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fbWV0aG9kX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25faGVhZGVyX2ZpZWxkX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfZXh0ZW5zaW9uX25hbWVgIGNhbGxiYWNrIGVycm9yAFVuZXhwZWN0ZWQgY2hhciBpbiB1cmwgc2VydmVyAEludmFsaWQgaGVhZGVyIHZhbHVlIGNoYXIASW52YWxpZCBoZWFkZXIgZmllbGQgY2hhcgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3ZlcnNpb24ASW52YWxpZCBtaW5vciB2ZXJzaW9uAEludmFsaWQgbWFqb3IgdmVyc2lvbgBFeHBlY3RlZCBzcGFjZSBhZnRlciB2ZXJzaW9uAEV4cGVjdGVkIENSTEYgYWZ0ZXIgdmVyc2lvbgBJbnZhbGlkIEhUVFAgdmVyc2lvbgBJbnZhbGlkIGhlYWRlciB0b2tlbgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3VybABJbnZhbGlkIGNoYXJhY3RlcnMgaW4gdXJsAFVuZXhwZWN0ZWQgc3RhcnQgY2hhciBpbiB1cmwARG91YmxlIEAgaW4gdXJsAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fcHJvdG9jb2wARW1wdHkgQ29udGVudC1MZW5ndGgASW52YWxpZCBjaGFyYWN0ZXIgaW4gQ29udGVudC1MZW5ndGgAVHJhbnNmZXItRW5jb2RpbmcgY2FuJ3QgYmUgcHJlc2VudCB3aXRoIENvbnRlbnQtTGVuZ3RoAER1cGxpY2F0ZSBDb250ZW50LUxlbmd0aABJbnZhbGlkIGNoYXIgaW4gdXJsIHBhdGgAQ29udGVudC1MZW5ndGggY2FuJ3QgYmUgcHJlc2VudCB3aXRoIFRyYW5zZmVyLUVuY29kaW5nAE1pc3NpbmcgZXhwZWN0ZWQgQ1IgYWZ0ZXIgY2h1bmsgc2l6ZQBFeHBlY3RlZCBMRiBhZnRlciBjaHVuayBzaXplAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIHNpemUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfdmFsdWUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9jaHVua19leHRlbnNpb25fdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyB2YWx1ZQBVbmV4cGVjdGVkIHdoaXRlc3BhY2UgYWZ0ZXIgaGVhZGVyIHZhbHVlAE1pc3NpbmcgZXhwZWN0ZWQgQ1IgYWZ0ZXIgaGVhZGVyIHZhbHVlAE1pc3NpbmcgZXhwZWN0ZWQgTEYgYWZ0ZXIgaGVhZGVyIHZhbHVlAEludmFsaWQgYFRyYW5zZmVyLUVuY29kaW5nYCBoZWFkZXIgdmFsdWUATWlzc2luZyBleHBlY3RlZCBDUiBhZnRlciBjaHVuayBleHRlbnNpb24gdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBxdW90ZSB2YWx1ZQBJbnZhbGlkIHF1b3RlZC1wYWlyIGluIGNodW5rIGV4dGVuc2lvbnMgcXVvdGVkIHZhbHVlAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgcXVvdGVkIHZhbHVlAFBhdXNlZCBieSBvbl9oZWFkZXJzX2NvbXBsZXRlAEludmFsaWQgRU9GIHN0YXRlAG9uX3Jlc2V0IHBhdXNlAG9uX2NodW5rX2hlYWRlciBwYXVzZQBvbl9tZXNzYWdlX2JlZ2luIHBhdXNlAG9uX2NodW5rX2V4dGVuc2lvbl92YWx1ZSBwYXVzZQBvbl9zdGF0dXNfY29tcGxldGUgcGF1c2UAb25fdmVyc2lvbl9jb21wbGV0ZSBwYXVzZQBvbl91cmxfY29tcGxldGUgcGF1c2UAb25fcHJvdG9jb2xfY29tcGxldGUgcGF1c2UAb25fY2h1bmtfY29tcGxldGUgcGF1c2UAb25faGVhZGVyX3ZhbHVlX2NvbXBsZXRlIHBhdXNlAG9uX21lc3NhZ2VfY29tcGxldGUgcGF1c2UAb25fbWV0aG9kX2NvbXBsZXRlIHBhdXNlAG9uX2hlYWRlcl9maWVsZF9jb21wbGV0ZSBwYXVzZQBvbl9jaHVua19leHRlbnNpb25fbmFtZSBwYXVzZQBVbmV4cGVjdGVkIHNwYWNlIGFmdGVyIHN0YXJ0IGxpbmUATWlzc2luZyBleHBlY3RlZCBDUiBhZnRlciByZXNwb25zZSBsaW5lAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fY2h1bmtfZXh0ZW5zaW9uX25hbWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBuYW1lAE1pc3NpbmcgZXhwZWN0ZWQgQ1IgYWZ0ZXIgY2h1bmsgZXh0ZW5zaW9uIG5hbWUASW52YWxpZCBzdGF0dXMgY29kZQBQYXVzZSBvbiBDT05ORUNUL1VwZ3JhZGUAUGF1c2Ugb24gUFJJL1VwZ3JhZGUARXhwZWN0ZWQgSFRUUC8yIENvbm5lY3Rpb24gUHJlZmFjZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX21ldGhvZABFeHBlY3RlZCBzcGFjZSBhZnRlciBtZXRob2QAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfZmllbGQAUGF1c2VkAEludmFsaWQgd29yZCBlbmNvdW50ZXJlZABJbnZhbGlkIG1ldGhvZCBlbmNvdW50ZXJlZABNaXNzaW5nIGV4cGVjdGVkIENSIGFmdGVyIGNodW5rIGRhdGEARXhwZWN0ZWQgTEYgYWZ0ZXIgY2h1bmsgZGF0YQBVbmV4cGVjdGVkIGNoYXIgaW4gdXJsIHNjaGVtYQBSZXF1ZXN0IGhhcyBpbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AARGF0YSBhZnRlciBgQ29ubmVjdGlvbjogY2xvc2VgAFNXSVRDSF9QUk9YWQBVU0VfUFJPWFkATUtBQ1RJVklUWQBVTlBST0NFU1NBQkxFX0VOVElUWQBRVUVSWQBDT1BZAE1PVkVEX1BFUk1BTkVOVExZAFRPT19FQVJMWQBOT1RJRlkARkFJTEVEX0RFUEVOREVOQ1kAQkFEX0dBVEVXQVkAUExBWQBQVVQAQ0hFQ0tPVVQAR0FURVdBWV9USU1FT1VUAFJFUVVFU1RfVElNRU9VVABORVRXT1JLX0NPTk5FQ1RfVElNRU9VVABDT05ORUNUSU9OX1RJTUVPVVQATE9HSU5fVElNRU9VVABORVRXT1JLX1JFQURfVElNRU9VVABQT1NUAE1JU0RJUkVDVEVEX1JFUVVFU1QAQ0xJRU5UX0NMT1NFRF9SRVFVRVNUAENMSUVOVF9DTE9TRURfTE9BRF9CQUxBTkNFRF9SRVFVRVNUAEJBRF9SRVFVRVNUAEhUVFBfUkVRVUVTVF9TRU5UX1RPX0hUVFBTX1BPUlQAUkVQT1JUAElNX0FfVEVBUE9UAFJFU0VUX0NPTlRFTlQATk9fQ09OVEVOVABQQVJUSUFMX0NPTlRFTlQASFBFX0lOVkFMSURfQ09OU1RBTlQASFBFX0NCX1JFU0VUAEdFVABIUEVfU1RSSUNUAENPTkZMSUNUAFRFTVBPUkFSWV9SRURJUkVDVABQRVJNQU5FTlRfUkVESVJFQ1QAQ09OTkVDVABNVUxUSV9TVEFUVVMASFBFX0lOVkFMSURfU1RBVFVTAFRPT19NQU5ZX1JFUVVFU1RTAEVBUkxZX0hJTlRTAFVOQVZBSUxBQkxFX0ZPUl9MRUdBTF9SRUFTT05TAE9QVElPTlMAU1dJVENISU5HX1BST1RPQ09MUwBWQVJJQU5UX0FMU09fTkVHT1RJQVRFUwBNVUxUSVBMRV9DSE9JQ0VTAElOVEVSTkFMX1NFUlZFUl9FUlJPUgBXRUJfU0VSVkVSX1VOS05PV05fRVJST1IAUkFJTEdVTl9FUlJPUgBJREVOVElUWV9QUk9WSURFUl9BVVRIRU5USUNBVElPTl9FUlJPUgBTU0xfQ0VSVElGSUNBVEVfRVJST1IASU5WQUxJRF9YX0ZPUldBUkRFRF9GT1IAU0VUX1BBUkFNRVRFUgBHRVRfUEFSQU1FVEVSAEhQRV9VU0VSAFNFRV9PVEhFUgBIUEVfQ0JfQ0hVTktfSEVBREVSAEV4cGVjdGVkIExGIGFmdGVyIENSAE1LQ0FMRU5EQVIAU0VUVVAAV0VCX1NFUlZFUl9JU19ET1dOAFRFQVJET1dOAEhQRV9DTE9TRURfQ09OTkVDVElPTgBIRVVSSVNUSUNfRVhQSVJBVElPTgBESVNDT05ORUNURURfT1BFUkFUSU9OAE5PTl9BVVRIT1JJVEFUSVZFX0lORk9STUFUSU9OAEhQRV9JTlZBTElEX1ZFUlNJT04ASFBFX0NCX01FU1NBR0VfQkVHSU4AU0lURV9JU19GUk9aRU4ASFBFX0lOVkFMSURfSEVBREVSX1RPS0VOAElOVkFMSURfVE9LRU4ARk9SQklEREVOAEVOSEFOQ0VfWU9VUl9DQUxNAEhQRV9JTlZBTElEX1VSTABCTE9DS0VEX0JZX1BBUkVOVEFMX0NPTlRST0wATUtDT0wAQUNMAEhQRV9JTlRFUk5BTABSRVFVRVNUX0hFQURFUl9GSUVMRFNfVE9PX0xBUkdFX1VOT0ZGSUNJQUwASFBFX09LAFVOTElOSwBVTkxPQ0sAUFJJAFJFVFJZX1dJVEgASFBFX0lOVkFMSURfQ09OVEVOVF9MRU5HVEgASFBFX1VORVhQRUNURURfQ09OVEVOVF9MRU5HVEgARkxVU0gAUFJPUFBBVENIAE0tU0VBUkNIAFVSSV9UT09fTE9ORwBQUk9DRVNTSU5HAE1JU0NFTExBTkVPVVNfUEVSU0lTVEVOVF9XQVJOSU5HAE1JU0NFTExBTkVPVVNfV0FSTklORwBIUEVfSU5WQUxJRF9UUkFOU0ZFUl9FTkNPRElORwBFeHBlY3RlZCBDUkxGAEhQRV9JTlZBTElEX0NIVU5LX1NJWkUATU9WRQBDT05USU5VRQBIUEVfQ0JfU1RBVFVTX0NPTVBMRVRFAEhQRV9DQl9IRUFERVJTX0NPTVBMRVRFAEhQRV9DQl9WRVJTSU9OX0NPTVBMRVRFAEhQRV9DQl9VUkxfQ09NUExFVEUASFBFX0NCX1BST1RPQ09MX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19DT01QTEVURQBIUEVfQ0JfSEVBREVSX1ZBTFVFX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19FWFRFTlNJT05fVkFMVUVfQ09NUExFVEUASFBFX0NCX0NIVU5LX0VYVEVOU0lPTl9OQU1FX0NPTVBMRVRFAEhQRV9DQl9NRVNTQUdFX0NPTVBMRVRFAEhQRV9DQl9NRVRIT0RfQ09NUExFVEUASFBFX0NCX0hFQURFUl9GSUVMRF9DT01QTEVURQBERUxFVEUASFBFX0lOVkFMSURfRU9GX1NUQVRFAElOVkFMSURfU1NMX0NFUlRJRklDQVRFAFBBVVNFAE5PX1JFU1BPTlNFAFVOU1VQUE9SVEVEX01FRElBX1RZUEUAR09ORQBOT1RfQUNDRVBUQUJMRQBTRVJWSUNFX1VOQVZBSUxBQkxFAFJBTkdFX05PVF9TQVRJU0ZJQUJMRQBPUklHSU5fSVNfVU5SRUFDSEFCTEUAUkVTUE9OU0VfSVNfU1RBTEUAUFVSR0UATUVSR0UAUkVRVUVTVF9IRUFERVJfRklFTERTX1RPT19MQVJHRQBSRVFVRVNUX0hFQURFUl9UT09fTEFSR0UAUEFZTE9BRF9UT09fTEFSR0UASU5TVUZGSUNJRU5UX1NUT1JBR0UASFBFX1BBVVNFRF9VUEdSQURFAEhQRV9QQVVTRURfSDJfVVBHUkFERQBTT1VSQ0UAQU5OT1VOQ0UAVFJBQ0UASFBFX1VORVhQRUNURURfU1BBQ0UAREVTQ1JJQkUAVU5TVUJTQ1JJQkUAUkVDT1JEAEhQRV9JTlZBTElEX01FVEhPRABOT1RfRk9VTkQAUFJPUEZJTkQAVU5CSU5EAFJFQklORABVTkFVVEhPUklaRUQATUVUSE9EX05PVF9BTExPV0VEAEhUVFBfVkVSU0lPTl9OT1RfU1VQUE9SVEVEAEFMUkVBRFlfUkVQT1JURUQAQUNDRVBURUQATk9UX0lNUExFTUVOVEVEAExPT1BfREVURUNURUQASFBFX0NSX0VYUEVDVEVEAEhQRV9MRl9FWFBFQ1RFRABDUkVBVEVEAElNX1VTRUQASFBFX1BBVVNFRABUSU1FT1VUX09DQ1VSRUQAUEFZTUVOVF9SRVFVSVJFRABQUkVDT05ESVRJT05fUkVRVUlSRUQAUFJPWFlfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQATkVUV09SS19BVVRIRU5USUNBVElPTl9SRVFVSVJFRABMRU5HVEhfUkVRVUlSRUQAU1NMX0NFUlRJRklDQVRFX1JFUVVJUkVEAFVQR1JBREVfUkVRVUlSRUQAUEFHRV9FWFBJUkVEAFBSRUNPTkRJVElPTl9GQUlMRUQARVhQRUNUQVRJT05fRkFJTEVEAFJFVkFMSURBVElPTl9GQUlMRUQAU1NMX0hBTkRTSEFLRV9GQUlMRUQATE9DS0VEAFRSQU5TRk9STUFUSU9OX0FQUExJRUQATk9UX01PRElGSUVEAE5PVF9FWFRFTkRFRABCQU5EV0lEVEhfTElNSVRfRVhDRUVERUQAU0lURV9JU19PVkVSTE9BREVEAEhFQUQARXhwZWN0ZWQgSFRUUC8sIFJUU1AvIG9yIElDRS8A5xUAAK8VAACkEgAAkhoAACYWAACeFAAA2xkAAHkVAAB+EgAA/hQAADYVAAALFgAA2BYAAPMSAABCGAAArBYAABIVAAAUFwAA7xcAAEgUAABxFwAAshoAAGsZAAB+GQAANRQAAIIaAABEFwAA/RYAAB4YAACHFwAAqhkAAJMSAAAHGAAALBcAAMoXAACkFwAA5xUAAOcVAABYFwAAOxgAAKASAAAtHAAAwxEAAEgRAADeEgAAQhMAAKQZAAD9EAAA9xUAAKUVAADvFgAA+BkAAEoWAABWFgAA9RUAAAoaAAAIGgAAARoAAKsVAABCEgAA1xAAAEwRAAAFGQAAVBYAAB4RAADKGQAAyBkAAE4WAAD/GAAAcRQAAPAVAADuFQAAlBkAAPwVAAC/GQAAmxkAAHwUAABDEQAAcBgAAJUUAAAnFAAAGRQAANUSAADUGQAARBYAAPcQAEG5OwsBAQBB0DsL4AEBAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEDAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBBuj0LBAEAAAIAQdE9C14DBAMDAwMDAAADAwADAwADAwMDAwMDAwMDAAUAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAwADAEG6PwsEAQAAAgBB0T8LXgMAAwMDAwMAAAMDAAMDAAMDAwMDAwMDAwMABAAFAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwADAAMAQbDBAAsNbG9zZWVlcC1hbGl2ZQBBycEACwEBAEHgwQAL4AEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBBycMACwEBAEHgwwAL5wEBAQEBAQEBAQEBAQECAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAWNodW5rZWQAQfHFAAteAQABAQEBAQAAAQEAAQEAAQEBAQEBAQEBAQAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQBB0McACyFlY3Rpb25lbnQtbGVuZ3Rob25yb3h5LWNvbm5lY3Rpb24AQYDIAAsgcmFuc2Zlci1lbmNvZGluZ3BncmFkZQ0KDQpTTQ0KDQoAQanIAAsFAQIAAQMAQcDIAAtfBAUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUAQanKAAsFAQIAAQMAQcDKAAtfBAUFBgUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUAQanMAAsEAQAAAQBBwcwAC14CAgACAgICAgICAgICAgICAgICAgICAgICAgICAgIAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAEGpzgALBQECAAEDAEHAzgALXwQFAAAFBQUFBQUFBQUFBQYFBQUFBQUFBQUFBQUABQAHCAUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQAFAAUABQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUAAAAFAEGp0AALBQEBAAEBAEHA0AALAQEAQdrQAAtBAgAAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAQanSAAsFAQEAAQEAQcDSAAsBAQBBytIACwYCAAAAAAIAQeHSAAs6AwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBBoNQAC50BTk9VTkNFRUNLT1VUTkVDVEVURUNSSUJFTFVTSEVURUFEU0VBUkNIUkdFQ1RJVklUWUxFTkRBUlZFT1RJRllQVElPTlNDSFNFQVlTVEFUQ0hHRVVFUllPUkRJUkVDVE9SVFJDSFBBUkFNRVRFUlVSQ0VCU0NSSUJFQVJET1dOQUNFSU5ETktDS1VCU0NSSUJFVFRQQ0VUU1BBRFRQLw=='\n\nlet wasmBuffer\n\nObject.defineProperty(module, 'exports', {\n  get: () => {\n    return wasmBuffer\n      ? wasmBuffer\n      : (wasmBuffer = Buffer.from(wasmBase64, 'base64'))\n  }\n})\n", "'use strict'\n\nconst corsSafeListedMethods = /** @type {const} */ (['GET', 'HEAD', 'POST'])\nconst corsSafeListedMethodsSet = new Set(corsSafeListedMethods)\n\nconst nullBodyStatus = /** @type {const} */ ([101, 204, 205, 304])\n\nconst redirectStatus = /** @type {const} */ ([301, 302, 303, 307, 308])\nconst redirectStatusSet = new Set(redirectStatus)\n\n/**\n * @see https://fetch.spec.whatwg.org/#block-bad-port\n */\nconst badPorts = /** @type {const} */ ([\n  '1', '7', '9', '11', '13', '15', '17', '19', '20', '21', '22', '23', '25', '37', '42', '43', '53', '69', '77', '79',\n  '87', '95', '101', '102', '103', '104', '109', '110', '111', '113', '115', '117', '119', '123', '135', '137',\n  '139', '143', '161', '179', '389', '427', '465', '512', '513', '514', '515', '526', '530', '531', '532',\n  '540', '548', '554', '556', '563', '587', '601', '636', '989', '990', '993', '995', '1719', '1720', '1723',\n  '2049', '3659', '4045', '4190', '5060', '5061', '6000', '6566', '6665', '6666', '6667', '6668', '6669', '6679',\n  '6697', '10080'\n])\nconst badPortsSet = new Set(badPorts)\n\n/**\n * @see https://w3c.github.io/webappsec-referrer-policy/#referrer-policy-header\n */\nconst referrerPolicyTokens = /** @type {const} */ ([\n  'no-referrer',\n  'no-referrer-when-downgrade',\n  'same-origin',\n  'origin',\n  'strict-origin',\n  'origin-when-cross-origin',\n  'strict-origin-when-cross-origin',\n  'unsafe-url'\n])\n\n/**\n * @see https://w3c.github.io/webappsec-referrer-policy/#referrer-policies\n */\nconst referrerPolicy = /** @type {const} */ ([\n  '',\n  ...referrerPolicyTokens\n])\nconst referrerPolicyTokensSet = new Set(referrerPolicyTokens)\n\nconst requestRedirect = /** @type {const} */ (['follow', 'manual', 'error'])\n\nconst safeMethods = /** @type {const} */ (['GET', 'HEAD', 'OPTIONS', 'TRACE'])\nconst safeMethodsSet = new Set(safeMethods)\n\nconst requestMode = /** @type {const} */ (['navigate', 'same-origin', 'no-cors', 'cors'])\n\nconst requestCredentials = /** @type {const} */ (['omit', 'same-origin', 'include'])\n\nconst requestCache = /** @type {const} */ ([\n  'default',\n  'no-store',\n  'reload',\n  'no-cache',\n  'force-cache',\n  'only-if-cached'\n])\n\n/**\n * @see https://fetch.spec.whatwg.org/#request-body-header-name\n */\nconst requestBodyHeader = /** @type {const} */ ([\n  'content-encoding',\n  'content-language',\n  'content-location',\n  'content-type',\n  // See https://github.com/nodejs/undici/issues/2021\n  // 'Content-Length' is a forbidden header name, which is typically\n  // removed in the Headers implementation. However, undici doesn't\n  // filter out headers, so we add it here.\n  'content-length'\n])\n\n/**\n * @see https://fetch.spec.whatwg.org/#enumdef-requestduplex\n */\nconst requestDuplex = /** @type {const} */ ([\n  'half'\n])\n\n/**\n * @see http://fetch.spec.whatwg.org/#forbidden-method\n */\nconst forbiddenMethods = /** @type {const} */ (['CONNECT', 'TRACE', 'TRACK'])\nconst forbiddenMethodsSet = new Set(forbiddenMethods)\n\nconst subresource = /** @type {const} */ ([\n  'audio',\n  'audioworklet',\n  'font',\n  'image',\n  'manifest',\n  'paintworklet',\n  'script',\n  'style',\n  'track',\n  'video',\n  'xslt',\n  ''\n])\nconst subresourceSet = new Set(subresource)\n\nmodule.exports = {\n  subresource,\n  forbiddenMethods,\n  requestBodyHeader,\n  referrerPolicy,\n  requestRedirect,\n  requestMode,\n  requestCredentials,\n  requestCache,\n  redirectStatus,\n  corsSafeListedMethods,\n  nullBodyStatus,\n  safeMethods,\n  badPorts,\n  requestDuplex,\n  subresourceSet,\n  badPortsSet,\n  redirectStatusSet,\n  corsSafeListedMethodsSet,\n  safeMethodsSet,\n  forbiddenMethodsSet,\n  referrerPolicyTokens: referrerPolicyTokensSet\n}\n", "'use strict'\n\n// In case of breaking changes, increase the version\n// number to avoid conflicts.\nconst globalOrigin = Symbol.for('undici.globalOrigin.1')\n\nfunction getGlobalOrigin () {\n  return globalThis[globalOrigin]\n}\n\nfunction setGlobalOrigin (newOrigin) {\n  if (newOrigin === undefined) {\n    Object.defineProperty(globalThis, globalOrigin, {\n      value: undefined,\n      writable: true,\n      enumerable: false,\n      configurable: false\n    })\n\n    return\n  }\n\n  const parsedURL = new URL(newOrigin)\n\n  if (parsedURL.protocol !== 'http:' && parsedURL.protocol !== 'https:') {\n    throw new TypeError(`Only http & https urls are allowed, received ${parsedURL.protocol}`)\n  }\n\n  Object.defineProperty(globalThis, globalOrigin, {\n    value: parsedURL,\n    writable: true,\n    enumerable: false,\n    configurable: false\n  })\n}\n\nmodule.exports = {\n  getGlobalOrigin,\n  setGlobalOrigin\n}\n", "'use strict'\n\nconst textDecoder = new TextDecoder()\n\n/**\n * @see https://encoding.spec.whatwg.org/#utf-8-decode\n * @param {Uint8Array} buffer\n */\nfunction utf8DecodeBytes (buffer) {\n  if (buffer.length === 0) {\n    return ''\n  }\n\n  // 1. Let buffer be the result of peeking three bytes from\n  //    ioQueue, converted to a byte sequence.\n\n  // 2. If buffer is 0xEF 0xBB 0xBF, then read three\n  //    bytes from ioQueue. (Do nothing with those bytes.)\n  if (buffer[0] === 0xEF && buffer[1] === 0xBB && buffer[2] === 0xBF) {\n    buffer = buffer.subarray(3)\n  }\n\n  // 3. Process a queue with an instance of UTF-8\u2019s\n  //    decoder, ioQueue, output, and \"replacement\".\n  const output = textDecoder.decode(buffer)\n\n  // 4. Return output.\n  return output\n}\n\nmodule.exports = {\n  utf8DecodeBytes\n}\n", "'use strict'\n\nconst assert = require('node:assert')\nconst { utf8DecodeBytes } = require('../../encoding')\n\n/**\n * @param {(char: string) => boolean} condition\n * @param {string} input\n * @param {{ position: number }} position\n * @returns {string}\n *\n * @see https://infra.spec.whatwg.org/#collect-a-sequence-of-code-points\n */\nfunction collectASequenceOfCodePoints (condition, input, position) {\n  // 1. Let result be the empty string.\n  let result = ''\n\n  // 2. While position doesn\u2019t point past the end of input and the\n  // code point at position within input meets the condition condition:\n  while (position.position < input.length && condition(input[position.position])) {\n    // 1. Append that code point to the end of result.\n    result += input[position.position]\n\n    // 2. Advance position by 1.\n    position.position++\n  }\n\n  // 3. Return result.\n  return result\n}\n\n/**\n * A faster collectASequenceOfCodePoints that only works when comparing a single character.\n * @param {string} char\n * @param {string} input\n * @param {{ position: number }} position\n * @returns {string}\n *\n * @see https://infra.spec.whatwg.org/#collect-a-sequence-of-code-points\n */\nfunction collectASequenceOfCodePointsFast (char, input, position) {\n  const idx = input.indexOf(char, position.position)\n  const start = position.position\n\n  if (idx === -1) {\n    position.position = input.length\n    return input.slice(start)\n  }\n\n  position.position = idx\n  return input.slice(start, position.position)\n}\n\nconst ASCII_WHITESPACE_REPLACE_REGEX = /[\\u0009\\u000A\\u000C\\u000D\\u0020]/g // eslint-disable-line no-control-regex\n\n/**\n * @param {string} data\n * @returns {Uint8Array | 'failure'}\n *\n * @see https://infra.spec.whatwg.org/#forgiving-base64-decode\n */\nfunction forgivingBase64 (data) {\n  // 1. Remove all ASCII whitespace from data.\n  data = data.replace(ASCII_WHITESPACE_REPLACE_REGEX, '')\n\n  let dataLength = data.length\n  // 2. If data\u2019s code point length divides by 4 leaving\n  // no remainder, then:\n  if (dataLength % 4 === 0) {\n    // 1. If data ends with one or two U+003D (=) code points,\n    // then remove them from data.\n    if (data.charCodeAt(dataLength - 1) === 0x003D) {\n      --dataLength\n      if (data.charCodeAt(dataLength - 1) === 0x003D) {\n        --dataLength\n      }\n    }\n  }\n\n  // 3. If data\u2019s code point length divides by 4 leaving\n  // a remainder of 1, then return failure.\n  if (dataLength % 4 === 1) {\n    return 'failure'\n  }\n\n  // 4. If data contains a code point that is not one of\n  //  U+002B (+)\n  //  U+002F (/)\n  //  ASCII alphanumeric\n  // then return failure.\n  if (/[^+/0-9A-Za-z]/.test(data.length === dataLength ? data : data.substring(0, dataLength))) {\n    return 'failure'\n  }\n\n  const buffer = Buffer.from(data, 'base64')\n  return new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength)\n}\n\n/**\n * @param {number} char\n * @returns {boolean}\n *\n * @see https://infra.spec.whatwg.org/#ascii-whitespace\n */\nfunction isASCIIWhitespace (char) {\n  return (\n    char === 0x09 || // \\t\n    char === 0x0a || // \\n\n    char === 0x0c || // \\f\n    char === 0x0d || // \\r\n    char === 0x20    // space\n  )\n}\n\n/**\n * @param {Uint8Array} input\n * @returns {string}\n *\n * @see https://infra.spec.whatwg.org/#isomorphic-decode\n */\nfunction isomorphicDecode (input) {\n  // 1. To isomorphic decode a byte sequence input, return a string whose code point\n  //    length is equal to input\u2019s length and whose code points have the same values\n  //    as the values of input\u2019s bytes, in the same order.\n  const length = input.length\n  if ((2 << 15) - 1 > length) {\n    return String.fromCharCode.apply(null, input)\n  }\n  let result = ''\n  let i = 0\n  let addition = (2 << 15) - 1\n  while (i < length) {\n    if (i + addition > length) {\n      addition = length - i\n    }\n    result += String.fromCharCode.apply(null, input.subarray(i, i += addition))\n  }\n  return result\n}\n\nconst invalidIsomorphicEncodeValueRegex = /[^\\x00-\\xFF]/ // eslint-disable-line no-control-regex\n\n/**\n * @param {string} input\n * @returns {string}\n *\n * @see https://infra.spec.whatwg.org/#isomorphic-encode\n */\nfunction isomorphicEncode (input) {\n  // 1. Assert: input contains no code points greater than U+00FF.\n  assert(!invalidIsomorphicEncodeValueRegex.test(input))\n\n  // 2. Return a byte sequence whose length is equal to input\u2019s code\n  //    point length and whose bytes have the same values as the\n  //    values of input\u2019s code points, in the same order\n  return input\n}\n\n/**\n * @see https://infra.spec.whatwg.org/#parse-json-bytes-to-a-javascript-value\n * @param {Uint8Array} bytes\n */\nfunction parseJSONFromBytes (bytes) {\n  return JSON.parse(utf8DecodeBytes(bytes))\n}\n\n/**\n * @param {string} str\n * @param {boolean} [leading=true]\n * @param {boolean} [trailing=true]\n * @returns {string}\n *\n * @see https://infra.spec.whatwg.org/#strip-leading-and-trailing-ascii-whitespace\n */\nfunction removeASCIIWhitespace (str, leading = true, trailing = true) {\n  return removeChars(str, leading, trailing, isASCIIWhitespace)\n}\n\n/**\n * @param {string} str\n * @param {boolean} leading\n * @param {boolean} trailing\n * @param {(charCode: number) => boolean} predicate\n * @returns {string}\n */\nfunction removeChars (str, leading, trailing, predicate) {\n  let lead = 0\n  let trail = str.length - 1\n\n  if (leading) {\n    while (lead < str.length && predicate(str.charCodeAt(lead))) lead++\n  }\n\n  if (trailing) {\n    while (trail > 0 && predicate(str.charCodeAt(trail))) trail--\n  }\n\n  return lead === 0 && trail === str.length - 1 ? str : str.slice(lead, trail + 1)\n}\n\n// https://infra.spec.whatwg.org/#serialize-a-javascript-value-to-a-json-string\nfunction serializeJavascriptValueToJSONString (value) {\n  // 1. Let result be ? Call(%JSON.stringify%, undefined, \u00AB value \u00BB).\n  const result = JSON.stringify(value)\n\n  // 2. If result is undefined, then throw a TypeError.\n  if (result === undefined) {\n    throw new TypeError('Value is not JSON serializable')\n  }\n\n  // 3. Assert: result is a string.\n  assert(typeof result === 'string')\n\n  // 4. Return result.\n  return result\n}\n\nmodule.exports = {\n  collectASequenceOfCodePoints,\n  collectASequenceOfCodePointsFast,\n  forgivingBase64,\n  isASCIIWhitespace,\n  isomorphicDecode,\n  isomorphicEncode,\n  parseJSONFromBytes,\n  removeASCIIWhitespace,\n  removeChars,\n  serializeJavascriptValueToJSONString\n}\n", "'use strict'\n\nconst assert = require('node:assert')\nconst { forgivingBase64, collectASequenceOfCodePoints, collectASequenceOfCodePointsFast, isomorphicDecode, removeASCIIWhitespace, removeChars } = require('../infra')\n\nconst encoder = new TextEncoder()\n\n/**\n * @see https://mimesniff.spec.whatwg.org/#http-token-code-point\n */\nconst HTTP_TOKEN_CODEPOINTS = /^[-!#$%&'*+.^_|~A-Za-z0-9]+$/u\nconst HTTP_WHITESPACE_REGEX = /[\\u000A\\u000D\\u0009\\u0020]/u // eslint-disable-line\n\n/**\n * @see https://mimesniff.spec.whatwg.org/#http-quoted-string-token-code-point\n */\nconst HTTP_QUOTED_STRING_TOKENS = /^[\\u0009\\u0020-\\u007E\\u0080-\\u00FF]+$/u // eslint-disable-line\n\n// https://fetch.spec.whatwg.org/#data-url-processor\n/** @param {URL} dataURL */\nfunction dataURLProcessor (dataURL) {\n  // 1. Assert: dataURL\u2019s scheme is \"data\".\n  assert(dataURL.protocol === 'data:')\n\n  // 2. Let input be the result of running the URL\n  // serializer on dataURL with exclude fragment\n  // set to true.\n  let input = URLSerializer(dataURL, true)\n\n  // 3. Remove the leading \"data:\" string from input.\n  input = input.slice(5)\n\n  // 4. Let position point at the start of input.\n  const position = { position: 0 }\n\n  // 5. Let mimeType be the result of collecting a\n  // sequence of code points that are not equal\n  // to U+002C (,), given position.\n  let mimeType = collectASequenceOfCodePointsFast(\n    ',',\n    input,\n    position\n  )\n\n  // 6. Strip leading and trailing ASCII whitespace\n  // from mimeType.\n  // Undici implementation note: we need to store the\n  // length because if the mimetype has spaces removed,\n  // the wrong amount will be sliced from the input in\n  // step #9\n  const mimeTypeLength = mimeType.length\n  mimeType = removeASCIIWhitespace(mimeType, true, true)\n\n  // 7. If position is past the end of input, then\n  // return failure\n  if (position.position >= input.length) {\n    return 'failure'\n  }\n\n  // 8. Advance position by 1.\n  position.position++\n\n  // 9. Let encodedBody be the remainder of input.\n  const encodedBody = input.slice(mimeTypeLength + 1)\n\n  // 10. Let body be the percent-decoding of encodedBody.\n  let body = stringPercentDecode(encodedBody)\n\n  // 11. If mimeType ends with U+003B (;), followed by\n  // zero or more U+0020 SPACE, followed by an ASCII\n  // case-insensitive match for \"base64\", then:\n  if (/;(?:\\u0020*)base64$/ui.test(mimeType)) {\n    // 1. Let stringBody be the isomorphic decode of body.\n    const stringBody = isomorphicDecode(body)\n\n    // 2. Set body to the forgiving-base64 decode of\n    // stringBody.\n    body = forgivingBase64(stringBody)\n\n    // 3. If body is failure, then return failure.\n    if (body === 'failure') {\n      return 'failure'\n    }\n\n    // 4. Remove the last 6 code points from mimeType.\n    mimeType = mimeType.slice(0, -6)\n\n    // 5. Remove trailing U+0020 SPACE code points from mimeType,\n    // if any.\n    mimeType = mimeType.replace(/(\\u0020+)$/u, '')\n\n    // 6. Remove the last U+003B (;) code point from mimeType.\n    mimeType = mimeType.slice(0, -1)\n  }\n\n  // 12. If mimeType starts with U+003B (;), then prepend\n  // \"text/plain\" to mimeType.\n  if (mimeType.startsWith(';')) {\n    mimeType = 'text/plain' + mimeType\n  }\n\n  // 13. Let mimeTypeRecord be the result of parsing\n  // mimeType.\n  let mimeTypeRecord = parseMIMEType(mimeType)\n\n  // 14. If mimeTypeRecord is failure, then set\n  // mimeTypeRecord to text/plain;charset=US-ASCII.\n  if (mimeTypeRecord === 'failure') {\n    mimeTypeRecord = parseMIMEType('text/plain;charset=US-ASCII')\n  }\n\n  // 15. Return a new data: URL struct whose MIME\n  // type is mimeTypeRecord and body is body.\n  // https://fetch.spec.whatwg.org/#data-url-struct\n  return { mimeType: mimeTypeRecord, body }\n}\n\n// https://url.spec.whatwg.org/#concept-url-serializer\n/**\n * @param {URL} url\n * @param {boolean} excludeFragment\n */\nfunction URLSerializer (url, excludeFragment = false) {\n  if (!excludeFragment) {\n    return url.href\n  }\n\n  const href = url.href\n  const hashLength = url.hash.length\n\n  const serialized = hashLength === 0 ? href : href.substring(0, href.length - hashLength)\n\n  if (!hashLength && href.endsWith('#')) {\n    return serialized.slice(0, -1)\n  }\n\n  return serialized\n}\n\n// https://url.spec.whatwg.org/#string-percent-decode\n/** @param {string} input */\nfunction stringPercentDecode (input) {\n  // 1. Let bytes be the UTF-8 encoding of input.\n  const bytes = encoder.encode(input)\n\n  // 2. Return the percent-decoding of bytes.\n  return percentDecode(bytes)\n}\n\n/**\n * @param {number} byte\n */\nfunction isHexCharByte (byte) {\n  // 0-9 A-F a-f\n  return (byte >= 0x30 && byte <= 0x39) || (byte >= 0x41 && byte <= 0x46) || (byte >= 0x61 && byte <= 0x66)\n}\n\n/**\n * @param {number} byte\n */\nfunction hexByteToNumber (byte) {\n  return (\n    // 0-9\n    byte >= 0x30 && byte <= 0x39\n      ? (byte - 48)\n    // Convert to uppercase\n    // ((byte & 0xDF) - 65) + 10\n      : ((byte & 0xDF) - 55)\n  )\n}\n\n// https://url.spec.whatwg.org/#percent-decode\n/** @param {Uint8Array} input */\nfunction percentDecode (input) {\n  const length = input.length\n  // 1. Let output be an empty byte sequence.\n  /** @type {Uint8Array} */\n  const output = new Uint8Array(length)\n  let j = 0\n  let i = 0\n  // 2. For each byte byte in input:\n  while (i < length) {\n    const byte = input[i]\n\n    // 1. If byte is not 0x25 (%), then append byte to output.\n    if (byte !== 0x25) {\n      output[j++] = byte\n\n    // 2. Otherwise, if byte is 0x25 (%) and the next two bytes\n    // after byte in input are not in the ranges\n    // 0x30 (0) to 0x39 (9), 0x41 (A) to 0x46 (F),\n    // and 0x61 (a) to 0x66 (f), all inclusive, append byte\n    // to output.\n    } else if (\n      byte === 0x25 &&\n      !(isHexCharByte(input[i + 1]) && isHexCharByte(input[i + 2]))\n    ) {\n      output[j++] = 0x25\n\n    // 3. Otherwise:\n    } else {\n      // 1. Let bytePoint be the two bytes after byte in input,\n      // decoded, and then interpreted as hexadecimal number.\n      // 2. Append a byte whose value is bytePoint to output.\n      output[j++] = (hexByteToNumber(input[i + 1]) << 4) | hexByteToNumber(input[i + 2])\n\n      // 3. Skip the next two bytes in input.\n      i += 2\n    }\n    ++i\n  }\n\n  // 3. Return output.\n  return length === j ? output : output.subarray(0, j)\n}\n\n// https://mimesniff.spec.whatwg.org/#parse-a-mime-type\n/** @param {string} input */\nfunction parseMIMEType (input) {\n  // 1. Remove any leading and trailing HTTP whitespace\n  // from input.\n  input = removeHTTPWhitespace(input, true, true)\n\n  // 2. Let position be a position variable for input,\n  // initially pointing at the start of input.\n  const position = { position: 0 }\n\n  // 3. Let type be the result of collecting a sequence\n  // of code points that are not U+002F (/) from\n  // input, given position.\n  const type = collectASequenceOfCodePointsFast(\n    '/',\n    input,\n    position\n  )\n\n  // 4. If type is the empty string or does not solely\n  // contain HTTP token code points, then return failure.\n  // https://mimesniff.spec.whatwg.org/#http-token-code-point\n  if (type.length === 0 || !HTTP_TOKEN_CODEPOINTS.test(type)) {\n    return 'failure'\n  }\n\n  // 5. If position is past the end of input, then return\n  // failure\n  if (position.position >= input.length) {\n    return 'failure'\n  }\n\n  // 6. Advance position by 1. (This skips past U+002F (/).)\n  position.position++\n\n  // 7. Let subtype be the result of collecting a sequence of\n  // code points that are not U+003B (;) from input, given\n  // position.\n  let subtype = collectASequenceOfCodePointsFast(\n    ';',\n    input,\n    position\n  )\n\n  // 8. Remove any trailing HTTP whitespace from subtype.\n  subtype = removeHTTPWhitespace(subtype, false, true)\n\n  // 9. If subtype is the empty string or does not solely\n  // contain HTTP token code points, then return failure.\n  if (subtype.length === 0 || !HTTP_TOKEN_CODEPOINTS.test(subtype)) {\n    return 'failure'\n  }\n\n  const typeLowercase = type.toLowerCase()\n  const subtypeLowercase = subtype.toLowerCase()\n\n  // 10. Let mimeType be a new MIME type record whose type\n  // is type, in ASCII lowercase, and subtype is subtype,\n  // in ASCII lowercase.\n  // https://mimesniff.spec.whatwg.org/#mime-type\n  const mimeType = {\n    type: typeLowercase,\n    subtype: subtypeLowercase,\n    /** @type {Map<string, string>} */\n    parameters: new Map(),\n    // https://mimesniff.spec.whatwg.org/#mime-type-essence\n    essence: `${typeLowercase}/${subtypeLowercase}`\n  }\n\n  // 11. While position is not past the end of input:\n  while (position.position < input.length) {\n    // 1. Advance position by 1. (This skips past U+003B (;).)\n    position.position++\n\n    // 2. Collect a sequence of code points that are HTTP\n    // whitespace from input given position.\n    collectASequenceOfCodePoints(\n      // https://fetch.spec.whatwg.org/#http-whitespace\n      char => HTTP_WHITESPACE_REGEX.test(char),\n      input,\n      position\n    )\n\n    // 3. Let parameterName be the result of collecting a\n    // sequence of code points that are not U+003B (;)\n    // or U+003D (=) from input, given position.\n    let parameterName = collectASequenceOfCodePoints(\n      (char) => char !== ';' && char !== '=',\n      input,\n      position\n    )\n\n    // 4. Set parameterName to parameterName, in ASCII\n    // lowercase.\n    parameterName = parameterName.toLowerCase()\n\n    // 5. If position is not past the end of input, then:\n    if (position.position < input.length) {\n      // 1. If the code point at position within input is\n      // U+003B (;), then continue.\n      if (input[position.position] === ';') {\n        continue\n      }\n\n      // 2. Advance position by 1. (This skips past U+003D (=).)\n      position.position++\n    }\n\n    // 6. If position is past the end of input, then break.\n    if (position.position >= input.length) {\n      break\n    }\n\n    // 7. Let parameterValue be null.\n    let parameterValue = null\n\n    // 8. If the code point at position within input is\n    // U+0022 (\"), then:\n    if (input[position.position] === '\"') {\n      // 1. Set parameterValue to the result of collecting\n      // an HTTP quoted string from input, given position\n      // and the extract-value flag.\n      parameterValue = collectAnHTTPQuotedString(input, position, true)\n\n      // 2. Collect a sequence of code points that are not\n      // U+003B (;) from input, given position.\n      collectASequenceOfCodePointsFast(\n        ';',\n        input,\n        position\n      )\n\n    // 9. Otherwise:\n    } else {\n      // 1. Set parameterValue to the result of collecting\n      // a sequence of code points that are not U+003B (;)\n      // from input, given position.\n      parameterValue = collectASequenceOfCodePointsFast(\n        ';',\n        input,\n        position\n      )\n\n      // 2. Remove any trailing HTTP whitespace from parameterValue.\n      parameterValue = removeHTTPWhitespace(parameterValue, false, true)\n\n      // 3. If parameterValue is the empty string, then continue.\n      if (parameterValue.length === 0) {\n        continue\n      }\n    }\n\n    // 10. If all of the following are true\n    // - parameterName is not the empty string\n    // - parameterName solely contains HTTP token code points\n    // - parameterValue solely contains HTTP quoted-string token code points\n    // - mimeType\u2019s parameters[parameterName] does not exist\n    // then set mimeType\u2019s parameters[parameterName] to parameterValue.\n    if (\n      parameterName.length !== 0 &&\n      HTTP_TOKEN_CODEPOINTS.test(parameterName) &&\n      (parameterValue.length === 0 || HTTP_QUOTED_STRING_TOKENS.test(parameterValue)) &&\n      !mimeType.parameters.has(parameterName)\n    ) {\n      mimeType.parameters.set(parameterName, parameterValue)\n    }\n  }\n\n  // 12. Return mimeType.\n  return mimeType\n}\n\n// https://fetch.spec.whatwg.org/#collect-an-http-quoted-string\n// tests: https://fetch.spec.whatwg.org/#example-http-quoted-string\n/**\n * @param {string} input\n * @param {{ position: number }} position\n * @param {boolean} [extractValue=false]\n */\nfunction collectAnHTTPQuotedString (input, position, extractValue = false) {\n  // 1. Let positionStart be position.\n  const positionStart = position.position\n\n  // 2. Let value be the empty string.\n  let value = ''\n\n  // 3. Assert: the code point at position within input\n  // is U+0022 (\").\n  assert(input[position.position] === '\"')\n\n  // 4. Advance position by 1.\n  position.position++\n\n  // 5. While true:\n  while (true) {\n    // 1. Append the result of collecting a sequence of code points\n    // that are not U+0022 (\") or U+005C (\\) from input, given\n    // position, to value.\n    value += collectASequenceOfCodePoints(\n      (char) => char !== '\"' && char !== '\\\\',\n      input,\n      position\n    )\n\n    // 2. If position is past the end of input, then break.\n    if (position.position >= input.length) {\n      break\n    }\n\n    // 3. Let quoteOrBackslash be the code point at position within\n    // input.\n    const quoteOrBackslash = input[position.position]\n\n    // 4. Advance position by 1.\n    position.position++\n\n    // 5. If quoteOrBackslash is U+005C (\\), then:\n    if (quoteOrBackslash === '\\\\') {\n      // 1. If position is past the end of input, then append\n      // U+005C (\\) to value and break.\n      if (position.position >= input.length) {\n        value += '\\\\'\n        break\n      }\n\n      // 2. Append the code point at position within input to value.\n      value += input[position.position]\n\n      // 3. Advance position by 1.\n      position.position++\n\n    // 6. Otherwise:\n    } else {\n      // 1. Assert: quoteOrBackslash is U+0022 (\").\n      assert(quoteOrBackslash === '\"')\n\n      // 2. Break.\n      break\n    }\n  }\n\n  // 6. If the extract-value flag is set, then return value.\n  if (extractValue) {\n    return value\n  }\n\n  // 7. Return the code points from positionStart to position,\n  // inclusive, within input.\n  return input.slice(positionStart, position.position)\n}\n\n/**\n * @see https://mimesniff.spec.whatwg.org/#serialize-a-mime-type\n */\nfunction serializeAMimeType (mimeType) {\n  assert(mimeType !== 'failure')\n  const { parameters, essence } = mimeType\n\n  // 1. Let serialization be the concatenation of mimeType\u2019s\n  //    type, U+002F (/), and mimeType\u2019s subtype.\n  let serialization = essence\n\n  // 2. For each name \u2192 value of mimeType\u2019s parameters:\n  for (let [name, value] of parameters.entries()) {\n    // 1. Append U+003B (;) to serialization.\n    serialization += ';'\n\n    // 2. Append name to serialization.\n    serialization += name\n\n    // 3. Append U+003D (=) to serialization.\n    serialization += '='\n\n    // 4. If value does not solely contain HTTP token code\n    //    points or value is the empty string, then:\n    if (!HTTP_TOKEN_CODEPOINTS.test(value)) {\n      // 1. Precede each occurrence of U+0022 (\") or\n      //    U+005C (\\) in value with U+005C (\\).\n      value = value.replace(/[\\\\\"]/ug, '\\\\$&')\n\n      // 2. Prepend U+0022 (\") to value.\n      value = '\"' + value\n\n      // 3. Append U+0022 (\") to value.\n      value += '\"'\n    }\n\n    // 5. Append value to serialization.\n    serialization += value\n  }\n\n  // 3. Return serialization.\n  return serialization\n}\n\n/**\n * @see https://fetch.spec.whatwg.org/#http-whitespace\n * @param {number} char\n */\nfunction isHTTPWhiteSpace (char) {\n  // \"\\r\\n\\t \"\n  return char === 0x00d || char === 0x00a || char === 0x009 || char === 0x020\n}\n\n/**\n * @see https://fetch.spec.whatwg.org/#http-whitespace\n * @param {string} str\n * @param {boolean} [leading=true]\n * @param {boolean} [trailing=true]\n */\nfunction removeHTTPWhitespace (str, leading = true, trailing = true) {\n  return removeChars(str, leading, trailing, isHTTPWhiteSpace)\n}\n\n/**\n * @see https://mimesniff.spec.whatwg.org/#minimize-a-supported-mime-type\n * @param {Exclude<ReturnType<typeof parseMIMEType>, 'failure'>} mimeType\n */\nfunction minimizeSupportedMimeType (mimeType) {\n  switch (mimeType.essence) {\n    case 'application/ecmascript':\n    case 'application/javascript':\n    case 'application/x-ecmascript':\n    case 'application/x-javascript':\n    case 'text/ecmascript':\n    case 'text/javascript':\n    case 'text/javascript1.0':\n    case 'text/javascript1.1':\n    case 'text/javascript1.2':\n    case 'text/javascript1.3':\n    case 'text/javascript1.4':\n    case 'text/javascript1.5':\n    case 'text/jscript':\n    case 'text/livescript':\n    case 'text/x-ecmascript':\n    case 'text/x-javascript':\n      // 1. If mimeType is a JavaScript MIME type, then return \"text/javascript\".\n      return 'text/javascript'\n    case 'application/json':\n    case 'text/json':\n      // 2. If mimeType is a JSON MIME type, then return \"application/json\".\n      return 'application/json'\n    case 'image/svg+xml':\n      // 3. If mimeType\u2019s essence is \"image/svg+xml\", then return \"image/svg+xml\".\n      return 'image/svg+xml'\n    case 'text/xml':\n    case 'application/xml':\n      // 4. If mimeType is an XML MIME type, then return \"application/xml\".\n      return 'application/xml'\n  }\n\n  // 2. If mimeType is a JSON MIME type, then return \"application/json\".\n  if (mimeType.subtype.endsWith('+json')) {\n    return 'application/json'\n  }\n\n  // 4. If mimeType is an XML MIME type, then return \"application/xml\".\n  if (mimeType.subtype.endsWith('+xml')) {\n    return 'application/xml'\n  }\n\n  // 5. If mimeType is supported by the user agent, then return mimeType\u2019s essence.\n  // Technically, node doesn't support any mimetypes.\n\n  // 6. Return the empty string.\n  return ''\n}\n\nmodule.exports = {\n  dataURLProcessor,\n  URLSerializer,\n  stringPercentDecode,\n  parseMIMEType,\n  collectAnHTTPQuotedString,\n  serializeAMimeType,\n  removeHTTPWhitespace,\n  minimizeSupportedMimeType,\n  HTTP_TOKEN_CODEPOINTS\n}\n", "'use strict'\n\n/** @typedef {`node:${string}`} NodeModuleName */\n\n/** @type {Record<NodeModuleName, () => any>} */\nconst lazyLoaders = {\n  __proto__: null,\n  'node:crypto': () => require('node:crypto'),\n  'node:sqlite': () => require('node:sqlite'),\n  'node:worker_threads': () => require('node:worker_threads'),\n  'node:zlib': () => require('node:zlib')\n}\n\n/**\n * @param {NodeModuleName} moduleName\n * @returns {boolean}\n */\nfunction detectRuntimeFeatureByNodeModule (moduleName) {\n  try {\n    lazyLoaders[moduleName]()\n    return true\n  } catch (err) {\n    if (err.code !== 'ERR_UNKNOWN_BUILTIN_MODULE' && err.code !== 'ERR_NO_CRYPTO') {\n      throw err\n    }\n    return false\n  }\n}\n\n/**\n * @param {NodeModuleName} moduleName\n * @param {string} property\n * @returns {boolean}\n */\nfunction detectRuntimeFeatureByExportedProperty (moduleName, property) {\n  const module = lazyLoaders[moduleName]()\n  return typeof module[property] !== 'undefined'\n}\n\nconst runtimeFeaturesByExportedProperty = /** @type {const} */ (['markAsUncloneable', 'zstd'])\n\n/** @type {Record<RuntimeFeatureByExportedProperty, [NodeModuleName, string]>} */\nconst exportedPropertyLookup = {\n  markAsUncloneable: ['node:worker_threads', 'markAsUncloneable'],\n  zstd: ['node:zlib', 'createZstdDecompress']\n}\n\n/** @typedef {typeof runtimeFeaturesByExportedProperty[number]} RuntimeFeatureByExportedProperty */\n\nconst runtimeFeaturesAsNodeModule = /** @type {const} */ (['crypto', 'sqlite'])\n/** @typedef {typeof runtimeFeaturesAsNodeModule[number]} RuntimeFeatureByNodeModule */\n\nconst features = /** @type {const} */ ([\n  ...runtimeFeaturesAsNodeModule,\n  ...runtimeFeaturesByExportedProperty\n])\n\n/** @typedef {typeof features[number]} Feature */\n\n/**\n * @param {Feature} feature\n * @returns {boolean}\n */\nfunction detectRuntimeFeature (feature) {\n  if (runtimeFeaturesAsNodeModule.includes(/** @type {RuntimeFeatureByNodeModule} */ (feature))) {\n    return detectRuntimeFeatureByNodeModule(`node:${feature}`)\n  } else if (runtimeFeaturesByExportedProperty.includes(/** @type {RuntimeFeatureByExportedProperty} */ (feature))) {\n    const [moduleName, property] = exportedPropertyLookup[feature]\n    return detectRuntimeFeatureByExportedProperty(moduleName, property)\n  }\n  throw new TypeError(`unknown feature: ${feature}`)\n}\n\n/**\n * @class\n * @name RuntimeFeatures\n */\nclass RuntimeFeatures {\n  /** @type {Map<Feature, boolean>} */\n  #map = new Map()\n\n  /**\n   * Clears all cached feature detections.\n   */\n  clear () {\n    this.#map.clear()\n  }\n\n  /**\n   * @param {Feature} feature\n   * @returns {boolean}\n   */\n  has (feature) {\n    return (\n      this.#map.get(feature) ?? this.#detectRuntimeFeature(feature)\n    )\n  }\n\n  /**\n   * @param {Feature} feature\n   * @param {boolean} value\n   */\n  set (feature, value) {\n    if (features.includes(feature) === false) {\n      throw new TypeError(`unknown feature: ${feature}`)\n    }\n    this.#map.set(feature, value)\n  }\n\n  /**\n   * @param {Feature} feature\n   * @returns {boolean}\n   */\n  #detectRuntimeFeature (feature) {\n    const result = detectRuntimeFeature(feature)\n    this.#map.set(feature, result)\n    return result\n  }\n}\n\nconst instance = new RuntimeFeatures()\n\nmodule.exports.runtimeFeatures = instance\nmodule.exports.default = instance\n", "'use strict'\n\nconst assert = require('node:assert')\nconst { types, inspect } = require('node:util')\nconst { runtimeFeatures } = require('../../util/runtime-features')\n\nconst UNDEFINED = 1\nconst BOOLEAN = 2\nconst STRING = 3\nconst SYMBOL = 4\nconst NUMBER = 5\nconst BIGINT = 6\nconst NULL = 7\nconst OBJECT = 8 // function and object\n\nconst FunctionPrototypeSymbolHasInstance = Function.call.bind(Function.prototype[Symbol.hasInstance])\n\n/** @type {import('../../../types/webidl').Webidl} */\nconst webidl = {\n  converters: {},\n  util: {},\n  errors: {},\n  is: {}\n}\n\n/**\n * @description Instantiate an error.\n *\n * @param {Object} opts\n * @param {string} opts.header\n * @param {string} opts.message\n * @returns {TypeError}\n */\nwebidl.errors.exception = function (message) {\n  return new TypeError(`${message.header}: ${message.message}`)\n}\n\n/**\n * @description Instantiate an error when conversion from one type to another has failed.\n *\n * @param {Object} opts\n * @param {string} opts.prefix\n * @param {string} opts.argument\n * @param {string[]} opts.types\n * @returns {TypeError}\n */\nwebidl.errors.conversionFailed = function (opts) {\n  const plural = opts.types.length === 1 ? '' : ' one of'\n  const message =\n    `${opts.argument} could not be converted to` +\n    `${plural}: ${opts.types.join(', ')}.`\n\n  return webidl.errors.exception({\n    header: opts.prefix,\n    message\n  })\n}\n\n/**\n * @description Instantiate an error when an invalid argument is provided\n *\n * @param {Object} context\n * @param {string} context.prefix\n * @param {string} context.value\n * @param {string} context.type\n * @returns {TypeError}\n */\nwebidl.errors.invalidArgument = function (context) {\n  return webidl.errors.exception({\n    header: context.prefix,\n    message: `\"${context.value}\" is an invalid ${context.type}.`\n  })\n}\n\n// https://webidl.spec.whatwg.org/#implements\nwebidl.brandCheck = function (V, I) {\n  if (!FunctionPrototypeSymbolHasInstance(I, V)) {\n    const err = new TypeError('Illegal invocation')\n    err.code = 'ERR_INVALID_THIS' // node compat.\n    throw err\n  }\n}\n\nwebidl.brandCheckMultiple = function (List) {\n  const prototypes = List.map((c) => webidl.util.MakeTypeAssertion(c))\n\n  return (V) => {\n    if (prototypes.every(typeCheck => !typeCheck(V))) {\n      const err = new TypeError('Illegal invocation')\n      err.code = 'ERR_INVALID_THIS' // node compat.\n      throw err\n    }\n  }\n}\n\nwebidl.argumentLengthCheck = function ({ length }, min, ctx) {\n  if (length < min) {\n    throw webidl.errors.exception({\n      message: `${min} argument${min !== 1 ? 's' : ''} required, ` +\n               `but${length ? ' only' : ''} ${length} found.`,\n      header: ctx\n    })\n  }\n}\n\nwebidl.illegalConstructor = function () {\n  throw webidl.errors.exception({\n    header: 'TypeError',\n    message: 'Illegal constructor'\n  })\n}\n\nwebidl.util.MakeTypeAssertion = function (I) {\n  return (O) => FunctionPrototypeSymbolHasInstance(I, O)\n}\n\n// https://tc39.es/ecma262/#sec-ecmascript-data-types-and-values\nwebidl.util.Type = function (V) {\n  switch (typeof V) {\n    case 'undefined': return UNDEFINED\n    case 'boolean': return BOOLEAN\n    case 'string': return STRING\n    case 'symbol': return SYMBOL\n    case 'number': return NUMBER\n    case 'bigint': return BIGINT\n    case 'function':\n    case 'object': {\n      if (V === null) {\n        return NULL\n      }\n\n      return OBJECT\n    }\n  }\n}\n\nwebidl.util.Types = {\n  UNDEFINED,\n  BOOLEAN,\n  STRING,\n  SYMBOL,\n  NUMBER,\n  BIGINT,\n  NULL,\n  OBJECT\n}\n\nwebidl.util.TypeValueToString = function (o) {\n  switch (webidl.util.Type(o)) {\n    case UNDEFINED: return 'Undefined'\n    case BOOLEAN: return 'Boolean'\n    case STRING: return 'String'\n    case SYMBOL: return 'Symbol'\n    case NUMBER: return 'Number'\n    case BIGINT: return 'BigInt'\n    case NULL: return 'Null'\n    case OBJECT: return 'Object'\n  }\n}\n\nwebidl.util.markAsUncloneable = runtimeFeatures.has('markAsUncloneable')\n  ? require('node:worker_threads').markAsUncloneable\n  : () => {}\n\n// https://webidl.spec.whatwg.org/#abstract-opdef-converttoint\nwebidl.util.ConvertToInt = function (V, bitLength, signedness, flags) {\n  let upperBound\n  let lowerBound\n\n  // 1. If bitLength is 64, then:\n  if (bitLength === 64) {\n    // 1. Let upperBound be 2^53 \u2212 1.\n    upperBound = Math.pow(2, 53) - 1\n\n    // 2. If signedness is \"unsigned\", then let lowerBound be 0.\n    if (signedness === 'unsigned') {\n      lowerBound = 0\n    } else {\n      // 3. Otherwise let lowerBound be \u22122^53 + 1.\n      lowerBound = Math.pow(-2, 53) + 1\n    }\n  } else if (signedness === 'unsigned') {\n    // 2. Otherwise, if signedness is \"unsigned\", then:\n\n    // 1. Let lowerBound be 0.\n    lowerBound = 0\n\n    // 2. Let upperBound be 2^bitLength \u2212 1.\n    upperBound = Math.pow(2, bitLength) - 1\n  } else {\n    // 3. Otherwise:\n\n    // 1. Let lowerBound be -2^bitLength \u2212 1.\n    lowerBound = Math.pow(-2, bitLength) - 1\n\n    // 2. Let upperBound be 2^bitLength \u2212 1 \u2212 1.\n    upperBound = Math.pow(2, bitLength - 1) - 1\n  }\n\n  // 4. Let x be ? ToNumber(V).\n  let x = Number(V)\n\n  // 5. If x is \u22120, then set x to +0.\n  if (x === 0) {\n    x = 0\n  }\n\n  // 6. If the conversion is to an IDL type associated\n  //    with the [EnforceRange] extended attribute, then:\n  if (webidl.util.HasFlag(flags, webidl.attributes.EnforceRange)) {\n    // 1. If x is NaN, +\u221E, or \u2212\u221E, then throw a TypeError.\n    if (\n      Number.isNaN(x) ||\n      x === Number.POSITIVE_INFINITY ||\n      x === Number.NEGATIVE_INFINITY\n    ) {\n      throw webidl.errors.exception({\n        header: 'Integer conversion',\n        message: `Could not convert ${webidl.util.Stringify(V)} to an integer.`\n      })\n    }\n\n    // 2. Set x to IntegerPart(x).\n    x = webidl.util.IntegerPart(x)\n\n    // 3. If x < lowerBound or x > upperBound, then\n    //    throw a TypeError.\n    if (x < lowerBound || x > upperBound) {\n      throw webidl.errors.exception({\n        header: 'Integer conversion',\n        message: `Value must be between ${lowerBound}-${upperBound}, got ${x}.`\n      })\n    }\n\n    // 4. Return x.\n    return x\n  }\n\n  // 7. If x is not NaN and the conversion is to an IDL\n  //    type associated with the [Clamp] extended\n  //    attribute, then:\n  if (!Number.isNaN(x) && webidl.util.HasFlag(flags, webidl.attributes.Clamp)) {\n    // 1. Set x to min(max(x, lowerBound), upperBound).\n    x = Math.min(Math.max(x, lowerBound), upperBound)\n\n    // 2. Round x to the nearest integer, choosing the\n    //    even integer if it lies halfway between two,\n    //    and choosing +0 rather than \u22120.\n    if (Math.floor(x) % 2 === 0) {\n      x = Math.floor(x)\n    } else {\n      x = Math.ceil(x)\n    }\n\n    // 3. Return x.\n    return x\n  }\n\n  // 8. If x is NaN, +0, +\u221E, or \u2212\u221E, then return +0.\n  if (\n    Number.isNaN(x) ||\n    (x === 0 && Object.is(0, x)) ||\n    x === Number.POSITIVE_INFINITY ||\n    x === Number.NEGATIVE_INFINITY\n  ) {\n    return 0\n  }\n\n  // 9. Set x to IntegerPart(x).\n  x = webidl.util.IntegerPart(x)\n\n  // 10. Set x to x modulo 2^bitLength.\n  x = x % Math.pow(2, bitLength)\n\n  // 11. If signedness is \"signed\" and x \u2265 2^bitLength \u2212 1,\n  //    then return x \u2212 2^bitLength.\n  if (signedness === 'signed' && x >= Math.pow(2, bitLength) - 1) {\n    return x - Math.pow(2, bitLength)\n  }\n\n  // 12. Otherwise, return x.\n  return x\n}\n\n// https://webidl.spec.whatwg.org/#abstract-opdef-integerpart\nwebidl.util.IntegerPart = function (n) {\n  // 1. Let r be floor(abs(n)).\n  const r = Math.floor(Math.abs(n))\n\n  // 2. If n < 0, then return -1 \u00D7 r.\n  if (n < 0) {\n    return -1 * r\n  }\n\n  // 3. Otherwise, return r.\n  return r\n}\n\nwebidl.util.Stringify = function (V) {\n  const type = webidl.util.Type(V)\n\n  switch (type) {\n    case SYMBOL:\n      return `Symbol(${V.description})`\n    case OBJECT:\n      return inspect(V)\n    case STRING:\n      return `\"${V}\"`\n    case BIGINT:\n      return `${V}n`\n    default:\n      return `${V}`\n  }\n}\n\nwebidl.util.IsResizableArrayBuffer = function (V) {\n  if (types.isArrayBuffer(V)) {\n    return V.resizable\n  }\n\n  if (types.isSharedArrayBuffer(V)) {\n    return V.growable\n  }\n\n  throw webidl.errors.exception({\n    header: 'IsResizableArrayBuffer',\n    message: `\"${webidl.util.Stringify(V)}\" is not an array buffer.`\n  })\n}\n\nwebidl.util.HasFlag = function (flags, attributes) {\n  return typeof flags === 'number' && (flags & attributes) === attributes\n}\n\n// https://webidl.spec.whatwg.org/#es-sequence\nwebidl.sequenceConverter = function (converter) {\n  return (V, prefix, argument, Iterable) => {\n    // 1. If Type(V) is not Object, throw a TypeError.\n    if (webidl.util.Type(V) !== OBJECT) {\n      throw webidl.errors.exception({\n        header: prefix,\n        message: `${argument} (${webidl.util.Stringify(V)}) is not iterable.`\n      })\n    }\n\n    // 2. Let method be ? GetMethod(V, @@iterator).\n    /** @type {Generator} */\n    const method = typeof Iterable === 'function' ? Iterable() : V?.[Symbol.iterator]?.()\n    const seq = []\n    let index = 0\n\n    // 3. If method is undefined, throw a TypeError.\n    if (\n      method === undefined ||\n      typeof method.next !== 'function'\n    ) {\n      throw webidl.errors.exception({\n        header: prefix,\n        message: `${argument} is not iterable.`\n      })\n    }\n\n    // https://webidl.spec.whatwg.org/#create-sequence-from-iterable\n    while (true) {\n      const { done, value } = method.next()\n\n      if (done) {\n        break\n      }\n\n      seq.push(converter(value, prefix, `${argument}[${index++}]`))\n    }\n\n    return seq\n  }\n}\n\n// https://webidl.spec.whatwg.org/#es-to-record\nwebidl.recordConverter = function (keyConverter, valueConverter) {\n  return (O, prefix, argument) => {\n    // 1. If Type(O) is not Object, throw a TypeError.\n    if (webidl.util.Type(O) !== OBJECT) {\n      throw webidl.errors.exception({\n        header: prefix,\n        message: `${argument} (\"${webidl.util.TypeValueToString(O)}\") is not an Object.`\n      })\n    }\n\n    // 2. Let result be a new empty instance of record<K, V>.\n    const result = {}\n\n    if (!types.isProxy(O)) {\n      // 1. Let desc be ? O.[[GetOwnProperty]](key).\n      const keys = [...Object.getOwnPropertyNames(O), ...Object.getOwnPropertySymbols(O)]\n\n      for (const key of keys) {\n        const keyName = webidl.util.Stringify(key)\n\n        // 1. Let typedKey be key converted to an IDL value of type K.\n        const typedKey = keyConverter(key, prefix, `Key ${keyName} in ${argument}`)\n\n        // 2. Let value be ? Get(O, key).\n        // 3. Let typedValue be value converted to an IDL value of type V.\n        const typedValue = valueConverter(O[key], prefix, `${argument}[${keyName}]`)\n\n        // 4. Set result[typedKey] to typedValue.\n        result[typedKey] = typedValue\n      }\n\n      // 5. Return result.\n      return result\n    }\n\n    // 3. Let keys be ? O.[[OwnPropertyKeys]]().\n    const keys = Reflect.ownKeys(O)\n\n    // 4. For each key of keys.\n    for (const key of keys) {\n      // 1. Let desc be ? O.[[GetOwnProperty]](key).\n      const desc = Reflect.getOwnPropertyDescriptor(O, key)\n\n      // 2. If desc is not undefined and desc.[[Enumerable]] is true:\n      if (desc?.enumerable) {\n        // 1. Let typedKey be key converted to an IDL value of type K.\n        const typedKey = keyConverter(key, prefix, argument)\n\n        // 2. Let value be ? Get(O, key).\n        // 3. Let typedValue be value converted to an IDL value of type V.\n        const typedValue = valueConverter(O[key], prefix, argument)\n\n        // 4. Set result[typedKey] to typedValue.\n        result[typedKey] = typedValue\n      }\n    }\n\n    // 5. Return result.\n    return result\n  }\n}\n\nwebidl.interfaceConverter = function (TypeCheck, name) {\n  return (V, prefix, argument) => {\n    if (!TypeCheck(V)) {\n      throw webidl.errors.exception({\n        header: prefix,\n        message: `Expected ${argument} (\"${webidl.util.Stringify(V)}\") to be an instance of ${name}.`\n      })\n    }\n\n    return V\n  }\n}\n\nwebidl.dictionaryConverter = function (converters) {\n  // \"For each dictionary member member declared on dictionary, in lexicographical order:\"\n  converters.sort((a, b) => (a.key > b.key) - (a.key < b.key))\n\n  return (dictionary, prefix, argument) => {\n    const dict = {}\n\n    if (dictionary != null && webidl.util.Type(dictionary) !== OBJECT) {\n      throw webidl.errors.exception({\n        header: prefix,\n        message: `Expected ${dictionary} to be one of: Null, Undefined, Object.`\n      })\n    }\n\n    for (const options of converters) {\n      const { key, defaultValue, required, converter } = options\n\n      if (required === true) {\n        if (dictionary == null || !Object.hasOwn(dictionary, key)) {\n          throw webidl.errors.exception({\n            header: prefix,\n            message: `Missing required key \"${key}\".`\n          })\n        }\n      }\n\n      let value = dictionary?.[key]\n      const hasDefault = defaultValue !== undefined\n\n      // Only use defaultValue if value is undefined and\n      // a defaultValue options was provided.\n      if (hasDefault && value === undefined) {\n        value = defaultValue()\n      }\n\n      // A key can be optional and have no default value.\n      // When this happens, do not perform a conversion,\n      // and do not assign the key a value.\n      if (required || hasDefault || value !== undefined) {\n        value = converter(value, prefix, `${argument}.${key}`)\n\n        if (\n          options.allowedValues &&\n          !options.allowedValues.includes(value)\n        ) {\n          throw webidl.errors.exception({\n            header: prefix,\n            message: `${value} is not an accepted type. Expected one of ${options.allowedValues.join(', ')}.`\n          })\n        }\n\n        dict[key] = value\n      }\n    }\n\n    return dict\n  }\n}\n\nwebidl.nullableConverter = function (converter) {\n  return (V, prefix, argument) => {\n    if (V === null) {\n      return V\n    }\n\n    return converter(V, prefix, argument)\n  }\n}\n\n/**\n * @param {*} value\n * @returns {boolean}\n */\nwebidl.is.USVString = function (value) {\n  return (\n    typeof value === 'string' &&\n    value.isWellFormed()\n  )\n}\n\nwebidl.is.ReadableStream = webidl.util.MakeTypeAssertion(ReadableStream)\nwebidl.is.Blob = webidl.util.MakeTypeAssertion(Blob)\nwebidl.is.URLSearchParams = webidl.util.MakeTypeAssertion(URLSearchParams)\nwebidl.is.File = webidl.util.MakeTypeAssertion(File)\nwebidl.is.URL = webidl.util.MakeTypeAssertion(URL)\nwebidl.is.AbortSignal = webidl.util.MakeTypeAssertion(AbortSignal)\nwebidl.is.MessagePort = webidl.util.MakeTypeAssertion(MessagePort)\n\nwebidl.is.BufferSource = function (V) {\n  return types.isArrayBuffer(V) || (\n    ArrayBuffer.isView(V) &&\n    types.isArrayBuffer(V.buffer)\n  )\n}\n\n// https://webidl.spec.whatwg.org/#dfn-get-buffer-source-copy\nwebidl.util.getCopyOfBytesHeldByBufferSource = function (bufferSource) {\n  // 1. Let jsBufferSource be the result of converting bufferSource to a JavaScript value.\n  const jsBufferSource = bufferSource\n\n  // 2. Let jsArrayBuffer be jsBufferSource.\n  let jsArrayBuffer = jsBufferSource\n\n  // 3. Let offset be 0.\n  let offset = 0\n\n  // 4. Let length be 0.\n  let length = 0\n\n  // 5. If jsBufferSource has a [[ViewedArrayBuffer]] internal slot, then:\n  if (types.isTypedArray(jsBufferSource) || types.isDataView(jsBufferSource)) {\n    // 5.1. Set jsArrayBuffer to jsBufferSource.[[ViewedArrayBuffer]].\n    jsArrayBuffer = jsBufferSource.buffer\n\n    // 5.2. Set offset to jsBufferSource.[[ByteOffset]].\n    offset = jsBufferSource.byteOffset\n\n    // 5.3. Set length to jsBufferSource.[[ByteLength]].\n    length = jsBufferSource.byteLength\n  } else {\n    // 6. Otherwise:\n\n    // 6.1. Assert: jsBufferSource is an ArrayBuffer or SharedArrayBuffer object.\n    assert(types.isAnyArrayBuffer(jsBufferSource))\n\n    // 6.2. Set length to jsBufferSource.[[ArrayBufferByteLength]].\n    length = jsBufferSource.byteLength\n  }\n\n  // 7. If IsDetachedBuffer(jsArrayBuffer) is true, then return the empty byte sequence.\n  if (jsArrayBuffer.detached) {\n    return new Uint8Array(0)\n  }\n\n  // 8. Let bytes be a new byte sequence of length equal to length.\n  const bytes = new Uint8Array(length)\n\n  // 9. For i in the range offset to offset + length \u2212 1, inclusive,\n  //    set bytes[i \u2212 offset] to GetValueFromBuffer(jsArrayBuffer, i, Uint8, true, Unordered).\n  const view = new Uint8Array(jsArrayBuffer, offset, length)\n  bytes.set(view)\n\n  // 10. Return bytes.\n  return bytes\n}\n\n// https://webidl.spec.whatwg.org/#es-DOMString\nwebidl.converters.DOMString = function (V, prefix, argument, flags) {\n  // 1. If V is null and the conversion is to an IDL type\n  //    associated with the [LegacyNullToEmptyString]\n  //    extended attribute, then return the DOMString value\n  //    that represents the empty string.\n  if (V === null && webidl.util.HasFlag(flags, webidl.attributes.LegacyNullToEmptyString)) {\n    return ''\n  }\n\n  // 2. Let x be ? ToString(V).\n  if (typeof V === 'symbol') {\n    throw webidl.errors.exception({\n      header: prefix,\n      message: `${argument} is a symbol, which cannot be converted to a DOMString.`\n    })\n  }\n\n  // 3. Return the IDL DOMString value that represents the\n  //    same sequence of code units as the one the\n  //    ECMAScript String value x represents.\n  return String(V)\n}\n\n// https://webidl.spec.whatwg.org/#es-ByteString\nwebidl.converters.ByteString = function (V, prefix, argument) {\n  // 1. Let x be ? ToString(V).\n  if (typeof V === 'symbol') {\n    throw webidl.errors.exception({\n      header: prefix,\n      message: `${argument} is a symbol, which cannot be converted to a ByteString.`\n    })\n  }\n\n  const x = String(V)\n\n  // 2. If the value of any element of x is greater than\n  //    255, then throw a TypeError.\n  for (let index = 0; index < x.length; index++) {\n    if (x.charCodeAt(index) > 255) {\n      throw new TypeError(\n        'Cannot convert argument to a ByteString because the character at ' +\n        `index ${index} has a value of ${x.charCodeAt(index)} which is greater than 255.`\n      )\n    }\n  }\n\n  // 3. Return an IDL ByteString value whose length is the\n  //    length of x, and where the value of each element is\n  //    the value of the corresponding element of x.\n  return x\n}\n\n/**\n * @param {unknown} value\n * @returns {string}\n * @see https://webidl.spec.whatwg.org/#es-USVString\n */\nwebidl.converters.USVString = function (value) {\n  // TODO: rewrite this so we can control the errors thrown\n  if (typeof value === 'string') {\n    return value.toWellFormed()\n  }\n  return `${value}`.toWellFormed()\n}\n\n// https://webidl.spec.whatwg.org/#es-boolean\nwebidl.converters.boolean = function (V) {\n  // 1. Let x be the result of computing ToBoolean(V).\n  // https://262.ecma-international.org/10.0/index.html#table-10\n  const x = Boolean(V)\n\n  // 2. Return the IDL boolean value that is the one that represents\n  //    the same truth value as the ECMAScript Boolean value x.\n  return x\n}\n\n// https://webidl.spec.whatwg.org/#es-any\nwebidl.converters.any = function (V) {\n  return V\n}\n\n// https://webidl.spec.whatwg.org/#es-long-long\nwebidl.converters['long long'] = function (V, prefix, argument) {\n  // 1. Let x be ? ConvertToInt(V, 64, \"signed\").\n  const x = webidl.util.ConvertToInt(V, 64, 'signed', 0, prefix, argument)\n\n  // 2. Return the IDL long long value that represents\n  //    the same numeric value as x.\n  return x\n}\n\n// https://webidl.spec.whatwg.org/#es-unsigned-long-long\nwebidl.converters['unsigned long long'] = function (V, prefix, argument) {\n  // 1. Let x be ? ConvertToInt(V, 64, \"unsigned\").\n  const x = webidl.util.ConvertToInt(V, 64, 'unsigned', 0, prefix, argument)\n\n  // 2. Return the IDL unsigned long long value that\n  //    represents the same numeric value as x.\n  return x\n}\n\n// https://webidl.spec.whatwg.org/#es-unsigned-long\nwebidl.converters['unsigned long'] = function (V, prefix, argument) {\n  // 1. Let x be ? ConvertToInt(V, 32, \"unsigned\").\n  const x = webidl.util.ConvertToInt(V, 32, 'unsigned', 0, prefix, argument)\n\n  // 2. Return the IDL unsigned long value that\n  //    represents the same numeric value as x.\n  return x\n}\n\n// https://webidl.spec.whatwg.org/#es-unsigned-short\nwebidl.converters['unsigned short'] = function (V, prefix, argument, flags) {\n  // 1. Let x be ? ConvertToInt(V, 16, \"unsigned\").\n  const x = webidl.util.ConvertToInt(V, 16, 'unsigned', flags, prefix, argument)\n\n  // 2. Return the IDL unsigned short value that represents\n  //    the same numeric value as x.\n  return x\n}\n\n// https://webidl.spec.whatwg.org/#idl-ArrayBuffer\nwebidl.converters.ArrayBuffer = function (V, prefix, argument, flags) {\n  // 1. If V is not an Object, or V does not have an\n  //    [[ArrayBufferData]] internal slot, then throw a\n  //    TypeError.\n  // 2. If IsSharedArrayBuffer(V) is true, then throw a\n  //    TypeError.\n  // see: https://tc39.es/ecma262/#sec-properties-of-the-arraybuffer-instances\n  if (\n    webidl.util.Type(V) !== OBJECT ||\n    !types.isArrayBuffer(V)\n  ) {\n    throw webidl.errors.conversionFailed({\n      prefix,\n      argument: `${argument} (\"${webidl.util.Stringify(V)}\")`,\n      types: ['ArrayBuffer']\n    })\n  }\n\n  // 3. If the conversion is not to an IDL type associated\n  //    with the [AllowResizable] extended attribute, and\n  //    IsResizableArrayBuffer(V) is true, then throw a\n  //    TypeError.\n  if (!webidl.util.HasFlag(flags, webidl.attributes.AllowResizable) && webidl.util.IsResizableArrayBuffer(V)) {\n    throw webidl.errors.exception({\n      header: prefix,\n      message: `${argument} cannot be a resizable ArrayBuffer.`\n    })\n  }\n\n  // 4. Return the IDL ArrayBuffer value that is a\n  //    reference to the same object as V.\n  return V\n}\n\n// https://webidl.spec.whatwg.org/#idl-SharedArrayBuffer\nwebidl.converters.SharedArrayBuffer = function (V, prefix, argument, flags) {\n  // 1. If V is not an Object, or V does not have an\n  //    [[ArrayBufferData]] internal slot, then throw a\n  //    TypeError.\n  // 2. If IsSharedArrayBuffer(V) is false, then throw a\n  //    TypeError.\n  // see: https://tc39.es/ecma262/#sec-properties-of-the-sharedarraybuffer-instances\n  if (\n    webidl.util.Type(V) !== OBJECT ||\n    !types.isSharedArrayBuffer(V)\n  ) {\n    throw webidl.errors.conversionFailed({\n      prefix,\n      argument: `${argument} (\"${webidl.util.Stringify(V)}\")`,\n      types: ['SharedArrayBuffer']\n    })\n  }\n\n  // 3. If the conversion is not to an IDL type associated\n  //    with the [AllowResizable] extended attribute, and\n  //    IsResizableArrayBuffer(V) is true, then throw a\n  //    TypeError.\n  if (!webidl.util.HasFlag(flags, webidl.attributes.AllowResizable) && webidl.util.IsResizableArrayBuffer(V)) {\n    throw webidl.errors.exception({\n      header: prefix,\n      message: `${argument} cannot be a resizable SharedArrayBuffer.`\n    })\n  }\n\n  // 4. Return the IDL SharedArrayBuffer value that is a\n  //    reference to the same object as V.\n  return V\n}\n\n// https://webidl.spec.whatwg.org/#dfn-typed-array-type\nwebidl.converters.TypedArray = function (V, T, prefix, argument, flags) {\n  // 1. Let T be the IDL type V is being converted to.\n\n  // 2. If Type(V) is not Object, or V does not have a\n  //    [[TypedArrayName]] internal slot with a value\n  //    equal to T\u2019s name, then throw a TypeError.\n  if (\n    webidl.util.Type(V) !== OBJECT ||\n    !types.isTypedArray(V) ||\n    V.constructor.name !== T.name\n  ) {\n    throw webidl.errors.conversionFailed({\n      prefix,\n      argument: `${argument} (\"${webidl.util.Stringify(V)}\")`,\n      types: [T.name]\n    })\n  }\n\n  // 3. If the conversion is not to an IDL type associated\n  //    with the [AllowShared] extended attribute, and\n  //    IsSharedArrayBuffer(V.[[ViewedArrayBuffer]]) is\n  //    true, then throw a TypeError.\n  if (!webidl.util.HasFlag(flags, webidl.attributes.AllowShared) && types.isSharedArrayBuffer(V.buffer)) {\n    throw webidl.errors.exception({\n      header: prefix,\n      message: `${argument} cannot be a view on a shared array buffer.`\n    })\n  }\n\n  // 4. If the conversion is not to an IDL type associated\n  //    with the [AllowResizable] extended attribute, and\n  //    IsResizableArrayBuffer(V.[[ViewedArrayBuffer]]) is\n  //    true, then throw a TypeError.\n  if (!webidl.util.HasFlag(flags, webidl.attributes.AllowResizable) && webidl.util.IsResizableArrayBuffer(V.buffer)) {\n    throw webidl.errors.exception({\n      header: prefix,\n      message: `${argument} cannot be a view on a resizable array buffer.`\n    })\n  }\n\n  // 5. Return the IDL value of type T that is a reference\n  //    to the same object as V.\n  return V\n}\n\n// https://webidl.spec.whatwg.org/#idl-DataView\nwebidl.converters.DataView = function (V, prefix, argument, flags) {\n  // 1. If Type(V) is not Object, or V does not have a\n  //    [[DataView]] internal slot, then throw a TypeError.\n  if (webidl.util.Type(V) !== OBJECT || !types.isDataView(V)) {\n    throw webidl.errors.conversionFailed({\n      prefix,\n      argument: `${argument} (\"${webidl.util.Stringify(V)}\")`,\n      types: ['DataView']\n    })\n  }\n\n  // 2. If the conversion is not to an IDL type associated\n  //    with the [AllowShared] extended attribute, and\n  //    IsSharedArrayBuffer(V.[[ViewedArrayBuffer]]) is true,\n  //    then throw a TypeError.\n  if (!webidl.util.HasFlag(flags, webidl.attributes.AllowShared) && types.isSharedArrayBuffer(V.buffer)) {\n    throw webidl.errors.exception({\n      header: prefix,\n      message: `${argument} cannot be a view on a shared array buffer.`\n    })\n  }\n\n  // 3. If the conversion is not to an IDL type associated\n  //    with the [AllowResizable] extended attribute, and\n  //    IsResizableArrayBuffer(V.[[ViewedArrayBuffer]]) is\n  //    true, then throw a TypeError.\n  if (!webidl.util.HasFlag(flags, webidl.attributes.AllowResizable) && webidl.util.IsResizableArrayBuffer(V.buffer)) {\n    throw webidl.errors.exception({\n      header: prefix,\n      message: `${argument} cannot be a view on a resizable array buffer.`\n    })\n  }\n\n  // 4. Return the IDL DataView value that is a reference\n  //    to the same object as V.\n  return V\n}\n\n// https://webidl.spec.whatwg.org/#ArrayBufferView\nwebidl.converters.ArrayBufferView = function (V, prefix, argument, flags) {\n  if (\n    webidl.util.Type(V) !== OBJECT ||\n    !types.isArrayBufferView(V)\n  ) {\n    throw webidl.errors.conversionFailed({\n      prefix,\n      argument: `${argument} (\"${webidl.util.Stringify(V)}\")`,\n      types: ['ArrayBufferView']\n    })\n  }\n\n  if (!webidl.util.HasFlag(flags, webidl.attributes.AllowShared) && types.isSharedArrayBuffer(V.buffer)) {\n    throw webidl.errors.exception({\n      header: prefix,\n      message: `${argument} cannot be a view on a shared array buffer.`\n    })\n  }\n\n  if (!webidl.util.HasFlag(flags, webidl.attributes.AllowResizable) && webidl.util.IsResizableArrayBuffer(V.buffer)) {\n    throw webidl.errors.exception({\n      header: prefix,\n      message: `${argument} cannot be a view on a resizable array buffer.`\n    })\n  }\n\n  return V\n}\n\n// https://webidl.spec.whatwg.org/#BufferSource\nwebidl.converters.BufferSource = function (V, prefix, argument, flags) {\n  if (types.isArrayBuffer(V)) {\n    return webidl.converters.ArrayBuffer(V, prefix, argument, flags)\n  }\n\n  if (types.isArrayBufferView(V)) {\n    flags &= ~webidl.attributes.AllowShared\n\n    return webidl.converters.ArrayBufferView(V, prefix, argument, flags)\n  }\n\n  // Make this explicit for easier debugging\n  if (types.isSharedArrayBuffer(V)) {\n    throw webidl.errors.exception({\n      header: prefix,\n      message: `${argument} cannot be a SharedArrayBuffer.`\n    })\n  }\n\n  throw webidl.errors.conversionFailed({\n    prefix,\n    argument: `${argument} (\"${webidl.util.Stringify(V)}\")`,\n    types: ['ArrayBuffer', 'ArrayBufferView']\n  })\n}\n\n// https://webidl.spec.whatwg.org/#AllowSharedBufferSource\nwebidl.converters.AllowSharedBufferSource = function (V, prefix, argument, flags) {\n  if (types.isArrayBuffer(V)) {\n    return webidl.converters.ArrayBuffer(V, prefix, argument, flags)\n  }\n\n  if (types.isSharedArrayBuffer(V)) {\n    return webidl.converters.SharedArrayBuffer(V, prefix, argument, flags)\n  }\n\n  if (types.isArrayBufferView(V)) {\n    flags |= webidl.attributes.AllowShared\n    return webidl.converters.ArrayBufferView(V, prefix, argument, flags)\n  }\n\n  throw webidl.errors.conversionFailed({\n    prefix,\n    argument: `${argument} (\"${webidl.util.Stringify(V)}\")`,\n    types: ['ArrayBuffer', 'SharedArrayBuffer', 'ArrayBufferView']\n  })\n}\n\nwebidl.converters['sequence<ByteString>'] = webidl.sequenceConverter(\n  webidl.converters.ByteString\n)\n\nwebidl.converters['sequence<sequence<ByteString>>'] = webidl.sequenceConverter(\n  webidl.converters['sequence<ByteString>']\n)\n\nwebidl.converters['record<ByteString, ByteString>'] = webidl.recordConverter(\n  webidl.converters.ByteString,\n  webidl.converters.ByteString\n)\n\nwebidl.converters.Blob = webidl.interfaceConverter(webidl.is.Blob, 'Blob')\n\nwebidl.converters.AbortSignal = webidl.interfaceConverter(\n  webidl.is.AbortSignal,\n  'AbortSignal'\n)\n\n/**\n * [LegacyTreatNonObjectAsNull]\n * callback EventHandlerNonNull = any (Event event);\n * typedef EventHandlerNonNull? EventHandler;\n * @param {*} V\n */\nwebidl.converters.EventHandlerNonNull = function (V) {\n  if (webidl.util.Type(V) !== OBJECT) {\n    return null\n  }\n\n  // [I]f the value is not an object, it will be converted to null, and if the value is not callable,\n  // it will be converted to a callback function value that does nothing when called.\n  if (typeof V === 'function') {\n    return V\n  }\n\n  return () => {}\n}\n\nwebidl.attributes = {\n  Clamp: 1 << 0,\n  EnforceRange: 1 << 1,\n  AllowShared: 1 << 2,\n  AllowResizable: 1 << 3,\n  LegacyNullToEmptyString: 1 << 4\n}\n\nmodule.exports = {\n  webidl\n}\n", "'use strict'\n\nconst { Transform } = require('node:stream')\nconst zlib = require('node:zlib')\nconst { redirectStatusSet, referrerPolicyTokens, badPortsSet } = require('./constants')\nconst { getGlobalOrigin } = require('./global')\nconst { collectAnHTTPQuotedString, parseMIMEType } = require('./data-url')\nconst { performance } = require('node:perf_hooks')\nconst { ReadableStreamFrom, isValidHTTPToken, normalizedMethodRecordsBase } = require('../../core/util')\nconst assert = require('node:assert')\nconst { isUint8Array } = require('node:util/types')\nconst { webidl } = require('../webidl')\nconst { isomorphicEncode, collectASequenceOfCodePoints, removeChars } = require('../infra')\n\nfunction responseURL (response) {\n  // https://fetch.spec.whatwg.org/#responses\n  // A response has an associated URL. It is a pointer to the last URL\n  // in response\u2019s URL list and null if response\u2019s URL list is empty.\n  const urlList = response.urlList\n  const length = urlList.length\n  return length === 0 ? null : urlList[length - 1].toString()\n}\n\n// https://fetch.spec.whatwg.org/#concept-response-location-url\nfunction responseLocationURL (response, requestFragment) {\n  // 1. If response\u2019s status is not a redirect status, then return null.\n  if (!redirectStatusSet.has(response.status)) {\n    return null\n  }\n\n  // 2. Let location be the result of extracting header list values given\n  // `Location` and response\u2019s header list.\n  let location = response.headersList.get('location', true)\n\n  // 3. If location is a header value, then set location to the result of\n  //    parsing location with response\u2019s URL.\n  if (location !== null && isValidHeaderValue(location)) {\n    if (!isValidEncodedURL(location)) {\n      // Some websites respond location header in UTF-8 form without encoding them as ASCII\n      // and major browsers redirect them to correctly UTF-8 encoded addresses.\n      // Here, we handle that behavior in the same way.\n      location = normalizeBinaryStringToUtf8(location)\n    }\n    location = new URL(location, responseURL(response))\n  }\n\n  // 4. If location is a URL whose fragment is null, then set location\u2019s\n  // fragment to requestFragment.\n  if (location && !location.hash) {\n    location.hash = requestFragment\n  }\n\n  // 5. Return location.\n  return location\n}\n\n/**\n * @see https://www.rfc-editor.org/rfc/rfc1738#section-2.2\n * @param {string} url\n * @returns {boolean}\n */\nfunction isValidEncodedURL (url) {\n  for (let i = 0; i < url.length; ++i) {\n    const code = url.charCodeAt(i)\n\n    if (\n      code > 0x7E || // Non-US-ASCII + DEL\n      code < 0x20 // Control characters NUL - US\n    ) {\n      return false\n    }\n  }\n  return true\n}\n\n/**\n * If string contains non-ASCII characters, assumes it's UTF-8 encoded and decodes it.\n * Since UTF-8 is a superset of ASCII, this will work for ASCII strings as well.\n * @param {string} value\n * @returns {string}\n */\nfunction normalizeBinaryStringToUtf8 (value) {\n  return Buffer.from(value, 'binary').toString('utf8')\n}\n\n/** @returns {URL} */\nfunction requestCurrentURL (request) {\n  return request.urlList[request.urlList.length - 1]\n}\n\nfunction requestBadPort (request) {\n  // 1. Let url be request\u2019s current URL.\n  const url = requestCurrentURL(request)\n\n  // 2. If url\u2019s scheme is an HTTP(S) scheme and url\u2019s port is a bad port,\n  // then return blocked.\n  if (urlIsHttpHttpsScheme(url) && badPortsSet.has(url.port)) {\n    return 'blocked'\n  }\n\n  // 3. Return allowed.\n  return 'allowed'\n}\n\nfunction isErrorLike (object) {\n  return object instanceof Error || (\n    object?.constructor?.name === 'Error' ||\n    object?.constructor?.name === 'DOMException'\n  )\n}\n\n// Check whether |statusText| is a ByteString and\n// matches the Reason-Phrase token production.\n// RFC 2616: https://tools.ietf.org/html/rfc2616\n// RFC 7230: https://tools.ietf.org/html/rfc7230\n// \"reason-phrase = *( HTAB / SP / VCHAR / obs-text )\"\n// https://github.com/chromium/chromium/blob/94.0.4604.1/third_party/blink/renderer/core/fetch/response.cc#L116\nfunction isValidReasonPhrase (statusText) {\n  for (let i = 0; i < statusText.length; ++i) {\n    const c = statusText.charCodeAt(i)\n    if (\n      !(\n        (\n          c === 0x09 || // HTAB\n          (c >= 0x20 && c <= 0x7e) || // SP / VCHAR\n          (c >= 0x80 && c <= 0xff)\n        ) // obs-text\n      )\n    ) {\n      return false\n    }\n  }\n  return true\n}\n\n/**\n * @see https://fetch.spec.whatwg.org/#header-name\n * @param {string} potentialValue\n */\nconst isValidHeaderName = isValidHTTPToken\n\n/**\n * @see https://fetch.spec.whatwg.org/#header-value\n * @param {string} potentialValue\n */\nfunction isValidHeaderValue (potentialValue) {\n  // - Has no leading or trailing HTTP tab or space bytes.\n  // - Contains no 0x00 (NUL) or HTTP newline bytes.\n  return (\n    potentialValue[0] === '\\t' ||\n    potentialValue[0] === ' ' ||\n    potentialValue[potentialValue.length - 1] === '\\t' ||\n    potentialValue[potentialValue.length - 1] === ' ' ||\n    potentialValue.includes('\\n') ||\n    potentialValue.includes('\\r') ||\n    potentialValue.includes('\\0')\n  ) === false\n}\n\n/**\n * Parse a referrer policy from a Referrer-Policy header\n * @see https://w3c.github.io/webappsec-referrer-policy/#parse-referrer-policy-from-header\n */\nfunction parseReferrerPolicy (actualResponse) {\n  // 1. Let policy-tokens be the result of extracting header list values given `Referrer-Policy` and response\u2019s header list.\n  const policyHeader = (actualResponse.headersList.get('referrer-policy', true) ?? '').split(',')\n\n  // 2. Let policy be the empty string.\n  let policy = ''\n\n  // 3. For each token in policy-tokens, if token is a referrer policy and token is not the empty string, then set policy to token.\n\n  // Note: As the referrer-policy can contain multiple policies\n  // separated by comma, we need to loop through all of them\n  // and pick the first valid one.\n  // Ref: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referrer-Policy#specify_a_fallback_policy\n  if (policyHeader.length) {\n    // The right-most policy takes precedence.\n    // The left-most policy is the fallback.\n    for (let i = policyHeader.length; i !== 0; i--) {\n      const token = policyHeader[i - 1].trim()\n      if (referrerPolicyTokens.has(token)) {\n        policy = token\n        break\n      }\n    }\n  }\n\n  // 4. Return policy.\n  return policy\n}\n\n/**\n * Given a request request and a response actualResponse, this algorithm\n * updates request\u2019s referrer policy according to the Referrer-Policy\n * header (if any) in actualResponse.\n * @see https://w3c.github.io/webappsec-referrer-policy/#set-requests-referrer-policy-on-redirect\n * @param {import('./request').Request} request\n * @param {import('./response').Response} actualResponse\n */\nfunction setRequestReferrerPolicyOnRedirect (request, actualResponse) {\n  // 1. Let policy be the result of executing \u00A7 8.1 Parse a referrer policy\n  // from a Referrer-Policy header on actualResponse.\n  const policy = parseReferrerPolicy(actualResponse)\n\n  // 2. If policy is not the empty string, then set request\u2019s referrer policy to policy.\n  if (policy !== '') {\n    request.referrerPolicy = policy\n  }\n}\n\n// https://fetch.spec.whatwg.org/#cross-origin-resource-policy-check\nfunction crossOriginResourcePolicyCheck () {\n  // TODO\n  return 'allowed'\n}\n\n// https://fetch.spec.whatwg.org/#concept-cors-check\nfunction corsCheck () {\n  // TODO\n  return 'success'\n}\n\n// https://fetch.spec.whatwg.org/#concept-tao-check\nfunction TAOCheck () {\n  // TODO\n  return 'success'\n}\n\nfunction appendFetchMetadata (httpRequest) {\n  //  https://w3c.github.io/webappsec-fetch-metadata/#sec-fetch-dest-header\n  //  TODO\n\n  //  https://w3c.github.io/webappsec-fetch-metadata/#sec-fetch-mode-header\n\n  //  1. Assert: r\u2019s url is a potentially trustworthy URL.\n  //  TODO\n\n  //  2. Let header be a Structured Header whose value is a token.\n  let header = null\n\n  //  3. Set header\u2019s value to r\u2019s mode.\n  header = httpRequest.mode\n\n  //  4. Set a structured field value `Sec-Fetch-Mode`/header in r\u2019s header list.\n  httpRequest.headersList.set('sec-fetch-mode', header, true)\n\n  //  https://w3c.github.io/webappsec-fetch-metadata/#sec-fetch-site-header\n  //  TODO\n\n  //  https://w3c.github.io/webappsec-fetch-metadata/#sec-fetch-user-header\n  //  TODO\n}\n\n// https://fetch.spec.whatwg.org/#append-a-request-origin-header\nfunction appendRequestOriginHeader (request) {\n  // 1. Let serializedOrigin be the result of byte-serializing a request origin\n  //    with request.\n  // TODO: implement \"byte-serializing a request origin\"\n  let serializedOrigin = request.origin\n\n  // - \"'client' is changed to an origin during fetching.\"\n  //   This doesn't happen in undici (in most cases) because undici, by default,\n  //   has no concept of origin.\n  // - request.origin can also be set to request.client.origin (client being\n  //   an environment settings object), which is undefined without using\n  //   setGlobalOrigin.\n  if (serializedOrigin === 'client' || serializedOrigin === undefined) {\n    return\n  }\n\n  // 2. If request\u2019s response tainting is \"cors\" or request\u2019s mode is \"websocket\",\n  //    then append (`Origin`, serializedOrigin) to request\u2019s header list.\n  // 3. Otherwise, if request\u2019s method is neither `GET` nor `HEAD`, then:\n  if (request.responseTainting === 'cors' || request.mode === 'websocket') {\n    request.headersList.append('origin', serializedOrigin, true)\n  } else if (request.method !== 'GET' && request.method !== 'HEAD') {\n    // 1. Switch on request\u2019s referrer policy:\n    switch (request.referrerPolicy) {\n      case 'no-referrer':\n        // Set serializedOrigin to `null`.\n        serializedOrigin = null\n        break\n      case 'no-referrer-when-downgrade':\n      case 'strict-origin':\n      case 'strict-origin-when-cross-origin':\n        // If request\u2019s origin is a tuple origin, its scheme is \"https\", and\n        // request\u2019s current URL\u2019s scheme is not \"https\", then set\n        // serializedOrigin to `null`.\n        if (request.origin && urlHasHttpsScheme(request.origin) && !urlHasHttpsScheme(requestCurrentURL(request))) {\n          serializedOrigin = null\n        }\n        break\n      case 'same-origin':\n        // If request\u2019s origin is not same origin with request\u2019s current URL\u2019s\n        // origin, then set serializedOrigin to `null`.\n        if (!sameOrigin(request, requestCurrentURL(request))) {\n          serializedOrigin = null\n        }\n        break\n      default:\n        // Do nothing.\n    }\n\n    // 2. Append (`Origin`, serializedOrigin) to request\u2019s header list.\n    request.headersList.append('origin', serializedOrigin, true)\n  }\n}\n\n// https://w3c.github.io/hr-time/#dfn-coarsen-time\nfunction coarsenTime (timestamp, crossOriginIsolatedCapability) {\n  // TODO\n  return timestamp\n}\n\n// https://fetch.spec.whatwg.org/#clamp-and-coarsen-connection-timing-info\nfunction clampAndCoarsenConnectionTimingInfo (connectionTimingInfo, defaultStartTime, crossOriginIsolatedCapability) {\n  if (!connectionTimingInfo?.startTime || connectionTimingInfo.startTime < defaultStartTime) {\n    return {\n      domainLookupStartTime: defaultStartTime,\n      domainLookupEndTime: defaultStartTime,\n      connectionStartTime: defaultStartTime,\n      connectionEndTime: defaultStartTime,\n      secureConnectionStartTime: defaultStartTime,\n      ALPNNegotiatedProtocol: connectionTimingInfo?.ALPNNegotiatedProtocol\n    }\n  }\n\n  return {\n    domainLookupStartTime: coarsenTime(connectionTimingInfo.domainLookupStartTime, crossOriginIsolatedCapability),\n    domainLookupEndTime: coarsenTime(connectionTimingInfo.domainLookupEndTime, crossOriginIsolatedCapability),\n    connectionStartTime: coarsenTime(connectionTimingInfo.connectionStartTime, crossOriginIsolatedCapability),\n    connectionEndTime: coarsenTime(connectionTimingInfo.connectionEndTime, crossOriginIsolatedCapability),\n    secureConnectionStartTime: coarsenTime(connectionTimingInfo.secureConnectionStartTime, crossOriginIsolatedCapability),\n    ALPNNegotiatedProtocol: connectionTimingInfo.ALPNNegotiatedProtocol\n  }\n}\n\n// https://w3c.github.io/hr-time/#dfn-coarsened-shared-current-time\nfunction coarsenedSharedCurrentTime (crossOriginIsolatedCapability) {\n  return coarsenTime(performance.now(), crossOriginIsolatedCapability)\n}\n\n// https://fetch.spec.whatwg.org/#create-an-opaque-timing-info\nfunction createOpaqueTimingInfo (timingInfo) {\n  return {\n    startTime: timingInfo.startTime ?? 0,\n    redirectStartTime: 0,\n    redirectEndTime: 0,\n    postRedirectStartTime: timingInfo.startTime ?? 0,\n    finalServiceWorkerStartTime: 0,\n    finalNetworkResponseStartTime: 0,\n    finalNetworkRequestStartTime: 0,\n    endTime: 0,\n    encodedBodySize: 0,\n    decodedBodySize: 0,\n    finalConnectionTimingInfo: null\n  }\n}\n\n// https://html.spec.whatwg.org/multipage/origin.html#policy-container\nfunction makePolicyContainer () {\n  // Note: the fetch spec doesn't make use of embedder policy or CSP list\n  return {\n    referrerPolicy: 'strict-origin-when-cross-origin'\n  }\n}\n\n// https://html.spec.whatwg.org/multipage/origin.html#clone-a-policy-container\nfunction clonePolicyContainer (policyContainer) {\n  return {\n    referrerPolicy: policyContainer.referrerPolicy\n  }\n}\n\n/**\n * Determine request\u2019s Referrer\n *\n * @see https://w3c.github.io/webappsec-referrer-policy/#determine-requests-referrer\n */\nfunction determineRequestsReferrer (request) {\n  // Given a request request, we can determine the correct referrer information\n  // to send by examining its referrer policy as detailed in the following\n  // steps, which return either no referrer or a URL:\n\n  // 1. Let policy be request's referrer policy.\n  const policy = request.referrerPolicy\n\n  // Note: policy cannot (shouldn't) be null or an empty string.\n  assert(policy)\n\n  // 2. Let environment be request\u2019s client.\n\n  let referrerSource = null\n\n  // 3. Switch on request\u2019s referrer:\n\n  // \"client\"\n  if (request.referrer === 'client') {\n    // Note: node isn't a browser and doesn't implement document/iframes,\n    // so we bypass this step and replace it with our own.\n\n    const globalOrigin = getGlobalOrigin()\n\n    if (!globalOrigin || globalOrigin.origin === 'null') {\n      return 'no-referrer'\n    }\n\n    // Note: we need to clone it as it's mutated\n    referrerSource = new URL(globalOrigin)\n  // a URL\n  } else if (webidl.is.URL(request.referrer)) {\n    // Let referrerSource be request\u2019s referrer.\n    referrerSource = request.referrer\n  }\n\n  // 4. Let request\u2019s referrerURL be the result of stripping referrerSource for\n  //    use as a referrer.\n  let referrerURL = stripURLForReferrer(referrerSource)\n\n  // 5. Let referrerOrigin be the result of stripping referrerSource for use as\n  //    a referrer, with the origin-only flag set to true.\n  const referrerOrigin = stripURLForReferrer(referrerSource, true)\n\n  // 6. If the result of serializing referrerURL is a string whose length is\n  //    greater than 4096, set referrerURL to referrerOrigin.\n  if (referrerURL.toString().length > 4096) {\n    referrerURL = referrerOrigin\n  }\n\n  // 7. The user agent MAY alter referrerURL or referrerOrigin at this point\n  // to enforce arbitrary policy considerations in the interests of minimizing\n  // data leakage. For example, the user agent could strip the URL down to an\n  // origin, modify its host, replace it with an empty string, etc.\n\n  // 8. Execute the switch statements corresponding to the value of policy:\n  switch (policy) {\n    case 'no-referrer':\n      // Return no referrer\n      return 'no-referrer'\n    case 'origin':\n      // Return referrerOrigin\n      if (referrerOrigin != null) {\n        return referrerOrigin\n      }\n      return stripURLForReferrer(referrerSource, true)\n    case 'unsafe-url':\n      // Return referrerURL.\n      return referrerURL\n    case 'strict-origin': {\n      const currentURL = requestCurrentURL(request)\n\n      // 1. If referrerURL is a potentially trustworthy URL and request\u2019s\n      //    current URL is not a potentially trustworthy URL, then return no\n      //    referrer.\n      if (isURLPotentiallyTrustworthy(referrerURL) && !isURLPotentiallyTrustworthy(currentURL)) {\n        return 'no-referrer'\n      }\n      // 2. Return referrerOrigin\n      return referrerOrigin\n    }\n    case 'strict-origin-when-cross-origin': {\n      const currentURL = requestCurrentURL(request)\n\n      // 1. If the origin of referrerURL and the origin of request\u2019s current\n      //    URL are the same, then return referrerURL.\n      if (sameOrigin(referrerURL, currentURL)) {\n        return referrerURL\n      }\n\n      // 2. If referrerURL is a potentially trustworthy URL and request\u2019s\n      //    current URL is not a potentially trustworthy URL, then return no\n      //    referrer.\n      if (isURLPotentiallyTrustworthy(referrerURL) && !isURLPotentiallyTrustworthy(currentURL)) {\n        return 'no-referrer'\n      }\n\n      // 3. Return referrerOrigin.\n      return referrerOrigin\n    }\n    case 'same-origin':\n      // 1. If the origin of referrerURL and the origin of request\u2019s current\n      // URL are the same, then return referrerURL.\n      if (sameOrigin(request, referrerURL)) {\n        return referrerURL\n      }\n      // 2. Return no referrer.\n      return 'no-referrer'\n    case 'origin-when-cross-origin':\n      // 1. If the origin of referrerURL and the origin of request\u2019s current\n      // URL are the same, then return referrerURL.\n      if (sameOrigin(request, referrerURL)) {\n        return referrerURL\n      }\n      // 2. Return referrerOrigin.\n      return referrerOrigin\n    case 'no-referrer-when-downgrade': {\n      const currentURL = requestCurrentURL(request)\n\n      // 1. If referrerURL is a potentially trustworthy URL and request\u2019s\n      //    current URL is not a potentially trustworthy URL, then return no\n      //    referrer.\n      if (isURLPotentiallyTrustworthy(referrerURL) && !isURLPotentiallyTrustworthy(currentURL)) {\n        return 'no-referrer'\n      }\n      // 2. Return referrerURL.\n      return referrerURL\n    }\n  }\n}\n\n/**\n * Certain portions of URLs must not be included when sending a URL as the\n * value of a `Referer` header: a URLs fragment, username, and password\n * components must be stripped from the URL before it\u2019s sent out. This\n * algorithm accepts a origin-only flag, which defaults to false. If set to\n * true, the algorithm will additionally remove the URL\u2019s path and query\n * components, leaving only the scheme, host, and port.\n *\n * @see https://w3c.github.io/webappsec-referrer-policy/#strip-url\n * @param {URL} url\n * @param {boolean} [originOnly=false]\n */\nfunction stripURLForReferrer (url, originOnly = false) {\n  // 1. Assert: url is a URL.\n  assert(webidl.is.URL(url))\n\n  // Note: Create a new URL instance to avoid mutating the original URL.\n  url = new URL(url)\n\n  // 2. If url\u2019s scheme is a local scheme, then return no referrer.\n  if (urlIsLocal(url)) {\n    return 'no-referrer'\n  }\n\n  // 3. Set url\u2019s username to the empty string.\n  url.username = ''\n\n  // 4. Set url\u2019s password to the empty string.\n  url.password = ''\n\n  // 5. Set url\u2019s fragment to null.\n  url.hash = ''\n\n  // 6. If the origin-only flag is true, then:\n  if (originOnly === true) {\n    // 1. Set url\u2019s path to \u00AB the empty string \u00BB.\n    url.pathname = ''\n\n    // 2. Set url\u2019s query to null.\n    url.search = ''\n  }\n\n  // 7. Return url.\n  return url\n}\n\nconst isPotentialleTrustworthyIPv4 = RegExp.prototype.test\n  .bind(/^127\\.(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)\\.){2}(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)$/)\n\nconst isPotentiallyTrustworthyIPv6 = RegExp.prototype.test\n  .bind(/^(?:(?:0{1,4}:){7}|(?:0{1,4}:){1,6}:|::)0{0,3}1$/)\n\n/**\n * Check if host matches one of the CIDR notations 127.0.0.0/8 or ::1/128.\n *\n * @param {string} origin\n * @returns {boolean}\n */\nfunction isOriginIPPotentiallyTrustworthy (origin) {\n  // IPv6\n  if (origin.includes(':')) {\n    // Remove brackets from IPv6 addresses\n    if (origin[0] === '[' && origin[origin.length - 1] === ']') {\n      origin = origin.slice(1, -1)\n    }\n    return isPotentiallyTrustworthyIPv6(origin)\n  }\n\n  // IPv4\n  return isPotentialleTrustworthyIPv4(origin)\n}\n\n/**\n * A potentially trustworthy origin is one which a user agent can generally\n * trust as delivering data securely.\n *\n * Return value `true` means `Potentially Trustworthy`.\n * Return value `false` means `Not Trustworthy`.\n *\n * @see https://w3c.github.io/webappsec-secure-contexts/#is-origin-trustworthy\n * @param {string} origin\n * @returns {boolean}\n */\nfunction isOriginPotentiallyTrustworthy (origin) {\n  // 1. If origin is an opaque origin, return \"Not Trustworthy\".\n  if (origin == null || origin === 'null') {\n    return false\n  }\n\n  // 2. Assert: origin is a tuple origin.\n  origin = new URL(origin)\n\n  // 3. If origin\u2019s scheme is either \"https\" or \"wss\",\n  //    return \"Potentially Trustworthy\".\n  if (origin.protocol === 'https:' || origin.protocol === 'wss:') {\n    return true\n  }\n\n  // 4. If origin\u2019s host matches one of the CIDR notations 127.0.0.0/8 or\n  // ::1/128 [RFC4632], return \"Potentially Trustworthy\".\n  if (isOriginIPPotentiallyTrustworthy(origin.hostname)) {\n    return true\n  }\n\n  // 5. If the user agent conforms to the name resolution rules in\n  //    [let-localhost-be-localhost] and one of the following is true:\n\n  //    origin\u2019s host is \"localhost\" or \"localhost.\"\n  if (origin.hostname === 'localhost' || origin.hostname === 'localhost.') {\n    return true\n  }\n\n  //    origin\u2019s host ends with \".localhost\" or \".localhost.\"\n  if (origin.hostname.endsWith('.localhost') || origin.hostname.endsWith('.localhost.')) {\n    return true\n  }\n\n  // 6. If origin\u2019s scheme is \"file\", return \"Potentially Trustworthy\".\n  if (origin.protocol === 'file:') {\n    return true\n  }\n\n  // 7. If origin\u2019s scheme component is one which the user agent considers to\n  // be authenticated, return \"Potentially Trustworthy\".\n\n  // 8. If origin has been configured as a trustworthy origin, return\n  //    \"Potentially Trustworthy\".\n\n  // 9. Return \"Not Trustworthy\".\n  return false\n}\n\n/**\n * A potentially trustworthy URL is one which either inherits context from its\n * creator (about:blank, about:srcdoc, data) or one whose origin is a\n * potentially trustworthy origin.\n *\n * Return value `true` means `Potentially Trustworthy`.\n * Return value `false` means `Not Trustworthy`.\n *\n * @see https://www.w3.org/TR/secure-contexts/#is-url-trustworthy\n * @param {URL} url\n * @returns {boolean}\n */\nfunction isURLPotentiallyTrustworthy (url) {\n  // Given a URL record (url), the following algorithm returns \"Potentially\n  // Trustworthy\" or \"Not Trustworthy\" as appropriate:\n  if (!webidl.is.URL(url)) {\n    return false\n  }\n\n  // 1. If url is \"about:blank\" or \"about:srcdoc\",\n  //    return \"Potentially Trustworthy\".\n  if (url.href === 'about:blank' || url.href === 'about:srcdoc') {\n    return true\n  }\n\n  // 2. If url\u2019s scheme is \"data\", return \"Potentially Trustworthy\".\n  if (url.protocol === 'data:') return true\n\n  // Note: The origin of blob: URLs is the origin of the context in which they\n  // were created. Therefore, blobs created in a trustworthy origin will\n  // themselves be potentially trustworthy.\n  if (url.protocol === 'blob:') return true\n\n  // 3. Return the result of executing \u00A7 3.1 Is origin potentially trustworthy?\n  // on url\u2019s origin.\n  return isOriginPotentiallyTrustworthy(url.origin)\n}\n\n// https://w3c.github.io/webappsec-upgrade-insecure-requests/#upgrade-request\nfunction tryUpgradeRequestToAPotentiallyTrustworthyURL (request) {\n  // TODO\n}\n\n/**\n * @link {https://html.spec.whatwg.org/multipage/origin.html#same-origin}\n * @param {URL} A\n * @param {URL} B\n */\nfunction sameOrigin (A, B) {\n  // 1. If A and B are the same opaque origin, then return true.\n  if (A.origin === B.origin && A.origin === 'null') {\n    return true\n  }\n\n  // 2. If A and B are both tuple origins and their schemes,\n  //    hosts, and port are identical, then return true.\n  if (A.protocol === B.protocol && A.hostname === B.hostname && A.port === B.port) {\n    return true\n  }\n\n  // 3. Return false.\n  return false\n}\n\nfunction isAborted (fetchParams) {\n  return fetchParams.controller.state === 'aborted'\n}\n\nfunction isCancelled (fetchParams) {\n  return fetchParams.controller.state === 'aborted' ||\n    fetchParams.controller.state === 'terminated'\n}\n\n/**\n * @see https://fetch.spec.whatwg.org/#concept-method-normalize\n * @param {string} method\n */\nfunction normalizeMethod (method) {\n  return normalizedMethodRecordsBase[method.toLowerCase()] ?? method\n}\n\n// https://tc39.es/ecma262/#sec-%25iteratorprototype%25-object\nconst esIteratorPrototype = Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]()))\n\n/**\n * @see https://webidl.spec.whatwg.org/#dfn-iterator-prototype-object\n * @param {string} name name of the instance\n * @param {((target: any) => any)} kInternalIterator\n * @param {string | number} [keyIndex]\n * @param {string | number} [valueIndex]\n */\nfunction createIterator (name, kInternalIterator, keyIndex = 0, valueIndex = 1) {\n  class FastIterableIterator {\n    /** @type {any} */\n    #target\n    /** @type {'key' | 'value' | 'key+value'} */\n    #kind\n    /** @type {number} */\n    #index\n\n    /**\n     * @see https://webidl.spec.whatwg.org/#dfn-default-iterator-object\n     * @param {unknown} target\n     * @param {'key' | 'value' | 'key+value'} kind\n     */\n    constructor (target, kind) {\n      this.#target = target\n      this.#kind = kind\n      this.#index = 0\n    }\n\n    next () {\n      // 1. Let interface be the interface for which the iterator prototype object exists.\n      // 2. Let thisValue be the this value.\n      // 3. Let object be ? ToObject(thisValue).\n      // 4. If object is a platform object, then perform a security\n      //    check, passing:\n      // 5. If object is not a default iterator object for interface,\n      //    then throw a TypeError.\n      if (typeof this !== 'object' || this === null || !(#target in this)) {\n        throw new TypeError(\n          `'next' called on an object that does not implement interface ${name} Iterator.`\n        )\n      }\n\n      // 6. Let index be object\u2019s index.\n      // 7. Let kind be object\u2019s kind.\n      // 8. Let values be object\u2019s target's value pairs to iterate over.\n      const index = this.#index\n      const values = kInternalIterator(this.#target)\n\n      // 9. Let len be the length of values.\n      const len = values.length\n\n      // 10. If index is greater than or equal to len, then return\n      //     CreateIterResultObject(undefined, true).\n      if (index >= len) {\n        return {\n          value: undefined,\n          done: true\n        }\n      }\n\n      // 11. Let pair be the entry in values at index index.\n      const { [keyIndex]: key, [valueIndex]: value } = values[index]\n\n      // 12. Set object\u2019s index to index + 1.\n      this.#index = index + 1\n\n      // 13. Return the iterator result for pair and kind.\n\n      // https://webidl.spec.whatwg.org/#iterator-result\n\n      // 1. Let result be a value determined by the value of kind:\n      let result\n      switch (this.#kind) {\n        case 'key':\n          // 1. Let idlKey be pair\u2019s key.\n          // 2. Let key be the result of converting idlKey to an\n          //    ECMAScript value.\n          // 3. result is key.\n          result = key\n          break\n        case 'value':\n          // 1. Let idlValue be pair\u2019s value.\n          // 2. Let value be the result of converting idlValue to\n          //    an ECMAScript value.\n          // 3. result is value.\n          result = value\n          break\n        case 'key+value':\n          // 1. Let idlKey be pair\u2019s key.\n          // 2. Let idlValue be pair\u2019s value.\n          // 3. Let key be the result of converting idlKey to an\n          //    ECMAScript value.\n          // 4. Let value be the result of converting idlValue to\n          //    an ECMAScript value.\n          // 5. Let array be ! ArrayCreate(2).\n          // 6. Call ! CreateDataProperty(array, \"0\", key).\n          // 7. Call ! CreateDataProperty(array, \"1\", value).\n          // 8. result is array.\n          result = [key, value]\n          break\n      }\n\n      // 2. Return CreateIterResultObject(result, false).\n      return {\n        value: result,\n        done: false\n      }\n    }\n  }\n\n  // https://webidl.spec.whatwg.org/#dfn-iterator-prototype-object\n  // @ts-ignore\n  delete FastIterableIterator.prototype.constructor\n\n  Object.setPrototypeOf(FastIterableIterator.prototype, esIteratorPrototype)\n\n  Object.defineProperties(FastIterableIterator.prototype, {\n    [Symbol.toStringTag]: {\n      writable: false,\n      enumerable: false,\n      configurable: true,\n      value: `${name} Iterator`\n    },\n    next: { writable: true, enumerable: true, configurable: true }\n  })\n\n  /**\n   * @param {unknown} target\n   * @param {'key' | 'value' | 'key+value'} kind\n   * @returns {IterableIterator<any>}\n   */\n  return function (target, kind) {\n    return new FastIterableIterator(target, kind)\n  }\n}\n\n/**\n * @see https://webidl.spec.whatwg.org/#dfn-iterator-prototype-object\n * @param {string} name name of the instance\n * @param {any} object class\n * @param {(target: any) => any} kInternalIterator\n * @param {string | number} [keyIndex]\n * @param {string | number} [valueIndex]\n */\nfunction iteratorMixin (name, object, kInternalIterator, keyIndex = 0, valueIndex = 1) {\n  const makeIterator = createIterator(name, kInternalIterator, keyIndex, valueIndex)\n\n  const properties = {\n    keys: {\n      writable: true,\n      enumerable: true,\n      configurable: true,\n      value: function keys () {\n        webidl.brandCheck(this, object)\n        return makeIterator(this, 'key')\n      }\n    },\n    values: {\n      writable: true,\n      enumerable: true,\n      configurable: true,\n      value: function values () {\n        webidl.brandCheck(this, object)\n        return makeIterator(this, 'value')\n      }\n    },\n    entries: {\n      writable: true,\n      enumerable: true,\n      configurable: true,\n      value: function entries () {\n        webidl.brandCheck(this, object)\n        return makeIterator(this, 'key+value')\n      }\n    },\n    forEach: {\n      writable: true,\n      enumerable: true,\n      configurable: true,\n      value: function forEach (callbackfn, thisArg = globalThis) {\n        webidl.brandCheck(this, object)\n        webidl.argumentLengthCheck(arguments, 1, `${name}.forEach`)\n        if (typeof callbackfn !== 'function') {\n          throw new TypeError(\n            `Failed to execute 'forEach' on '${name}': parameter 1 is not of type 'Function'.`\n          )\n        }\n        for (const { 0: key, 1: value } of makeIterator(this, 'key+value')) {\n          callbackfn.call(thisArg, value, key, this)\n        }\n      }\n    }\n  }\n\n  return Object.defineProperties(object.prototype, {\n    ...properties,\n    [Symbol.iterator]: {\n      writable: true,\n      enumerable: false,\n      configurable: true,\n      value: properties.entries.value\n    }\n  })\n}\n\n/**\n * @param {import('./body').ExtractBodyResult} body\n * @param {(bytes: Uint8Array) => void} processBody\n * @param {(error: Error) => void} processBodyError\n * @returns {void}\n *\n * @see https://fetch.spec.whatwg.org/#body-fully-read\n */\nfunction fullyReadBody (body, processBody, processBodyError) {\n  // 1. If taskDestination is null, then set taskDestination to\n  //    the result of starting a new parallel queue.\n\n  // 2. Let successSteps given a byte sequence bytes be to queue a\n  //    fetch task to run processBody given bytes, with taskDestination.\n  const successSteps = processBody\n\n  // 3. Let errorSteps be to queue a fetch task to run processBodyError,\n  //    with taskDestination.\n  const errorSteps = processBodyError\n\n  try {\n  // 4. Let reader be the result of getting a reader for body\u2019s stream.\n  //    If that threw an exception, then run errorSteps with that\n  //    exception and return.\n    const reader = body.stream.getReader()\n\n    // 5. Read all bytes from reader, given successSteps and errorSteps.\n    readAllBytes(reader, successSteps, errorSteps)\n  } catch (e) {\n    errorSteps(e)\n  }\n}\n\n/**\n * @param {ReadableStreamController<Uint8Array>} controller\n */\nfunction readableStreamClose (controller) {\n  try {\n    controller.close()\n    controller.byobRequest?.respond(0)\n  } catch (err) {\n    // TODO: add comment explaining why this error occurs.\n    if (!err.message.includes('Controller is already closed') && !err.message.includes('ReadableStream is already closed')) {\n      throw err\n    }\n  }\n}\n\n/**\n * @see https://streams.spec.whatwg.org/#readablestreamdefaultreader-read-all-bytes\n * @see https://streams.spec.whatwg.org/#read-loop\n * @param {ReadableStream<Uint8Array<ArrayBuffer>>} reader\n * @param {(bytes: Uint8Array) => void} successSteps\n * @param {(error: Error) => void} failureSteps\n * @returns {Promise<void>}\n */\nasync function readAllBytes (reader, successSteps, failureSteps) {\n  try {\n    const bytes = []\n    let byteLength = 0\n\n    do {\n      const { done, value: chunk } = await reader.read()\n\n      if (done) {\n        // 1. Call successSteps with bytes.\n        successSteps(Buffer.concat(bytes, byteLength))\n        return\n      }\n\n      // 1. If chunk is not a Uint8Array object, call failureSteps\n      //    with a TypeError and abort these steps.\n      if (!isUint8Array(chunk)) {\n        failureSteps(new TypeError('Received non-Uint8Array chunk'))\n        return\n      }\n\n      // 2. Append the bytes represented by chunk to bytes.\n      bytes.push(chunk)\n      byteLength += chunk.length\n\n    // 3. Read-loop given reader, bytes, successSteps, and failureSteps.\n    } while (true)\n  } catch (e) {\n    // 1. Call failureSteps with e.\n    failureSteps(e)\n  }\n}\n\n/**\n * @see https://fetch.spec.whatwg.org/#is-local\n * @param {URL} url\n * @returns {boolean}\n */\nfunction urlIsLocal (url) {\n  assert('protocol' in url) // ensure it's a url object\n\n  const protocol = url.protocol\n\n  // A URL is local if its scheme is a local scheme.\n  // A local scheme is \"about\", \"blob\", or \"data\".\n  return protocol === 'about:' || protocol === 'blob:' || protocol === 'data:'\n}\n\n/**\n * @param {string|URL} url\n * @returns {boolean}\n */\nfunction urlHasHttpsScheme (url) {\n  return (\n    (\n      typeof url === 'string' &&\n      url[5] === ':' &&\n      url[0] === 'h' &&\n      url[1] === 't' &&\n      url[2] === 't' &&\n      url[3] === 'p' &&\n      url[4] === 's'\n    ) ||\n    url.protocol === 'https:'\n  )\n}\n\n/**\n * @see https://fetch.spec.whatwg.org/#http-scheme\n * @param {URL} url\n */\nfunction urlIsHttpHttpsScheme (url) {\n  assert('protocol' in url) // ensure it's a url object\n\n  const protocol = url.protocol\n\n  return protocol === 'http:' || protocol === 'https:'\n}\n\n/**\n * @typedef {Object} RangeHeaderValue\n * @property {number|null} rangeStartValue\n * @property {number|null} rangeEndValue\n */\n\n/**\n * @see https://fetch.spec.whatwg.org/#simple-range-header-value\n * @param {string} value\n * @param {boolean} allowWhitespace\n * @return {RangeHeaderValue|'failure'}\n */\nfunction simpleRangeHeaderValue (value, allowWhitespace) {\n  // 1. Let data be the isomorphic decoding of value.\n  // Note: isomorphic decoding takes a sequence of bytes (ie. a Uint8Array) and turns it into a string,\n  // nothing more. We obviously don't need to do that if value is a string already.\n  const data = value\n\n  // 2. If data does not start with \"bytes\", then return failure.\n  if (!data.startsWith('bytes')) {\n    return 'failure'\n  }\n\n  // 3. Let position be a position variable for data, initially pointing at the 5th code point of data.\n  const position = { position: 5 }\n\n  // 4. If allowWhitespace is true, collect a sequence of code points that are HTTP tab or space,\n  //    from data given position.\n  if (allowWhitespace) {\n    collectASequenceOfCodePoints(\n      (char) => char === '\\t' || char === ' ',\n      data,\n      position\n    )\n  }\n\n  // 5. If the code point at position within data is not U+003D (=), then return failure.\n  if (data.charCodeAt(position.position) !== 0x3D) {\n    return 'failure'\n  }\n\n  // 6. Advance position by 1.\n  position.position++\n\n  // 7. If allowWhitespace is true, collect a sequence of code points that are HTTP tab or space, from\n  //    data given position.\n  if (allowWhitespace) {\n    collectASequenceOfCodePoints(\n      (char) => char === '\\t' || char === ' ',\n      data,\n      position\n    )\n  }\n\n  // 8. Let rangeStart be the result of collecting a sequence of code points that are ASCII digits,\n  //    from data given position.\n  const rangeStart = collectASequenceOfCodePoints(\n    (char) => {\n      const code = char.charCodeAt(0)\n\n      return code >= 0x30 && code <= 0x39\n    },\n    data,\n    position\n  )\n\n  // 9. Let rangeStartValue be rangeStart, interpreted as decimal number, if rangeStart is not the\n  //    empty string; otherwise null.\n  const rangeStartValue = rangeStart.length ? Number(rangeStart) : null\n\n  // 10. If allowWhitespace is true, collect a sequence of code points that are HTTP tab or space,\n  //     from data given position.\n  if (allowWhitespace) {\n    collectASequenceOfCodePoints(\n      (char) => char === '\\t' || char === ' ',\n      data,\n      position\n    )\n  }\n\n  // 11. If the code point at position within data is not U+002D (-), then return failure.\n  if (data.charCodeAt(position.position) !== 0x2D) {\n    return 'failure'\n  }\n\n  // 12. Advance position by 1.\n  position.position++\n\n  // 13. If allowWhitespace is true, collect a sequence of code points that are HTTP tab\n  //     or space, from data given position.\n  // Note from Khafra: its the same step as in #8 again lol\n  if (allowWhitespace) {\n    collectASequenceOfCodePoints(\n      (char) => char === '\\t' || char === ' ',\n      data,\n      position\n    )\n  }\n\n  // 14. Let rangeEnd be the result of collecting a sequence of code points that are\n  //     ASCII digits, from data given position.\n  // Note from Khafra: you wouldn't guess it, but this is also the same step as #8\n  const rangeEnd = collectASequenceOfCodePoints(\n    (char) => {\n      const code = char.charCodeAt(0)\n\n      return code >= 0x30 && code <= 0x39\n    },\n    data,\n    position\n  )\n\n  // 15. Let rangeEndValue be rangeEnd, interpreted as decimal number, if rangeEnd\n  //     is not the empty string; otherwise null.\n  // Note from Khafra: THE SAME STEP, AGAIN!!!\n  // Note: why interpret as a decimal if we only collect ascii digits?\n  const rangeEndValue = rangeEnd.length ? Number(rangeEnd) : null\n\n  // 16. If position is not past the end of data, then return failure.\n  if (position.position < data.length) {\n    return 'failure'\n  }\n\n  // 17. If rangeEndValue and rangeStartValue are null, then return failure.\n  if (rangeEndValue === null && rangeStartValue === null) {\n    return 'failure'\n  }\n\n  // 18. If rangeStartValue and rangeEndValue are numbers, and rangeStartValue is\n  //     greater than rangeEndValue, then return failure.\n  // Note: ... when can they not be numbers?\n  if (rangeStartValue > rangeEndValue) {\n    return 'failure'\n  }\n\n  // 19. Return (rangeStartValue, rangeEndValue).\n  return { rangeStartValue, rangeEndValue }\n}\n\n/**\n * @see https://fetch.spec.whatwg.org/#build-a-content-range\n * @param {number} rangeStart\n * @param {number} rangeEnd\n * @param {number} fullLength\n */\nfunction buildContentRange (rangeStart, rangeEnd, fullLength) {\n  // 1. Let contentRange be `bytes `.\n  let contentRange = 'bytes '\n\n  // 2. Append rangeStart, serialized and isomorphic encoded, to contentRange.\n  contentRange += isomorphicEncode(`${rangeStart}`)\n\n  // 3. Append 0x2D (-) to contentRange.\n  contentRange += '-'\n\n  // 4. Append rangeEnd, serialized and isomorphic encoded to contentRange.\n  contentRange += isomorphicEncode(`${rangeEnd}`)\n\n  // 5. Append 0x2F (/) to contentRange.\n  contentRange += '/'\n\n  // 6. Append fullLength, serialized and isomorphic encoded to contentRange.\n  contentRange += isomorphicEncode(`${fullLength}`)\n\n  // 7. Return contentRange.\n  return contentRange\n}\n\n// A Stream, which pipes the response to zlib.createInflate() or\n// zlib.createInflateRaw() depending on the first byte of the Buffer.\n// If the lower byte of the first byte is 0x08, then the stream is\n// interpreted as a zlib stream, otherwise it's interpreted as a\n// raw deflate stream.\nclass InflateStream extends Transform {\n  #zlibOptions\n\n  /** @param {zlib.ZlibOptions} [zlibOptions] */\n  constructor (zlibOptions) {\n    super()\n    this.#zlibOptions = zlibOptions\n  }\n\n  _transform (chunk, encoding, callback) {\n    if (!this._inflateStream) {\n      if (chunk.length === 0) {\n        callback()\n        return\n      }\n      this._inflateStream = (chunk[0] & 0x0F) === 0x08\n        ? zlib.createInflate(this.#zlibOptions)\n        : zlib.createInflateRaw(this.#zlibOptions)\n\n      this._inflateStream.on('data', this.push.bind(this))\n      this._inflateStream.on('end', () => this.push(null))\n      this._inflateStream.on('error', (err) => this.destroy(err))\n    }\n\n    this._inflateStream.write(chunk, encoding, callback)\n  }\n\n  _final (callback) {\n    if (this._inflateStream) {\n      this._inflateStream.end()\n      this._inflateStream = null\n    }\n    callback()\n  }\n}\n\n/**\n * @param {zlib.ZlibOptions} [zlibOptions]\n * @returns {InflateStream}\n */\nfunction createInflate (zlibOptions) {\n  return new InflateStream(zlibOptions)\n}\n\n/**\n * @see https://fetch.spec.whatwg.org/#concept-header-extract-mime-type\n * @param {import('./headers').HeadersList} headers\n */\nfunction extractMimeType (headers) {\n  // 1. Let charset be null.\n  let charset = null\n\n  // 2. Let essence be null.\n  let essence = null\n\n  // 3. Let mimeType be null.\n  let mimeType = null\n\n  // 4. Let values be the result of getting, decoding, and splitting `Content-Type` from headers.\n  const values = getDecodeSplit('content-type', headers)\n\n  // 5. If values is null, then return failure.\n  if (values === null) {\n    return 'failure'\n  }\n\n  // 6. For each value of values:\n  for (const value of values) {\n    // 6.1. Let temporaryMimeType be the result of parsing value.\n    const temporaryMimeType = parseMIMEType(value)\n\n    // 6.2. If temporaryMimeType is failure or its essence is \"*/*\", then continue.\n    if (temporaryMimeType === 'failure' || temporaryMimeType.essence === '*/*') {\n      continue\n    }\n\n    // 6.3. Set mimeType to temporaryMimeType.\n    mimeType = temporaryMimeType\n\n    // 6.4. If mimeType\u2019s essence is not essence, then:\n    if (mimeType.essence !== essence) {\n      // 6.4.1. Set charset to null.\n      charset = null\n\n      // 6.4.2. If mimeType\u2019s parameters[\"charset\"] exists, then set charset to\n      //        mimeType\u2019s parameters[\"charset\"].\n      if (mimeType.parameters.has('charset')) {\n        charset = mimeType.parameters.get('charset')\n      }\n\n      // 6.4.3. Set essence to mimeType\u2019s essence.\n      essence = mimeType.essence\n    } else if (!mimeType.parameters.has('charset') && charset !== null) {\n      // 6.5. Otherwise, if mimeType\u2019s parameters[\"charset\"] does not exist, and\n      //      charset is non-null, set mimeType\u2019s parameters[\"charset\"] to charset.\n      mimeType.parameters.set('charset', charset)\n    }\n  }\n\n  // 7. If mimeType is null, then return failure.\n  if (mimeType == null) {\n    return 'failure'\n  }\n\n  // 8. Return mimeType.\n  return mimeType\n}\n\n/**\n * @see https://fetch.spec.whatwg.org/#header-value-get-decode-and-split\n * @param {string|null} value\n */\nfunction gettingDecodingSplitting (value) {\n  // 1. Let input be the result of isomorphic decoding value.\n  const input = value\n\n  // 2. Let position be a position variable for input, initially pointing at the start of input.\n  const position = { position: 0 }\n\n  // 3. Let values be a list of strings, initially empty.\n  const values = []\n\n  // 4. Let temporaryValue be the empty string.\n  let temporaryValue = ''\n\n  // 5. While position is not past the end of input:\n  while (position.position < input.length) {\n    // 5.1. Append the result of collecting a sequence of code points that are not U+0022 (\")\n    //      or U+002C (,) from input, given position, to temporaryValue.\n    temporaryValue += collectASequenceOfCodePoints(\n      (char) => char !== '\"' && char !== ',',\n      input,\n      position\n    )\n\n    // 5.2. If position is not past the end of input, then:\n    if (position.position < input.length) {\n      // 5.2.1. If the code point at position within input is U+0022 (\"), then:\n      if (input.charCodeAt(position.position) === 0x22) {\n        // 5.2.1.1. Append the result of collecting an HTTP quoted string from input, given position, to temporaryValue.\n        temporaryValue += collectAnHTTPQuotedString(\n          input,\n          position\n        )\n\n        // 5.2.1.2. If position is not past the end of input, then continue.\n        if (position.position < input.length) {\n          continue\n        }\n      } else {\n        // 5.2.2. Otherwise:\n\n        // 5.2.2.1. Assert: the code point at position within input is U+002C (,).\n        assert(input.charCodeAt(position.position) === 0x2C)\n\n        // 5.2.2.2. Advance position by 1.\n        position.position++\n      }\n    }\n\n    // 5.3. Remove all HTTP tab or space from the start and end of temporaryValue.\n    temporaryValue = removeChars(temporaryValue, true, true, (char) => char === 0x9 || char === 0x20)\n\n    // 5.4. Append temporaryValue to values.\n    values.push(temporaryValue)\n\n    // 5.6. Set temporaryValue to the empty string.\n    temporaryValue = ''\n  }\n\n  // 6. Return values.\n  return values\n}\n\n/**\n * @see https://fetch.spec.whatwg.org/#concept-header-list-get-decode-split\n * @param {string} name lowercase header name\n * @param {import('./headers').HeadersList} list\n */\nfunction getDecodeSplit (name, list) {\n  // 1. Let value be the result of getting name from list.\n  const value = list.get(name, true)\n\n  // 2. If value is null, then return null.\n  if (value === null) {\n    return null\n  }\n\n  // 3. Return the result of getting, decoding, and splitting value.\n  return gettingDecodingSplitting(value)\n}\n\nfunction hasAuthenticationEntry (request) {\n  return false\n}\n\n/**\n * @see https://url.spec.whatwg.org/#include-credentials\n * @param {URL} url\n */\nfunction includesCredentials (url) {\n  // A URL includes credentials if its username or password is not the empty string.\n  return !!(url.username || url.password)\n}\n\n/**\n * @see https://html.spec.whatwg.org/multipage/document-sequences.html#traversable-navigable\n * @param {object|string} navigable\n */\nfunction isTraversableNavigable (navigable) {\n  // TODO\n  return true\n}\n\nclass EnvironmentSettingsObjectBase {\n  get baseUrl () {\n    return getGlobalOrigin()\n  }\n\n  get origin () {\n    return this.baseUrl?.origin\n  }\n\n  policyContainer = makePolicyContainer()\n}\n\nclass EnvironmentSettingsObject {\n  settingsObject = new EnvironmentSettingsObjectBase()\n}\n\nconst environmentSettingsObject = new EnvironmentSettingsObject()\n\nmodule.exports = {\n  isAborted,\n  isCancelled,\n  isValidEncodedURL,\n  ReadableStreamFrom,\n  tryUpgradeRequestToAPotentiallyTrustworthyURL,\n  clampAndCoarsenConnectionTimingInfo,\n  coarsenedSharedCurrentTime,\n  determineRequestsReferrer,\n  makePolicyContainer,\n  clonePolicyContainer,\n  appendFetchMetadata,\n  appendRequestOriginHeader,\n  TAOCheck,\n  corsCheck,\n  crossOriginResourcePolicyCheck,\n  createOpaqueTimingInfo,\n  setRequestReferrerPolicyOnRedirect,\n  isValidHTTPToken,\n  requestBadPort,\n  requestCurrentURL,\n  responseURL,\n  responseLocationURL,\n  isURLPotentiallyTrustworthy,\n  isValidReasonPhrase,\n  sameOrigin,\n  normalizeMethod,\n  iteratorMixin,\n  createIterator,\n  isValidHeaderName,\n  isValidHeaderValue,\n  isErrorLike,\n  fullyReadBody,\n  readableStreamClose,\n  urlIsLocal,\n  urlHasHttpsScheme,\n  urlIsHttpHttpsScheme,\n  readAllBytes,\n  simpleRangeHeaderValue,\n  buildContentRange,\n  createInflate,\n  extractMimeType,\n  getDecodeSplit,\n  environmentSettingsObject,\n  isOriginIPPotentiallyTrustworthy,\n  hasAuthenticationEntry,\n  includesCredentials,\n  isTraversableNavigable\n}\n", "'use strict'\n\nconst { iteratorMixin } = require('./util')\nconst { kEnumerableProperty } = require('../../core/util')\nconst { webidl } = require('../webidl')\nconst nodeUtil = require('node:util')\n\n// https://xhr.spec.whatwg.org/#formdata\nclass FormData {\n  #state = []\n\n  constructor (form = undefined) {\n    webidl.util.markAsUncloneable(this)\n\n    if (form !== undefined) {\n      throw webidl.errors.conversionFailed({\n        prefix: 'FormData constructor',\n        argument: 'Argument 1',\n        types: ['undefined']\n      })\n    }\n  }\n\n  append (name, value, filename = undefined) {\n    webidl.brandCheck(this, FormData)\n\n    const prefix = 'FormData.append'\n    webidl.argumentLengthCheck(arguments, 2, prefix)\n\n    name = webidl.converters.USVString(name)\n\n    if (arguments.length === 3 || webidl.is.Blob(value)) {\n      value = webidl.converters.Blob(value, prefix, 'value')\n\n      if (filename !== undefined) {\n        filename = webidl.converters.USVString(filename)\n      }\n    } else {\n      value = webidl.converters.USVString(value)\n    }\n\n    // 1. Let value be value if given; otherwise blobValue.\n\n    // 2. Let entry be the result of creating an entry with\n    // name, value, and filename if given.\n    const entry = makeEntry(name, value, filename)\n\n    // 3. Append entry to this\u2019s entry list.\n    this.#state.push(entry)\n  }\n\n  delete (name) {\n    webidl.brandCheck(this, FormData)\n\n    const prefix = 'FormData.delete'\n    webidl.argumentLengthCheck(arguments, 1, prefix)\n\n    name = webidl.converters.USVString(name)\n\n    // The delete(name) method steps are to remove all entries whose name\n    // is name from this\u2019s entry list.\n    this.#state = this.#state.filter(entry => entry.name !== name)\n  }\n\n  get (name) {\n    webidl.brandCheck(this, FormData)\n\n    const prefix = 'FormData.get'\n    webidl.argumentLengthCheck(arguments, 1, prefix)\n\n    name = webidl.converters.USVString(name)\n\n    // 1. If there is no entry whose name is name in this\u2019s entry list,\n    // then return null.\n    const idx = this.#state.findIndex((entry) => entry.name === name)\n    if (idx === -1) {\n      return null\n    }\n\n    // 2. Return the value of the first entry whose name is name from\n    // this\u2019s entry list.\n    return this.#state[idx].value\n  }\n\n  getAll (name) {\n    webidl.brandCheck(this, FormData)\n\n    const prefix = 'FormData.getAll'\n    webidl.argumentLengthCheck(arguments, 1, prefix)\n\n    name = webidl.converters.USVString(name)\n\n    // 1. If there is no entry whose name is name in this\u2019s entry list,\n    // then return the empty list.\n    // 2. Return the values of all entries whose name is name, in order,\n    // from this\u2019s entry list.\n    return this.#state\n      .filter((entry) => entry.name === name)\n      .map((entry) => entry.value)\n  }\n\n  has (name) {\n    webidl.brandCheck(this, FormData)\n\n    const prefix = 'FormData.has'\n    webidl.argumentLengthCheck(arguments, 1, prefix)\n\n    name = webidl.converters.USVString(name)\n\n    // The has(name) method steps are to return true if there is an entry\n    // whose name is name in this\u2019s entry list; otherwise false.\n    return this.#state.findIndex((entry) => entry.name === name) !== -1\n  }\n\n  set (name, value, filename = undefined) {\n    webidl.brandCheck(this, FormData)\n\n    const prefix = 'FormData.set'\n    webidl.argumentLengthCheck(arguments, 2, prefix)\n\n    name = webidl.converters.USVString(name)\n\n    if (arguments.length === 3 || webidl.is.Blob(value)) {\n      value = webidl.converters.Blob(value, prefix, 'value')\n\n      if (filename !== undefined) {\n        filename = webidl.converters.USVString(filename)\n      }\n    } else {\n      value = webidl.converters.USVString(value)\n    }\n\n    // The set(name, value) and set(name, blobValue, filename) method steps\n    // are:\n\n    // 1. Let value be value if given; otherwise blobValue.\n\n    // 2. Let entry be the result of creating an entry with name, value, and\n    // filename if given.\n    const entry = makeEntry(name, value, filename)\n\n    // 3. If there are entries in this\u2019s entry list whose name is name, then\n    // replace the first such entry with entry and remove the others.\n    const idx = this.#state.findIndex((entry) => entry.name === name)\n    if (idx !== -1) {\n      this.#state = [\n        ...this.#state.slice(0, idx),\n        entry,\n        ...this.#state.slice(idx + 1).filter((entry) => entry.name !== name)\n      ]\n    } else {\n      // 4. Otherwise, append entry to this\u2019s entry list.\n      this.#state.push(entry)\n    }\n  }\n\n  [nodeUtil.inspect.custom] (depth, options) {\n    const state = this.#state.reduce((a, b) => {\n      if (a[b.name]) {\n        if (Array.isArray(a[b.name])) {\n          a[b.name].push(b.value)\n        } else {\n          a[b.name] = [a[b.name], b.value]\n        }\n      } else {\n        a[b.name] = b.value\n      }\n\n      return a\n    }, { __proto__: null })\n\n    options.depth ??= depth\n    options.colors ??= true\n\n    const output = nodeUtil.formatWithOptions(options, state)\n\n    // remove [Object null prototype]\n    return `FormData ${output.slice(output.indexOf(']') + 2)}`\n  }\n\n  /**\n   * @param {FormData} formData\n   */\n  static getFormDataState (formData) {\n    return formData.#state\n  }\n\n  /**\n   * @param {FormData} formData\n   * @param {any[]} newState\n   */\n  static setFormDataState (formData, newState) {\n    formData.#state = newState\n  }\n}\n\nconst { getFormDataState, setFormDataState } = FormData\nReflect.deleteProperty(FormData, 'getFormDataState')\nReflect.deleteProperty(FormData, 'setFormDataState')\n\niteratorMixin('FormData', FormData, getFormDataState, 'name', 'value')\n\nObject.defineProperties(FormData.prototype, {\n  append: kEnumerableProperty,\n  delete: kEnumerableProperty,\n  get: kEnumerableProperty,\n  getAll: kEnumerableProperty,\n  has: kEnumerableProperty,\n  set: kEnumerableProperty,\n  [Symbol.toStringTag]: {\n    value: 'FormData',\n    configurable: true\n  }\n})\n\n/**\n * @see https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#create-an-entry\n * @param {string} name\n * @param {string|Blob} value\n * @param {?string} filename\n * @returns\n */\nfunction makeEntry (name, value, filename) {\n  // 1. Set name to the result of converting name into a scalar value string.\n  // Note: This operation was done by the webidl converter USVString.\n\n  // 2. If value is a string, then set value to the result of converting\n  //    value into a scalar value string.\n  if (typeof value === 'string') {\n    // Note: This operation was done by the webidl converter USVString.\n  } else {\n    // 3. Otherwise:\n\n    // 1. If value is not a File object, then set value to a new File object,\n    //    representing the same bytes, whose name attribute value is \"blob\"\n    if (!webidl.is.File(value)) {\n      value = new File([value], 'blob', { type: value.type })\n    }\n\n    // 2. If filename is given, then set value to a new File object,\n    //    representing the same bytes, whose name attribute is filename.\n    if (filename !== undefined) {\n      /** @type {FilePropertyBag} */\n      const options = {\n        type: value.type,\n        lastModified: value.lastModified\n      }\n\n      value = new File([value], filename, options)\n    }\n  }\n\n  // 4. Return an entry whose name is name and whose value is value.\n  return { name, value }\n}\n\nwebidl.is.FormData = webidl.util.MakeTypeAssertion(FormData)\n\nmodule.exports = { FormData, makeEntry, setFormDataState }\n", "'use strict'\n\nconst { bufferToLowerCasedHeaderName } = require('../../core/util')\nconst { HTTP_TOKEN_CODEPOINTS } = require('./data-url')\nconst { makeEntry } = require('./formdata')\nconst { webidl } = require('../webidl')\nconst assert = require('node:assert')\nconst { isomorphicDecode } = require('../infra')\nconst { utf8DecodeBytes } = require('../../encoding')\n\nconst dd = Buffer.from('--')\nconst decoder = new TextDecoder()\n\n/**\n * @param {string} chars\n */\nfunction isAsciiString (chars) {\n  for (let i = 0; i < chars.length; ++i) {\n    if ((chars.charCodeAt(i) & ~0x7F) !== 0) {\n      return false\n    }\n  }\n  return true\n}\n\n/**\n * @see https://andreubotella.github.io/multipart-form-data/#multipart-form-data-boundary\n * @param {string} boundary\n */\nfunction validateBoundary (boundary) {\n  const length = boundary.length\n\n  // - its length is greater or equal to 27 and lesser or equal to 70, and\n  if (length < 27 || length > 70) {\n    return false\n  }\n\n  // - it is composed by bytes in the ranges 0x30 to 0x39, 0x41 to 0x5A, or\n  //   0x61 to 0x7A, inclusive (ASCII alphanumeric), or which are 0x27 ('),\n  //   0x2D (-) or 0x5F (_).\n  for (let i = 0; i < length; ++i) {\n    const cp = boundary.charCodeAt(i)\n\n    if (!(\n      (cp >= 0x30 && cp <= 0x39) ||\n      (cp >= 0x41 && cp <= 0x5a) ||\n      (cp >= 0x61 && cp <= 0x7a) ||\n      cp === 0x27 ||\n      cp === 0x2d ||\n      cp === 0x5f\n    )) {\n      return false\n    }\n  }\n\n  return true\n}\n\n/**\n * @see https://andreubotella.github.io/multipart-form-data/#multipart-form-data-parser\n * @param {Buffer} input\n * @param {ReturnType<import('./data-url')['parseMIMEType']>} mimeType\n */\nfunction multipartFormDataParser (input, mimeType) {\n  // 1. Assert: mimeType\u2019s essence is \"multipart/form-data\".\n  assert(mimeType !== 'failure' && mimeType.essence === 'multipart/form-data')\n\n  const boundaryString = mimeType.parameters.get('boundary')\n\n  // 2. If mimeType\u2019s parameters[\"boundary\"] does not exist, return failure.\n  //    Otherwise, let boundary be the result of UTF-8 decoding mimeType\u2019s\n  //    parameters[\"boundary\"].\n  if (boundaryString === undefined) {\n    throw parsingError('missing boundary in content-type header')\n  }\n\n  const boundary = Buffer.from(`--${boundaryString}`, 'utf8')\n\n  // 3. Let entry list be an empty entry list.\n  const entryList = []\n\n  // 4. Let position be a pointer to a byte in input, initially pointing at\n  //    the first byte.\n  const position = { position: 0 }\n\n  // Note: Per RFC 2046 Section 5.1.1, we must ignore anything before the\n  // first boundary delimiter line (preamble). Search for the first boundary.\n  const firstBoundaryIndex = input.indexOf(boundary)\n\n  if (firstBoundaryIndex === -1) {\n    throw parsingError('no boundary found in multipart body')\n  }\n\n  // Start parsing from the first boundary, ignoring any preamble\n  position.position = firstBoundaryIndex\n\n  // 5. While true:\n  while (true) {\n    // 5.1. If position points to a sequence of bytes starting with 0x2D 0x2D\n    //      (`--`) followed by boundary, advance position by 2 + the length of\n    //      boundary. Otherwise, return failure.\n    // Note: boundary is padded with 2 dashes already, no need to add 2.\n    if (input.subarray(position.position, position.position + boundary.length).equals(boundary)) {\n      position.position += boundary.length\n    } else {\n      throw parsingError('expected a value starting with -- and the boundary')\n    }\n\n    // 5.2. If position points to the sequence of bytes 0x2D 0x2D 0x0D 0x0A\n    //      (`--` followed by CR LF) followed by the end of input, return entry list.\n    // Note: Per RFC 2046 Section 5.1.1, we must ignore anything after the\n    // final boundary delimiter (epilogue). Check for -- or --CRLF and return\n    // regardless of what follows.\n    if (bufferStartsWith(input, dd, position)) {\n      // Found closing boundary delimiter (--), ignore any epilogue\n      return entryList\n    }\n\n    // 5.3. If position does not point to a sequence of bytes starting with 0x0D\n    //      0x0A (CR LF), return failure.\n    if (input[position.position] !== 0x0d || input[position.position + 1] !== 0x0a) {\n      throw parsingError('expected CRLF')\n    }\n\n    // 5.4. Advance position by 2. (This skips past the newline.)\n    position.position += 2\n\n    // 5.5. Let name, filename and contentType be the result of parsing\n    //      multipart/form-data headers on input and position, if the result\n    //      is not failure. Otherwise, return failure.\n    const result = parseMultipartFormDataHeaders(input, position)\n\n    let { name, filename, contentType, encoding } = result\n\n    // 5.6. Advance position by 2. (This skips past the empty line that marks\n    //      the end of the headers.)\n    position.position += 2\n\n    // 5.7. Let body be the empty byte sequence.\n    let body\n\n    // 5.8. Body loop: While position is not past the end of input:\n    // TODO: the steps here are completely wrong\n    {\n      const boundaryIndex = input.indexOf(boundary.subarray(2), position.position)\n\n      if (boundaryIndex === -1) {\n        throw parsingError('expected boundary after body')\n      }\n\n      body = input.subarray(position.position, boundaryIndex - 4)\n\n      position.position += body.length\n\n      // Note: position must be advanced by the body's length before being\n      // decoded, otherwise the parsing will fail.\n      if (encoding === 'base64') {\n        body = Buffer.from(body.toString(), 'base64')\n      }\n    }\n\n    // 5.9. If position does not point to a sequence of bytes starting with\n    //      0x0D 0x0A (CR LF), return failure. Otherwise, advance position by 2.\n    if (input[position.position] !== 0x0d || input[position.position + 1] !== 0x0a) {\n      throw parsingError('expected CRLF')\n    } else {\n      position.position += 2\n    }\n\n    // 5.10. If filename is not null:\n    let value\n\n    if (filename !== null) {\n      // 5.10.1. If contentType is null, set contentType to \"text/plain\".\n      contentType ??= 'text/plain'\n\n      // 5.10.2. If contentType is not an ASCII string, set contentType to the empty string.\n\n      // Note: `buffer.isAscii` can be used at zero-cost, but converting a string to a buffer is a high overhead.\n      // Content-Type is a relatively small string, so it is faster to use `String#charCodeAt`.\n      if (!isAsciiString(contentType)) {\n        contentType = ''\n      }\n\n      // 5.10.3. Let value be a new File object with name filename, type contentType, and body body.\n      value = new File([body], filename, { type: contentType })\n    } else {\n      // 5.11. Otherwise:\n\n      // 5.11.1. Let value be the UTF-8 decoding without BOM of body.\n      value = utf8DecodeBytes(Buffer.from(body))\n    }\n\n    // 5.12. Assert: name is a scalar value string and value is either a scalar value string or a File object.\n    assert(webidl.is.USVString(name))\n    assert((typeof value === 'string' && webidl.is.USVString(value)) || webidl.is.File(value))\n\n    // 5.13. Create an entry with name and value, and append it to entry list.\n    entryList.push(makeEntry(name, value, filename))\n  }\n}\n\n/**\n * Parses content-disposition attributes (e.g., name=\"value\" or filename*=utf-8''encoded)\n * @param {Buffer} input\n * @param {{ position: number }} position\n * @returns {{ name: string, value: string }}\n */\nfunction parseContentDispositionAttribute (input, position) {\n  // Skip leading semicolon and whitespace\n  if (input[position.position] === 0x3b /* ; */) {\n    position.position++\n  }\n\n  // Skip whitespace\n  collectASequenceOfBytes(\n    (char) => char === 0x20 || char === 0x09,\n    input,\n    position\n  )\n\n  // Collect attribute name (token characters)\n  const attributeName = collectASequenceOfBytes(\n    (char) => isToken(char) && char !== 0x3d && char !== 0x2a, // not = or *\n    input,\n    position\n  )\n\n  if (attributeName.length === 0) {\n    return null\n  }\n\n  const attrNameStr = attributeName.toString('ascii').toLowerCase()\n\n  // Check for extended notation (attribute*)\n  const isExtended = input[position.position] === 0x2a /* * */\n  if (isExtended) {\n    position.position++ // skip *\n  }\n\n  // Expect = sign\n  if (input[position.position] !== 0x3d /* = */) {\n    return null\n  }\n  position.position++ // skip =\n\n  // Skip whitespace\n  collectASequenceOfBytes(\n    (char) => char === 0x20 || char === 0x09,\n    input,\n    position\n  )\n\n  let value\n\n  if (isExtended) {\n    // Extended attribute format: charset'language'encoded-value\n    const headerValue = collectASequenceOfBytes(\n      (char) => char !== 0x20 && char !== 0x0d && char !== 0x0a && char !== 0x3b, // not space, CRLF, or ;\n      input,\n      position\n    )\n\n    // Check for utf-8'' prefix (case insensitive)\n    if (\n      (headerValue[0] !== 0x75 && headerValue[0] !== 0x55) || // u or U\n      (headerValue[1] !== 0x74 && headerValue[1] !== 0x54) || // t or T\n      (headerValue[2] !== 0x66 && headerValue[2] !== 0x46) || // f or F\n      headerValue[3] !== 0x2d || // -\n      headerValue[4] !== 0x38 // 8\n    ) {\n      throw parsingError('unknown encoding, expected utf-8\\'\\'')\n    }\n\n    // Skip utf-8'' and decode the rest\n    value = decodeURIComponent(decoder.decode(headerValue.subarray(7)))\n  } else if (input[position.position] === 0x22 /* \" */) {\n    // Quoted string\n    position.position++ // skip opening quote\n\n    const quotedValue = collectASequenceOfBytes(\n      (char) => char !== 0x0a && char !== 0x0d && char !== 0x22, // not LF, CR, or \"\n      input,\n      position\n    )\n\n    if (input[position.position] !== 0x22) {\n      throw parsingError('Closing quote not found')\n    }\n    position.position++ // skip closing quote\n\n    value = decoder.decode(quotedValue)\n      .replace(/%0A/ig, '\\n')\n      .replace(/%0D/ig, '\\r')\n      .replace(/%22/g, '\"')\n  } else {\n    // Token value (no quotes)\n    const tokenValue = collectASequenceOfBytes(\n      (char) => isToken(char) && char !== 0x3b, // not ;\n      input,\n      position\n    )\n\n    value = decoder.decode(tokenValue)\n  }\n\n  return { name: attrNameStr, value }\n}\n\n/**\n * @see https://andreubotella.github.io/multipart-form-data/#parse-multipart-form-data-headers\n * @param {Buffer} input\n * @param {{ position: number }} position\n */\nfunction parseMultipartFormDataHeaders (input, position) {\n  // 1. Let name, filename and contentType be null.\n  let name = null\n  let filename = null\n  let contentType = null\n  let encoding = null\n\n  // 2. While true:\n  while (true) {\n    // 2.1. If position points to a sequence of bytes starting with 0x0D 0x0A (CR LF):\n    if (input[position.position] === 0x0d && input[position.position + 1] === 0x0a) {\n      // 2.1.1. If name is null, return failure.\n      if (name === null) {\n        throw parsingError('header name is null')\n      }\n\n      // 2.1.2. Return name, filename and contentType.\n      return { name, filename, contentType, encoding }\n    }\n\n    // 2.2. Let header name be the result of collecting a sequence of bytes that are\n    //      not 0x0A (LF), 0x0D (CR) or 0x3A (:), given position.\n    let headerName = collectASequenceOfBytes(\n      (char) => char !== 0x0a && char !== 0x0d && char !== 0x3a,\n      input,\n      position\n    )\n\n    // 2.3. Remove any HTTP tab or space bytes from the start or end of header name.\n    headerName = removeChars(headerName, true, true, (char) => char === 0x9 || char === 0x20)\n\n    // 2.4. If header name does not match the field-name token production, return failure.\n    if (!HTTP_TOKEN_CODEPOINTS.test(headerName.toString())) {\n      throw parsingError('header name does not match the field-name token production')\n    }\n\n    // 2.5. If the byte at position is not 0x3A (:), return failure.\n    if (input[position.position] !== 0x3a) {\n      throw parsingError('expected :')\n    }\n\n    // 2.6. Advance position by 1.\n    position.position++\n\n    // 2.7. Collect a sequence of bytes that are HTTP tab or space bytes given position.\n    //      (Do nothing with those bytes.)\n    collectASequenceOfBytes(\n      (char) => char === 0x20 || char === 0x09,\n      input,\n      position\n    )\n\n    // 2.8. Byte-lowercase header name and switch on the result:\n    switch (bufferToLowerCasedHeaderName(headerName)) {\n      case 'content-disposition': {\n        name = filename = null\n\n        // Collect the disposition type (should be \"form-data\")\n        const dispositionType = collectASequenceOfBytes(\n          (char) => isToken(char),\n          input,\n          position\n        )\n\n        if (dispositionType.toString('ascii').toLowerCase() !== 'form-data') {\n          throw parsingError('expected form-data for content-disposition header')\n        }\n\n        // Parse attributes recursively until CRLF\n        while (\n          position.position < input.length &&\n          input[position.position] !== 0x0d &&\n          input[position.position + 1] !== 0x0a\n        ) {\n          const attribute = parseContentDispositionAttribute(input, position)\n\n          if (!attribute) {\n            break\n          }\n\n          if (attribute.name === 'name') {\n            name = attribute.value\n          } else if (attribute.name === 'filename') {\n            filename = attribute.value\n          }\n        }\n\n        if (name === null) {\n          throw parsingError('name attribute is required in content-disposition header')\n        }\n\n        break\n      }\n      case 'content-type': {\n        // 1. Let header value be the result of collecting a sequence of bytes that are\n        //    not 0x0A (LF) or 0x0D (CR), given position.\n        let headerValue = collectASequenceOfBytes(\n          (char) => char !== 0x0a && char !== 0x0d,\n          input,\n          position\n        )\n\n        // 2. Remove any HTTP tab or space bytes from the end of header value.\n        headerValue = removeChars(headerValue, false, true, (char) => char === 0x9 || char === 0x20)\n\n        // 3. Set contentType to the isomorphic decoding of header value.\n        contentType = isomorphicDecode(headerValue)\n\n        break\n      }\n      case 'content-transfer-encoding': {\n        let headerValue = collectASequenceOfBytes(\n          (char) => char !== 0x0a && char !== 0x0d,\n          input,\n          position\n        )\n\n        headerValue = removeChars(headerValue, false, true, (char) => char === 0x9 || char === 0x20)\n\n        encoding = isomorphicDecode(headerValue)\n\n        break\n      }\n      default: {\n        // Collect a sequence of bytes that are not 0x0A (LF) or 0x0D (CR), given position.\n        // (Do nothing with those bytes.)\n        collectASequenceOfBytes(\n          (char) => char !== 0x0a && char !== 0x0d,\n          input,\n          position\n        )\n      }\n    }\n\n    // 2.9. If position does not point to a sequence of bytes starting with 0x0D 0x0A\n    //      (CR LF), return failure. Otherwise, advance position by 2 (past the newline).\n    if (input[position.position] !== 0x0d && input[position.position + 1] !== 0x0a) {\n      throw parsingError('expected CRLF')\n    } else {\n      position.position += 2\n    }\n  }\n}\n\n/**\n * @param {(char: number) => boolean} condition\n * @param {Buffer} input\n * @param {{ position: number }} position\n */\nfunction collectASequenceOfBytes (condition, input, position) {\n  let start = position.position\n\n  while (start < input.length && condition(input[start])) {\n    ++start\n  }\n\n  return input.subarray(position.position, (position.position = start))\n}\n\n/**\n * @param {Buffer} buf\n * @param {boolean} leading\n * @param {boolean} trailing\n * @param {(charCode: number) => boolean} predicate\n * @returns {Buffer}\n */\nfunction removeChars (buf, leading, trailing, predicate) {\n  let lead = 0\n  let trail = buf.length - 1\n\n  if (leading) {\n    while (lead < buf.length && predicate(buf[lead])) lead++\n  }\n\n  if (trailing) {\n    while (trail > 0 && predicate(buf[trail])) trail--\n  }\n\n  return lead === 0 && trail === buf.length - 1 ? buf : buf.subarray(lead, trail + 1)\n}\n\n/**\n * Checks if {@param buffer} starts with {@param start}\n * @param {Buffer} buffer\n * @param {Buffer} start\n * @param {{ position: number }} position\n */\nfunction bufferStartsWith (buffer, start, position) {\n  if (buffer.length < start.length) {\n    return false\n  }\n\n  for (let i = 0; i < start.length; i++) {\n    if (start[i] !== buffer[position.position + i]) {\n      return false\n    }\n  }\n\n  return true\n}\n\nfunction parsingError (cause) {\n  return new TypeError('Failed to parse body as FormData.', { cause: new TypeError(cause) })\n}\n\n/**\n * CTL            = <any US-ASCII control character\n *                  (octets 0 - 31) and DEL (127)>\n * @param {number} char\n */\nfunction isCTL (char) {\n  return char <= 0x1f || char === 0x7f\n}\n\n/**\n * tspecials :=  \"(\" / \")\" / \"<\" / \">\" / \"@\" /\n *                \",\" / \";\" / \":\" / \"\\\" / <\">\n *                \"/\" / \"[\" / \"]\" / \"?\" / \"=\"\n *                ; Must be in quoted-string,\n *                ; to use within parameter values\n * @param {number} char\n */\nfunction isTSpecial (char) {\n  return (\n    char === 0x28 || // (\n    char === 0x29 || // )\n    char === 0x3c || // <\n    char === 0x3e || // >\n    char === 0x40 || // @\n    char === 0x2c || // ,\n    char === 0x3b || // ;\n    char === 0x3a || // :\n    char === 0x5c || // \\\n    char === 0x22 || // \"\n    char === 0x2f || // /\n    char === 0x5b || // [\n    char === 0x5d || // ]\n    char === 0x3f || // ?\n    char === 0x3d    // +\n  )\n}\n\n/**\n * token := 1*<any (US-ASCII) CHAR except SPACE, CTLs,\n *          or tspecials>\n * @param {number} char\n */\nfunction isToken (char) {\n  return (\n    char <= 0x7f &&  // ascii\n    char !== 0x20 && // space\n    char !== 0x09 &&\n    !isCTL(char) &&\n    !isTSpecial(char)\n  )\n}\n\nmodule.exports = {\n  multipartFormDataParser,\n  validateBoundary\n}\n", "'use strict'\n\n/**\n * @template {*} T\n * @typedef {Object} DeferredPromise\n * @property {Promise<T>} promise\n * @property {(value?: T) => void} resolve\n * @property {(reason?: any) => void} reject\n */\n\n/**\n * @template {*} T\n * @returns {DeferredPromise<T>} An object containing a promise and its resolve/reject methods.\n */\nfunction createDeferredPromise () {\n  let res\n  let rej\n  const promise = new Promise((resolve, reject) => {\n    res = resolve\n    rej = reject\n  })\n\n  return { promise, resolve: res, reject: rej }\n}\n\nmodule.exports = {\n  createDeferredPromise\n}\n", "'use strict'\n\nconst util = require('../../core/util')\nconst {\n  ReadableStreamFrom,\n  readableStreamClose,\n  fullyReadBody,\n  extractMimeType\n} = require('./util')\nconst { FormData, setFormDataState } = require('./formdata')\nconst { webidl } = require('../webidl')\nconst assert = require('node:assert')\nconst { isErrored, isDisturbed } = require('node:stream')\nconst { isUint8Array } = require('node:util/types')\nconst { serializeAMimeType } = require('./data-url')\nconst { multipartFormDataParser } = require('./formdata-parser')\nconst { createDeferredPromise } = require('../../util/promise')\nconst { parseJSONFromBytes } = require('../infra')\nconst { utf8DecodeBytes } = require('../../encoding')\nconst { runtimeFeatures } = require('../../util/runtime-features.js')\n\nconst random = runtimeFeatures.has('crypto')\n  ? require('node:crypto').randomInt\n  : (max) => Math.floor(Math.random() * max)\n\nconst textEncoder = new TextEncoder()\nfunction noop () {}\n\nconst streamRegistry = new FinalizationRegistry((weakRef) => {\n  const stream = weakRef.deref()\n  if (stream && !stream.locked && !isDisturbed(stream) && !isErrored(stream)) {\n    stream.cancel('Response object has been garbage collected').catch(noop)\n  }\n})\n\n/**\n * Extract a body with type from a byte sequence or BodyInit object\n *\n * @param {import('../../../types').BodyInit} object - The BodyInit object to extract from\n * @param {boolean} [keepalive=false] - If true, indicates that the body\n * @returns {[{stream: ReadableStream, source: any, length: number | null}, string | null]} - Returns a tuple containing the body and its type\n *\n * @see https://fetch.spec.whatwg.org/#concept-bodyinit-extract\n */\nfunction extractBody (object, keepalive = false) {\n  // 1. Let stream be null.\n  let stream = null\n  let controller = null\n\n  // 2. If object is a ReadableStream object, then set stream to object.\n  if (webidl.is.ReadableStream(object)) {\n    stream = object\n  } else if (webidl.is.Blob(object)) {\n    // 3. Otherwise, if object is a Blob object, set stream to the\n    //    result of running object\u2019s get stream.\n    stream = object.stream()\n  } else {\n    // 4. Otherwise, set stream to a new ReadableStream object, and set\n    //    up stream with byte reading support.\n    stream = new ReadableStream({\n      pull () {},\n      start (c) {\n        controller = c\n      },\n      cancel () {},\n      type: 'bytes'\n    })\n  }\n\n  // 5. Assert: stream is a ReadableStream object.\n  assert(webidl.is.ReadableStream(stream))\n\n  // 6. Let action be null.\n  let action = null\n\n  // 7. Let source be null.\n  let source = null\n\n  // 8. Let length be null.\n  let length = null\n\n  // 9. Let type be null.\n  let type = null\n\n  // 10. Switch on object:\n  if (typeof object === 'string') {\n    // Set source to the UTF-8 encoding of object.\n    // Note: setting source to a Uint8Array here breaks some mocking assumptions.\n    source = object\n\n    // Set type to `text/plain;charset=UTF-8`.\n    type = 'text/plain;charset=UTF-8'\n  } else if (webidl.is.URLSearchParams(object)) {\n    // URLSearchParams\n\n    // spec says to run application/x-www-form-urlencoded on body.list\n    // this is implemented in Node.js as apart of an URLSearchParams instance toString method\n    // See: https://github.com/nodejs/node/blob/e46c680bf2b211bbd52cf959ca17ee98c7f657f5/lib/internal/url.js#L490\n    // and https://github.com/nodejs/node/blob/e46c680bf2b211bbd52cf959ca17ee98c7f657f5/lib/internal/url.js#L1100\n\n    // Set source to the result of running the application/x-www-form-urlencoded serializer with object\u2019s list.\n    source = object.toString()\n\n    // Set type to `application/x-www-form-urlencoded;charset=UTF-8`.\n    type = 'application/x-www-form-urlencoded;charset=UTF-8'\n  } else if (webidl.is.BufferSource(object)) {\n    // Set source to a copy of the bytes held by object.\n    source = webidl.util.getCopyOfBytesHeldByBufferSource(object)\n  } else if (webidl.is.FormData(object)) {\n    const boundary = `----formdata-undici-0${`${random(1e11)}`.padStart(11, '0')}`\n    const prefix = `--${boundary}\\r\\nContent-Disposition: form-data`\n\n    /*! formdata-polyfill. MIT License. Jimmy W\u00E4rting <https://jimmy.warting.se/opensource> */\n    const formdataEscape = (str) =>\n      str.replace(/\\n/g, '%0A').replace(/\\r/g, '%0D').replace(/\"/g, '%22')\n    const normalizeLinefeeds = (value) => value.replace(/\\r?\\n|\\r/g, '\\r\\n')\n\n    // Set action to this step: run the multipart/form-data\n    // encoding algorithm, with object\u2019s entry list and UTF-8.\n    // - This ensures that the body is immutable and can't be changed afterwords\n    // - That the content-length is calculated in advance.\n    // - And that all parts are pre-encoded and ready to be sent.\n\n    const blobParts = []\n    const rn = new Uint8Array([13, 10]) // '\\r\\n'\n    length = 0\n    let hasUnknownSizeValue = false\n\n    for (const [name, value] of object) {\n      if (typeof value === 'string') {\n        const chunk = textEncoder.encode(prefix +\n          `; name=\"${formdataEscape(normalizeLinefeeds(name))}\"` +\n          `\\r\\n\\r\\n${normalizeLinefeeds(value)}\\r\\n`)\n        blobParts.push(chunk)\n        length += chunk.byteLength\n      } else {\n        const chunk = textEncoder.encode(`${prefix}; name=\"${formdataEscape(normalizeLinefeeds(name))}\"` +\n          (value.name ? `; filename=\"${formdataEscape(value.name)}\"` : '') + '\\r\\n' +\n          `Content-Type: ${\n            value.type || 'application/octet-stream'\n          }\\r\\n\\r\\n`)\n        blobParts.push(chunk, value, rn)\n        if (typeof value.size === 'number') {\n          length += chunk.byteLength + value.size + rn.byteLength\n        } else {\n          hasUnknownSizeValue = true\n        }\n      }\n    }\n\n    // CRLF is appended to the body to function with legacy servers and match other implementations.\n    // https://github.com/curl/curl/blob/3434c6b46e682452973972e8313613dfa58cd690/lib/mime.c#L1029-L1030\n    // https://github.com/form-data/form-data/issues/63\n    const chunk = textEncoder.encode(`--${boundary}--\\r\\n`)\n    blobParts.push(chunk)\n    length += chunk.byteLength\n    if (hasUnknownSizeValue) {\n      length = null\n    }\n\n    // Set source to object.\n    source = object\n\n    action = async function * () {\n      for (const part of blobParts) {\n        if (part.stream) {\n          yield * part.stream()\n        } else {\n          yield part\n        }\n      }\n    }\n\n    // Set type to `multipart/form-data; boundary=`,\n    // followed by the multipart/form-data boundary string generated\n    // by the multipart/form-data encoding algorithm.\n    type = `multipart/form-data; boundary=${boundary}`\n  } else if (webidl.is.Blob(object)) {\n    // Blob\n\n    // Set source to object.\n    source = object\n\n    // Set length to object\u2019s size.\n    length = object.size\n\n    // If object\u2019s type attribute is not the empty byte sequence, set\n    // type to its value.\n    if (object.type) {\n      type = object.type\n    }\n  } else if (typeof object[Symbol.asyncIterator] === 'function') {\n    // If keepalive is true, then throw a TypeError.\n    if (keepalive) {\n      throw new TypeError('keepalive')\n    }\n\n    // If object is disturbed or locked, then throw a TypeError.\n    if (util.isDisturbed(object) || object.locked) {\n      throw new TypeError(\n        'Response body object should not be disturbed or locked'\n      )\n    }\n\n    stream =\n      webidl.is.ReadableStream(object) ? object : ReadableStreamFrom(object)\n  }\n\n  // 11. If source is a byte sequence, then set action to a\n  // step that returns source and length to source\u2019s length.\n  if (typeof source === 'string' || isUint8Array(source)) {\n    action = () => {\n      length = typeof source === 'string' ? Buffer.byteLength(source) : source.length\n      return source\n    }\n  }\n\n  // 12. If action is non-null, then run these steps in parallel:\n  if (action != null) {\n    ;(async () => {\n      // 1. Run action.\n      const result = action()\n\n      // 2. Whenever one or more bytes are available and stream is not errored,\n      //    enqueue the result of creating a Uint8Array from the available bytes into stream.\n      const iterator = result?.[Symbol.asyncIterator]?.()\n      if (iterator) {\n        for await (const bytes of iterator) {\n          if (isErrored(stream)) break\n          if (bytes.length) {\n            controller.enqueue(new Uint8Array(bytes))\n          }\n        }\n      } else if (result?.length && !isErrored(stream)) {\n        controller.enqueue(typeof result === 'string' ? textEncoder.encode(result) : new Uint8Array(result))\n      }\n\n      // 3. When running action is done, close stream.\n      queueMicrotask(() => readableStreamClose(controller))\n    })()\n  }\n\n  // 13. Let body be a body whose stream is stream, source is source,\n  // and length is length.\n  const body = { stream, source, length }\n\n  // 14. Return (body, type).\n  return [body, type]\n}\n\n/**\n * @typedef {object} ExtractBodyResult\n * @property {ReadableStream<Uint8Array<ArrayBuffer>>} stream - The ReadableStream containing the body data\n * @property {any} source - The original source of the body data\n * @property {number | null} length - The length of the body data, or null\n */\n\n/**\n * Safely extract a body with type from a byte sequence or BodyInit object.\n *\n * @param {import('../../../types').BodyInit} object - The BodyInit object to extract from\n * @param {boolean} [keepalive=false] - If true, indicates that the body\n * @returns {[ExtractBodyResult, string | null]} - Returns a tuple containing the body and its type\n *\n * @see https://fetch.spec.whatwg.org/#bodyinit-safely-extract\n */\nfunction safelyExtractBody (object, keepalive = false) {\n  // To safely extract a body and a `Content-Type` value from\n  // a byte sequence or BodyInit object object, run these steps:\n\n  // 1. If object is a ReadableStream object, then:\n  if (webidl.is.ReadableStream(object)) {\n    // Assert: object is neither disturbed nor locked.\n    assert(!util.isDisturbed(object), 'The body has already been consumed.')\n    assert(!object.locked, 'The stream is locked.')\n  }\n\n  // 2. Return the results of extracting object.\n  return extractBody(object, keepalive)\n}\n\nfunction cloneBody (body) {\n  // To clone a body body, run these steps:\n\n  // https://fetch.spec.whatwg.org/#concept-body-clone\n\n  // 1. Let \u00AB out1, out2 \u00BB be the result of teeing body\u2019s stream.\n  const { 0: out1, 1: out2 } = body.stream.tee()\n\n  // 2. Set body\u2019s stream to out1.\n  body.stream = out1\n\n  // 3. Return a body whose stream is out2 and other members are copied from body.\n  return {\n    stream: out2,\n    length: body.length,\n    source: body.source\n  }\n}\n\nfunction bodyMixinMethods (instance, getInternalState) {\n  const methods = {\n    blob () {\n      // The blob() method steps are to return the result of\n      // running consume body with this and the following step\n      // given a byte sequence bytes: return a Blob whose\n      // contents are bytes and whose type attribute is this\u2019s\n      // MIME type.\n      return consumeBody(this, (bytes) => {\n        let mimeType = bodyMimeType(getInternalState(this))\n\n        if (mimeType === null) {\n          mimeType = ''\n        } else if (mimeType) {\n          mimeType = serializeAMimeType(mimeType)\n        }\n\n        // Return a Blob whose contents are bytes and type attribute\n        // is mimeType.\n        return new Blob([bytes], { type: mimeType })\n      }, instance, getInternalState)\n    },\n\n    arrayBuffer () {\n      // The arrayBuffer() method steps are to return the result\n      // of running consume body with this and the following step\n      // given a byte sequence bytes: return a new ArrayBuffer\n      // whose contents are bytes.\n      return consumeBody(this, (bytes) => {\n        return new Uint8Array(bytes).buffer\n      }, instance, getInternalState)\n    },\n\n    text () {\n      // The text() method steps are to return the result of running\n      // consume body with this and UTF-8 decode.\n      return consumeBody(this, utf8DecodeBytes, instance, getInternalState)\n    },\n\n    json () {\n      // The json() method steps are to return the result of running\n      // consume body with this and parse JSON from bytes.\n      return consumeBody(this, parseJSONFromBytes, instance, getInternalState)\n    },\n\n    formData () {\n      // The formData() method steps are to return the result of running\n      // consume body with this and the following step given a byte sequence bytes:\n      return consumeBody(this, (value) => {\n        // 1. Let mimeType be the result of get the MIME type with this.\n        const mimeType = bodyMimeType(getInternalState(this))\n\n        // 2. If mimeType is non-null, then switch on mimeType\u2019s essence and run\n        //    the corresponding steps:\n        if (mimeType !== null) {\n          switch (mimeType.essence) {\n            case 'multipart/form-data': {\n              // 1. ... [long step]\n              // 2. If that fails for some reason, then throw a TypeError.\n              const parsed = multipartFormDataParser(value, mimeType)\n\n              // 3. Return a new FormData object, appending each entry,\n              //    resulting from the parsing operation, to its entry list.\n              const fd = new FormData()\n              setFormDataState(fd, parsed)\n\n              return fd\n            }\n            case 'application/x-www-form-urlencoded': {\n              // 1. Let entries be the result of parsing bytes.\n              const entries = new URLSearchParams(value.toString())\n\n              // 2. If entries is failure, then throw a TypeError.\n\n              // 3. Return a new FormData object whose entry list is entries.\n              const fd = new FormData()\n\n              for (const [name, value] of entries) {\n                fd.append(name, value)\n              }\n\n              return fd\n            }\n          }\n        }\n\n        // 3. Throw a TypeError.\n        throw new TypeError(\n          'Content-Type was not one of \"multipart/form-data\" or \"application/x-www-form-urlencoded\".'\n        )\n      }, instance, getInternalState)\n    },\n\n    bytes () {\n      // The bytes() method steps are to return the result of running consume body\n      // with this and the following step given a byte sequence bytes: return the\n      // result of creating a Uint8Array from bytes in this\u2019s relevant realm.\n      return consumeBody(this, (bytes) => {\n        return new Uint8Array(bytes)\n      }, instance, getInternalState)\n    }\n  }\n\n  return methods\n}\n\nfunction mixinBody (prototype, getInternalState) {\n  Object.assign(prototype.prototype, bodyMixinMethods(prototype, getInternalState))\n}\n\n/**\n * @see https://fetch.spec.whatwg.org/#concept-body-consume-body\n * @param {any} object internal state\n * @param {(value: unknown) => unknown} convertBytesToJSValue\n * @param {any} instance\n * @param {(target: any) => any} getInternalState\n */\nfunction consumeBody (object, convertBytesToJSValue, instance, getInternalState) {\n  try {\n    webidl.brandCheck(object, instance)\n  } catch (e) {\n    return Promise.reject(e)\n  }\n\n  object = getInternalState(object)\n\n  // 1. If object is unusable, then return a promise rejected\n  //    with a TypeError.\n  if (bodyUnusable(object)) {\n    return Promise.reject(new TypeError('Body is unusable: Body has already been read'))\n  }\n\n  // 2. Let promise be a new promise.\n  const promise = createDeferredPromise()\n\n  // 3. Let errorSteps given error be to reject promise with error.\n  const errorSteps = promise.reject\n\n  // 4. Let successSteps given a byte sequence data be to resolve\n  //    promise with the result of running convertBytesToJSValue\n  //    with data. If that threw an exception, then run errorSteps\n  //    with that exception.\n  const successSteps = (data) => {\n    try {\n      promise.resolve(convertBytesToJSValue(data))\n    } catch (e) {\n      errorSteps(e)\n    }\n  }\n\n  // 5. If object\u2019s body is null, then run successSteps with an\n  //    empty byte sequence.\n  if (object.body == null) {\n    successSteps(Buffer.allocUnsafe(0))\n    return promise.promise\n  }\n\n  // 6. Otherwise, fully read object\u2019s body given successSteps,\n  //    errorSteps, and object\u2019s relevant global object.\n  fullyReadBody(object.body, successSteps, errorSteps)\n\n  // 7. Return promise.\n  return promise.promise\n}\n\n/**\n * @see https://fetch.spec.whatwg.org/#body-unusable\n * @param {any} object internal state\n */\nfunction bodyUnusable (object) {\n  const body = object.body\n\n  // An object including the Body interface mixin is\n  // said to be unusable if its body is non-null and\n  // its body\u2019s stream is disturbed or locked.\n  return body != null && (body.stream.locked || util.isDisturbed(body.stream))\n}\n\n/**\n * @see https://fetch.spec.whatwg.org/#concept-body-mime-type\n * @param {any} requestOrResponse internal state\n */\nfunction bodyMimeType (requestOrResponse) {\n  // 1. Let headers be null.\n  // 2. If requestOrResponse is a Request object, then set headers to requestOrResponse\u2019s request\u2019s header list.\n  // 3. Otherwise, set headers to requestOrResponse\u2019s response\u2019s header list.\n  /** @type {import('./headers').HeadersList} */\n  const headers = requestOrResponse.headersList\n\n  // 4. Let mimeType be the result of extracting a MIME type from headers.\n  const mimeType = extractMimeType(headers)\n\n  // 5. If mimeType is failure, then return null.\n  if (mimeType === 'failure') {\n    return null\n  }\n\n  // 6. Return mimeType.\n  return mimeType\n}\n\nmodule.exports = {\n  extractBody,\n  safelyExtractBody,\n  cloneBody,\n  mixinBody,\n  streamRegistry,\n  bodyUnusable\n}\n", "'use strict'\n\n/* global WebAssembly */\n\nconst assert = require('node:assert')\nconst util = require('../core/util.js')\nconst { channels } = require('../core/diagnostics.js')\nconst timers = require('../util/timers.js')\nconst {\n  RequestContentLengthMismatchError,\n  ResponseContentLengthMismatchError,\n  RequestAbortedError,\n  HeadersTimeoutError,\n  HeadersOverflowError,\n  SocketError,\n  InformationalError,\n  BodyTimeoutError,\n  HTTPParserError,\n  ResponseExceededMaxSizeError\n} = require('../core/errors.js')\nconst {\n  kUrl,\n  kReset,\n  kClient,\n  kParser,\n  kBlocking,\n  kRunning,\n  kPending,\n  kSize,\n  kWriting,\n  kQueue,\n  kNoRef,\n  kKeepAliveDefaultTimeout,\n  kHostHeader,\n  kPendingIdx,\n  kRunningIdx,\n  kError,\n  kPipelining,\n  kSocket,\n  kKeepAliveTimeoutValue,\n  kMaxHeadersSize,\n  kKeepAliveMaxTimeout,\n  kKeepAliveTimeoutThreshold,\n  kHeadersTimeout,\n  kBodyTimeout,\n  kStrictContentLength,\n  kMaxRequests,\n  kCounter,\n  kMaxResponseSize,\n  kOnError,\n  kResume,\n  kHTTPContext,\n  kClosed\n} = require('../core/symbols.js')\n\nconst constants = require('../llhttp/constants.js')\nconst EMPTY_BUF = Buffer.alloc(0)\nconst FastBuffer = Buffer[Symbol.species]\nconst removeAllListeners = util.removeAllListeners\n\nlet extractBody\n\nfunction lazyllhttp () {\n  const llhttpWasmData = process.env.JEST_WORKER_ID ? require('../llhttp/llhttp-wasm.js') : undefined\n\n  let mod\n\n  // We disable wasm SIMD on ppc64 as it seems to be broken on Power 9 architectures.\n  let useWasmSIMD = process.arch !== 'ppc64'\n  // The Env Variable UNDICI_NO_WASM_SIMD allows explicitly overriding the default behavior\n  if (process.env.UNDICI_NO_WASM_SIMD === '1') {\n    useWasmSIMD = true\n  } else if (process.env.UNDICI_NO_WASM_SIMD === '0') {\n    useWasmSIMD = false\n  }\n\n  if (useWasmSIMD) {\n    try {\n      mod = new WebAssembly.Module(require('../llhttp/llhttp_simd-wasm.js'))\n    } catch {\n    }\n  }\n\n  if (!mod) {\n    // We could check if the error was caused by the simd option not\n    // being enabled, but the occurring of this other error\n    // * https://github.com/emscripten-core/emscripten/issues/11495\n    // got me to remove that check to avoid breaking Node 12.\n    mod = new WebAssembly.Module(llhttpWasmData || require('../llhttp/llhttp-wasm.js'))\n  }\n\n  return new WebAssembly.Instance(mod, {\n    env: {\n      /**\n       * @param {number} p\n       * @param {number} at\n       * @param {number} len\n       * @returns {number}\n       */\n      wasm_on_url: (p, at, len) => {\n        return 0\n      },\n      /**\n       * @param {number} p\n       * @param {number} at\n       * @param {number} len\n       * @returns {number}\n       */\n      wasm_on_status: (p, at, len) => {\n        assert(currentParser.ptr === p)\n        const start = at - currentBufferPtr + currentBufferRef.byteOffset\n        return currentParser.onStatus(new FastBuffer(currentBufferRef.buffer, start, len))\n      },\n      /**\n       * @param {number} p\n       * @returns {number}\n       */\n      wasm_on_message_begin: (p) => {\n        assert(currentParser.ptr === p)\n        return currentParser.onMessageBegin()\n      },\n      /**\n       * @param {number} p\n       * @param {number} at\n       * @param {number} len\n       * @returns {number}\n       */\n      wasm_on_header_field: (p, at, len) => {\n        assert(currentParser.ptr === p)\n        const start = at - currentBufferPtr + currentBufferRef.byteOffset\n        return currentParser.onHeaderField(new FastBuffer(currentBufferRef.buffer, start, len))\n      },\n      /**\n       * @param {number} p\n       * @param {number} at\n       * @param {number} len\n       * @returns {number}\n       */\n      wasm_on_header_value: (p, at, len) => {\n        assert(currentParser.ptr === p)\n        const start = at - currentBufferPtr + currentBufferRef.byteOffset\n        return currentParser.onHeaderValue(new FastBuffer(currentBufferRef.buffer, start, len))\n      },\n      /**\n       * @param {number} p\n       * @param {number} statusCode\n       * @param {0|1} upgrade\n       * @param {0|1} shouldKeepAlive\n       * @returns {number}\n       */\n      wasm_on_headers_complete: (p, statusCode, upgrade, shouldKeepAlive) => {\n        assert(currentParser.ptr === p)\n        return currentParser.onHeadersComplete(statusCode, upgrade === 1, shouldKeepAlive === 1)\n      },\n      /**\n       * @param {number} p\n       * @param {number} at\n       * @param {number} len\n       * @returns {number}\n       */\n      wasm_on_body: (p, at, len) => {\n        assert(currentParser.ptr === p)\n        const start = at - currentBufferPtr + currentBufferRef.byteOffset\n        return currentParser.onBody(new FastBuffer(currentBufferRef.buffer, start, len))\n      },\n      /**\n       * @param {number} p\n       * @returns {number}\n       */\n      wasm_on_message_complete: (p) => {\n        assert(currentParser.ptr === p)\n        return currentParser.onMessageComplete()\n      }\n\n    }\n  })\n}\n\nlet llhttpInstance = null\n\n/**\n * @type {Parser|null}\n */\nlet currentParser = null\nlet currentBufferRef = null\n/**\n * @type {number}\n */\nlet currentBufferSize = 0\nlet currentBufferPtr = null\n\nconst USE_NATIVE_TIMER = 0\nconst USE_FAST_TIMER = 1\n\n// Use fast timers for headers and body to take eventual event loop\n// latency into account.\nconst TIMEOUT_HEADERS = 2 | USE_FAST_TIMER\nconst TIMEOUT_BODY = 4 | USE_FAST_TIMER\n\n// Use native timers to ignore event loop latency for keep-alive\n// handling.\nconst TIMEOUT_KEEP_ALIVE = 8 | USE_NATIVE_TIMER\n\nclass Parser {\n  /**\n     * @param {import('./client.js')} client\n     * @param {import('net').Socket} socket\n     * @param {*} llhttp\n     */\n  constructor (client, socket, { exports }) {\n    this.llhttp = exports\n    this.ptr = this.llhttp.llhttp_alloc(constants.TYPE.RESPONSE)\n    this.client = client\n    /**\n     * @type {import('net').Socket}\n     */\n    this.socket = socket\n    this.timeout = null\n    this.timeoutValue = null\n    this.timeoutType = null\n    this.statusCode = 0\n    this.statusText = ''\n    this.upgrade = false\n    this.headers = []\n    this.headersSize = 0\n    this.headersMaxSize = client[kMaxHeadersSize]\n    this.shouldKeepAlive = false\n    this.paused = false\n    this.resume = this.resume.bind(this)\n\n    this.bytesRead = 0\n\n    this.keepAlive = ''\n    this.contentLength = ''\n    this.connection = ''\n    this.maxResponseSize = client[kMaxResponseSize]\n  }\n\n  setTimeout (delay, type) {\n    // If the existing timer and the new timer are of different timer type\n    // (fast or native) or have different delay, we need to clear the existing\n    // timer and set a new one.\n    if (\n      delay !== this.timeoutValue ||\n      (type & USE_FAST_TIMER) ^ (this.timeoutType & USE_FAST_TIMER)\n    ) {\n      // If a timeout is already set, clear it with clearTimeout of the fast\n      // timer implementation, as it can clear fast and native timers.\n      if (this.timeout) {\n        timers.clearTimeout(this.timeout)\n        this.timeout = null\n      }\n\n      if (delay) {\n        if (type & USE_FAST_TIMER) {\n          this.timeout = timers.setFastTimeout(onParserTimeout, delay, new WeakRef(this))\n        } else {\n          this.timeout = setTimeout(onParserTimeout, delay, new WeakRef(this))\n          this.timeout?.unref()\n        }\n      }\n\n      this.timeoutValue = delay\n    } else if (this.timeout) {\n      if (this.timeout.refresh) {\n        this.timeout.refresh()\n      }\n    }\n\n    this.timeoutType = type\n  }\n\n  resume () {\n    if (this.socket.destroyed || !this.paused) {\n      return\n    }\n\n    assert(this.ptr != null)\n    assert(currentParser === null)\n\n    this.llhttp.llhttp_resume(this.ptr)\n\n    assert(this.timeoutType === TIMEOUT_BODY)\n    if (this.timeout) {\n      if (this.timeout.refresh) {\n        this.timeout.refresh()\n      }\n    }\n\n    this.paused = false\n    this.execute(this.socket.read() || EMPTY_BUF) // Flush parser.\n    this.readMore()\n  }\n\n  readMore () {\n    while (!this.paused && this.ptr) {\n      const chunk = this.socket.read()\n      if (chunk === null) {\n        break\n      }\n      this.execute(chunk)\n    }\n  }\n\n  /**\n   * @param {Buffer} chunk\n   */\n  execute (chunk) {\n    assert(currentParser === null)\n    assert(this.ptr != null)\n    assert(!this.paused)\n\n    const { socket, llhttp } = this\n\n    // Allocate a new buffer if the current buffer is too small.\n    if (chunk.length > currentBufferSize) {\n      if (currentBufferPtr) {\n        llhttp.free(currentBufferPtr)\n      }\n      // Allocate a buffer that is a multiple of 4096 bytes.\n      currentBufferSize = Math.ceil(chunk.length / 4096) * 4096\n      currentBufferPtr = llhttp.malloc(currentBufferSize)\n    }\n\n    new Uint8Array(llhttp.memory.buffer, currentBufferPtr, currentBufferSize).set(chunk)\n\n    // Call `execute` on the wasm parser.\n    // We pass the `llhttp_parser` pointer address, the pointer address of buffer view data,\n    // and finally the length of bytes to parse.\n    // The return value is an error code or `constants.ERROR.OK`.\n    try {\n      let ret\n\n      try {\n        currentBufferRef = chunk\n        currentParser = this\n        ret = llhttp.llhttp_execute(this.ptr, currentBufferPtr, chunk.length)\n      } finally {\n        currentParser = null\n        currentBufferRef = null\n      }\n\n      if (ret !== constants.ERROR.OK) {\n        const data = chunk.subarray(llhttp.llhttp_get_error_pos(this.ptr) - currentBufferPtr)\n\n        if (ret === constants.ERROR.PAUSED_UPGRADE) {\n          this.onUpgrade(data)\n        } else if (ret === constants.ERROR.PAUSED) {\n          this.paused = true\n          socket.unshift(data)\n        } else {\n          const ptr = llhttp.llhttp_get_error_reason(this.ptr)\n          let message = ''\n          if (ptr) {\n            const len = new Uint8Array(llhttp.memory.buffer, ptr).indexOf(0)\n            message =\n              'Response does not match the HTTP/1.1 protocol (' +\n              Buffer.from(llhttp.memory.buffer, ptr, len).toString() +\n              ')'\n          }\n          throw new HTTPParserError(message, constants.ERROR[ret], data)\n        }\n      }\n    } catch (err) {\n      util.destroy(socket, err)\n    }\n  }\n\n  destroy () {\n    assert(currentParser === null)\n    assert(this.ptr != null)\n\n    this.llhttp.llhttp_free(this.ptr)\n    this.ptr = null\n\n    this.timeout && timers.clearTimeout(this.timeout)\n    this.timeout = null\n    this.timeoutValue = null\n    this.timeoutType = null\n\n    this.paused = false\n  }\n\n  /**\n   * @param {Buffer} buf\n   * @returns {0}\n   */\n  onStatus (buf) {\n    this.statusText = buf.toString()\n    return 0\n  }\n\n  /**\n   * @returns {0|-1}\n   */\n  onMessageBegin () {\n    const { socket, client } = this\n\n    if (socket.destroyed) {\n      return -1\n    }\n\n    const request = client[kQueue][client[kRunningIdx]]\n    if (!request) {\n      return -1\n    }\n    request.onResponseStarted()\n\n    return 0\n  }\n\n  /**\n   * @param {Buffer} buf\n   * @returns {number}\n   */\n  onHeaderField (buf) {\n    const len = this.headers.length\n\n    if ((len & 1) === 0) {\n      this.headers.push(buf)\n    } else {\n      this.headers[len - 1] = Buffer.concat([this.headers[len - 1], buf])\n    }\n\n    this.trackHeader(buf.length)\n\n    return 0\n  }\n\n  /**\n   * @param {Buffer} buf\n   * @returns {number}\n   */\n  onHeaderValue (buf) {\n    let len = this.headers.length\n\n    if ((len & 1) === 1) {\n      this.headers.push(buf)\n      len += 1\n    } else {\n      this.headers[len - 1] = Buffer.concat([this.headers[len - 1], buf])\n    }\n\n    const key = this.headers[len - 2]\n    if (key.length === 10) {\n      const headerName = util.bufferToLowerCasedHeaderName(key)\n      if (headerName === 'keep-alive') {\n        this.keepAlive += buf.toString()\n      } else if (headerName === 'connection') {\n        this.connection += buf.toString()\n      }\n    } else if (key.length === 14 && util.bufferToLowerCasedHeaderName(key) === 'content-length') {\n      this.contentLength += buf.toString()\n    }\n\n    this.trackHeader(buf.length)\n\n    return 0\n  }\n\n  /**\n   * @param {number} len\n   */\n  trackHeader (len) {\n    this.headersSize += len\n    if (this.headersSize >= this.headersMaxSize) {\n      util.destroy(this.socket, new HeadersOverflowError())\n    }\n  }\n\n  /**\n   * @param {Buffer} head\n   */\n  onUpgrade (head) {\n    const { upgrade, client, socket, headers, statusCode } = this\n\n    assert(upgrade)\n    assert(client[kSocket] === socket)\n    assert(!socket.destroyed)\n    assert(!this.paused)\n    assert((headers.length & 1) === 0)\n\n    const request = client[kQueue][client[kRunningIdx]]\n    assert(request)\n    assert(request.upgrade || request.method === 'CONNECT')\n\n    this.statusCode = 0\n    this.statusText = ''\n    this.shouldKeepAlive = false\n\n    this.headers = []\n    this.headersSize = 0\n\n    socket.unshift(head)\n\n    socket[kParser].destroy()\n    socket[kParser] = null\n\n    socket[kClient] = null\n    socket[kError] = null\n\n    removeAllListeners(socket)\n\n    client[kSocket] = null\n    client[kHTTPContext] = null // TODO (fix): This is hacky...\n    client[kQueue][client[kRunningIdx]++] = null\n    client.emit('disconnect', client[kUrl], [client], new InformationalError('upgrade'))\n\n    try {\n      request.onUpgrade(statusCode, headers, socket)\n    } catch (err) {\n      util.destroy(socket, err)\n    }\n\n    client[kResume]()\n  }\n\n  /**\n   * @param {number} statusCode\n   * @param {boolean} upgrade\n   * @param {boolean} shouldKeepAlive\n   * @returns {number}\n   */\n  onHeadersComplete (statusCode, upgrade, shouldKeepAlive) {\n    const { client, socket, headers, statusText } = this\n\n    if (socket.destroyed) {\n      return -1\n    }\n\n    const request = client[kQueue][client[kRunningIdx]]\n\n    if (!request) {\n      return -1\n    }\n\n    assert(!this.upgrade)\n    assert(this.statusCode < 200)\n\n    if (statusCode === 100) {\n      util.destroy(socket, new SocketError('bad response', util.getSocketInfo(socket)))\n      return -1\n    }\n\n    /* this can only happen if server is misbehaving */\n    if (upgrade && !request.upgrade) {\n      util.destroy(socket, new SocketError('bad upgrade', util.getSocketInfo(socket)))\n      return -1\n    }\n\n    assert(this.timeoutType === TIMEOUT_HEADERS)\n\n    this.statusCode = statusCode\n    this.shouldKeepAlive = (\n      shouldKeepAlive ||\n      // Override llhttp value which does not allow keepAlive for HEAD.\n      (request.method === 'HEAD' && !socket[kReset] && this.connection.toLowerCase() === 'keep-alive')\n    )\n\n    if (this.statusCode >= 200) {\n      const bodyTimeout = request.bodyTimeout != null\n        ? request.bodyTimeout\n        : client[kBodyTimeout]\n      this.setTimeout(bodyTimeout, TIMEOUT_BODY)\n    } else if (this.timeout) {\n      if (this.timeout.refresh) {\n        this.timeout.refresh()\n      }\n    }\n\n    if (request.method === 'CONNECT') {\n      assert(client[kRunning] === 1)\n      this.upgrade = true\n      return 2\n    }\n\n    if (upgrade) {\n      assert(client[kRunning] === 1)\n      this.upgrade = true\n      return 2\n    }\n\n    assert((this.headers.length & 1) === 0)\n    this.headers = []\n    this.headersSize = 0\n\n    if (this.shouldKeepAlive && client[kPipelining]) {\n      const keepAliveTimeout = this.keepAlive ? util.parseKeepAliveTimeout(this.keepAlive) : null\n\n      if (keepAliveTimeout != null) {\n        const timeout = Math.min(\n          keepAliveTimeout - client[kKeepAliveTimeoutThreshold],\n          client[kKeepAliveMaxTimeout]\n        )\n        if (timeout <= 0) {\n          socket[kReset] = true\n        } else {\n          client[kKeepAliveTimeoutValue] = timeout\n        }\n      } else {\n        client[kKeepAliveTimeoutValue] = client[kKeepAliveDefaultTimeout]\n      }\n    } else {\n      // Stop more requests from being dispatched.\n      socket[kReset] = true\n    }\n\n    const pause = request.onHeaders(statusCode, headers, this.resume, statusText) === false\n\n    if (request.aborted) {\n      return -1\n    }\n\n    if (request.method === 'HEAD') {\n      return 1\n    }\n\n    if (statusCode < 200) {\n      return 1\n    }\n\n    if (socket[kBlocking]) {\n      socket[kBlocking] = false\n      client[kResume]()\n    }\n\n    return pause ? constants.ERROR.PAUSED : 0\n  }\n\n  /**\n   * @param {Buffer} buf\n   * @returns {number}\n   */\n  onBody (buf) {\n    const { client, socket, statusCode, maxResponseSize } = this\n\n    if (socket.destroyed) {\n      return -1\n    }\n\n    const request = client[kQueue][client[kRunningIdx]]\n    assert(request)\n\n    assert(this.timeoutType === TIMEOUT_BODY)\n    if (this.timeout) {\n      if (this.timeout.refresh) {\n        this.timeout.refresh()\n      }\n    }\n\n    assert(statusCode >= 200)\n\n    if (maxResponseSize > -1 && this.bytesRead + buf.length > maxResponseSize) {\n      util.destroy(socket, new ResponseExceededMaxSizeError())\n      return -1\n    }\n\n    this.bytesRead += buf.length\n\n    if (request.onData(buf) === false) {\n      return constants.ERROR.PAUSED\n    }\n\n    return 0\n  }\n\n  /**\n   * @returns {number}\n   */\n  onMessageComplete () {\n    const { client, socket, statusCode, upgrade, headers, contentLength, bytesRead, shouldKeepAlive } = this\n\n    if (socket.destroyed && (!statusCode || shouldKeepAlive)) {\n      return -1\n    }\n\n    if (upgrade) {\n      return 0\n    }\n\n    assert(statusCode >= 100)\n    assert((this.headers.length & 1) === 0)\n\n    const request = client[kQueue][client[kRunningIdx]]\n    assert(request)\n\n    this.statusCode = 0\n    this.statusText = ''\n    this.bytesRead = 0\n    this.contentLength = ''\n    this.keepAlive = ''\n    this.connection = ''\n\n    this.headers = []\n    this.headersSize = 0\n\n    if (statusCode < 200) {\n      return 0\n    }\n\n    if (request.method !== 'HEAD' && contentLength && bytesRead !== parseInt(contentLength, 10)) {\n      util.destroy(socket, new ResponseContentLengthMismatchError())\n      return -1\n    }\n\n    request.onComplete(headers)\n\n    client[kQueue][client[kRunningIdx]++] = null\n\n    if (socket[kWriting]) {\n      assert(client[kRunning] === 0)\n      // Response completed before request.\n      util.destroy(socket, new InformationalError('reset'))\n      return constants.ERROR.PAUSED\n    } else if (!shouldKeepAlive) {\n      util.destroy(socket, new InformationalError('reset'))\n      return constants.ERROR.PAUSED\n    } else if (socket[kReset] && client[kRunning] === 0) {\n      // Destroy socket once all requests have completed.\n      // The request at the tail of the pipeline is the one\n      // that requested reset and no further requests should\n      // have been queued since then.\n      util.destroy(socket, new InformationalError('reset'))\n      return constants.ERROR.PAUSED\n    } else if (client[kPipelining] == null || client[kPipelining] === 1) {\n      // We must wait a full event loop cycle to reuse this socket to make sure\n      // that non-spec compliant servers are not closing the connection even if they\n      // said they won't.\n      setImmediate(client[kResume])\n    } else {\n      client[kResume]()\n    }\n\n    return 0\n  }\n}\n\nfunction onParserTimeout (parserWeakRef) {\n  const parser = parserWeakRef.deref()\n  if (!parser) {\n    return\n  }\n\n  const { socket, timeoutType, client, paused } = parser\n\n  if (timeoutType === TIMEOUT_HEADERS) {\n    if (!socket[kWriting] || socket.writableNeedDrain || client[kRunning] > 1) {\n      assert(!paused, 'cannot be paused while waiting for headers')\n      util.destroy(socket, new HeadersTimeoutError())\n    }\n  } else if (timeoutType === TIMEOUT_BODY) {\n    if (!paused) {\n      util.destroy(socket, new BodyTimeoutError())\n    }\n  } else if (timeoutType === TIMEOUT_KEEP_ALIVE) {\n    assert(client[kRunning] === 0 && client[kKeepAliveTimeoutValue])\n    util.destroy(socket, new InformationalError('socket idle timeout'))\n  }\n}\n\n/**\n * @param {import ('./client.js')} client\n * @param {import('net').Socket} socket\n * @returns\n */\nfunction connectH1 (client, socket) {\n  client[kSocket] = socket\n\n  if (!llhttpInstance) {\n    llhttpInstance = lazyllhttp()\n  }\n\n  if (socket.errored) {\n    throw socket.errored\n  }\n\n  if (socket.destroyed) {\n    throw new SocketError('destroyed')\n  }\n\n  socket[kNoRef] = false\n  socket[kWriting] = false\n  socket[kReset] = false\n  socket[kBlocking] = false\n  socket[kParser] = new Parser(client, socket, llhttpInstance)\n\n  util.addListener(socket, 'error', onHttpSocketError)\n  util.addListener(socket, 'readable', onHttpSocketReadable)\n  util.addListener(socket, 'end', onHttpSocketEnd)\n  util.addListener(socket, 'close', onHttpSocketClose)\n\n  socket[kClosed] = false\n  socket.on('close', onSocketClose)\n\n  return {\n    version: 'h1',\n    defaultPipelining: 1,\n    write (request) {\n      return writeH1(client, request)\n    },\n    resume () {\n      resumeH1(client)\n    },\n    /**\n     * @param {Error|undefined} err\n     * @param {() => void} callback\n     */\n    destroy (err, callback) {\n      if (socket[kClosed]) {\n        queueMicrotask(callback)\n      } else {\n        socket.on('close', callback)\n        socket.destroy(err)\n      }\n    },\n    /**\n     * @returns {boolean}\n     */\n    get destroyed () {\n      return socket.destroyed\n    },\n    /**\n     * @param {import('../core/request.js')} request\n     * @returns {boolean}\n     */\n    busy (request) {\n      if (socket[kWriting] || socket[kReset] || socket[kBlocking]) {\n        return true\n      }\n\n      if (request) {\n        if (client[kRunning] > 0 && !request.idempotent) {\n          // Non-idempotent request cannot be retried.\n          // Ensure that no other requests are inflight and\n          // could cause failure.\n          return true\n        }\n\n        if (client[kRunning] > 0 && (request.upgrade || request.method === 'CONNECT')) {\n          // Don't dispatch an upgrade until all preceding requests have completed.\n          // A misbehaving server might upgrade the connection before all pipelined\n          // request has completed.\n          return true\n        }\n\n        if (client[kRunning] > 0 && util.bodyLength(request.body) !== 0 &&\n          (util.isStream(request.body) || util.isAsyncIterable(request.body) || util.isFormDataLike(request.body))) {\n          // Request with stream or iterator body can error while other requests\n          // are inflight and indirectly error those as well.\n          // Ensure this doesn't happen by waiting for inflight\n          // to complete before dispatching.\n\n          // Request with stream or iterator body cannot be retried.\n          // Ensure that no other requests are inflight and\n          // could cause failure.\n          return true\n        }\n      }\n\n      return false\n    }\n  }\n}\n\nfunction onHttpSocketError (err) {\n  assert(err.code !== 'ERR_TLS_CERT_ALTNAME_INVALID')\n\n  const parser = this[kParser]\n\n  // On Mac OS, we get an ECONNRESET even if there is a full body to be forwarded\n  // to the user.\n  if (err.code === 'ECONNRESET' && parser.statusCode && !parser.shouldKeepAlive) {\n    // We treat all incoming data so for as a valid response.\n    parser.onMessageComplete()\n    return\n  }\n\n  this[kError] = err\n\n  this[kClient][kOnError](err)\n}\n\nfunction onHttpSocketReadable () {\n  this[kParser]?.readMore()\n}\n\nfunction onHttpSocketEnd () {\n  const parser = this[kParser]\n\n  if (parser.statusCode && !parser.shouldKeepAlive) {\n    // We treat all incoming data so far as a valid response.\n    parser.onMessageComplete()\n    return\n  }\n\n  util.destroy(this, new SocketError('other side closed', util.getSocketInfo(this)))\n}\n\nfunction onHttpSocketClose () {\n  const parser = this[kParser]\n\n  if (parser) {\n    if (!this[kError] && parser.statusCode && !parser.shouldKeepAlive) {\n      // We treat all incoming data so far as a valid response.\n      parser.onMessageComplete()\n    }\n\n    this[kParser].destroy()\n    this[kParser] = null\n  }\n\n  const err = this[kError] || new SocketError('closed', util.getSocketInfo(this))\n\n  const client = this[kClient]\n\n  client[kSocket] = null\n  client[kHTTPContext] = null // TODO (fix): This is hacky...\n\n  if (client.destroyed) {\n    assert(client[kPending] === 0)\n\n    // Fail entire queue.\n    const requests = client[kQueue].splice(client[kRunningIdx])\n    for (let i = 0; i < requests.length; i++) {\n      const request = requests[i]\n      util.errorRequest(client, request, err)\n    }\n  } else if (client[kRunning] > 0 && err.code !== 'UND_ERR_INFO') {\n    // Fail head of pipeline.\n    const request = client[kQueue][client[kRunningIdx]]\n    client[kQueue][client[kRunningIdx]++] = null\n\n    util.errorRequest(client, request, err)\n  }\n\n  client[kPendingIdx] = client[kRunningIdx]\n\n  assert(client[kRunning] === 0)\n\n  client.emit('disconnect', client[kUrl], [client], err)\n\n  client[kResume]()\n}\n\nfunction onSocketClose () {\n  this[kClosed] = true\n}\n\n/**\n * @param {import('./client.js')} client\n */\nfunction resumeH1 (client) {\n  const socket = client[kSocket]\n\n  if (socket && !socket.destroyed) {\n    if (client[kSize] === 0) {\n      if (!socket[kNoRef] && socket.unref) {\n        socket.unref()\n        socket[kNoRef] = true\n      }\n    } else if (socket[kNoRef] && socket.ref) {\n      socket.ref()\n      socket[kNoRef] = false\n    }\n\n    if (client[kSize] === 0) {\n      if (socket[kParser].timeoutType !== TIMEOUT_KEEP_ALIVE) {\n        socket[kParser].setTimeout(client[kKeepAliveTimeoutValue], TIMEOUT_KEEP_ALIVE)\n      }\n    } else if (client[kRunning] > 0 && socket[kParser].statusCode < 200) {\n      if (socket[kParser].timeoutType !== TIMEOUT_HEADERS) {\n        const request = client[kQueue][client[kRunningIdx]]\n        const headersTimeout = request.headersTimeout != null\n          ? request.headersTimeout\n          : client[kHeadersTimeout]\n        socket[kParser].setTimeout(headersTimeout, TIMEOUT_HEADERS)\n      }\n    }\n  }\n}\n\n// https://www.rfc-editor.org/rfc/rfc7230#section-3.3.2\nfunction shouldSendContentLength (method) {\n  return method !== 'GET' && method !== 'HEAD' && method !== 'OPTIONS' && method !== 'TRACE' && method !== 'CONNECT'\n}\n\n/**\n * @param {import('./client.js')} client\n * @param {import('../core/request.js')} request\n * @returns\n */\nfunction writeH1 (client, request) {\n  const { method, path, host, upgrade, blocking, reset } = request\n\n  let { body, headers, contentLength } = request\n\n  // https://tools.ietf.org/html/rfc7231#section-4.3.1\n  // https://tools.ietf.org/html/rfc7231#section-4.3.2\n  // https://tools.ietf.org/html/rfc7231#section-4.3.5\n\n  // Sending a payload body on a request that does not\n  // expect it can cause undefined behavior on some\n  // servers and corrupt connection state. Do not\n  // re-use the connection for further requests.\n\n  const expectsPayload = (\n    method === 'PUT' ||\n    method === 'POST' ||\n    method === 'PATCH' ||\n    method === 'QUERY' ||\n    method === 'PROPFIND' ||\n    method === 'PROPPATCH'\n  )\n\n  if (util.isFormDataLike(body)) {\n    if (!extractBody) {\n      extractBody = require('../web/fetch/body.js').extractBody\n    }\n\n    const [bodyStream, contentType] = extractBody(body)\n    if (request.contentType == null) {\n      headers.push('content-type', contentType)\n    }\n    body = bodyStream.stream\n    contentLength = bodyStream.length\n  } else if (util.isBlobLike(body) && request.contentType == null && body.type) {\n    headers.push('content-type', body.type)\n  }\n\n  if (body && typeof body.read === 'function') {\n    // Try to read EOF in order to get length.\n    body.read(0)\n  }\n\n  const bodyLength = util.bodyLength(body)\n\n  contentLength = bodyLength ?? contentLength\n\n  if (contentLength === null) {\n    contentLength = request.contentLength\n  }\n\n  if (contentLength === 0 && !expectsPayload) {\n    // https://tools.ietf.org/html/rfc7230#section-3.3.2\n    // A user agent SHOULD NOT send a Content-Length header field when\n    // the request message does not contain a payload body and the method\n    // semantics do not anticipate such a body.\n\n    contentLength = null\n  }\n\n  // https://github.com/nodejs/undici/issues/2046\n  // A user agent may send a Content-Length header with 0 value, this should be allowed.\n  if (shouldSendContentLength(method) && contentLength > 0 && request.contentLength !== null && request.contentLength !== contentLength) {\n    if (client[kStrictContentLength]) {\n      util.errorRequest(client, request, new RequestContentLengthMismatchError())\n      return false\n    }\n\n    process.emitWarning(new RequestContentLengthMismatchError())\n  }\n\n  const socket = client[kSocket]\n\n  /**\n   * @param {Error} [err]\n   * @returns {void}\n   */\n  const abort = (err) => {\n    if (request.aborted || request.completed) {\n      return\n    }\n\n    util.errorRequest(client, request, err || new RequestAbortedError())\n\n    util.destroy(body)\n    util.destroy(socket, new InformationalError('aborted'))\n  }\n\n  try {\n    request.onConnect(abort)\n  } catch (err) {\n    util.errorRequest(client, request, err)\n  }\n\n  if (request.aborted) {\n    return false\n  }\n\n  if (method === 'HEAD') {\n    // https://github.com/mcollina/undici/issues/258\n    // Close after a HEAD request to interop with misbehaving servers\n    // that may send a body in the response.\n\n    socket[kReset] = true\n  }\n\n  if (upgrade || method === 'CONNECT') {\n    // On CONNECT or upgrade, block pipeline from dispatching further\n    // requests on this connection.\n\n    socket[kReset] = true\n  }\n\n  if (reset != null) {\n    socket[kReset] = reset\n  }\n\n  if (client[kMaxRequests] && socket[kCounter]++ >= client[kMaxRequests]) {\n    socket[kReset] = true\n  }\n\n  if (blocking) {\n    socket[kBlocking] = true\n  }\n\n  if (socket.setTypeOfService) {\n    socket.setTypeOfService(request.typeOfService)\n  }\n\n  let header = `${method} ${path} HTTP/1.1\\r\\n`\n\n  if (typeof host === 'string') {\n    header += `host: ${host}\\r\\n`\n  } else {\n    header += client[kHostHeader]\n  }\n\n  if (upgrade) {\n    header += `connection: upgrade\\r\\nupgrade: ${upgrade}\\r\\n`\n  } else if (client[kPipelining] && !socket[kReset]) {\n    header += 'connection: keep-alive\\r\\n'\n  } else {\n    header += 'connection: close\\r\\n'\n  }\n\n  if (Array.isArray(headers)) {\n    for (let n = 0; n < headers.length; n += 2) {\n      const key = headers[n + 0]\n      const val = headers[n + 1]\n\n      if (Array.isArray(val)) {\n        for (let i = 0; i < val.length; i++) {\n          header += `${key}: ${val[i]}\\r\\n`\n        }\n      } else {\n        header += `${key}: ${val}\\r\\n`\n      }\n    }\n  }\n\n  if (channels.sendHeaders.hasSubscribers) {\n    channels.sendHeaders.publish({ request, headers: header, socket })\n  }\n\n  if (!body || bodyLength === 0) {\n    writeBuffer(abort, null, client, request, socket, contentLength, header, expectsPayload)\n  } else if (util.isBuffer(body)) {\n    writeBuffer(abort, body, client, request, socket, contentLength, header, expectsPayload)\n  } else if (util.isBlobLike(body)) {\n    if (typeof body.stream === 'function') {\n      writeIterable(abort, body.stream(), client, request, socket, contentLength, header, expectsPayload)\n    } else {\n      writeBlob(abort, body, client, request, socket, contentLength, header, expectsPayload)\n    }\n  } else if (util.isStream(body)) {\n    writeStream(abort, body, client, request, socket, contentLength, header, expectsPayload)\n  } else if (util.isIterable(body)) {\n    writeIterable(abort, body, client, request, socket, contentLength, header, expectsPayload)\n  } else {\n    assert(false)\n  }\n\n  return true\n}\n\n/**\n * @param {AbortCallback} abort\n * @param {import('stream').Stream} body\n * @param {import('./client.js')} client\n * @param {import('../core/request.js')} request\n * @param {import('net').Socket} socket\n * @param {number} contentLength\n * @param {string} header\n * @param {boolean} expectsPayload\n */\nfunction writeStream (abort, body, client, request, socket, contentLength, header, expectsPayload) {\n  assert(contentLength !== 0 || client[kRunning] === 0, 'stream body cannot be pipelined')\n\n  let finished = false\n\n  const writer = new AsyncWriter({ abort, socket, request, contentLength, client, expectsPayload, header })\n\n  /**\n   * @param {Buffer} chunk\n   * @returns {void}\n   */\n  const onData = function (chunk) {\n    if (finished) {\n      return\n    }\n\n    try {\n      if (!writer.write(chunk) && this.pause) {\n        this.pause()\n      }\n    } catch (err) {\n      util.destroy(this, err)\n    }\n  }\n\n  /**\n   * @returns {void}\n   */\n  const onDrain = function () {\n    if (finished) {\n      return\n    }\n\n    if (body.resume) {\n      body.resume()\n    }\n  }\n\n  /**\n   * @returns {void}\n   */\n  const onClose = function () {\n    // 'close' might be emitted *before* 'error' for\n    // broken streams. Wait a tick to avoid this case.\n    queueMicrotask(() => {\n      // It's only safe to remove 'error' listener after\n      // 'close'.\n      body.removeListener('error', onFinished)\n    })\n\n    if (!finished) {\n      const err = new RequestAbortedError()\n      queueMicrotask(() => onFinished(err))\n    }\n  }\n\n  /**\n   * @param {Error} [err]\n   * @returns\n   */\n  const onFinished = function (err) {\n    if (finished) {\n      return\n    }\n\n    finished = true\n\n    assert(socket.destroyed || (socket[kWriting] && client[kRunning] <= 1))\n\n    socket\n      .off('drain', onDrain)\n      .off('error', onFinished)\n\n    body\n      .removeListener('data', onData)\n      .removeListener('end', onFinished)\n      .removeListener('close', onClose)\n\n    if (!err) {\n      try {\n        writer.end()\n      } catch (er) {\n        err = er\n      }\n    }\n\n    writer.destroy(err)\n\n    if (err && (err.code !== 'UND_ERR_INFO' || err.message !== 'reset')) {\n      util.destroy(body, err)\n    } else {\n      util.destroy(body)\n    }\n  }\n\n  body\n    .on('data', onData)\n    .on('end', onFinished)\n    .on('error', onFinished)\n    .on('close', onClose)\n\n  if (body.resume) {\n    body.resume()\n  }\n\n  socket\n    .on('drain', onDrain)\n    .on('error', onFinished)\n\n  if (body.errorEmitted ?? body.errored) {\n    setImmediate(onFinished, body.errored)\n  } else if (body.endEmitted ?? body.readableEnded) {\n    setImmediate(onFinished, null)\n  }\n\n  if (body.closeEmitted ?? body.closed) {\n    setImmediate(onClose)\n  }\n}\n\n/**\n * @typedef AbortCallback\n * @type {Function}\n * @param {Error} [err]\n * @returns {void}\n */\n\n/**\n * @param {AbortCallback} abort\n * @param {Uint8Array|null} body\n * @param {import('./client.js')} client\n * @param {import('../core/request.js')} request\n * @param {import('net').Socket} socket\n * @param {number} contentLength\n * @param {string} header\n * @param {boolean} expectsPayload\n * @returns {void}\n */\nfunction writeBuffer (abort, body, client, request, socket, contentLength, header, expectsPayload) {\n  try {\n    if (!body) {\n      if (contentLength === 0) {\n        socket.write(`${header}content-length: 0\\r\\n\\r\\n`, 'latin1')\n      } else {\n        assert(contentLength === null, 'no body must not have content length')\n        socket.write(`${header}\\r\\n`, 'latin1')\n      }\n    } else if (util.isBuffer(body)) {\n      assert(contentLength === body.byteLength, 'buffer body must have content length')\n\n      socket.cork()\n      socket.write(`${header}content-length: ${contentLength}\\r\\n\\r\\n`, 'latin1')\n      socket.write(body)\n      socket.uncork()\n      request.onBodySent(body)\n\n      if (!expectsPayload && request.reset !== false) {\n        socket[kReset] = true\n      }\n    }\n    request.onRequestSent()\n\n    client[kResume]()\n  } catch (err) {\n    abort(err)\n  }\n}\n\n/**\n * @param {AbortCallback} abort\n * @param {Blob} body\n * @param {import('./client.js')} client\n * @param {import('../core/request.js')} request\n * @param {import('net').Socket} socket\n * @param {number} contentLength\n * @param {string} header\n * @param {boolean} expectsPayload\n * @returns {Promise<void>}\n */\nasync function writeBlob (abort, body, client, request, socket, contentLength, header, expectsPayload) {\n  assert(contentLength === body.size, 'blob body must have content length')\n\n  try {\n    if (contentLength != null && contentLength !== body.size) {\n      throw new RequestContentLengthMismatchError()\n    }\n\n    const buffer = Buffer.from(await body.arrayBuffer())\n\n    socket.cork()\n    socket.write(`${header}content-length: ${contentLength}\\r\\n\\r\\n`, 'latin1')\n    socket.write(buffer)\n    socket.uncork()\n\n    request.onBodySent(buffer)\n    request.onRequestSent()\n\n    if (!expectsPayload && request.reset !== false) {\n      socket[kReset] = true\n    }\n\n    client[kResume]()\n  } catch (err) {\n    abort(err)\n  }\n}\n\n/**\n * @param {AbortCallback} abort\n * @param {Iterable} body\n * @param {import('./client.js')} client\n * @param {import('../core/request.js')} request\n * @param {import('net').Socket} socket\n * @param {number} contentLength\n * @param {string} header\n * @param {boolean} expectsPayload\n * @returns {Promise<void>}\n */\nasync function writeIterable (abort, body, client, request, socket, contentLength, header, expectsPayload) {\n  assert(contentLength !== 0 || client[kRunning] === 0, 'iterator body cannot be pipelined')\n\n  let callback = null\n  function onDrain () {\n    if (callback) {\n      const cb = callback\n      callback = null\n      cb()\n    }\n  }\n\n  const waitForDrain = () => new Promise((resolve, reject) => {\n    assert(callback === null)\n\n    if (socket[kError]) {\n      reject(socket[kError])\n    } else {\n      callback = resolve\n    }\n  })\n\n  socket\n    .on('close', onDrain)\n    .on('drain', onDrain)\n\n  const writer = new AsyncWriter({ abort, socket, request, contentLength, client, expectsPayload, header })\n  try {\n    // It's up to the user to somehow abort the async iterable.\n    for await (const chunk of body) {\n      if (socket[kError]) {\n        throw socket[kError]\n      }\n\n      if (!writer.write(chunk)) {\n        await waitForDrain()\n      }\n    }\n\n    writer.end()\n  } catch (err) {\n    writer.destroy(err)\n  } finally {\n    socket\n      .off('close', onDrain)\n      .off('drain', onDrain)\n  }\n}\n\nclass AsyncWriter {\n  /**\n   *\n   * @param {object} arg\n   * @param {AbortCallback} arg.abort\n   * @param {import('net').Socket} arg.socket\n   * @param {import('../core/request.js')} arg.request\n   * @param {number} arg.contentLength\n   * @param {import('./client.js')} arg.client\n   * @param {boolean} arg.expectsPayload\n   * @param {string} arg.header\n   */\n  constructor ({ abort, socket, request, contentLength, client, expectsPayload, header }) {\n    this.socket = socket\n    this.request = request\n    this.contentLength = contentLength\n    this.client = client\n    this.bytesWritten = 0\n    this.expectsPayload = expectsPayload\n    this.header = header\n    this.abort = abort\n\n    socket[kWriting] = true\n  }\n\n  /**\n   * @param {Buffer} chunk\n   * @returns\n   */\n  write (chunk) {\n    const { socket, request, contentLength, client, bytesWritten, expectsPayload, header } = this\n\n    if (socket[kError]) {\n      throw socket[kError]\n    }\n\n    if (socket.destroyed) {\n      return false\n    }\n\n    const len = Buffer.byteLength(chunk)\n    if (!len) {\n      return true\n    }\n\n    // We should defer writing chunks.\n    if (contentLength !== null && bytesWritten + len > contentLength) {\n      if (client[kStrictContentLength]) {\n        throw new RequestContentLengthMismatchError()\n      }\n\n      process.emitWarning(new RequestContentLengthMismatchError())\n    }\n\n    socket.cork()\n\n    if (bytesWritten === 0) {\n      if (!expectsPayload && request.reset !== false) {\n        socket[kReset] = true\n      }\n\n      if (contentLength === null) {\n        socket.write(`${header}transfer-encoding: chunked\\r\\n`, 'latin1')\n      } else {\n        socket.write(`${header}content-length: ${contentLength}\\r\\n\\r\\n`, 'latin1')\n      }\n    }\n\n    if (contentLength === null) {\n      socket.write(`\\r\\n${len.toString(16)}\\r\\n`, 'latin1')\n    }\n\n    this.bytesWritten += len\n\n    const ret = socket.write(chunk)\n\n    socket.uncork()\n\n    request.onBodySent(chunk)\n\n    if (!ret) {\n      if (socket[kParser].timeout && socket[kParser].timeoutType === TIMEOUT_HEADERS) {\n        if (socket[kParser].timeout.refresh) {\n          socket[kParser].timeout.refresh()\n        }\n      }\n    }\n\n    return ret\n  }\n\n  /**\n   * @returns {void}\n   */\n  end () {\n    const { socket, contentLength, client, bytesWritten, expectsPayload, header, request } = this\n    request.onRequestSent()\n\n    socket[kWriting] = false\n\n    if (socket[kError]) {\n      throw socket[kError]\n    }\n\n    if (socket.destroyed) {\n      return\n    }\n\n    if (bytesWritten === 0) {\n      if (expectsPayload) {\n        // https://tools.ietf.org/html/rfc7230#section-3.3.2\n        // A user agent SHOULD send a Content-Length in a request message when\n        // no Transfer-Encoding is sent and the request method defines a meaning\n        // for an enclosed payload body.\n\n        socket.write(`${header}content-length: 0\\r\\n\\r\\n`, 'latin1')\n      } else {\n        socket.write(`${header}\\r\\n`, 'latin1')\n      }\n    } else if (contentLength === null) {\n      socket.write('\\r\\n0\\r\\n\\r\\n', 'latin1')\n    }\n\n    if (contentLength !== null && bytesWritten !== contentLength) {\n      if (client[kStrictContentLength]) {\n        throw new RequestContentLengthMismatchError()\n      } else {\n        process.emitWarning(new RequestContentLengthMismatchError())\n      }\n    }\n\n    if (socket[kParser].timeout && socket[kParser].timeoutType === TIMEOUT_HEADERS) {\n      if (socket[kParser].timeout.refresh) {\n        socket[kParser].timeout.refresh()\n      }\n    }\n\n    client[kResume]()\n  }\n\n  /**\n   * @param {Error} [err]\n   * @returns {void}\n   */\n  destroy (err) {\n    const { socket, client, abort } = this\n\n    socket[kWriting] = false\n\n    if (err) {\n      assert(client[kRunning] <= 1, 'pipeline should only contain this request')\n      abort(err)\n    }\n  }\n}\n\nmodule.exports = connectH1\n", "'use strict'\n\nconst assert = require('node:assert')\nconst { pipeline } = require('node:stream')\nconst util = require('../core/util.js')\nconst {\n  RequestContentLengthMismatchError,\n  RequestAbortedError,\n  SocketError,\n  InformationalError,\n  InvalidArgumentError\n} = require('../core/errors.js')\nconst {\n  kUrl,\n  kReset,\n  kClient,\n  kRunning,\n  kPending,\n  kQueue,\n  kPendingIdx,\n  kRunningIdx,\n  kError,\n  kSocket,\n  kStrictContentLength,\n  kOnError,\n  kMaxConcurrentStreams,\n  kPingInterval,\n  kHTTP2Session,\n  kHTTP2InitialWindowSize,\n  kHTTP2ConnectionWindowSize,\n  kResume,\n  kSize,\n  kHTTPContext,\n  kClosed,\n  kBodyTimeout,\n  kEnableConnectProtocol,\n  kRemoteSettings,\n  kHTTP2Stream,\n  kHTTP2SessionState\n} = require('../core/symbols.js')\nconst { channels } = require('../core/diagnostics.js')\n\nconst kOpenStreams = Symbol('open streams')\n\nlet extractBody\n\n/** @type {import('http2')} */\nlet http2\ntry {\n  http2 = require('node:http2')\n} catch {\n  // @ts-ignore\n  http2 = { constants: {} }\n}\n\nconst {\n  constants: {\n    HTTP2_HEADER_AUTHORITY,\n    HTTP2_HEADER_METHOD,\n    HTTP2_HEADER_PATH,\n    HTTP2_HEADER_SCHEME,\n    HTTP2_HEADER_CONTENT_LENGTH,\n    HTTP2_HEADER_EXPECT,\n    HTTP2_HEADER_STATUS,\n    HTTP2_HEADER_PROTOCOL,\n    NGHTTP2_REFUSED_STREAM,\n    NGHTTP2_CANCEL\n  }\n} = http2\n\nfunction parseH2Headers (headers) {\n  const result = []\n\n  for (const [name, value] of Object.entries(headers)) {\n    // h2 may concat the header value by array\n    // e.g. Set-Cookie\n    if (Array.isArray(value)) {\n      for (const subvalue of value) {\n        // we need to provide each header value of header name\n        // because the headers handler expect name-value pair\n        result.push(Buffer.from(name), Buffer.from(subvalue))\n      }\n    } else {\n      result.push(Buffer.from(name), Buffer.from(value))\n    }\n  }\n\n  return result\n}\n\nfunction connectH2 (client, socket) {\n  client[kSocket] = socket\n\n  const http2InitialWindowSize = client[kHTTP2InitialWindowSize]\n  const http2ConnectionWindowSize = client[kHTTP2ConnectionWindowSize]\n\n  const session = http2.connect(client[kUrl], {\n    createConnection: () => socket,\n    peerMaxConcurrentStreams: client[kMaxConcurrentStreams],\n    settings: {\n      // TODO(metcoder95): add support for PUSH\n      enablePush: false,\n      ...(http2InitialWindowSize != null ? { initialWindowSize: http2InitialWindowSize } : null)\n    }\n  })\n\n  client[kSocket] = socket\n  session[kOpenStreams] = 0\n  session[kClient] = client\n  session[kSocket] = socket\n  session[kHTTP2SessionState] = {\n    ping: {\n      interval: client[kPingInterval] === 0 ? null : setInterval(onHttp2SendPing, client[kPingInterval], session).unref()\n    }\n  }\n  // We set it to true by default in a best-effort; however once connected to an H2 server\n  // we will check if extended CONNECT protocol is supported or not\n  // and set this value accordingly.\n  session[kEnableConnectProtocol] = false\n  // States whether or not we have received the remote settings from the server\n  session[kRemoteSettings] = false\n\n  // Apply connection-level flow control once connected (if supported).\n  if (http2ConnectionWindowSize) {\n    util.addListener(session, 'connect', applyConnectionWindowSize.bind(session, http2ConnectionWindowSize))\n  }\n\n  util.addListener(session, 'error', onHttp2SessionError)\n  util.addListener(session, 'frameError', onHttp2FrameError)\n  util.addListener(session, 'end', onHttp2SessionEnd)\n  util.addListener(session, 'goaway', onHttp2SessionGoAway)\n  util.addListener(session, 'close', onHttp2SessionClose)\n  util.addListener(session, 'remoteSettings', onHttp2RemoteSettings)\n  // TODO (@metcoder95): implement SETTINGS support\n  // util.addListener(session, 'localSettings', onHttp2RemoteSettings)\n\n  session.unref()\n\n  client[kHTTP2Session] = session\n  socket[kHTTP2Session] = session\n\n  util.addListener(socket, 'error', onHttp2SocketError)\n  util.addListener(socket, 'end', onHttp2SocketEnd)\n  util.addListener(socket, 'close', onHttp2SocketClose)\n\n  socket[kClosed] = false\n  socket.on('close', onSocketClose)\n\n  return {\n    version: 'h2',\n    defaultPipelining: Infinity,\n    /**\n     * @param {import('../core/request.js')} request\n     * @returns {boolean}\n    */\n    write (request) {\n      return writeH2(client, request)\n    },\n    /**\n     * @returns {void}\n     */\n    resume () {\n      resumeH2(client)\n    },\n    /**\n     * @param {Error | null} err\n     * @param {() => void} callback\n     */\n    destroy (err, callback) {\n      if (socket[kClosed]) {\n        queueMicrotask(callback)\n      } else {\n        socket.destroy(err).on('close', callback)\n      }\n    },\n    /**\n     * @type {boolean}\n     */\n    get destroyed () {\n      return socket.destroyed\n    },\n    /**\n     * @param {import('../core/request.js')} request\n     * @returns {boolean}\n    */\n    busy (request) {\n      if (request != null) {\n        if (client[kRunning] > 0) {\n          // We are already processing requests\n\n          // Non-idempotent request cannot be retried.\n          // Ensure that no other requests are inflight and\n          // could cause failure.\n          if (request.idempotent === false) return true\n          // Don't dispatch an upgrade until all preceding requests have completed.\n          // Possibly, we do not have remote settings confirmed yet.\n          if ((request.upgrade === 'websocket' || request.method === 'CONNECT') && session[kRemoteSettings] === false) return true\n          // Request with stream or iterator body can error while other requests\n          // are inflight and indirectly error those as well.\n          // Ensure this doesn't happen by waiting for inflight\n          // to complete before dispatching.\n\n          // Request with stream or iterator body cannot be retried.\n          // Ensure that no other requests are inflight and\n          // could cause failure.\n          if (util.bodyLength(request.body) !== 0 &&\n            (util.isStream(request.body) || util.isAsyncIterable(request.body) || util.isFormDataLike(request.body))) return true\n        } else {\n          return (request.upgrade === 'websocket' || request.method === 'CONNECT') && session[kRemoteSettings] === false\n        }\n      }\n\n      return false\n    }\n  }\n}\n\nfunction resumeH2 (client) {\n  const socket = client[kSocket]\n\n  if (socket?.destroyed === false) {\n    if (client[kSize] === 0 || client[kMaxConcurrentStreams] === 0) {\n      socket.unref()\n      client[kHTTP2Session].unref()\n    } else {\n      socket.ref()\n      client[kHTTP2Session].ref()\n    }\n  }\n}\n\nfunction applyConnectionWindowSize (connectionWindowSize) {\n  try {\n    if (typeof this.setLocalWindowSize === 'function') {\n      this.setLocalWindowSize(connectionWindowSize)\n    }\n  } catch {\n    // Best-effort only.\n  }\n}\n\nfunction onHttp2RemoteSettings (settings) {\n  // Fallbacks are a safe bet, remote setting will always override\n  this[kClient][kMaxConcurrentStreams] = settings.maxConcurrentStreams ?? this[kClient][kMaxConcurrentStreams]\n  /**\n   * From RFC-8441\n   * A sender MUST NOT send a SETTINGS_ENABLE_CONNECT_PROTOCOL parameter\n   * with the value of 0 after previously sending a value of 1.\n   */\n  // Note: Cannot be tested in Node, it does not supports disabling the extended CONNECT protocol once enabled\n  if (this[kRemoteSettings] === true && this[kEnableConnectProtocol] === true && settings.enableConnectProtocol === false) {\n    const err = new InformationalError('HTTP/2: Server disabled extended CONNECT protocol against RFC-8441')\n    this[kSocket][kError] = err\n    this[kClient][kOnError](err)\n    return\n  }\n\n  this[kEnableConnectProtocol] = settings.enableConnectProtocol ?? this[kEnableConnectProtocol]\n  this[kRemoteSettings] = true\n  this[kClient][kResume]()\n}\n\nfunction onHttp2SendPing (session) {\n  const state = session[kHTTP2SessionState]\n  if ((session.closed || session.destroyed) && state.ping.interval != null) {\n    clearInterval(state.ping.interval)\n    state.ping.interval = null\n    return\n  }\n\n  // If no ping sent, do nothing\n  session.ping(onPing.bind(session))\n\n  function onPing (err, duration) {\n    const client = this[kClient]\n    const socket = this[kClient]\n\n    if (err != null) {\n      const error = new InformationalError(`HTTP/2: \"PING\" errored - type ${err.message}`)\n      socket[kError] = error\n      client[kOnError](error)\n    } else {\n      client.emit('ping', duration)\n    }\n  }\n}\n\nfunction onHttp2SessionError (err) {\n  assert(err.code !== 'ERR_TLS_CERT_ALTNAME_INVALID')\n\n  this[kSocket][kError] = err\n  this[kClient][kOnError](err)\n}\n\nfunction onHttp2FrameError (type, code, id) {\n  if (id === 0) {\n    const err = new InformationalError(`HTTP/2: \"frameError\" received - type ${type}, code ${code}`)\n    this[kSocket][kError] = err\n    this[kClient][kOnError](err)\n  }\n}\n\nfunction onHttp2SessionEnd () {\n  const err = new SocketError('other side closed', util.getSocketInfo(this[kSocket]))\n  this.destroy(err)\n  util.destroy(this[kSocket], err)\n}\n\n/**\n * This is the root cause of #3011\n * We need to handle GOAWAY frames properly, and trigger the session close\n * along with the socket right away\n *\n * @this {import('http2').ClientHttp2Session}\n * @param {number} errorCode\n */\nfunction onHttp2SessionGoAway (errorCode) {\n  // TODO(mcollina): Verify if GOAWAY implements the spec correctly:\n  // https://datatracker.ietf.org/doc/html/rfc7540#section-6.8\n  // Specifically, we do not verify the \"valid\" stream id.\n\n  const err = this[kError] || new SocketError(`HTTP/2: \"GOAWAY\" frame received with code ${errorCode}`, util.getSocketInfo(this[kSocket]))\n  const client = this[kClient]\n\n  client[kSocket] = null\n  client[kHTTPContext] = null\n\n  // this is an HTTP2 session\n  this.close()\n  this[kHTTP2Session] = null\n\n  util.destroy(this[kSocket], err)\n\n  // Fail head of pipeline.\n  if (client[kRunningIdx] < client[kQueue].length) {\n    const request = client[kQueue][client[kRunningIdx]]\n    client[kQueue][client[kRunningIdx]++] = null\n    util.errorRequest(client, request, err)\n    client[kPendingIdx] = client[kRunningIdx]\n  }\n\n  assert(client[kRunning] === 0)\n\n  client.emit('disconnect', client[kUrl], [client], err)\n  client.emit('connectionError', client[kUrl], [client], err)\n\n  client[kResume]()\n}\n\nfunction onHttp2SessionClose () {\n  const { [kClient]: client, [kHTTP2SessionState]: state } = this\n  const { [kSocket]: socket } = client\n\n  const err = this[kSocket][kError] || this[kError] || new SocketError('closed', util.getSocketInfo(socket))\n\n  client[kSocket] = null\n  client[kHTTPContext] = null\n\n  if (state.ping.interval != null) {\n    clearInterval(state.ping.interval)\n    state.ping.interval = null\n  }\n\n  if (client.destroyed) {\n    assert(client[kPending] === 0)\n\n    // Fail entire queue.\n    const requests = client[kQueue].splice(client[kRunningIdx])\n    for (let i = 0; i < requests.length; i++) {\n      const request = requests[i]\n      util.errorRequest(client, request, err)\n    }\n  }\n}\n\nfunction onHttp2SocketClose () {\n  const err = this[kError] || new SocketError('closed', util.getSocketInfo(this))\n\n  const client = this[kHTTP2Session][kClient]\n\n  client[kSocket] = null\n  client[kHTTPContext] = null\n\n  if (this[kHTTP2Session] !== null) {\n    this[kHTTP2Session].destroy(err)\n  }\n\n  client[kPendingIdx] = client[kRunningIdx]\n\n  assert(client[kRunning] === 0)\n\n  client.emit('disconnect', client[kUrl], [client], err)\n\n  client[kResume]()\n}\n\nfunction onHttp2SocketError (err) {\n  assert(err.code !== 'ERR_TLS_CERT_ALTNAME_INVALID')\n\n  this[kError] = err\n\n  this[kClient][kOnError](err)\n}\n\nfunction onHttp2SocketEnd () {\n  util.destroy(this, new SocketError('other side closed', util.getSocketInfo(this)))\n}\n\nfunction onSocketClose () {\n  this[kClosed] = true\n}\n\n// https://www.rfc-editor.org/rfc/rfc7230#section-3.3.2\nfunction shouldSendContentLength (method) {\n  return method !== 'GET' && method !== 'HEAD' && method !== 'OPTIONS' && method !== 'TRACE' && method !== 'CONNECT'\n}\n\nfunction writeH2 (client, request) {\n  const requestTimeout = request.bodyTimeout ?? client[kBodyTimeout]\n  const session = client[kHTTP2Session]\n  const { method, path, host, upgrade, expectContinue, signal, protocol, headers: reqHeaders } = request\n  let { body } = request\n\n  if (upgrade != null && upgrade !== 'websocket') {\n    util.errorRequest(client, request, new InvalidArgumentError(`Custom upgrade \"${upgrade}\" not supported over HTTP/2`))\n    return false\n  }\n\n  const headers = {}\n  for (let n = 0; n < reqHeaders.length; n += 2) {\n    const key = reqHeaders[n + 0]\n    const val = reqHeaders[n + 1]\n\n    if (key === 'cookie') {\n      if (headers[key] != null) {\n        headers[key] = Array.isArray(headers[key]) ? (headers[key].push(val), headers[key]) : [headers[key], val]\n      } else {\n        headers[key] = val\n      }\n\n      continue\n    }\n\n    if (Array.isArray(val)) {\n      for (let i = 0; i < val.length; i++) {\n        if (headers[key]) {\n          headers[key] += `, ${val[i]}`\n        } else {\n          headers[key] = val[i]\n        }\n      }\n    } else if (headers[key]) {\n      headers[key] += `, ${val}`\n    } else {\n      headers[key] = val\n    }\n  }\n\n  /** @type {import('node:http2').ClientHttp2Stream} */\n  let stream = null\n\n  const { hostname, port } = client[kUrl]\n\n  headers[HTTP2_HEADER_AUTHORITY] = host || `${hostname}${port ? `:${port}` : ''}`\n  headers[HTTP2_HEADER_METHOD] = method\n\n  const abort = (err) => {\n    if (request.aborted || request.completed) {\n      return\n    }\n\n    err = err || new RequestAbortedError()\n\n    util.errorRequest(client, request, err)\n\n    if (stream != null) {\n      // Some chunks might still come after abort,\n      // let's ignore them\n      stream.removeAllListeners('data')\n\n      // On Abort, we close the stream to send RST_STREAM frame\n      stream.close()\n\n      // We move the running index to the next request\n      client[kOnError](err)\n      client[kResume]()\n    }\n\n    // We do not destroy the socket as we can continue using the session\n    // the stream gets destroyed and the session remains to create new streams\n    util.destroy(body, err)\n  }\n\n  try {\n    // We are already connected, streams are pending.\n    // We can call on connect, and wait for abort\n    request.onConnect(abort)\n  } catch (err) {\n    util.errorRequest(client, request, err)\n  }\n\n  if (request.aborted) {\n    return false\n  }\n\n  if (upgrade || method === 'CONNECT') {\n    session.ref()\n\n    if (upgrade === 'websocket') {\n      // We cannot upgrade to websocket if extended CONNECT protocol is not supported\n      if (session[kEnableConnectProtocol] === false) {\n        util.errorRequest(client, request, new InformationalError('HTTP/2: Extended CONNECT protocol not supported by server'))\n        session.unref()\n        return false\n      }\n\n      // We force the method to CONNECT\n      // as per RFC-8441\n      // https://datatracker.ietf.org/doc/html/rfc8441#section-4\n      headers[HTTP2_HEADER_METHOD] = 'CONNECT'\n      headers[HTTP2_HEADER_PROTOCOL] = 'websocket'\n      // :path and :scheme headers must be omitted when sending CONNECT but set if extended-CONNECT\n      headers[HTTP2_HEADER_PATH] = path\n\n      if (protocol === 'ws:' || protocol === 'wss:') {\n        headers[HTTP2_HEADER_SCHEME] = protocol === 'ws:' ? 'http' : 'https'\n      } else {\n        headers[HTTP2_HEADER_SCHEME] = protocol === 'http:' ? 'http' : 'https'\n      }\n\n      stream = session.request(headers, { endStream: false, signal })\n      stream[kHTTP2Stream] = true\n\n      stream.once('response', (headers, _flags) => {\n        const { [HTTP2_HEADER_STATUS]: statusCode, ...realHeaders } = headers\n\n        request.onUpgrade(statusCode, parseH2Headers(realHeaders), stream)\n\n        ++session[kOpenStreams]\n        client[kQueue][client[kRunningIdx]++] = null\n      })\n\n      stream.on('error', () => {\n        if (stream.rstCode === NGHTTP2_REFUSED_STREAM || stream.rstCode === NGHTTP2_CANCEL) {\n          // NGHTTP2_REFUSED_STREAM (7) or NGHTTP2_CANCEL (8)\n          // We do not treat those as errors as the server might\n          // not support websockets and refuse the stream\n          abort(new InformationalError(`HTTP/2: \"stream error\" received - code ${stream.rstCode}`))\n        }\n      })\n\n      stream.once('close', () => {\n        session[kOpenStreams] -= 1\n        if (session[kOpenStreams] === 0) session.unref()\n      })\n\n      stream.setTimeout(requestTimeout)\n      return true\n    }\n\n    // TODO: consolidate once we support CONNECT properly\n    // NOTE: We are already connected, streams are pending, first request\n    // will create a new stream. We trigger a request to create the stream and wait until\n    // `ready` event is triggered\n    // We disabled endStream to allow the user to write to the stream\n    stream = session.request(headers, { endStream: false, signal })\n    stream[kHTTP2Stream] = true\n    stream.on('response', headers => {\n      const { [HTTP2_HEADER_STATUS]: statusCode, ...realHeaders } = headers\n\n      request.onUpgrade(statusCode, parseH2Headers(realHeaders), stream)\n      ++session[kOpenStreams]\n      client[kQueue][client[kRunningIdx]++] = null\n    })\n    stream.once('close', () => {\n      session[kOpenStreams] -= 1\n      if (session[kOpenStreams] === 0) session.unref()\n    })\n    stream.setTimeout(requestTimeout)\n\n    return true\n  }\n\n  // https://tools.ietf.org/html/rfc7540#section-8.3\n  // :path and :scheme headers must be omitted when sending CONNECT\n  headers[HTTP2_HEADER_PATH] = path\n  headers[HTTP2_HEADER_SCHEME] = protocol === 'http:' ? 'http' : 'https'\n\n  // https://tools.ietf.org/html/rfc7231#section-4.3.1\n  // https://tools.ietf.org/html/rfc7231#section-4.3.2\n  // https://tools.ietf.org/html/rfc7231#section-4.3.5\n\n  // Sending a payload body on a request that does not\n  // expect it can cause undefined behavior on some\n  // servers and corrupt connection state. Do not\n  // re-use the connection for further requests.\n\n  const expectsPayload = (\n    method === 'PUT' ||\n    method === 'POST' ||\n    method === 'PATCH'\n  )\n\n  if (body && typeof body.read === 'function') {\n    // Try to read EOF in order to get length.\n    body.read(0)\n  }\n\n  let contentLength = util.bodyLength(body)\n\n  if (util.isFormDataLike(body)) {\n    extractBody ??= require('../web/fetch/body.js').extractBody\n\n    const [bodyStream, contentType] = extractBody(body)\n    headers['content-type'] = contentType\n\n    body = bodyStream.stream\n    contentLength = bodyStream.length\n  }\n\n  if (contentLength == null) {\n    contentLength = request.contentLength\n  }\n\n  if (!expectsPayload) {\n    // https://tools.ietf.org/html/rfc7230#section-3.3.2\n    // A user agent SHOULD NOT send a Content-Length header field when\n    // the request message does not contain a payload body and the method\n    // semantics do not anticipate such a body.\n    // And for methods that don't expect a payload, omit Content-Length.\n    contentLength = null\n  }\n\n  // https://github.com/nodejs/undici/issues/2046\n  // A user agent may send a Content-Length header with 0 value, this should be allowed.\n  if (shouldSendContentLength(method) && contentLength > 0 && request.contentLength != null && request.contentLength !== contentLength) {\n    if (client[kStrictContentLength]) {\n      util.errorRequest(client, request, new RequestContentLengthMismatchError())\n      return false\n    }\n\n    process.emitWarning(new RequestContentLengthMismatchError())\n  }\n\n  if (contentLength != null) {\n    assert(body || contentLength === 0, 'no body must not have content length')\n    headers[HTTP2_HEADER_CONTENT_LENGTH] = `${contentLength}`\n  }\n\n  session.ref()\n\n  if (channels.sendHeaders.hasSubscribers) {\n    let header = ''\n    for (const key in headers) {\n      header += `${key}: ${headers[key]}\\r\\n`\n    }\n    channels.sendHeaders.publish({ request, headers: header, socket: session[kSocket] })\n  }\n\n  // TODO(metcoder95): add support for sending trailers\n  const shouldEndStream = method === 'GET' || method === 'HEAD' || body === null\n  if (expectContinue) {\n    headers[HTTP2_HEADER_EXPECT] = '100-continue'\n    stream = session.request(headers, { endStream: shouldEndStream, signal })\n    stream[kHTTP2Stream] = true\n\n    stream.once('continue', writeBodyH2)\n  } else {\n    stream = session.request(headers, {\n      endStream: shouldEndStream,\n      signal\n    })\n    stream[kHTTP2Stream] = true\n\n    writeBodyH2()\n  }\n\n  // Increment counter as we have new streams open\n  ++session[kOpenStreams]\n  stream.setTimeout(requestTimeout)\n\n  // Track whether we received a response (headers)\n  let responseReceived = false\n\n  stream.once('response', headers => {\n    const { [HTTP2_HEADER_STATUS]: statusCode, ...realHeaders } = headers\n    request.onResponseStarted()\n    responseReceived = true\n\n    // Due to the stream nature, it is possible we face a race condition\n    // where the stream has been assigned, but the request has been aborted\n    // the request remains in-flight and headers hasn't been received yet\n    // for those scenarios, best effort is to destroy the stream immediately\n    // as there's no value to keep it open.\n    if (request.aborted) {\n      stream.removeAllListeners('data')\n      return\n    }\n\n    if (request.onHeaders(Number(statusCode), parseH2Headers(realHeaders), stream.resume.bind(stream), '') === false) {\n      stream.pause()\n    }\n  })\n\n  stream.on('data', (chunk) => {\n    if (request.aborted || request.completed) {\n      return\n    }\n\n    if (request.onData(chunk) === false) {\n      stream.pause()\n    }\n  })\n\n  stream.once('end', () => {\n    stream.removeAllListeners('data')\n    // If we received a response, this is a normal completion\n    if (responseReceived) {\n      if (!request.aborted && !request.completed) {\n        request.onComplete({})\n      }\n\n      client[kQueue][client[kRunningIdx]++] = null\n      client[kResume]()\n    } else {\n      // Stream ended without receiving a response - this is an error\n      // (e.g., server destroyed the stream before sending headers)\n      abort(new InformationalError('HTTP/2: stream half-closed (remote)'))\n      client[kQueue][client[kRunningIdx]++] = null\n      client[kPendingIdx] = client[kRunningIdx]\n      client[kResume]()\n    }\n  })\n\n  stream.once('close', () => {\n    stream.removeAllListeners('data')\n    session[kOpenStreams] -= 1\n    if (session[kOpenStreams] === 0) {\n      session.unref()\n    }\n  })\n\n  stream.once('error', function (err) {\n    stream.removeAllListeners('data')\n    abort(err)\n  })\n\n  stream.once('frameError', (type, code) => {\n    stream.removeAllListeners('data')\n    abort(new InformationalError(`HTTP/2: \"frameError\" received - type ${type}, code ${code}`))\n  })\n\n  stream.on('aborted', () => {\n    stream.removeAllListeners('data')\n  })\n\n  stream.on('timeout', () => {\n    const err = new InformationalError(`HTTP/2: \"stream timeout after ${requestTimeout}\"`)\n    stream.removeAllListeners('data')\n    session[kOpenStreams] -= 1\n\n    if (session[kOpenStreams] === 0) {\n      session.unref()\n    }\n\n    abort(err)\n  })\n\n  stream.once('trailers', trailers => {\n    if (request.aborted || request.completed) {\n      return\n    }\n\n    stream.removeAllListeners('data')\n    request.onComplete(trailers)\n  })\n\n  return true\n\n  function writeBodyH2 () {\n    if (!body || contentLength === 0) {\n      writeBuffer(\n        abort,\n        stream,\n        null,\n        client,\n        request,\n        client[kSocket],\n        contentLength,\n        expectsPayload\n      )\n    } else if (util.isBuffer(body)) {\n      writeBuffer(\n        abort,\n        stream,\n        body,\n        client,\n        request,\n        client[kSocket],\n        contentLength,\n        expectsPayload\n      )\n    } else if (util.isBlobLike(body)) {\n      if (typeof body.stream === 'function') {\n        writeIterable(\n          abort,\n          stream,\n          body.stream(),\n          client,\n          request,\n          client[kSocket],\n          contentLength,\n          expectsPayload\n        )\n      } else {\n        writeBlob(\n          abort,\n          stream,\n          body,\n          client,\n          request,\n          client[kSocket],\n          contentLength,\n          expectsPayload\n        )\n      }\n    } else if (util.isStream(body)) {\n      writeStream(\n        abort,\n        client[kSocket],\n        expectsPayload,\n        stream,\n        body,\n        client,\n        request,\n        contentLength\n      )\n    } else if (util.isIterable(body)) {\n      writeIterable(\n        abort,\n        stream,\n        body,\n        client,\n        request,\n        client[kSocket],\n        contentLength,\n        expectsPayload\n      )\n    } else {\n      assert(false)\n    }\n  }\n}\n\nfunction writeBuffer (abort, h2stream, body, client, request, socket, contentLength, expectsPayload) {\n  try {\n    if (body != null && util.isBuffer(body)) {\n      assert(contentLength === body.byteLength, 'buffer body must have content length')\n      h2stream.cork()\n      h2stream.write(body)\n      h2stream.uncork()\n      h2stream.end()\n\n      request.onBodySent(body)\n    }\n\n    if (!expectsPayload) {\n      socket[kReset] = true\n    }\n\n    request.onRequestSent()\n    client[kResume]()\n  } catch (error) {\n    abort(error)\n  }\n}\n\nfunction writeStream (abort, socket, expectsPayload, h2stream, body, client, request, contentLength) {\n  assert(contentLength !== 0 || client[kRunning] === 0, 'stream body cannot be pipelined')\n\n  // For HTTP/2, is enough to pipe the stream\n  const pipe = pipeline(\n    body,\n    h2stream,\n    (err) => {\n      if (err) {\n        util.destroy(pipe, err)\n        abort(err)\n      } else {\n        util.removeAllListeners(pipe)\n        request.onRequestSent()\n\n        if (!expectsPayload) {\n          socket[kReset] = true\n        }\n\n        client[kResume]()\n      }\n    }\n  )\n\n  util.addListener(pipe, 'data', onPipeData)\n\n  function onPipeData (chunk) {\n    request.onBodySent(chunk)\n  }\n}\n\nasync function writeBlob (abort, h2stream, body, client, request, socket, contentLength, expectsPayload) {\n  assert(contentLength === body.size, 'blob body must have content length')\n\n  try {\n    if (contentLength != null && contentLength !== body.size) {\n      throw new RequestContentLengthMismatchError()\n    }\n\n    const buffer = Buffer.from(await body.arrayBuffer())\n\n    h2stream.cork()\n    h2stream.write(buffer)\n    h2stream.uncork()\n    h2stream.end()\n\n    request.onBodySent(buffer)\n    request.onRequestSent()\n\n    if (!expectsPayload) {\n      socket[kReset] = true\n    }\n\n    client[kResume]()\n  } catch (err) {\n    abort(err)\n  }\n}\n\nasync function writeIterable (abort, h2stream, body, client, request, socket, contentLength, expectsPayload) {\n  assert(contentLength !== 0 || client[kRunning] === 0, 'iterator body cannot be pipelined')\n\n  let callback = null\n  function onDrain () {\n    if (callback) {\n      const cb = callback\n      callback = null\n      cb()\n    }\n  }\n\n  const waitForDrain = () => new Promise((resolve, reject) => {\n    assert(callback === null)\n\n    if (socket[kError]) {\n      reject(socket[kError])\n    } else {\n      callback = resolve\n    }\n  })\n\n  h2stream\n    .on('close', onDrain)\n    .on('drain', onDrain)\n\n  try {\n    // It's up to the user to somehow abort the async iterable.\n    for await (const chunk of body) {\n      if (socket[kError]) {\n        throw socket[kError]\n      }\n\n      const res = h2stream.write(chunk)\n      request.onBodySent(chunk)\n      if (!res) {\n        await waitForDrain()\n      }\n    }\n\n    h2stream.end()\n\n    request.onRequestSent()\n\n    if (!expectsPayload) {\n      socket[kReset] = true\n    }\n\n    client[kResume]()\n  } catch (err) {\n    abort(err)\n  } finally {\n    h2stream\n      .off('close', onDrain)\n      .off('drain', onDrain)\n  }\n}\n\nmodule.exports = connectH2\n", "'use strict'\n\nconst assert = require('node:assert')\nconst net = require('node:net')\nconst http = require('node:http')\nconst util = require('../core/util.js')\nconst { ClientStats } = require('../util/stats.js')\nconst { channels } = require('../core/diagnostics.js')\nconst Request = require('../core/request.js')\nconst DispatcherBase = require('./dispatcher-base')\nconst {\n  InvalidArgumentError,\n  InformationalError,\n  ClientDestroyedError\n} = require('../core/errors.js')\nconst buildConnector = require('../core/connect.js')\nconst {\n  kUrl,\n  kServerName,\n  kClient,\n  kBusy,\n  kConnect,\n  kResuming,\n  kRunning,\n  kPending,\n  kSize,\n  kQueue,\n  kConnected,\n  kConnecting,\n  kNeedDrain,\n  kKeepAliveDefaultTimeout,\n  kHostHeader,\n  kPendingIdx,\n  kRunningIdx,\n  kError,\n  kPipelining,\n  kKeepAliveTimeoutValue,\n  kMaxHeadersSize,\n  kKeepAliveMaxTimeout,\n  kKeepAliveTimeoutThreshold,\n  kHeadersTimeout,\n  kBodyTimeout,\n  kStrictContentLength,\n  kConnector,\n  kMaxRequests,\n  kCounter,\n  kClose,\n  kDestroy,\n  kDispatch,\n  kLocalAddress,\n  kMaxResponseSize,\n  kOnError,\n  kHTTPContext,\n  kMaxConcurrentStreams,\n  kHTTP2InitialWindowSize,\n  kHTTP2ConnectionWindowSize,\n  kResume,\n  kPingInterval\n} = require('../core/symbols.js')\nconst connectH1 = require('./client-h1.js')\nconst connectH2 = require('./client-h2.js')\n\nconst kClosedResolve = Symbol('kClosedResolve')\n\nconst getDefaultNodeMaxHeaderSize = http &&\n  http.maxHeaderSize &&\n  Number.isInteger(http.maxHeaderSize) &&\n  http.maxHeaderSize > 0\n  ? () => http.maxHeaderSize\n  : () => { throw new InvalidArgumentError('http module not available or http.maxHeaderSize invalid') }\n\nconst noop = () => { }\n\nfunction getPipelining (client) {\n  return client[kPipelining] ?? client[kHTTPContext]?.defaultPipelining ?? 1\n}\n\n/**\n * @type {import('../../types/client.js').default}\n */\nclass Client extends DispatcherBase {\n  /**\n   *\n   * @param {string|URL} url\n   * @param {import('../../types/client.js').Client.Options} options\n   */\n  constructor (url, {\n    maxHeaderSize,\n    headersTimeout,\n    socketTimeout,\n    requestTimeout,\n    connectTimeout,\n    bodyTimeout,\n    idleTimeout,\n    keepAlive,\n    keepAliveTimeout,\n    maxKeepAliveTimeout,\n    keepAliveMaxTimeout,\n    keepAliveTimeoutThreshold,\n    socketPath,\n    pipelining,\n    tls,\n    strictContentLength,\n    maxCachedSessions,\n    connect,\n    maxRequestsPerClient,\n    localAddress,\n    maxResponseSize,\n    autoSelectFamily,\n    autoSelectFamilyAttemptTimeout,\n    // h2\n    maxConcurrentStreams,\n    allowH2,\n    useH2c,\n    initialWindowSize,\n    connectionWindowSize,\n    pingInterval\n  } = {}) {\n    if (keepAlive !== undefined) {\n      throw new InvalidArgumentError('unsupported keepAlive, use pipelining=0 instead')\n    }\n\n    if (socketTimeout !== undefined) {\n      throw new InvalidArgumentError('unsupported socketTimeout, use headersTimeout & bodyTimeout instead')\n    }\n\n    if (requestTimeout !== undefined) {\n      throw new InvalidArgumentError('unsupported requestTimeout, use headersTimeout & bodyTimeout instead')\n    }\n\n    if (idleTimeout !== undefined) {\n      throw new InvalidArgumentError('unsupported idleTimeout, use keepAliveTimeout instead')\n    }\n\n    if (maxKeepAliveTimeout !== undefined) {\n      throw new InvalidArgumentError('unsupported maxKeepAliveTimeout, use keepAliveMaxTimeout instead')\n    }\n\n    if (maxHeaderSize != null) {\n      if (!Number.isInteger(maxHeaderSize) || maxHeaderSize < 1) {\n        throw new InvalidArgumentError('invalid maxHeaderSize')\n      }\n    } else {\n      // If maxHeaderSize is not provided, use the default value from the http module\n      // or if that is not available, throw an error.\n      maxHeaderSize = getDefaultNodeMaxHeaderSize()\n    }\n\n    if (socketPath != null && typeof socketPath !== 'string') {\n      throw new InvalidArgumentError('invalid socketPath')\n    }\n\n    if (connectTimeout != null && (!Number.isFinite(connectTimeout) || connectTimeout < 0)) {\n      throw new InvalidArgumentError('invalid connectTimeout')\n    }\n\n    if (keepAliveTimeout != null && (!Number.isFinite(keepAliveTimeout) || keepAliveTimeout <= 0)) {\n      throw new InvalidArgumentError('invalid keepAliveTimeout')\n    }\n\n    if (keepAliveMaxTimeout != null && (!Number.isFinite(keepAliveMaxTimeout) || keepAliveMaxTimeout <= 0)) {\n      throw new InvalidArgumentError('invalid keepAliveMaxTimeout')\n    }\n\n    if (keepAliveTimeoutThreshold != null && !Number.isFinite(keepAliveTimeoutThreshold)) {\n      throw new InvalidArgumentError('invalid keepAliveTimeoutThreshold')\n    }\n\n    if (headersTimeout != null && (!Number.isInteger(headersTimeout) || headersTimeout < 0)) {\n      throw new InvalidArgumentError('headersTimeout must be a positive integer or zero')\n    }\n\n    if (bodyTimeout != null && (!Number.isInteger(bodyTimeout) || bodyTimeout < 0)) {\n      throw new InvalidArgumentError('bodyTimeout must be a positive integer or zero')\n    }\n\n    if (connect != null && typeof connect !== 'function' && typeof connect !== 'object') {\n      throw new InvalidArgumentError('connect must be a function or an object')\n    }\n\n    if (maxRequestsPerClient != null && (!Number.isInteger(maxRequestsPerClient) || maxRequestsPerClient < 0)) {\n      throw new InvalidArgumentError('maxRequestsPerClient must be a positive number')\n    }\n\n    if (localAddress != null && (typeof localAddress !== 'string' || net.isIP(localAddress) === 0)) {\n      throw new InvalidArgumentError('localAddress must be valid string IP address')\n    }\n\n    if (maxResponseSize != null && (!Number.isInteger(maxResponseSize) || maxResponseSize < -1)) {\n      throw new InvalidArgumentError('maxResponseSize must be a positive number')\n    }\n\n    if (\n      autoSelectFamilyAttemptTimeout != null &&\n      (!Number.isInteger(autoSelectFamilyAttemptTimeout) || autoSelectFamilyAttemptTimeout < -1)\n    ) {\n      throw new InvalidArgumentError('autoSelectFamilyAttemptTimeout must be a positive number')\n    }\n\n    // h2\n    if (allowH2 != null && typeof allowH2 !== 'boolean') {\n      throw new InvalidArgumentError('allowH2 must be a valid boolean value')\n    }\n\n    if (maxConcurrentStreams != null && (typeof maxConcurrentStreams !== 'number' || maxConcurrentStreams < 1)) {\n      throw new InvalidArgumentError('maxConcurrentStreams must be a positive integer, greater than 0')\n    }\n\n    if (useH2c != null && typeof useH2c !== 'boolean') {\n      throw new InvalidArgumentError('useH2c must be a valid boolean value')\n    }\n\n    if (initialWindowSize != null && (!Number.isInteger(initialWindowSize) || initialWindowSize < 1)) {\n      throw new InvalidArgumentError('initialWindowSize must be a positive integer, greater than 0')\n    }\n\n    if (connectionWindowSize != null && (!Number.isInteger(connectionWindowSize) || connectionWindowSize < 1)) {\n      throw new InvalidArgumentError('connectionWindowSize must be a positive integer, greater than 0')\n    }\n\n    if (pingInterval != null && (typeof pingInterval !== 'number' || !Number.isInteger(pingInterval) || pingInterval < 0)) {\n      throw new InvalidArgumentError('pingInterval must be a positive integer, greater or equal to 0')\n    }\n\n    super()\n\n    if (typeof connect !== 'function') {\n      connect = buildConnector({\n        ...tls,\n        maxCachedSessions,\n        allowH2,\n        useH2c,\n        socketPath,\n        timeout: connectTimeout,\n        ...(typeof autoSelectFamily === 'boolean' ? { autoSelectFamily, autoSelectFamilyAttemptTimeout } : undefined),\n        ...connect\n      })\n    } else if (socketPath != null) {\n      const customConnect = connect\n      connect = (opts, callback) => customConnect({ ...opts, socketPath }, callback)\n    }\n\n    this[kUrl] = util.parseOrigin(url)\n    this[kConnector] = connect\n    this[kPipelining] = pipelining != null ? pipelining : 1\n    this[kMaxHeadersSize] = maxHeaderSize\n    this[kKeepAliveDefaultTimeout] = keepAliveTimeout == null ? 4e3 : keepAliveTimeout\n    this[kKeepAliveMaxTimeout] = keepAliveMaxTimeout == null ? 600e3 : keepAliveMaxTimeout\n    this[kKeepAliveTimeoutThreshold] = keepAliveTimeoutThreshold == null ? 2e3 : keepAliveTimeoutThreshold\n    this[kKeepAliveTimeoutValue] = this[kKeepAliveDefaultTimeout]\n    this[kServerName] = null\n    this[kLocalAddress] = localAddress != null ? localAddress : null\n    this[kResuming] = 0 // 0, idle, 1, scheduled, 2 resuming\n    this[kNeedDrain] = 0 // 0, idle, 1, scheduled, 2 resuming\n    this[kHostHeader] = `host: ${this[kUrl].hostname}${this[kUrl].port ? `:${this[kUrl].port}` : ''}\\r\\n`\n    this[kBodyTimeout] = bodyTimeout != null ? bodyTimeout : 300e3\n    this[kHeadersTimeout] = headersTimeout != null ? headersTimeout : 300e3\n    this[kStrictContentLength] = strictContentLength == null ? true : strictContentLength\n    this[kMaxRequests] = maxRequestsPerClient\n    this[kClosedResolve] = null\n    this[kMaxResponseSize] = maxResponseSize > -1 ? maxResponseSize : -1\n    this[kHTTPContext] = null\n    // h2\n    this[kMaxConcurrentStreams] = maxConcurrentStreams != null ? maxConcurrentStreams : 100 // Max peerConcurrentStreams for a Node h2 server\n    // HTTP/2 window sizes are set to higher defaults than Node.js core for better performance:\n    // - initialWindowSize: 262144 (256KB) vs Node.js default 65535 (64KB - 1)\n    //   Allows more data to be sent before requiring acknowledgment, improving throughput\n    //   especially on high-latency networks. This matches common production HTTP/2 servers.\n    // - connectionWindowSize: 524288 (512KB) vs Node.js default (none set)\n    //   Provides better flow control for the entire connection across multiple streams.\n    this[kHTTP2InitialWindowSize] = initialWindowSize != null ? initialWindowSize : 262144\n    this[kHTTP2ConnectionWindowSize] = connectionWindowSize != null ? connectionWindowSize : 524288\n    this[kPingInterval] = pingInterval != null ? pingInterval : 60e3 // Default ping interval for h2 - 1 minute\n\n    // kQueue is built up of 3 sections separated by\n    // the kRunningIdx and kPendingIdx indices.\n    // |   complete   |   running   |   pending   |\n    //                ^ kRunningIdx ^ kPendingIdx ^ kQueue.length\n    // kRunningIdx points to the first running element.\n    // kPendingIdx points to the first pending element.\n    // This implements a fast queue with an amortized\n    // time of O(1).\n\n    this[kQueue] = []\n    this[kRunningIdx] = 0\n    this[kPendingIdx] = 0\n\n    this[kResume] = (sync) => resume(this, sync)\n    this[kOnError] = (err) => onError(this, err)\n  }\n\n  get pipelining () {\n    return this[kPipelining]\n  }\n\n  set pipelining (value) {\n    this[kPipelining] = value\n    this[kResume](true)\n  }\n\n  get stats () {\n    return new ClientStats(this)\n  }\n\n  get [kPending] () {\n    return this[kQueue].length - this[kPendingIdx]\n  }\n\n  get [kRunning] () {\n    return this[kPendingIdx] - this[kRunningIdx]\n  }\n\n  get [kSize] () {\n    return this[kQueue].length - this[kRunningIdx]\n  }\n\n  get [kConnected] () {\n    return !!this[kHTTPContext] && !this[kConnecting] && !this[kHTTPContext].destroyed\n  }\n\n  get [kBusy] () {\n    return Boolean(\n      this[kHTTPContext]?.busy(null) ||\n      (this[kSize] >= (getPipelining(this) || 1)) ||\n      this[kPending] > 0\n    )\n  }\n\n  [kConnect] (cb) {\n    connect(this)\n    this.once('connect', cb)\n  }\n\n  [kDispatch] (opts, handler) {\n    const request = new Request(this[kUrl].origin, opts, handler)\n\n    this[kQueue].push(request)\n    if (this[kResuming]) {\n      // Do nothing.\n    } else if (util.bodyLength(request.body) == null && util.isIterable(request.body)) {\n      // Wait a tick in case stream/iterator is ended in the same tick.\n      this[kResuming] = 1\n      queueMicrotask(() => resume(this))\n    } else {\n      this[kResume](true)\n    }\n\n    if (this[kResuming] && this[kNeedDrain] !== 2 && this[kBusy]) {\n      this[kNeedDrain] = 2\n    }\n\n    return this[kNeedDrain] < 2\n  }\n\n  [kClose] () {\n    // TODO: for H2 we need to gracefully flush the remaining enqueued\n    // request and close each stream.\n    return new Promise((resolve) => {\n      if (this[kSize]) {\n        this[kClosedResolve] = resolve\n      } else {\n        resolve(null)\n      }\n    })\n  }\n\n  [kDestroy] (err) {\n    return new Promise((resolve) => {\n      const requests = this[kQueue].splice(this[kPendingIdx])\n      for (let i = 0; i < requests.length; i++) {\n        const request = requests[i]\n        util.errorRequest(this, request, err)\n      }\n\n      const callback = () => {\n        if (this[kClosedResolve]) {\n          // TODO (fix): Should we error here with ClientDestroyedError?\n          this[kClosedResolve]()\n          this[kClosedResolve] = null\n        }\n        resolve(null)\n      }\n\n      if (this[kHTTPContext]) {\n        this[kHTTPContext].destroy(err, callback)\n        this[kHTTPContext] = null\n      } else {\n        queueMicrotask(callback)\n      }\n\n      this[kResume]()\n    })\n  }\n}\n\nfunction onError (client, err) {\n  if (\n    client[kRunning] === 0 &&\n    err.code !== 'UND_ERR_INFO' &&\n    err.code !== 'UND_ERR_SOCKET'\n  ) {\n    // Error is not caused by running request and not a recoverable\n    // socket error.\n\n    assert(client[kPendingIdx] === client[kRunningIdx])\n\n    const requests = client[kQueue].splice(client[kRunningIdx])\n\n    for (let i = 0; i < requests.length; i++) {\n      const request = requests[i]\n      util.errorRequest(client, request, err)\n    }\n    assert(client[kSize] === 0)\n  }\n}\n\n/**\n * @param {Client} client\n * @returns {void}\n */\nfunction connect (client) {\n  assert(!client[kConnecting])\n  assert(!client[kHTTPContext])\n\n  let { host, hostname, protocol, port } = client[kUrl]\n\n  // Resolve ipv6\n  if (hostname[0] === '[') {\n    const idx = hostname.indexOf(']')\n\n    assert(idx !== -1)\n    const ip = hostname.substring(1, idx)\n\n    assert(net.isIPv6(ip))\n    hostname = ip\n  }\n\n  client[kConnecting] = true\n\n  if (channels.beforeConnect.hasSubscribers) {\n    channels.beforeConnect.publish({\n      connectParams: {\n        host,\n        hostname,\n        protocol,\n        port,\n        version: client[kHTTPContext]?.version,\n        servername: client[kServerName],\n        localAddress: client[kLocalAddress]\n      },\n      connector: client[kConnector]\n    })\n  }\n\n  client[kConnector]({\n    host,\n    hostname,\n    protocol,\n    port,\n    servername: client[kServerName],\n    localAddress: client[kLocalAddress]\n  }, (err, socket) => {\n    if (err) {\n      handleConnectError(client, err, { host, hostname, protocol, port })\n      client[kResume]()\n      return\n    }\n\n    if (client.destroyed) {\n      util.destroy(socket.on('error', noop), new ClientDestroyedError())\n      client[kResume]()\n      return\n    }\n\n    assert(socket)\n\n    try {\n      client[kHTTPContext] = socket.alpnProtocol === 'h2'\n        ? connectH2(client, socket)\n        : connectH1(client, socket)\n    } catch (err) {\n      socket.destroy().on('error', noop)\n      handleConnectError(client, err, { host, hostname, protocol, port })\n      client[kResume]()\n      return\n    }\n\n    client[kConnecting] = false\n\n    socket[kCounter] = 0\n    socket[kMaxRequests] = client[kMaxRequests]\n    socket[kClient] = client\n    socket[kError] = null\n\n    if (channels.connected.hasSubscribers) {\n      channels.connected.publish({\n        connectParams: {\n          host,\n          hostname,\n          protocol,\n          port,\n          version: client[kHTTPContext]?.version,\n          servername: client[kServerName],\n          localAddress: client[kLocalAddress]\n        },\n        connector: client[kConnector],\n        socket\n      })\n    }\n\n    client.emit('connect', client[kUrl], [client])\n    client[kResume]()\n  })\n}\n\nfunction handleConnectError (client, err, { host, hostname, protocol, port }) {\n  if (client.destroyed) {\n    return\n  }\n\n  client[kConnecting] = false\n\n  if (channels.connectError.hasSubscribers) {\n    channels.connectError.publish({\n      connectParams: {\n        host,\n        hostname,\n        protocol,\n        port,\n        version: client[kHTTPContext]?.version,\n        servername: client[kServerName],\n        localAddress: client[kLocalAddress]\n      },\n      connector: client[kConnector],\n      error: err\n    })\n  }\n\n  if (err.code === 'ERR_TLS_CERT_ALTNAME_INVALID') {\n    assert(client[kRunning] === 0)\n    while (client[kPending] > 0 && client[kQueue][client[kPendingIdx]].servername === client[kServerName]) {\n      const request = client[kQueue][client[kPendingIdx]++]\n      util.errorRequest(client, request, err)\n    }\n  } else {\n    onError(client, err)\n  }\n\n  client.emit('connectionError', client[kUrl], [client], err)\n}\n\nfunction emitDrain (client) {\n  client[kNeedDrain] = 0\n  client.emit('drain', client[kUrl], [client])\n}\n\nfunction resume (client, sync) {\n  if (client[kResuming] === 2) {\n    return\n  }\n\n  client[kResuming] = 2\n\n  _resume(client, sync)\n  client[kResuming] = 0\n\n  if (client[kRunningIdx] > 256) {\n    client[kQueue].splice(0, client[kRunningIdx])\n    client[kPendingIdx] -= client[kRunningIdx]\n    client[kRunningIdx] = 0\n  }\n}\n\nfunction _resume (client, sync) {\n  while (true) {\n    if (client.destroyed) {\n      assert(client[kPending] === 0)\n      return\n    }\n\n    if (client[kClosedResolve] && !client[kSize]) {\n      client[kClosedResolve]()\n      client[kClosedResolve] = null\n      return\n    }\n\n    if (client[kHTTPContext]) {\n      client[kHTTPContext].resume()\n    }\n\n    if (client[kBusy]) {\n      client[kNeedDrain] = 2\n    } else if (client[kNeedDrain] === 2) {\n      if (sync) {\n        client[kNeedDrain] = 1\n        queueMicrotask(() => emitDrain(client))\n      } else {\n        emitDrain(client)\n      }\n      continue\n    }\n\n    if (client[kPending] === 0) {\n      return\n    }\n\n    if (client[kRunning] >= (getPipelining(client) || 1)) {\n      return\n    }\n\n    const request = client[kQueue][client[kPendingIdx]]\n\n    if (request === null) {\n      return\n    }\n\n    if (client[kUrl].protocol === 'https:' && client[kServerName] !== request.servername) {\n      if (client[kRunning] > 0) {\n        return\n      }\n\n      client[kServerName] = request.servername\n      client[kHTTPContext]?.destroy(new InformationalError('servername changed'), () => {\n        client[kHTTPContext] = null\n        resume(client)\n      })\n    }\n\n    if (client[kConnecting]) {\n      return\n    }\n\n    if (!client[kHTTPContext]) {\n      connect(client)\n      return\n    }\n\n    if (client[kHTTPContext].destroyed) {\n      return\n    }\n\n    if (client[kHTTPContext].busy(request)) {\n      return\n    }\n\n    if (!request.aborted && client[kHTTPContext].write(request)) {\n      client[kPendingIdx]++\n    } else {\n      client[kQueue].splice(client[kPendingIdx], 1)\n    }\n  }\n}\n\nmodule.exports = Client\n", "'use strict'\n\n// Extracted from node/lib/internal/fixed_queue.js\n\n// Currently optimal queue size, tested on V8 6.0 - 6.6. Must be power of two.\nconst kSize = 2048\nconst kMask = kSize - 1\n\n// The FixedQueue is implemented as a singly-linked list of fixed-size\n// circular buffers. It looks something like this:\n//\n//  head                                                       tail\n//    |                                                          |\n//    v                                                          v\n// +-----------+ <-----\\       +-----------+ <------\\         +-----------+\n// |  [null]   |        \\----- |   next    |         \\------- |   next    |\n// +-----------+               +-----------+                  +-----------+\n// |   item    | <-- bottom    |   item    | <-- bottom       | undefined |\n// |   item    |               |   item    |                  | undefined |\n// |   item    |               |   item    |                  | undefined |\n// |   item    |               |   item    |                  | undefined |\n// |   item    |               |   item    |       bottom --> |   item    |\n// |   item    |               |   item    |                  |   item    |\n// |    ...    |               |    ...    |                  |    ...    |\n// |   item    |               |   item    |                  |   item    |\n// |   item    |               |   item    |                  |   item    |\n// | undefined | <-- top       |   item    |                  |   item    |\n// | undefined |               |   item    |                  |   item    |\n// | undefined |               | undefined | <-- top  top --> | undefined |\n// +-----------+               +-----------+                  +-----------+\n//\n// Or, if there is only one circular buffer, it looks something\n// like either of these:\n//\n//  head   tail                                 head   tail\n//    |     |                                     |     |\n//    v     v                                     v     v\n// +-----------+                               +-----------+\n// |  [null]   |                               |  [null]   |\n// +-----------+                               +-----------+\n// | undefined |                               |   item    |\n// | undefined |                               |   item    |\n// |   item    | <-- bottom            top --> | undefined |\n// |   item    |                               | undefined |\n// | undefined | <-- top            bottom --> |   item    |\n// | undefined |                               |   item    |\n// +-----------+                               +-----------+\n//\n// Adding a value means moving `top` forward by one, removing means\n// moving `bottom` forward by one. After reaching the end, the queue\n// wraps around.\n//\n// When `top === bottom` the current queue is empty and when\n// `top + 1 === bottom` it's full. This wastes a single space of storage\n// but allows much quicker checks.\n\n/**\n * @type {FixedCircularBuffer}\n * @template T\n */\nclass FixedCircularBuffer {\n  /** @type {number} */\n  bottom = 0\n  /** @type {number} */\n  top = 0\n  /** @type {Array<T|undefined>} */\n  list = new Array(kSize).fill(undefined)\n  /** @type {T|null} */\n  next = null\n\n  /** @returns {boolean} */\n  isEmpty () {\n    return this.top === this.bottom\n  }\n\n  /** @returns {boolean} */\n  isFull () {\n    return ((this.top + 1) & kMask) === this.bottom\n  }\n\n  /**\n   * @param {T} data\n   * @returns {void}\n   */\n  push (data) {\n    this.list[this.top] = data\n    this.top = (this.top + 1) & kMask\n  }\n\n  /** @returns {T|null} */\n  shift () {\n    const nextItem = this.list[this.bottom]\n    if (nextItem === undefined) { return null }\n    this.list[this.bottom] = undefined\n    this.bottom = (this.bottom + 1) & kMask\n    return nextItem\n  }\n}\n\n/**\n * @template T\n */\nmodule.exports = class FixedQueue {\n  constructor () {\n    /** @type {FixedCircularBuffer<T>} */\n    this.head = this.tail = new FixedCircularBuffer()\n  }\n\n  /** @returns {boolean} */\n  isEmpty () {\n    return this.head.isEmpty()\n  }\n\n  /** @param {T} data */\n  push (data) {\n    if (this.head.isFull()) {\n      // Head is full: Creates a new queue, sets the old queue's `.next` to it,\n      // and sets it as the new main queue.\n      this.head = this.head.next = new FixedCircularBuffer()\n    }\n    this.head.push(data)\n  }\n\n  /** @returns {T|null} */\n  shift () {\n    const tail = this.tail\n    const next = tail.shift()\n    if (tail.isEmpty() && tail.next !== null) {\n      // If there is another queue, it forms the new tail.\n      this.tail = tail.next\n      tail.next = null\n    }\n    return next\n  }\n}\n", "'use strict'\n\nconst { PoolStats } = require('../util/stats.js')\nconst DispatcherBase = require('./dispatcher-base')\nconst FixedQueue = require('./fixed-queue')\nconst { kConnected, kSize, kRunning, kPending, kQueued, kBusy, kFree, kUrl, kClose, kDestroy, kDispatch } = require('../core/symbols')\n\nconst kClients = Symbol('clients')\nconst kNeedDrain = Symbol('needDrain')\nconst kQueue = Symbol('queue')\nconst kClosedResolve = Symbol('closed resolve')\nconst kOnDrain = Symbol('onDrain')\nconst kOnConnect = Symbol('onConnect')\nconst kOnDisconnect = Symbol('onDisconnect')\nconst kOnConnectionError = Symbol('onConnectionError')\nconst kGetDispatcher = Symbol('get dispatcher')\nconst kAddClient = Symbol('add client')\nconst kRemoveClient = Symbol('remove client')\n\nclass PoolBase extends DispatcherBase {\n  [kQueue] = new FixedQueue();\n\n  [kQueued] = 0;\n\n  [kClients] = [];\n\n  [kNeedDrain] = false;\n\n  [kOnDrain] (client, origin, targets) {\n    const queue = this[kQueue]\n\n    let needDrain = false\n\n    while (!needDrain) {\n      const item = queue.shift()\n      if (!item) {\n        break\n      }\n      this[kQueued]--\n      needDrain = !client.dispatch(item.opts, item.handler)\n    }\n\n    client[kNeedDrain] = needDrain\n\n    if (!needDrain && this[kNeedDrain]) {\n      this[kNeedDrain] = false\n      this.emit('drain', origin, [this, ...targets])\n    }\n\n    if (this[kClosedResolve] && queue.isEmpty()) {\n      const closeAll = []\n      for (let i = 0; i < this[kClients].length; i++) {\n        const client = this[kClients][i]\n        if (!client.destroyed) {\n          closeAll.push(client.close())\n        }\n      }\n      return Promise.all(closeAll)\n        .then(this[kClosedResolve])\n    }\n  }\n\n  [kOnConnect] = (origin, targets) => {\n    this.emit('connect', origin, [this, ...targets])\n  };\n\n  [kOnDisconnect] = (origin, targets, err) => {\n    this.emit('disconnect', origin, [this, ...targets], err)\n  };\n\n  [kOnConnectionError] = (origin, targets, err) => {\n    this.emit('connectionError', origin, [this, ...targets], err)\n  }\n\n  get [kBusy] () {\n    return this[kNeedDrain]\n  }\n\n  get [kConnected] () {\n    let ret = 0\n    for (const { [kConnected]: connected } of this[kClients]) {\n      ret += connected\n    }\n    return ret\n  }\n\n  get [kFree] () {\n    let ret = 0\n    for (const { [kConnected]: connected, [kNeedDrain]: needDrain } of this[kClients]) {\n      ret += connected && !needDrain\n    }\n    return ret\n  }\n\n  get [kPending] () {\n    let ret = this[kQueued]\n    for (const { [kPending]: pending } of this[kClients]) {\n      ret += pending\n    }\n    return ret\n  }\n\n  get [kRunning] () {\n    let ret = 0\n    for (const { [kRunning]: running } of this[kClients]) {\n      ret += running\n    }\n    return ret\n  }\n\n  get [kSize] () {\n    let ret = this[kQueued]\n    for (const { [kSize]: size } of this[kClients]) {\n      ret += size\n    }\n    return ret\n  }\n\n  get stats () {\n    return new PoolStats(this)\n  }\n\n  [kClose] () {\n    if (this[kQueue].isEmpty()) {\n      const closeAll = []\n      for (let i = 0; i < this[kClients].length; i++) {\n        const client = this[kClients][i]\n        if (!client.destroyed) {\n          closeAll.push(client.close())\n        }\n      }\n      return Promise.all(closeAll)\n    } else {\n      return new Promise((resolve) => {\n        this[kClosedResolve] = resolve\n      })\n    }\n  }\n\n  [kDestroy] (err) {\n    while (true) {\n      const item = this[kQueue].shift()\n      if (!item) {\n        break\n      }\n      item.handler.onError(err)\n    }\n\n    const destroyAll = new Array(this[kClients].length)\n    for (let i = 0; i < this[kClients].length; i++) {\n      destroyAll[i] = this[kClients][i].destroy(err)\n    }\n    return Promise.all(destroyAll)\n  }\n\n  [kDispatch] (opts, handler) {\n    const dispatcher = this[kGetDispatcher]()\n\n    if (!dispatcher) {\n      this[kNeedDrain] = true\n      this[kQueue].push({ opts, handler })\n      this[kQueued]++\n    } else if (!dispatcher.dispatch(opts, handler)) {\n      dispatcher[kNeedDrain] = true\n      this[kNeedDrain] = !this[kGetDispatcher]()\n    }\n\n    return !this[kNeedDrain]\n  }\n\n  [kAddClient] (client) {\n    client\n      .on('drain', this[kOnDrain].bind(this, client))\n      .on('connect', this[kOnConnect])\n      .on('disconnect', this[kOnDisconnect])\n      .on('connectionError', this[kOnConnectionError])\n\n    this[kClients].push(client)\n\n    if (this[kNeedDrain]) {\n      queueMicrotask(() => {\n        if (this[kNeedDrain]) {\n          this[kOnDrain](client, client[kUrl], [client, this])\n        }\n      })\n    }\n\n    return this\n  }\n\n  [kRemoveClient] (client) {\n    client.close(() => {\n      const idx = this[kClients].indexOf(client)\n      if (idx !== -1) {\n        this[kClients].splice(idx, 1)\n      }\n    })\n\n    this[kNeedDrain] = this[kClients].some(dispatcher => (\n      !dispatcher[kNeedDrain] &&\n      dispatcher.closed !== true &&\n      dispatcher.destroyed !== true\n    ))\n  }\n}\n\nmodule.exports = {\n  PoolBase,\n  kClients,\n  kNeedDrain,\n  kAddClient,\n  kRemoveClient,\n  kGetDispatcher\n}\n", "'use strict'\n\nconst {\n  PoolBase,\n  kClients,\n  kNeedDrain,\n  kAddClient,\n  kGetDispatcher,\n  kRemoveClient\n} = require('./pool-base')\nconst Client = require('./client')\nconst {\n  InvalidArgumentError\n} = require('../core/errors')\nconst util = require('../core/util')\nconst { kUrl } = require('../core/symbols')\nconst buildConnector = require('../core/connect')\n\nconst kOptions = Symbol('options')\nconst kConnections = Symbol('connections')\nconst kFactory = Symbol('factory')\n\nfunction defaultFactory (origin, opts) {\n  return new Client(origin, opts)\n}\n\nclass Pool extends PoolBase {\n  constructor (origin, {\n    connections,\n    factory = defaultFactory,\n    connect,\n    connectTimeout,\n    tls,\n    maxCachedSessions,\n    socketPath,\n    autoSelectFamily,\n    autoSelectFamilyAttemptTimeout,\n    allowH2,\n    clientTtl,\n    ...options\n  } = {}) {\n    if (connections != null && (!Number.isFinite(connections) || connections < 0)) {\n      throw new InvalidArgumentError('invalid connections')\n    }\n\n    if (typeof factory !== 'function') {\n      throw new InvalidArgumentError('factory must be a function.')\n    }\n\n    if (connect != null && typeof connect !== 'function' && typeof connect !== 'object') {\n      throw new InvalidArgumentError('connect must be a function or an object')\n    }\n\n    if (typeof connect !== 'function') {\n      connect = buildConnector({\n        ...tls,\n        maxCachedSessions,\n        allowH2,\n        socketPath,\n        timeout: connectTimeout,\n        ...(typeof autoSelectFamily === 'boolean' ? { autoSelectFamily, autoSelectFamilyAttemptTimeout } : undefined),\n        ...connect\n      })\n    }\n\n    super()\n\n    this[kConnections] = connections || null\n    this[kUrl] = util.parseOrigin(origin)\n    this[kOptions] = { ...util.deepClone(options), connect, allowH2, clientTtl, socketPath }\n    this[kOptions].interceptors = options.interceptors\n      ? { ...options.interceptors }\n      : undefined\n    this[kFactory] = factory\n\n    this.on('connect', (origin, targets) => {\n      if (clientTtl != null && clientTtl > 0) {\n        for (const target of targets) {\n          Object.assign(target, { ttl: Date.now() })\n        }\n      }\n    })\n\n    this.on('connectionError', (origin, targets, error) => {\n      // If a connection error occurs, we remove the client from the pool,\n      // and emit a connectionError event. They will not be re-used.\n      // Fixes https://github.com/nodejs/undici/issues/3895\n      for (const target of targets) {\n        // Do not use kRemoveClient here, as it will close the client,\n        // but the client cannot be closed in this state.\n        const idx = this[kClients].indexOf(target)\n        if (idx !== -1) {\n          this[kClients].splice(idx, 1)\n        }\n      }\n    })\n  }\n\n  [kGetDispatcher] () {\n    const clientTtlOption = this[kOptions].clientTtl\n    for (const client of this[kClients]) {\n      // check ttl of client and if it's stale, remove it from the pool\n      if (clientTtlOption != null && clientTtlOption > 0 && client.ttl && ((Date.now() - client.ttl) > clientTtlOption)) {\n        this[kRemoveClient](client)\n      } else if (!client[kNeedDrain]) {\n        return client\n      }\n    }\n\n    if (!this[kConnections] || this[kClients].length < this[kConnections]) {\n      const dispatcher = this[kFactory](this[kUrl], this[kOptions])\n      this[kAddClient](dispatcher)\n      return dispatcher\n    }\n  }\n}\n\nmodule.exports = Pool\n", "'use strict'\n\nconst {\n  BalancedPoolMissingUpstreamError,\n  InvalidArgumentError\n} = require('../core/errors')\nconst {\n  PoolBase,\n  kClients,\n  kNeedDrain,\n  kAddClient,\n  kRemoveClient,\n  kGetDispatcher\n} = require('./pool-base')\nconst Pool = require('./pool')\nconst { kUrl } = require('../core/symbols')\nconst { parseOrigin } = require('../core/util')\nconst kFactory = Symbol('factory')\n\nconst kOptions = Symbol('options')\nconst kGreatestCommonDivisor = Symbol('kGreatestCommonDivisor')\nconst kCurrentWeight = Symbol('kCurrentWeight')\nconst kIndex = Symbol('kIndex')\nconst kWeight = Symbol('kWeight')\nconst kMaxWeightPerServer = Symbol('kMaxWeightPerServer')\nconst kErrorPenalty = Symbol('kErrorPenalty')\n\n/**\n * Calculate the greatest common divisor of two numbers by\n * using the Euclidean algorithm.\n *\n * @param {number} a\n * @param {number} b\n * @returns {number}\n */\nfunction getGreatestCommonDivisor (a, b) {\n  if (a === 0) return b\n\n  while (b !== 0) {\n    const t = b\n    b = a % b\n    a = t\n  }\n  return a\n}\n\nfunction defaultFactory (origin, opts) {\n  return new Pool(origin, opts)\n}\n\nclass BalancedPool extends PoolBase {\n  constructor (upstreams = [], { factory = defaultFactory, ...opts } = {}) {\n    if (typeof factory !== 'function') {\n      throw new InvalidArgumentError('factory must be a function.')\n    }\n\n    super()\n\n    this[kOptions] = opts\n    this[kIndex] = -1\n    this[kCurrentWeight] = 0\n\n    this[kMaxWeightPerServer] = this[kOptions].maxWeightPerServer || 100\n    this[kErrorPenalty] = this[kOptions].errorPenalty || 15\n\n    if (!Array.isArray(upstreams)) {\n      upstreams = [upstreams]\n    }\n\n    this[kFactory] = factory\n\n    for (const upstream of upstreams) {\n      this.addUpstream(upstream)\n    }\n    this._updateBalancedPoolStats()\n  }\n\n  addUpstream (upstream) {\n    const upstreamOrigin = parseOrigin(upstream).origin\n\n    if (this[kClients].find((pool) => (\n      pool[kUrl].origin === upstreamOrigin &&\n      pool.closed !== true &&\n      pool.destroyed !== true\n    ))) {\n      return this\n    }\n    const pool = this[kFactory](upstreamOrigin, Object.assign({}, this[kOptions]))\n\n    this[kAddClient](pool)\n    pool.on('connect', () => {\n      pool[kWeight] = Math.min(this[kMaxWeightPerServer], pool[kWeight] + this[kErrorPenalty])\n    })\n\n    pool.on('connectionError', () => {\n      pool[kWeight] = Math.max(1, pool[kWeight] - this[kErrorPenalty])\n      this._updateBalancedPoolStats()\n    })\n\n    pool.on('disconnect', (...args) => {\n      const err = args[2]\n      if (err && err.code === 'UND_ERR_SOCKET') {\n        // decrease the weight of the pool.\n        pool[kWeight] = Math.max(1, pool[kWeight] - this[kErrorPenalty])\n        this._updateBalancedPoolStats()\n      }\n    })\n\n    for (const client of this[kClients]) {\n      client[kWeight] = this[kMaxWeightPerServer]\n    }\n\n    this._updateBalancedPoolStats()\n\n    return this\n  }\n\n  _updateBalancedPoolStats () {\n    let result = 0\n    for (let i = 0; i < this[kClients].length; i++) {\n      result = getGreatestCommonDivisor(this[kClients][i][kWeight], result)\n    }\n\n    this[kGreatestCommonDivisor] = result\n  }\n\n  removeUpstream (upstream) {\n    const upstreamOrigin = parseOrigin(upstream).origin\n\n    const pool = this[kClients].find((pool) => (\n      pool[kUrl].origin === upstreamOrigin &&\n      pool.closed !== true &&\n      pool.destroyed !== true\n    ))\n\n    if (pool) {\n      this[kRemoveClient](pool)\n    }\n\n    return this\n  }\n\n  getUpstream (upstream) {\n    const upstreamOrigin = parseOrigin(upstream).origin\n\n    return this[kClients].find((pool) => (\n      pool[kUrl].origin === upstreamOrigin &&\n      pool.closed !== true &&\n      pool.destroyed !== true\n    ))\n  }\n\n  get upstreams () {\n    return this[kClients]\n      .filter(dispatcher => dispatcher.closed !== true && dispatcher.destroyed !== true)\n      .map((p) => p[kUrl].origin)\n  }\n\n  [kGetDispatcher] () {\n    // We validate that pools is greater than 0,\n    // otherwise we would have to wait until an upstream\n    // is added, which might never happen.\n    if (this[kClients].length === 0) {\n      throw new BalancedPoolMissingUpstreamError()\n    }\n\n    const dispatcher = this[kClients].find(dispatcher => (\n      !dispatcher[kNeedDrain] &&\n      dispatcher.closed !== true &&\n      dispatcher.destroyed !== true\n    ))\n\n    if (!dispatcher) {\n      return\n    }\n\n    const allClientsBusy = this[kClients].map(pool => pool[kNeedDrain]).reduce((a, b) => a && b, true)\n\n    if (allClientsBusy) {\n      return\n    }\n\n    let counter = 0\n\n    let maxWeightIndex = this[kClients].findIndex(pool => !pool[kNeedDrain])\n\n    while (counter++ < this[kClients].length) {\n      this[kIndex] = (this[kIndex] + 1) % this[kClients].length\n      const pool = this[kClients][this[kIndex]]\n\n      // find pool index with the largest weight\n      if (pool[kWeight] > this[kClients][maxWeightIndex][kWeight] && !pool[kNeedDrain]) {\n        maxWeightIndex = this[kIndex]\n      }\n\n      // decrease the current weight every `this[kClients].length`.\n      if (this[kIndex] === 0) {\n        // Set the current weight to the next lower weight.\n        this[kCurrentWeight] = this[kCurrentWeight] - this[kGreatestCommonDivisor]\n\n        if (this[kCurrentWeight] <= 0) {\n          this[kCurrentWeight] = this[kMaxWeightPerServer]\n        }\n      }\n      if (pool[kWeight] >= this[kCurrentWeight] && (!pool[kNeedDrain])) {\n        return pool\n      }\n    }\n\n    this[kCurrentWeight] = this[kClients][maxWeightIndex][kWeight]\n    this[kIndex] = maxWeightIndex\n    return this[kClients][maxWeightIndex]\n  }\n}\n\nmodule.exports = BalancedPool\n", "'use strict'\n\nconst {\n  PoolBase,\n  kClients,\n  kNeedDrain,\n  kAddClient,\n  kGetDispatcher,\n  kRemoveClient\n} = require('./pool-base')\nconst Client = require('./client')\nconst {\n  InvalidArgumentError\n} = require('../core/errors')\nconst util = require('../core/util')\nconst { kUrl } = require('../core/symbols')\nconst buildConnector = require('../core/connect')\n\nconst kOptions = Symbol('options')\nconst kConnections = Symbol('connections')\nconst kFactory = Symbol('factory')\nconst kIndex = Symbol('index')\n\nfunction defaultFactory (origin, opts) {\n  return new Client(origin, opts)\n}\n\nclass RoundRobinPool extends PoolBase {\n  constructor (origin, {\n    connections,\n    factory = defaultFactory,\n    connect,\n    connectTimeout,\n    tls,\n    maxCachedSessions,\n    socketPath,\n    autoSelectFamily,\n    autoSelectFamilyAttemptTimeout,\n    allowH2,\n    clientTtl,\n    ...options\n  } = {}) {\n    if (connections != null && (!Number.isFinite(connections) || connections < 0)) {\n      throw new InvalidArgumentError('invalid connections')\n    }\n\n    if (typeof factory !== 'function') {\n      throw new InvalidArgumentError('factory must be a function.')\n    }\n\n    if (connect != null && typeof connect !== 'function' && typeof connect !== 'object') {\n      throw new InvalidArgumentError('connect must be a function or an object')\n    }\n\n    if (typeof connect !== 'function') {\n      connect = buildConnector({\n        ...tls,\n        maxCachedSessions,\n        allowH2,\n        socketPath,\n        timeout: connectTimeout,\n        ...(typeof autoSelectFamily === 'boolean' ? { autoSelectFamily, autoSelectFamilyAttemptTimeout } : undefined),\n        ...connect\n      })\n    }\n\n    super()\n\n    this[kConnections] = connections || null\n    this[kUrl] = util.parseOrigin(origin)\n    this[kOptions] = { ...util.deepClone(options), connect, allowH2, clientTtl, socketPath }\n    this[kOptions].interceptors = options.interceptors\n      ? { ...options.interceptors }\n      : undefined\n    this[kFactory] = factory\n    this[kIndex] = -1\n\n    this.on('connect', (origin, targets) => {\n      if (clientTtl != null && clientTtl > 0) {\n        for (const target of targets) {\n          Object.assign(target, { ttl: Date.now() })\n        }\n      }\n    })\n\n    this.on('connectionError', (origin, targets, error) => {\n      for (const target of targets) {\n        const idx = this[kClients].indexOf(target)\n        if (idx !== -1) {\n          this[kClients].splice(idx, 1)\n        }\n      }\n    })\n  }\n\n  [kGetDispatcher] () {\n    const clientTtlOption = this[kOptions].clientTtl\n    const clientsLength = this[kClients].length\n\n    // If we have no clients yet, create one\n    if (clientsLength === 0) {\n      const dispatcher = this[kFactory](this[kUrl], this[kOptions])\n      this[kAddClient](dispatcher)\n      return dispatcher\n    }\n\n    // Round-robin through existing clients\n    let checked = 0\n    while (checked < clientsLength) {\n      this[kIndex] = (this[kIndex] + 1) % clientsLength\n      const client = this[kClients][this[kIndex]]\n\n      // Check if client is stale (TTL expired)\n      if (clientTtlOption != null && clientTtlOption > 0 && client.ttl && ((Date.now() - client.ttl) > clientTtlOption)) {\n        this[kRemoveClient](client)\n        checked++\n        continue\n      }\n\n      // Return client if it's not draining\n      if (!client[kNeedDrain]) {\n        return client\n      }\n\n      checked++\n    }\n\n    // All clients are busy, create a new one if we haven't reached the limit\n    if (!this[kConnections] || clientsLength < this[kConnections]) {\n      const dispatcher = this[kFactory](this[kUrl], this[kOptions])\n      this[kAddClient](dispatcher)\n      return dispatcher\n    }\n  }\n}\n\nmodule.exports = RoundRobinPool\n", "'use strict'\n\nconst { InvalidArgumentError, MaxOriginsReachedError } = require('../core/errors')\nconst { kClients, kRunning, kClose, kDestroy, kDispatch, kUrl } = require('../core/symbols')\nconst DispatcherBase = require('./dispatcher-base')\nconst Pool = require('./pool')\nconst Client = require('./client')\nconst util = require('../core/util')\n\nconst kOnConnect = Symbol('onConnect')\nconst kOnDisconnect = Symbol('onDisconnect')\nconst kOnConnectionError = Symbol('onConnectionError')\nconst kOnDrain = Symbol('onDrain')\nconst kFactory = Symbol('factory')\nconst kOptions = Symbol('options')\nconst kOrigins = Symbol('origins')\n\nfunction defaultFactory (origin, opts) {\n  return opts && opts.connections === 1\n    ? new Client(origin, opts)\n    : new Pool(origin, opts)\n}\n\nclass Agent extends DispatcherBase {\n  constructor ({ factory = defaultFactory, maxOrigins = Infinity, connect, ...options } = {}) {\n    if (typeof factory !== 'function') {\n      throw new InvalidArgumentError('factory must be a function.')\n    }\n\n    if (connect != null && typeof connect !== 'function' && typeof connect !== 'object') {\n      throw new InvalidArgumentError('connect must be a function or an object')\n    }\n\n    if (typeof maxOrigins !== 'number' || Number.isNaN(maxOrigins) || maxOrigins <= 0) {\n      throw new InvalidArgumentError('maxOrigins must be a number greater than 0')\n    }\n\n    super()\n\n    if (connect && typeof connect !== 'function') {\n      connect = { ...connect }\n    }\n\n    this[kOptions] = { ...util.deepClone(options), maxOrigins, connect }\n    this[kFactory] = factory\n    this[kClients] = new Map()\n    this[kOrigins] = new Set()\n\n    this[kOnDrain] = (origin, targets) => {\n      this.emit('drain', origin, [this, ...targets])\n    }\n\n    this[kOnConnect] = (origin, targets) => {\n      this.emit('connect', origin, [this, ...targets])\n    }\n\n    this[kOnDisconnect] = (origin, targets, err) => {\n      this.emit('disconnect', origin, [this, ...targets], err)\n    }\n\n    this[kOnConnectionError] = (origin, targets, err) => {\n      this.emit('connectionError', origin, [this, ...targets], err)\n    }\n  }\n\n  get [kRunning] () {\n    let ret = 0\n    for (const { dispatcher } of this[kClients].values()) {\n      ret += dispatcher[kRunning]\n    }\n    return ret\n  }\n\n  [kDispatch] (opts, handler) {\n    let key\n    if (opts.origin && (typeof opts.origin === 'string' || opts.origin instanceof URL)) {\n      key = String(opts.origin)\n    } else {\n      throw new InvalidArgumentError('opts.origin must be a non-empty string or URL.')\n    }\n\n    if (this[kOrigins].size >= this[kOptions].maxOrigins && !this[kOrigins].has(key)) {\n      throw new MaxOriginsReachedError()\n    }\n\n    const result = this[kClients].get(key)\n    let dispatcher = result && result.dispatcher\n    if (!dispatcher) {\n      const closeClientIfUnused = (connected) => {\n        const result = this[kClients].get(key)\n        if (result) {\n          if (connected) result.count -= 1\n          if (result.count <= 0) {\n            this[kClients].delete(key)\n            if (!result.dispatcher.destroyed) {\n              result.dispatcher.close()\n            }\n          }\n          this[kOrigins].delete(key)\n        }\n      }\n      dispatcher = this[kFactory](opts.origin, this[kOptions])\n        .on('drain', this[kOnDrain])\n        .on('connect', (origin, targets) => {\n          const result = this[kClients].get(key)\n          if (result) {\n            result.count += 1\n          }\n          this[kOnConnect](origin, targets)\n        })\n        .on('disconnect', (origin, targets, err) => {\n          closeClientIfUnused(true)\n          this[kOnDisconnect](origin, targets, err)\n        })\n        .on('connectionError', (origin, targets, err) => {\n          closeClientIfUnused(false)\n          this[kOnConnectionError](origin, targets, err)\n        })\n\n      this[kClients].set(key, { count: 0, dispatcher })\n      this[kOrigins].add(key)\n    }\n\n    return dispatcher.dispatch(opts, handler)\n  }\n\n  [kClose] () {\n    const closePromises = []\n    for (const { dispatcher } of this[kClients].values()) {\n      closePromises.push(dispatcher.close())\n    }\n    this[kClients].clear()\n\n    return Promise.all(closePromises)\n  }\n\n  [kDestroy] (err) {\n    const destroyPromises = []\n    for (const { dispatcher } of this[kClients].values()) {\n      destroyPromises.push(dispatcher.destroy(err))\n    }\n    this[kClients].clear()\n\n    return Promise.all(destroyPromises)\n  }\n\n  get stats () {\n    const allClientStats = {}\n    for (const { dispatcher } of this[kClients].values()) {\n      if (dispatcher.stats) {\n        allClientStats[dispatcher[kUrl].origin] = dispatcher.stats\n      }\n    }\n    return allClientStats\n  }\n}\n\nmodule.exports = Agent\n", "'use strict'\n\nconst { Buffer } = require('node:buffer')\nconst net = require('node:net')\nconst { InvalidArgumentError } = require('./errors')\n\n/**\n * Parse an address and determine its type\n * @param {string} address - The address to parse\n * @returns {{type: number, buffer: Buffer}} Address type and buffer\n */\nfunction parseAddress (address) {\n  // Check if it's an IPv4 address\n  if (net.isIPv4(address)) {\n    const parts = address.split('.').map(Number)\n    return {\n      type: 0x01, // IPv4\n      buffer: Buffer.from(parts)\n    }\n  }\n\n  // Check if it's an IPv6 address\n  if (net.isIPv6(address)) {\n    return {\n      type: 0x04, // IPv6\n      buffer: parseIPv6(address)\n    }\n  }\n\n  // Otherwise, treat as domain name\n  const domainBuffer = Buffer.from(address, 'utf8')\n  if (domainBuffer.length > 255) {\n    throw new InvalidArgumentError('Domain name too long (max 255 bytes)')\n  }\n\n  return {\n    type: 0x03, // Domain\n    buffer: Buffer.concat([Buffer.from([domainBuffer.length]), domainBuffer])\n  }\n}\n\n/**\n * Parse IPv6 address to buffer\n * @param {string} address - IPv6 address string\n * @returns {Buffer} 16-byte buffer\n */\nfunction parseIPv6 (address) {\n  const buffer = Buffer.alloc(16)\n  const parts = address.split(':')\n  let partIndex = 0\n  let bufferIndex = 0\n\n  // Handle compressed notation (::)\n  const doubleColonIndex = address.indexOf('::')\n  if (doubleColonIndex !== -1) {\n    // Count non-empty parts\n    const nonEmptyParts = parts.filter(p => p.length > 0).length\n    const skipParts = 8 - nonEmptyParts\n\n    for (let i = 0; i < parts.length; i++) {\n      if (parts[i] === '' && i === doubleColonIndex / 3) {\n        // Skip empty parts for ::\n        bufferIndex += skipParts * 2\n      } else if (parts[i] !== '') {\n        const value = parseInt(parts[i], 16)\n        buffer.writeUInt16BE(value, bufferIndex)\n        bufferIndex += 2\n      }\n    }\n  } else {\n    // No compression, parse normally\n    for (const part of parts) {\n      if (part === '') continue\n      const value = parseInt(part, 16)\n      buffer.writeUInt16BE(value, partIndex * 2)\n      partIndex++\n    }\n  }\n\n  return buffer\n}\n\n/**\n * Build a SOCKS5 address buffer\n * @param {number} type - Address type (1=IPv4, 3=Domain, 4=IPv6)\n * @param {Buffer} addressBuffer - The address data\n * @param {number} port - Port number\n * @returns {Buffer} Complete address buffer including type, address, and port\n */\nfunction buildAddressBuffer (type, addressBuffer, port) {\n  const portBuffer = Buffer.allocUnsafe(2)\n  portBuffer.writeUInt16BE(port, 0)\n\n  return Buffer.concat([\n    Buffer.from([type]),\n    addressBuffer,\n    portBuffer\n  ])\n}\n\n/**\n * Parse address from SOCKS5 response\n * @param {Buffer} buffer - Buffer containing the address\n * @param {number} offset - Starting offset in buffer\n * @returns {{address: string, port: number, bytesRead: number}}\n */\nfunction parseResponseAddress (buffer, offset = 0) {\n  if (buffer.length < offset + 1) {\n    throw new InvalidArgumentError('Buffer too small to contain address type')\n  }\n\n  const addressType = buffer[offset]\n  let address\n  let currentOffset = offset + 1\n\n  switch (addressType) {\n    case 0x01: { // IPv4\n      if (buffer.length < currentOffset + 6) {\n        throw new InvalidArgumentError('Buffer too small for IPv4 address')\n      }\n      address = Array.from(buffer.subarray(currentOffset, currentOffset + 4)).join('.')\n      currentOffset += 4\n      break\n    }\n\n    case 0x03: { // Domain\n      if (buffer.length < currentOffset + 1) {\n        throw new InvalidArgumentError('Buffer too small for domain length')\n      }\n      const domainLength = buffer[currentOffset]\n      currentOffset += 1\n\n      if (buffer.length < currentOffset + domainLength + 2) {\n        throw new InvalidArgumentError('Buffer too small for domain address')\n      }\n      address = buffer.subarray(currentOffset, currentOffset + domainLength).toString('utf8')\n      currentOffset += domainLength\n      break\n    }\n\n    case 0x04: { // IPv6\n      if (buffer.length < currentOffset + 18) {\n        throw new InvalidArgumentError('Buffer too small for IPv6 address')\n      }\n      // Convert buffer to IPv6 string\n      const parts = []\n      for (let i = 0; i < 8; i++) {\n        const value = buffer.readUInt16BE(currentOffset + i * 2)\n        parts.push(value.toString(16))\n      }\n      address = parts.join(':')\n      currentOffset += 16\n      break\n    }\n\n    default:\n      throw new InvalidArgumentError(`Invalid address type: ${addressType}`)\n  }\n\n  // Parse port\n  if (buffer.length < currentOffset + 2) {\n    throw new InvalidArgumentError('Buffer too small for port')\n  }\n  const port = buffer.readUInt16BE(currentOffset)\n  currentOffset += 2\n\n  return {\n    address,\n    port,\n    bytesRead: currentOffset - offset\n  }\n}\n\n/**\n * Create error for SOCKS5 reply code\n * @param {number} replyCode - SOCKS5 reply code\n * @returns {Error} Appropriate error object\n */\nfunction createReplyError (replyCode) {\n  const messages = {\n    0x01: 'General SOCKS server failure',\n    0x02: 'Connection not allowed by ruleset',\n    0x03: 'Network unreachable',\n    0x04: 'Host unreachable',\n    0x05: 'Connection refused',\n    0x06: 'TTL expired',\n    0x07: 'Command not supported',\n    0x08: 'Address type not supported'\n  }\n\n  const message = messages[replyCode] || `Unknown SOCKS5 error code: ${replyCode}`\n  const error = new Error(message)\n  error.code = `SOCKS5_${replyCode}`\n  return error\n}\n\nmodule.exports = {\n  parseAddress,\n  parseIPv6,\n  buildAddressBuffer,\n  parseResponseAddress,\n  createReplyError\n}\n", "'use strict'\n\nconst { EventEmitter } = require('node:events')\nconst { Buffer } = require('node:buffer')\nconst { InvalidArgumentError, Socks5ProxyError } = require('./errors')\nconst { debuglog } = require('node:util')\nconst { parseAddress } = require('./socks5-utils')\n\nconst debug = debuglog('undici:socks5')\n\n// SOCKS5 constants\nconst SOCKS_VERSION = 0x05\n\n// Authentication methods\nconst AUTH_METHODS = {\n  NO_AUTH: 0x00,\n  GSSAPI: 0x01,\n  USERNAME_PASSWORD: 0x02,\n  NO_ACCEPTABLE: 0xFF\n}\n\n// SOCKS5 commands\nconst COMMANDS = {\n  CONNECT: 0x01,\n  BIND: 0x02,\n  UDP_ASSOCIATE: 0x03\n}\n\n// Address types\nconst ADDRESS_TYPES = {\n  IPV4: 0x01,\n  DOMAIN: 0x03,\n  IPV6: 0x04\n}\n\n// Reply codes\nconst REPLY_CODES = {\n  SUCCEEDED: 0x00,\n  GENERAL_FAILURE: 0x01,\n  CONNECTION_NOT_ALLOWED: 0x02,\n  NETWORK_UNREACHABLE: 0x03,\n  HOST_UNREACHABLE: 0x04,\n  CONNECTION_REFUSED: 0x05,\n  TTL_EXPIRED: 0x06,\n  COMMAND_NOT_SUPPORTED: 0x07,\n  ADDRESS_TYPE_NOT_SUPPORTED: 0x08\n}\n\n// State machine states\nconst STATES = {\n  INITIAL: 'initial',\n  HANDSHAKING: 'handshaking',\n  AUTHENTICATING: 'authenticating',\n  CONNECTING: 'connecting',\n  CONNECTED: 'connected',\n  ERROR: 'error',\n  CLOSED: 'closed'\n}\n\n/**\n * SOCKS5 client implementation\n * Handles SOCKS5 protocol negotiation and connection establishment\n */\nclass Socks5Client extends EventEmitter {\n  constructor (socket, options = {}) {\n    super()\n\n    if (!socket) {\n      throw new InvalidArgumentError('socket is required')\n    }\n\n    this.socket = socket\n    this.options = options\n    this.state = STATES.INITIAL\n    this.buffer = Buffer.alloc(0)\n\n    // Authentication settings\n    this.authMethods = []\n    if (options.username && options.password) {\n      this.authMethods.push(AUTH_METHODS.USERNAME_PASSWORD)\n    }\n    this.authMethods.push(AUTH_METHODS.NO_AUTH)\n\n    // Socket event handlers\n    this.socket.on('data', this.onData.bind(this))\n    this.socket.on('error', this.onError.bind(this))\n    this.socket.on('close', this.onClose.bind(this))\n  }\n\n  /**\n   * Handle incoming data from the socket\n   */\n  onData (data) {\n    debug('received data', data.length, 'bytes in state', this.state)\n    this.buffer = Buffer.concat([this.buffer, data])\n\n    try {\n      switch (this.state) {\n        case STATES.HANDSHAKING:\n          this.handleHandshakeResponse()\n          break\n        case STATES.AUTHENTICATING:\n          this.handleAuthResponse()\n          break\n        case STATES.CONNECTING:\n          this.handleConnectResponse()\n          break\n      }\n    } catch (err) {\n      this.onError(err)\n    }\n  }\n\n  /**\n   * Handle socket errors\n   */\n  onError (err) {\n    debug('socket error', err)\n    this.state = STATES.ERROR\n    this.emit('error', err)\n    this.destroy()\n  }\n\n  /**\n   * Handle socket close\n   */\n  onClose () {\n    debug('socket closed')\n    this.state = STATES.CLOSED\n    this.emit('close')\n  }\n\n  /**\n   * Destroy the client and underlying socket\n   */\n  destroy () {\n    if (this.socket && !this.socket.destroyed) {\n      this.socket.destroy()\n    }\n  }\n\n  /**\n   * Start the SOCKS5 handshake\n   */\n  handshake () {\n    if (this.state !== STATES.INITIAL) {\n      throw new InvalidArgumentError('Handshake already started')\n    }\n\n    debug('starting handshake with', this.authMethods.length, 'auth methods')\n    this.state = STATES.HANDSHAKING\n\n    // Build handshake request\n    // +----+----------+----------+\n    // |VER | NMETHODS | METHODS  |\n    // +----+----------+----------+\n    // | 1  |    1     | 1 to 255 |\n    // +----+----------+----------+\n    const request = Buffer.alloc(2 + this.authMethods.length)\n    request[0] = SOCKS_VERSION\n    request[1] = this.authMethods.length\n    this.authMethods.forEach((method, i) => {\n      request[2 + i] = method\n    })\n\n    this.socket.write(request)\n  }\n\n  /**\n   * Handle handshake response from server\n   */\n  handleHandshakeResponse () {\n    if (this.buffer.length < 2) {\n      return // Not enough data yet\n    }\n\n    const version = this.buffer[0]\n    const method = this.buffer[1]\n\n    if (version !== SOCKS_VERSION) {\n      throw new Socks5ProxyError(`Invalid SOCKS version: ${version}`, 'UND_ERR_SOCKS5_VERSION')\n    }\n\n    if (method === AUTH_METHODS.NO_ACCEPTABLE) {\n      throw new Socks5ProxyError('No acceptable authentication method', 'UND_ERR_SOCKS5_AUTH_REJECTED')\n    }\n\n    this.buffer = this.buffer.subarray(2)\n    debug('server selected auth method', method)\n\n    if (method === AUTH_METHODS.NO_AUTH) {\n      this.emit('authenticated')\n    } else if (method === AUTH_METHODS.USERNAME_PASSWORD) {\n      this.state = STATES.AUTHENTICATING\n      this.sendAuthRequest()\n    } else {\n      throw new Socks5ProxyError(`Unsupported authentication method: ${method}`, 'UND_ERR_SOCKS5_AUTH_METHOD')\n    }\n  }\n\n  /**\n   * Send username/password authentication request\n   */\n  sendAuthRequest () {\n    const { username, password } = this.options\n\n    if (!username || !password) {\n      throw new InvalidArgumentError('Username and password required for authentication')\n    }\n\n    debug('sending username/password auth')\n\n    // Username/Password authentication request (RFC 1929)\n    // +----+------+----------+------+----------+\n    // |VER | ULEN |  UNAME   | PLEN |  PASSWD  |\n    // +----+------+----------+------+----------+\n    // | 1  |  1   | 1 to 255 |  1   | 1 to 255 |\n    // +----+------+----------+------+----------+\n    const usernameBuffer = Buffer.from(username)\n    const passwordBuffer = Buffer.from(password)\n\n    if (usernameBuffer.length > 255 || passwordBuffer.length > 255) {\n      throw new InvalidArgumentError('Username or password too long')\n    }\n\n    const request = Buffer.alloc(3 + usernameBuffer.length + passwordBuffer.length)\n    request[0] = 0x01 // Sub-negotiation version\n    request[1] = usernameBuffer.length\n    usernameBuffer.copy(request, 2)\n    request[2 + usernameBuffer.length] = passwordBuffer.length\n    passwordBuffer.copy(request, 3 + usernameBuffer.length)\n\n    this.socket.write(request)\n  }\n\n  /**\n   * Handle authentication response\n   */\n  handleAuthResponse () {\n    if (this.buffer.length < 2) {\n      return // Not enough data yet\n    }\n\n    const version = this.buffer[0]\n    const status = this.buffer[1]\n\n    if (version !== 0x01) {\n      throw new Socks5ProxyError(`Invalid auth sub-negotiation version: ${version}`, 'UND_ERR_SOCKS5_AUTH_VERSION')\n    }\n\n    if (status !== 0x00) {\n      throw new Socks5ProxyError('Authentication failed', 'UND_ERR_SOCKS5_AUTH_FAILED')\n    }\n\n    this.buffer = this.buffer.subarray(2)\n    debug('authentication successful')\n    this.emit('authenticated')\n  }\n\n  /**\n   * Send CONNECT command\n   * @param {string} address - Target address (IP or domain)\n   * @param {number} port - Target port\n   */\n  connect (address, port) {\n    if (this.state === STATES.CONNECTED) {\n      throw new InvalidArgumentError('Already connected')\n    }\n\n    debug('connecting to', address, port)\n    this.state = STATES.CONNECTING\n\n    const request = this.buildConnectRequest(COMMANDS.CONNECT, address, port)\n    this.socket.write(request)\n  }\n\n  /**\n   * Build a SOCKS5 request\n   */\n  buildConnectRequest (command, address, port) {\n    // Parse address to determine type and buffer\n    const { type: addressType, buffer: addressBuffer } = parseAddress(address)\n\n    // Build request\n    // +----+-----+-------+------+----------+----------+\n    // |VER | CMD |  RSV  | ATYP | DST.ADDR | DST.PORT |\n    // +----+-----+-------+------+----------+----------+\n    // | 1  |  1  | X'00' |  1   | Variable |    2     |\n    // +----+-----+-------+------+----------+----------+\n    const request = Buffer.alloc(4 + addressBuffer.length + 2)\n    request[0] = SOCKS_VERSION\n    request[1] = command\n    request[2] = 0x00 // Reserved\n    request[3] = addressType\n    addressBuffer.copy(request, 4)\n    request.writeUInt16BE(port, 4 + addressBuffer.length)\n\n    return request\n  }\n\n  /**\n   * Handle CONNECT response\n   */\n  handleConnectResponse () {\n    if (this.buffer.length < 4) {\n      return // Not enough data for header\n    }\n\n    const version = this.buffer[0]\n    const reply = this.buffer[1]\n    const addressType = this.buffer[3]\n\n    if (version !== SOCKS_VERSION) {\n      throw new Socks5ProxyError(`Invalid SOCKS version in reply: ${version}`, 'UND_ERR_SOCKS5_REPLY_VERSION')\n    }\n\n    // Calculate the expected response length\n    let responseLength = 4 // VER + REP + RSV + ATYP\n    if (addressType === ADDRESS_TYPES.IPV4) {\n      responseLength += 4 + 2 // IPv4 + port\n    } else if (addressType === ADDRESS_TYPES.DOMAIN) {\n      if (this.buffer.length < 5) {\n        return // Need domain length byte\n      }\n      responseLength += 1 + this.buffer[4] + 2 // length byte + domain + port\n    } else if (addressType === ADDRESS_TYPES.IPV6) {\n      responseLength += 16 + 2 // IPv6 + port\n    } else {\n      throw new Socks5ProxyError(`Invalid address type in reply: ${addressType}`, 'UND_ERR_SOCKS5_ADDR_TYPE')\n    }\n\n    if (this.buffer.length < responseLength) {\n      return // Not enough data for full response\n    }\n\n    if (reply !== REPLY_CODES.SUCCEEDED) {\n      const errorMessage = this.getReplyErrorMessage(reply)\n      throw new Socks5ProxyError(`SOCKS5 connection failed: ${errorMessage}`, `UND_ERR_SOCKS5_REPLY_${reply}`)\n    }\n\n    // Parse bound address and port\n    let boundAddress\n    let offset = 4\n\n    if (addressType === ADDRESS_TYPES.IPV4) {\n      boundAddress = Array.from(this.buffer.subarray(offset, offset + 4)).join('.')\n      offset += 4\n    } else if (addressType === ADDRESS_TYPES.DOMAIN) {\n      const domainLength = this.buffer[offset]\n      offset += 1\n      boundAddress = this.buffer.subarray(offset, offset + domainLength).toString()\n      offset += domainLength\n    } else if (addressType === ADDRESS_TYPES.IPV6) {\n      // Parse IPv6 address from 16-byte buffer\n      const parts = []\n      for (let i = 0; i < 8; i++) {\n        const value = this.buffer.readUInt16BE(offset + i * 2)\n        parts.push(value.toString(16))\n      }\n      boundAddress = parts.join(':')\n      offset += 16\n    }\n\n    const boundPort = this.buffer.readUInt16BE(offset)\n\n    this.buffer = this.buffer.subarray(responseLength)\n    this.state = STATES.CONNECTED\n\n    debug('connected, bound address:', boundAddress, 'port:', boundPort)\n    this.emit('connected', { address: boundAddress, port: boundPort })\n  }\n\n  /**\n   * Get human-readable error message for reply code\n   */\n  getReplyErrorMessage (reply) {\n    switch (reply) {\n      case REPLY_CODES.GENERAL_FAILURE:\n        return 'General SOCKS server failure'\n      case REPLY_CODES.CONNECTION_NOT_ALLOWED:\n        return 'Connection not allowed by ruleset'\n      case REPLY_CODES.NETWORK_UNREACHABLE:\n        return 'Network unreachable'\n      case REPLY_CODES.HOST_UNREACHABLE:\n        return 'Host unreachable'\n      case REPLY_CODES.CONNECTION_REFUSED:\n        return 'Connection refused'\n      case REPLY_CODES.TTL_EXPIRED:\n        return 'TTL expired'\n      case REPLY_CODES.COMMAND_NOT_SUPPORTED:\n        return 'Command not supported'\n      case REPLY_CODES.ADDRESS_TYPE_NOT_SUPPORTED:\n        return 'Address type not supported'\n      default:\n        return `Unknown error code: ${reply}`\n    }\n  }\n}\n\nmodule.exports = {\n  Socks5Client,\n  AUTH_METHODS,\n  COMMANDS,\n  ADDRESS_TYPES,\n  REPLY_CODES,\n  STATES\n}\n", "'use strict'\n\nconst net = require('node:net')\nconst { URL } = require('node:url')\n\nlet tls // include tls conditionally since it is not always available\nconst DispatcherBase = require('./dispatcher-base')\nconst { InvalidArgumentError } = require('../core/errors')\nconst { Socks5Client } = require('../core/socks5-client')\nconst { kDispatch, kClose, kDestroy } = require('../core/symbols')\nconst Pool = require('./pool')\nconst buildConnector = require('../core/connect')\nconst { debuglog } = require('node:util')\n\nconst debug = debuglog('undici:socks5-proxy')\n\nconst kProxyUrl = Symbol('proxy url')\nconst kProxyHeaders = Symbol('proxy headers')\nconst kProxyAuth = Symbol('proxy auth')\nconst kPool = Symbol('pool')\nconst kConnector = Symbol('connector')\n\n// Static flag to ensure warning is only emitted once per process\nlet experimentalWarningEmitted = false\n\n/**\n * SOCKS5 proxy agent for dispatching requests through a SOCKS5 proxy\n */\nclass Socks5ProxyAgent extends DispatcherBase {\n  constructor (proxyUrl, options = {}) {\n    super()\n\n    // Emit experimental warning only once\n    if (!experimentalWarningEmitted) {\n      process.emitWarning(\n        'SOCKS5 proxy support is experimental and subject to change',\n        'ExperimentalWarning'\n      )\n      experimentalWarningEmitted = true\n    }\n\n    if (!proxyUrl) {\n      throw new InvalidArgumentError('Proxy URL is mandatory')\n    }\n\n    // Parse proxy URL\n    const url = typeof proxyUrl === 'string' ? new URL(proxyUrl) : proxyUrl\n\n    if (url.protocol !== 'socks5:' && url.protocol !== 'socks:') {\n      throw new InvalidArgumentError('Proxy URL must use socks5:// or socks:// protocol')\n    }\n\n    this[kProxyUrl] = url\n    this[kProxyHeaders] = options.headers || {}\n\n    // Extract auth from URL or options\n    this[kProxyAuth] = {\n      username: options.username || (url.username ? decodeURIComponent(url.username) : null),\n      password: options.password || (url.password ? decodeURIComponent(url.password) : null)\n    }\n\n    // Create connector for proxy connection\n    this[kConnector] = options.connect || buildConnector({\n      ...options.proxyTls,\n      servername: options.proxyTls?.servername || url.hostname\n    })\n\n    // Pool for the actual HTTP connections (with SOCKS5 tunnel connect function)\n    this[kPool] = null\n  }\n\n  /**\n   * Create a SOCKS5 connection to the proxy\n   */\n  async createSocks5Connection (targetHost, targetPort) {\n    const proxyHost = this[kProxyUrl].hostname\n    const proxyPort = parseInt(this[kProxyUrl].port) || 1080\n\n    debug('creating SOCKS5 connection to', proxyHost, proxyPort)\n\n    // Connect to the SOCKS5 proxy\n    const socket = await new Promise((resolve, reject) => {\n      const onConnect = () => {\n        socket.removeListener('error', onError)\n        resolve(socket)\n      }\n\n      const onError = (err) => {\n        socket.removeListener('connect', onConnect)\n        reject(err)\n      }\n\n      const socket = net.connect({\n        host: proxyHost,\n        port: proxyPort\n      })\n\n      socket.once('connect', onConnect)\n      socket.once('error', onError)\n    })\n\n    // Create SOCKS5 client\n    const socks5Client = new Socks5Client(socket, this[kProxyAuth])\n\n    // Handle SOCKS5 errors\n    socks5Client.on('error', (err) => {\n      debug('SOCKS5 error:', err)\n      socket.destroy()\n    })\n\n    // Perform SOCKS5 handshake\n    await socks5Client.handshake()\n\n    // Wait for authentication (if required)\n    await new Promise((resolve, reject) => {\n      const timeout = setTimeout(() => {\n        reject(new Error('SOCKS5 authentication timeout'))\n      }, 5000)\n\n      const onAuthenticated = () => {\n        clearTimeout(timeout)\n        socks5Client.removeListener('error', onError)\n        resolve()\n      }\n\n      const onError = (err) => {\n        clearTimeout(timeout)\n        socks5Client.removeListener('authenticated', onAuthenticated)\n        reject(err)\n      }\n\n      // Check if already authenticated (for NO_AUTH method)\n      if (socks5Client.state === 'authenticated') {\n        clearTimeout(timeout)\n        resolve()\n      } else {\n        socks5Client.once('authenticated', onAuthenticated)\n        socks5Client.once('error', onError)\n      }\n    })\n\n    // Send CONNECT command\n    await socks5Client.connect(targetHost, targetPort)\n\n    // Wait for connection\n    await new Promise((resolve, reject) => {\n      const timeout = setTimeout(() => {\n        reject(new Error('SOCKS5 connection timeout'))\n      }, 5000)\n\n      const onConnected = (info) => {\n        debug('SOCKS5 tunnel established to', targetHost, targetPort, 'via', info)\n        clearTimeout(timeout)\n        socks5Client.removeListener('error', onError)\n        resolve()\n      }\n\n      const onError = (err) => {\n        clearTimeout(timeout)\n        socks5Client.removeListener('connected', onConnected)\n        reject(err)\n      }\n\n      socks5Client.once('connected', onConnected)\n      socks5Client.once('error', onError)\n    })\n\n    return socket\n  }\n\n  /**\n   * Dispatch a request through the SOCKS5 proxy\n   */\n  async [kDispatch] (opts, handler) {\n    const { origin } = opts\n\n    debug('dispatching request to', origin, 'via SOCKS5')\n\n    try {\n      // Create Pool with custom connect function if we don't have one yet\n      if (!this[kPool] || this[kPool].destroyed || this[kPool].closed) {\n        this[kPool] = new Pool(origin, {\n          pipelining: opts.pipelining,\n          connections: opts.connections,\n          connect: async (connectOpts, callback) => {\n            try {\n              const url = new URL(origin)\n              const targetHost = url.hostname\n              const targetPort = parseInt(url.port) || (url.protocol === 'https:' ? 443 : 80)\n\n              debug('establishing SOCKS5 connection to', targetHost, targetPort)\n\n              // Create SOCKS5 tunnel\n              const socket = await this.createSocks5Connection(targetHost, targetPort)\n\n              // Handle TLS if needed\n              let finalSocket = socket\n              if (url.protocol === 'https:') {\n                if (!tls) {\n                  tls = require('node:tls')\n                }\n                debug('upgrading to TLS')\n                finalSocket = tls.connect({\n                  socket,\n                  servername: targetHost,\n                  ...connectOpts.tls || {}\n                })\n\n                await new Promise((resolve, reject) => {\n                  finalSocket.once('secureConnect', resolve)\n                  finalSocket.once('error', reject)\n                })\n              }\n\n              callback(null, finalSocket)\n            } catch (err) {\n              debug('SOCKS5 connection error:', err)\n              callback(err)\n            }\n          }\n        })\n      }\n\n      // Dispatch the request through the pool\n      return this[kPool][kDispatch](opts, handler)\n    } catch (err) {\n      debug('dispatch error:', err)\n      if (typeof handler.onError === 'function') {\n        handler.onError(err)\n      } else {\n        throw err\n      }\n    }\n  }\n\n  async [kClose] () {\n    if (this[kPool]) {\n      await this[kPool].close()\n    }\n  }\n\n  async [kDestroy] (err) {\n    if (this[kPool]) {\n      await this[kPool].destroy(err)\n    }\n  }\n}\n\nmodule.exports = Socks5ProxyAgent\n", "'use strict'\n\nconst { kProxy, kClose, kDestroy, kDispatch } = require('../core/symbols')\nconst Agent = require('./agent')\nconst Pool = require('./pool')\nconst DispatcherBase = require('./dispatcher-base')\nconst { InvalidArgumentError, RequestAbortedError, SecureProxyConnectionError } = require('../core/errors')\nconst buildConnector = require('../core/connect')\nconst Client = require('./client')\nconst { channels } = require('../core/diagnostics')\nconst Socks5ProxyAgent = require('./socks5-proxy-agent')\n\nconst kAgent = Symbol('proxy agent')\nconst kClient = Symbol('proxy client')\nconst kProxyHeaders = Symbol('proxy headers')\nconst kRequestTls = Symbol('request tls settings')\nconst kProxyTls = Symbol('proxy tls settings')\nconst kConnectEndpoint = Symbol('connect endpoint function')\nconst kTunnelProxy = Symbol('tunnel proxy')\n\nfunction defaultProtocolPort (protocol) {\n  return protocol === 'https:' ? 443 : 80\n}\n\nfunction defaultFactory (origin, opts) {\n  return new Pool(origin, opts)\n}\n\nconst noop = () => {}\n\nfunction defaultAgentFactory (origin, opts) {\n  if (opts.connections === 1) {\n    return new Client(origin, opts)\n  }\n  return new Pool(origin, opts)\n}\n\nclass Http1ProxyWrapper extends DispatcherBase {\n  #client\n\n  constructor (proxyUrl, { headers = {}, connect, factory }) {\n    if (!proxyUrl) {\n      throw new InvalidArgumentError('Proxy URL is mandatory')\n    }\n\n    super()\n\n    this[kProxyHeaders] = headers\n    if (factory) {\n      this.#client = factory(proxyUrl, { connect })\n    } else {\n      this.#client = new Client(proxyUrl, { connect })\n    }\n  }\n\n  [kDispatch] (opts, handler) {\n    const onHeaders = handler.onHeaders\n    handler.onHeaders = function (statusCode, data, resume) {\n      if (statusCode === 407) {\n        if (typeof handler.onError === 'function') {\n          handler.onError(new InvalidArgumentError('Proxy Authentication Required (407)'))\n        }\n        return\n      }\n      if (onHeaders) onHeaders.call(this, statusCode, data, resume)\n    }\n\n    // Rewrite request as an HTTP1 Proxy request, without tunneling.\n    const {\n      origin,\n      path = '/',\n      headers = {}\n    } = opts\n\n    opts.path = origin + path\n\n    if (!('host' in headers) && !('Host' in headers)) {\n      const { host } = new URL(origin)\n      headers.host = host\n    }\n    opts.headers = { ...this[kProxyHeaders], ...headers }\n\n    return this.#client[kDispatch](opts, handler)\n  }\n\n  [kClose] () {\n    return this.#client.close()\n  }\n\n  [kDestroy] (err) {\n    return this.#client.destroy(err)\n  }\n}\n\nclass ProxyAgent extends DispatcherBase {\n  constructor (opts) {\n    if (!opts || (typeof opts === 'object' && !(opts instanceof URL) && !opts.uri)) {\n      throw new InvalidArgumentError('Proxy uri is mandatory')\n    }\n\n    const { clientFactory = defaultFactory } = opts\n    if (typeof clientFactory !== 'function') {\n      throw new InvalidArgumentError('Proxy opts.clientFactory must be a function.')\n    }\n\n    const { proxyTunnel = true } = opts\n\n    super()\n\n    const url = this.#getUrl(opts)\n    const { href, origin, port, protocol, username, password, hostname: proxyHostname } = url\n\n    this[kProxy] = { uri: href, protocol }\n    this[kRequestTls] = opts.requestTls\n    this[kProxyTls] = opts.proxyTls\n    this[kProxyHeaders] = opts.headers || {}\n    this[kTunnelProxy] = proxyTunnel\n\n    if (opts.auth && opts.token) {\n      throw new InvalidArgumentError('opts.auth cannot be used in combination with opts.token')\n    } else if (opts.auth) {\n      /* @deprecated in favour of opts.token */\n      this[kProxyHeaders]['proxy-authorization'] = `Basic ${opts.auth}`\n    } else if (opts.token) {\n      this[kProxyHeaders]['proxy-authorization'] = opts.token\n    } else if (username && password) {\n      this[kProxyHeaders]['proxy-authorization'] = `Basic ${Buffer.from(`${decodeURIComponent(username)}:${decodeURIComponent(password)}`).toString('base64')}`\n    }\n\n    const connect = buildConnector({ ...opts.proxyTls })\n    this[kConnectEndpoint] = buildConnector({ ...opts.requestTls })\n\n    const agentFactory = opts.factory || defaultAgentFactory\n    const factory = (origin, options) => {\n      const { protocol } = new URL(origin)\n\n      // Handle SOCKS5 proxy\n      if (this[kProxy].protocol === 'socks5:' || this[kProxy].protocol === 'socks:') {\n        return new Socks5ProxyAgent(this[kProxy].uri, {\n          headers: this[kProxyHeaders],\n          connect,\n          factory: agentFactory,\n          username: opts.username || username,\n          password: opts.password || password,\n          proxyTls: opts.proxyTls\n        })\n      }\n\n      if (!this[kTunnelProxy] && protocol === 'http:' && this[kProxy].protocol === 'http:') {\n        return new Http1ProxyWrapper(this[kProxy].uri, {\n          headers: this[kProxyHeaders],\n          connect,\n          factory: agentFactory\n        })\n      }\n      return agentFactory(origin, options)\n    }\n\n    // For SOCKS5 proxies, we don't need a client to the proxy itself\n    // The SOCKS5 connection is handled within Socks5ProxyAgent\n    if (protocol === 'socks5:' || protocol === 'socks:') {\n      this[kClient] = null\n    } else {\n      this[kClient] = clientFactory(url, { connect })\n    }\n\n    this[kAgent] = new Agent({\n      ...opts,\n      factory,\n      connect: async (opts, callback) => {\n        // SOCKS5 proxies handle their own connections via Socks5ProxyAgent,\n        // so this connect function should never be called for them.\n        if (!this[kClient]) {\n          callback(new InvalidArgumentError('Cannot establish tunnel connection without a proxy client'))\n          return\n        }\n\n        let requestedPath = opts.host\n        if (!opts.port) {\n          requestedPath += `:${defaultProtocolPort(opts.protocol)}`\n        }\n        try {\n          const connectParams = {\n            origin,\n            port,\n            path: requestedPath,\n            signal: opts.signal,\n            headers: {\n              ...this[kProxyHeaders],\n              host: opts.host,\n              ...(opts.connections == null || opts.connections > 0 ? { 'proxy-connection': 'keep-alive' } : {})\n            },\n            servername: this[kProxyTls]?.servername || proxyHostname\n          }\n          const { socket, statusCode } = await this[kClient].connect(connectParams)\n          if (statusCode !== 200) {\n            socket.on('error', noop).destroy()\n            callback(new RequestAbortedError(`Proxy response (${statusCode}) !== 200 when HTTP Tunneling`))\n            return\n          }\n\n          if (channels.proxyConnected.hasSubscribers) {\n            channels.proxyConnected.publish({\n              socket,\n              connectParams\n            })\n          }\n\n          if (opts.protocol !== 'https:') {\n            callback(null, socket)\n            return\n          }\n          let servername\n          if (this[kRequestTls]) {\n            servername = this[kRequestTls].servername\n          } else {\n            servername = opts.servername\n          }\n          this[kConnectEndpoint]({ ...opts, servername, httpSocket: socket }, callback)\n        } catch (err) {\n          if (err.code === 'ERR_TLS_CERT_ALTNAME_INVALID') {\n            // Throw a custom error to avoid loop in client.js#connect\n            callback(new SecureProxyConnectionError(err))\n          } else {\n            callback(err)\n          }\n        }\n      }\n    })\n  }\n\n  dispatch (opts, handler) {\n    const headers = buildHeaders(opts.headers)\n    throwIfProxyAuthIsSent(headers)\n\n    if (headers && !('host' in headers) && !('Host' in headers)) {\n      const { host } = new URL(opts.origin)\n      headers.host = host\n    }\n\n    return this[kAgent].dispatch(\n      {\n        ...opts,\n        headers\n      },\n      handler\n    )\n  }\n\n  /**\n   * @param {import('../../types/proxy-agent').ProxyAgent.Options | string | URL} opts\n   * @returns {URL}\n   */\n  #getUrl (opts) {\n    if (typeof opts === 'string') {\n      return new URL(opts)\n    } else if (opts instanceof URL) {\n      return opts\n    } else {\n      return new URL(opts.uri)\n    }\n  }\n\n  [kClose] () {\n    const promises = [this[kAgent].close()]\n    if (this[kClient]) {\n      promises.push(this[kClient].close())\n    }\n    return Promise.all(promises)\n  }\n\n  [kDestroy] () {\n    const promises = [this[kAgent].destroy()]\n    if (this[kClient]) {\n      promises.push(this[kClient].destroy())\n    }\n    return Promise.all(promises)\n  }\n}\n\n/**\n * @param {string[] | Record<string, string>} headers\n * @returns {Record<string, string>}\n */\nfunction buildHeaders (headers) {\n  // When using undici.fetch, the headers list is stored\n  // as an array.\n  if (Array.isArray(headers)) {\n    /** @type {Record<string, string>} */\n    const headersPair = {}\n\n    for (let i = 0; i < headers.length; i += 2) {\n      headersPair[headers[i]] = headers[i + 1]\n    }\n\n    return headersPair\n  }\n\n  return headers\n}\n\n/**\n * @param {Record<string, string>} headers\n *\n * Previous versions of ProxyAgent suggests the Proxy-Authorization in request headers\n * Nevertheless, it was changed and to avoid a security vulnerability by end users\n * this check was created.\n * It should be removed in the next major version for performance reasons\n */\nfunction throwIfProxyAuthIsSent (headers) {\n  const existProxyAuth = headers && Object.keys(headers)\n    .find((key) => key.toLowerCase() === 'proxy-authorization')\n  if (existProxyAuth) {\n    throw new InvalidArgumentError('Proxy-Authorization should be sent in ProxyAgent constructor')\n  }\n}\n\nmodule.exports = ProxyAgent\n", "'use strict'\n\nconst DispatcherBase = require('./dispatcher-base')\nconst { kClose, kDestroy, kClosed, kDestroyed, kDispatch, kNoProxyAgent, kHttpProxyAgent, kHttpsProxyAgent } = require('../core/symbols')\nconst ProxyAgent = require('./proxy-agent')\nconst Agent = require('./agent')\n\nconst DEFAULT_PORTS = {\n  'http:': 80,\n  'https:': 443\n}\n\nclass EnvHttpProxyAgent extends DispatcherBase {\n  #noProxyValue = null\n  #noProxyEntries = null\n  #opts = null\n\n  constructor (opts = {}) {\n    super()\n    this.#opts = opts\n\n    const { httpProxy, httpsProxy, noProxy, ...agentOpts } = opts\n\n    this[kNoProxyAgent] = new Agent(agentOpts)\n\n    const HTTP_PROXY = httpProxy ?? process.env.http_proxy ?? process.env.HTTP_PROXY\n    if (HTTP_PROXY) {\n      this[kHttpProxyAgent] = new ProxyAgent({ ...agentOpts, uri: HTTP_PROXY })\n    } else {\n      this[kHttpProxyAgent] = this[kNoProxyAgent]\n    }\n\n    const HTTPS_PROXY = httpsProxy ?? process.env.https_proxy ?? process.env.HTTPS_PROXY\n    if (HTTPS_PROXY) {\n      this[kHttpsProxyAgent] = new ProxyAgent({ ...agentOpts, uri: HTTPS_PROXY })\n    } else {\n      this[kHttpsProxyAgent] = this[kHttpProxyAgent]\n    }\n\n    this.#parseNoProxy()\n  }\n\n  [kDispatch] (opts, handler) {\n    const url = new URL(opts.origin)\n    const agent = this.#getProxyAgentForUrl(url)\n    return agent.dispatch(opts, handler)\n  }\n\n  [kClose] () {\n    return Promise.all([\n      this[kNoProxyAgent].close(),\n      !this[kHttpProxyAgent][kClosed] && this[kHttpProxyAgent].close(),\n      !this[kHttpsProxyAgent][kClosed] && this[kHttpsProxyAgent].close()\n    ])\n  }\n\n  [kDestroy] (err) {\n    return Promise.all([\n      this[kNoProxyAgent].destroy(err),\n      !this[kHttpProxyAgent][kDestroyed] && this[kHttpProxyAgent].destroy(err),\n      !this[kHttpsProxyAgent][kDestroyed] && this[kHttpsProxyAgent].destroy(err)\n    ])\n  }\n\n  #getProxyAgentForUrl (url) {\n    let { protocol, host: hostname, port } = url\n\n    // Stripping ports in this way instead of using parsedUrl.hostname to make\n    // sure that the brackets around IPv6 addresses are kept.\n    hostname = hostname.replace(/:\\d*$/, '').toLowerCase()\n    port = Number.parseInt(port, 10) || DEFAULT_PORTS[protocol] || 0\n    if (!this.#shouldProxy(hostname, port)) {\n      return this[kNoProxyAgent]\n    }\n    if (protocol === 'https:') {\n      return this[kHttpsProxyAgent]\n    }\n    return this[kHttpProxyAgent]\n  }\n\n  #shouldProxy (hostname, port) {\n    if (this.#noProxyChanged) {\n      this.#parseNoProxy()\n    }\n\n    if (this.#noProxyEntries.length === 0) {\n      return true // Always proxy if NO_PROXY is not set or empty.\n    }\n    if (this.#noProxyValue === '*') {\n      return false // Never proxy if wildcard is set.\n    }\n\n    for (let i = 0; i < this.#noProxyEntries.length; i++) {\n      const entry = this.#noProxyEntries[i]\n      if (entry.port && entry.port !== port) {\n        continue // Skip if ports don't match.\n      }\n      // Don't proxy if the hostname is equal with the no_proxy host.\n      if (hostname === entry.hostname) {\n        return false\n      }\n      // Don't proxy if the hostname is the subdomain of the no_proxy host.\n      // Reference - https://github.com/denoland/deno/blob/6fbce91e40cc07fc6da74068e5cc56fdd40f7b4c/ext/fetch/proxy.rs#L485\n      if (hostname.slice(-(entry.hostname.length + 1)) === `.${entry.hostname}`) {\n        return false\n      }\n    }\n\n    return true\n  }\n\n  #parseNoProxy () {\n    const noProxyValue = this.#opts.noProxy ?? this.#noProxyEnv\n    const noProxySplit = noProxyValue.split(/[,\\s]/)\n    const noProxyEntries = []\n\n    for (let i = 0; i < noProxySplit.length; i++) {\n      const entry = noProxySplit[i]\n      if (!entry) {\n        continue\n      }\n      const parsed = entry.match(/^(.+):(\\d+)$/)\n      noProxyEntries.push({\n        // strip leading dot or asterisk with dot\n        hostname: (parsed ? parsed[1] : entry).replace(/^\\*?\\./, '').toLowerCase(),\n        port: parsed ? Number.parseInt(parsed[2], 10) : 0\n      })\n    }\n\n    this.#noProxyValue = noProxyValue\n    this.#noProxyEntries = noProxyEntries\n  }\n\n  get #noProxyChanged () {\n    if (this.#opts.noProxy !== undefined) {\n      return false\n    }\n    return this.#noProxyValue !== this.#noProxyEnv\n  }\n\n  get #noProxyEnv () {\n    return process.env.no_proxy ?? process.env.NO_PROXY ?? ''\n  }\n}\n\nmodule.exports = EnvHttpProxyAgent\n", "'use strict'\nconst assert = require('node:assert')\n\nconst { kRetryHandlerDefaultRetry } = require('../core/symbols')\nconst { RequestRetryError } = require('../core/errors')\nconst WrapHandler = require('./wrap-handler')\nconst {\n  isDisturbed,\n  parseRangeHeader,\n  wrapRequestBody\n} = require('../core/util')\n\nfunction calculateRetryAfterHeader (retryAfter) {\n  const retryTime = new Date(retryAfter).getTime()\n  return isNaN(retryTime) ? 0 : retryTime - Date.now()\n}\n\nclass RetryHandler {\n  constructor (opts, { dispatch, handler }) {\n    const { retryOptions, ...dispatchOpts } = opts\n    const {\n      // Retry scoped\n      retry: retryFn,\n      maxRetries,\n      maxTimeout,\n      minTimeout,\n      timeoutFactor,\n      // Response scoped\n      methods,\n      errorCodes,\n      retryAfter,\n      statusCodes,\n      throwOnError\n    } = retryOptions ?? {}\n\n    this.error = null\n    this.dispatch = dispatch\n    this.handler = WrapHandler.wrap(handler)\n    this.opts = { ...dispatchOpts, body: wrapRequestBody(opts.body) }\n    this.retryOpts = {\n      throwOnError: throwOnError ?? true,\n      retry: retryFn ?? RetryHandler[kRetryHandlerDefaultRetry],\n      retryAfter: retryAfter ?? true,\n      maxTimeout: maxTimeout ?? 30 * 1000, // 30s,\n      minTimeout: minTimeout ?? 500, // .5s\n      timeoutFactor: timeoutFactor ?? 2,\n      maxRetries: maxRetries ?? 5,\n      // What errors we should retry\n      methods: methods ?? ['GET', 'HEAD', 'OPTIONS', 'PUT', 'DELETE', 'TRACE'],\n      // Indicates which errors to retry\n      statusCodes: statusCodes ?? [500, 502, 503, 504, 429],\n      // List of errors to retry\n      errorCodes: errorCodes ?? [\n        'ECONNRESET',\n        'ECONNREFUSED',\n        'ENOTFOUND',\n        'ENETDOWN',\n        'ENETUNREACH',\n        'EHOSTDOWN',\n        'EHOSTUNREACH',\n        'EPIPE',\n        'UND_ERR_SOCKET'\n      ]\n    }\n\n    this.retryCount = 0\n    this.retryCountCheckpoint = 0\n    this.headersSent = false\n    this.start = 0\n    this.end = null\n    this.etag = null\n  }\n\n  onResponseStartWithRetry (controller, statusCode, headers, statusMessage, err) {\n    if (this.retryOpts.throwOnError) {\n      // Preserve old behavior for status codes that are not eligible for retry\n      if (this.retryOpts.statusCodes.includes(statusCode) === false) {\n        this.headersSent = true\n        this.handler.onResponseStart?.(controller, statusCode, headers, statusMessage)\n      } else {\n        this.error = err\n      }\n\n      return\n    }\n\n    if (isDisturbed(this.opts.body)) {\n      this.headersSent = true\n      this.handler.onResponseStart?.(controller, statusCode, headers, statusMessage)\n      return\n    }\n\n    function shouldRetry (passedErr) {\n      if (passedErr) {\n        this.headersSent = true\n        this.handler.onResponseStart?.(controller, statusCode, headers, statusMessage)\n        controller.resume()\n        return\n      }\n\n      this.error = err\n      controller.resume()\n    }\n\n    controller.pause()\n    this.retryOpts.retry(\n      err,\n      {\n        state: { counter: this.retryCount },\n        opts: { retryOptions: this.retryOpts, ...this.opts }\n      },\n      shouldRetry.bind(this)\n    )\n  }\n\n  onRequestStart (controller, context) {\n    if (!this.headersSent) {\n      this.handler.onRequestStart?.(controller, context)\n    }\n  }\n\n  onRequestUpgrade (controller, statusCode, headers, socket) {\n    this.handler.onRequestUpgrade?.(controller, statusCode, headers, socket)\n  }\n\n  static [kRetryHandlerDefaultRetry] (err, { state, opts }, cb) {\n    const { statusCode, code, headers } = err\n    const { method, retryOptions } = opts\n    const {\n      maxRetries,\n      minTimeout,\n      maxTimeout,\n      timeoutFactor,\n      statusCodes,\n      errorCodes,\n      methods\n    } = retryOptions\n    const { counter } = state\n\n    // Any code that is not a Undici's originated and allowed to retry\n    if (code && code !== 'UND_ERR_REQ_RETRY' && !errorCodes.includes(code)) {\n      cb(err)\n      return\n    }\n\n    // If a set of method are provided and the current method is not in the list\n    if (Array.isArray(methods) && !methods.includes(method)) {\n      cb(err)\n      return\n    }\n\n    // If a set of status code are provided and the current status code is not in the list\n    if (\n      statusCode != null &&\n      Array.isArray(statusCodes) &&\n      !statusCodes.includes(statusCode)\n    ) {\n      cb(err)\n      return\n    }\n\n    // If we reached the max number of retries\n    if (counter > maxRetries) {\n      cb(err)\n      return\n    }\n\n    let retryAfterHeader = headers?.['retry-after']\n    if (retryAfterHeader) {\n      retryAfterHeader = Number(retryAfterHeader)\n      retryAfterHeader = Number.isNaN(retryAfterHeader)\n        ? calculateRetryAfterHeader(headers['retry-after'])\n        : retryAfterHeader * 1e3 // Retry-After is in seconds\n    }\n\n    const retryTimeout =\n      retryAfterHeader > 0\n        ? Math.min(retryAfterHeader, maxTimeout)\n        : Math.min(minTimeout * timeoutFactor ** (counter - 1), maxTimeout)\n\n    setTimeout(() => cb(null), retryTimeout)\n  }\n\n  onResponseStart (controller, statusCode, headers, statusMessage) {\n    this.error = null\n    this.retryCount += 1\n\n    if (statusCode >= 300) {\n      const err = new RequestRetryError('Request failed', statusCode, {\n        headers,\n        data: {\n          count: this.retryCount\n        }\n      })\n\n      this.onResponseStartWithRetry(controller, statusCode, headers, statusMessage, err)\n      return\n    }\n\n    // Checkpoint for resume from where we left it\n    if (this.headersSent) {\n      // Only Partial Content 206 supposed to provide Content-Range,\n      // any other status code that partially consumed the payload\n      // should not be retried because it would result in downstream\n      // wrongly concatenate multiple responses.\n      if (statusCode !== 206 && (this.start > 0 || statusCode !== 200)) {\n        throw new RequestRetryError('server does not support the range header and the payload was partially consumed', statusCode, {\n          headers,\n          data: { count: this.retryCount }\n        })\n      }\n\n      const contentRange = parseRangeHeader(headers['content-range'])\n      // If no content range\n      if (!contentRange) {\n        // We always throw here as we want to indicate that we entred unexpected path\n        throw new RequestRetryError('Content-Range mismatch', statusCode, {\n          headers,\n          data: { count: this.retryCount }\n        })\n      }\n\n      // Let's start with a weak etag check\n      if (this.etag != null && this.etag !== headers.etag) {\n        // We always throw here as we want to indicate that we entred unexpected path\n        throw new RequestRetryError('ETag mismatch', statusCode, {\n          headers,\n          data: { count: this.retryCount }\n        })\n      }\n\n      const { start, size, end = size ? size - 1 : null } = contentRange\n\n      assert(this.start === start, 'content-range mismatch')\n      assert(this.end == null || this.end === end, 'content-range mismatch')\n\n      return\n    }\n\n    if (this.end == null) {\n      if (statusCode === 206) {\n        // First time we receive 206\n        const range = parseRangeHeader(headers['content-range'])\n\n        if (range == null) {\n          this.headersSent = true\n          this.handler.onResponseStart?.(\n            controller,\n            statusCode,\n            headers,\n            statusMessage\n          )\n          return\n        }\n\n        const { start, size, end = size ? size - 1 : null } = range\n        assert(\n          start != null && Number.isFinite(start),\n          'content-range mismatch'\n        )\n        assert(end != null && Number.isFinite(end), 'invalid content-length')\n\n        this.start = start\n        this.end = end\n      }\n\n      // We make our best to checkpoint the body for further range headers\n      if (this.end == null) {\n        const contentLength = headers['content-length']\n        this.end = contentLength != null ? Number(contentLength) - 1 : null\n      }\n\n      assert(Number.isFinite(this.start))\n      assert(\n        this.end == null || Number.isFinite(this.end),\n        'invalid content-length'\n      )\n\n      this.resume = true\n      this.etag = headers.etag != null ? headers.etag : null\n\n      // Weak etags are not useful for comparison nor cache\n      // for instance not safe to assume if the response is byte-per-byte\n      // equal\n      if (\n        this.etag != null &&\n        this.etag[0] === 'W' &&\n        this.etag[1] === '/'\n      ) {\n        this.etag = null\n      }\n\n      this.headersSent = true\n      this.handler.onResponseStart?.(\n        controller,\n        statusCode,\n        headers,\n        statusMessage\n      )\n    } else {\n      throw new RequestRetryError('Request failed', statusCode, {\n        headers,\n        data: { count: this.retryCount }\n      })\n    }\n  }\n\n  onResponseData (controller, chunk) {\n    if (this.error) {\n      return\n    }\n\n    this.start += chunk.length\n\n    this.handler.onResponseData?.(controller, chunk)\n  }\n\n  onResponseEnd (controller, trailers) {\n    if (this.error && this.retryOpts.throwOnError) {\n      throw this.error\n    }\n\n    if (!this.error) {\n      this.retryCount = 0\n      return this.handler.onResponseEnd?.(controller, trailers)\n    }\n\n    this.retry(controller)\n  }\n\n  retry (controller) {\n    if (this.start !== 0) {\n      const headers = { range: `bytes=${this.start}-${this.end ?? ''}` }\n\n      // Weak etag check - weak etags will make comparison algorithms never match\n      if (this.etag != null) {\n        headers['if-match'] = this.etag\n      }\n\n      this.opts = {\n        ...this.opts,\n        headers: {\n          ...this.opts.headers,\n          ...headers\n        }\n      }\n    }\n\n    try {\n      this.retryCountCheckpoint = this.retryCount\n      this.dispatch(this.opts, this)\n    } catch (err) {\n      this.handler.onResponseError?.(controller, err)\n    }\n  }\n\n  onResponseError (controller, err) {\n    if (controller?.aborted || isDisturbed(this.opts.body)) {\n      this.handler.onResponseError?.(controller, err)\n      return\n    }\n\n    function shouldRetry (returnedErr) {\n      if (!returnedErr) {\n        this.retry(controller)\n        return\n      }\n\n      this.handler?.onResponseError?.(controller, returnedErr)\n    }\n\n    // We reconcile in case of a mix between network errors\n    // and server error response\n    if (this.retryCount - this.retryCountCheckpoint > 0) {\n      // We count the difference between the last checkpoint and the current retry count\n      this.retryCount =\n        this.retryCountCheckpoint +\n        (this.retryCount - this.retryCountCheckpoint)\n    } else {\n      this.retryCount += 1\n    }\n\n    this.retryOpts.retry(\n      err,\n      {\n        state: { counter: this.retryCount },\n        opts: { retryOptions: this.retryOpts, ...this.opts }\n      },\n      shouldRetry.bind(this)\n    )\n  }\n}\n\nmodule.exports = RetryHandler\n", "'use strict'\n\nconst Dispatcher = require('./dispatcher')\nconst RetryHandler = require('../handler/retry-handler')\n\nclass RetryAgent extends Dispatcher {\n  #agent = null\n  #options = null\n  constructor (agent, options = {}) {\n    super(options)\n    this.#agent = agent\n    this.#options = options\n  }\n\n  dispatch (opts, handler) {\n    const retry = new RetryHandler({\n      ...opts,\n      retryOptions: this.#options\n    }, {\n      dispatch: this.#agent.dispatch.bind(this.#agent),\n      handler\n    })\n    return this.#agent.dispatch(opts, retry)\n  }\n\n  close () {\n    return this.#agent.close()\n  }\n\n  destroy () {\n    return this.#agent.destroy()\n  }\n}\n\nmodule.exports = RetryAgent\n", "'use strict'\n\nconst { InvalidArgumentError } = require('../core/errors')\nconst Client = require('./client')\n\nclass H2CClient extends Client {\n  constructor (origin, clientOpts) {\n    if (typeof origin === 'string') {\n      origin = new URL(origin)\n    }\n\n    if (origin.protocol !== 'http:') {\n      throw new InvalidArgumentError(\n        'h2c-client: Only h2c protocol is supported'\n      )\n    }\n\n    const { connect, maxConcurrentStreams, pipelining, ...opts } =\n            clientOpts ?? {}\n    let defaultMaxConcurrentStreams = 100\n    let defaultPipelining = 100\n\n    if (\n      maxConcurrentStreams != null &&\n            Number.isInteger(maxConcurrentStreams) &&\n            maxConcurrentStreams > 0\n    ) {\n      defaultMaxConcurrentStreams = maxConcurrentStreams\n    }\n\n    if (pipelining != null && Number.isInteger(pipelining) && pipelining > 0) {\n      defaultPipelining = pipelining\n    }\n\n    if (defaultPipelining > defaultMaxConcurrentStreams) {\n      throw new InvalidArgumentError(\n        'h2c-client: pipelining cannot be greater than maxConcurrentStreams'\n      )\n    }\n\n    super(origin, {\n      ...opts,\n      maxConcurrentStreams: defaultMaxConcurrentStreams,\n      pipelining: defaultPipelining,\n      allowH2: true,\n      useH2c: true\n    })\n  }\n}\n\nmodule.exports = H2CClient\n", "'use strict'\n\nconst assert = require('node:assert')\nconst { Readable } = require('node:stream')\nconst { RequestAbortedError, NotSupportedError, InvalidArgumentError, AbortError } = require('../core/errors')\nconst util = require('../core/util')\nconst { ReadableStreamFrom } = require('../core/util')\n\nconst kConsume = Symbol('kConsume')\nconst kReading = Symbol('kReading')\nconst kBody = Symbol('kBody')\nconst kAbort = Symbol('kAbort')\nconst kContentType = Symbol('kContentType')\nconst kContentLength = Symbol('kContentLength')\nconst kUsed = Symbol('kUsed')\nconst kBytesRead = Symbol('kBytesRead')\n\nconst noop = () => {}\n\n/**\n * @class\n * @extends {Readable}\n * @see https://fetch.spec.whatwg.org/#body\n */\nclass BodyReadable extends Readable {\n  /**\n   * @param {object} opts\n   * @param {(this: Readable, size: number) => void} opts.resume\n   * @param {() => (void | null)} opts.abort\n   * @param {string} [opts.contentType = '']\n   * @param {number} [opts.contentLength]\n   * @param {number} [opts.highWaterMark = 64 * 1024]\n   */\n  constructor ({\n    resume,\n    abort,\n    contentType = '',\n    contentLength,\n    highWaterMark = 64 * 1024 // Same as nodejs fs streams.\n  }) {\n    super({\n      autoDestroy: true,\n      read: resume,\n      highWaterMark\n    })\n\n    this._readableState.dataEmitted = false\n\n    this[kAbort] = abort\n\n    /** @type {Consume | null} */\n    this[kConsume] = null\n\n    /** @type {number} */\n    this[kBytesRead] = 0\n\n    /** @type {ReadableStream|null} */\n    this[kBody] = null\n\n    /** @type {boolean} */\n    this[kUsed] = false\n\n    /** @type {string} */\n    this[kContentType] = contentType\n\n    /** @type {number|null} */\n    this[kContentLength] = Number.isFinite(contentLength) ? contentLength : null\n\n    /**\n     * Is stream being consumed through Readable API?\n     * This is an optimization so that we avoid checking\n     * for 'data' and 'readable' listeners in the hot path\n     * inside push().\n     *\n     * @type {boolean}\n     */\n    this[kReading] = false\n  }\n\n  /**\n   * @param {Error|null} err\n   * @param {(error:(Error|null)) => void} callback\n   * @returns {void}\n   */\n  _destroy (err, callback) {\n    if (!err && !this._readableState.endEmitted) {\n      err = new RequestAbortedError()\n    }\n\n    if (err) {\n      this[kAbort]()\n    }\n\n    // Workaround for Node \"bug\". If the stream is destroyed in same\n    // tick as it is created, then a user who is waiting for a\n    // promise (i.e micro tick) for installing an 'error' listener will\n    // never get a chance and will always encounter an unhandled exception.\n    if (!this[kUsed]) {\n      setImmediate(callback, err)\n    } else {\n      callback(err)\n    }\n  }\n\n  /**\n   * @param {string|symbol} event\n   * @param {(...args: any[]) => void} listener\n   * @returns {this}\n   */\n  on (event, listener) {\n    if (event === 'data' || event === 'readable') {\n      this[kReading] = true\n      this[kUsed] = true\n    }\n    return super.on(event, listener)\n  }\n\n  /**\n   * @param {string|symbol} event\n   * @param {(...args: any[]) => void} listener\n   * @returns {this}\n   */\n  addListener (event, listener) {\n    return this.on(event, listener)\n  }\n\n  /**\n   * @param {string|symbol} event\n   * @param {(...args: any[]) => void} listener\n   * @returns {this}\n   */\n  off (event, listener) {\n    const ret = super.off(event, listener)\n    if (event === 'data' || event === 'readable') {\n      this[kReading] = (\n        this.listenerCount('data') > 0 ||\n        this.listenerCount('readable') > 0\n      )\n    }\n    return ret\n  }\n\n  /**\n   * @param {string|symbol} event\n   * @param {(...args: any[]) => void} listener\n   * @returns {this}\n   */\n  removeListener (event, listener) {\n    return this.off(event, listener)\n  }\n\n  /**\n   * @param {Buffer|null} chunk\n   * @returns {boolean}\n   */\n  push (chunk) {\n    if (chunk) {\n      this[kBytesRead] += chunk.length\n      if (this[kConsume]) {\n        consumePush(this[kConsume], chunk)\n        return this[kReading] ? super.push(chunk) : true\n      }\n    }\n\n    return super.push(chunk)\n  }\n\n  /**\n   * Consumes and returns the body as a string.\n   *\n   * @see https://fetch.spec.whatwg.org/#dom-body-text\n   * @returns {Promise<string>}\n   */\n  text () {\n    return consume(this, 'text')\n  }\n\n  /**\n   * Consumes and returns the body as a JavaScript Object.\n   *\n   * @see https://fetch.spec.whatwg.org/#dom-body-json\n   * @returns {Promise<unknown>}\n   */\n  json () {\n    return consume(this, 'json')\n  }\n\n  /**\n   * Consumes and returns the body as a Blob\n   *\n   * @see https://fetch.spec.whatwg.org/#dom-body-blob\n   * @returns {Promise<Blob>}\n   */\n  blob () {\n    return consume(this, 'blob')\n  }\n\n  /**\n   * Consumes and returns the body as an Uint8Array.\n   *\n   * @see https://fetch.spec.whatwg.org/#dom-body-bytes\n   * @returns {Promise<Uint8Array>}\n   */\n  bytes () {\n    return consume(this, 'bytes')\n  }\n\n  /**\n   * Consumes and returns the body as an ArrayBuffer.\n   *\n   * @see https://fetch.spec.whatwg.org/#dom-body-arraybuffer\n   * @returns {Promise<ArrayBuffer>}\n   */\n  arrayBuffer () {\n    return consume(this, 'arrayBuffer')\n  }\n\n  /**\n   * Not implemented\n   *\n   * @see https://fetch.spec.whatwg.org/#dom-body-formdata\n   * @throws {NotSupportedError}\n   */\n  async formData () {\n    // TODO: Implement.\n    throw new NotSupportedError()\n  }\n\n  /**\n   * Returns true if the body is not null and the body has been consumed.\n   * Otherwise, returns false.\n   *\n   * @see https://fetch.spec.whatwg.org/#dom-body-bodyused\n   * @readonly\n   * @returns {boolean}\n   */\n  get bodyUsed () {\n    return util.isDisturbed(this)\n  }\n\n  /**\n   * @see https://fetch.spec.whatwg.org/#dom-body-body\n   * @readonly\n   * @returns {ReadableStream}\n   */\n  get body () {\n    if (!this[kBody]) {\n      this[kBody] = ReadableStreamFrom(this)\n      if (this[kConsume]) {\n        // TODO: Is this the best way to force a lock?\n        this[kBody].getReader() // Ensure stream is locked.\n        assert(this[kBody].locked)\n      }\n    }\n    return this[kBody]\n  }\n\n  /**\n   * Dumps the response body by reading `limit` number of bytes.\n   * @param {object} opts\n   * @param {number} [opts.limit = 131072] Number of bytes to read.\n   * @param {AbortSignal} [opts.signal] An AbortSignal to cancel the dump.\n   * @returns {Promise<null>}\n   */\n  dump (opts) {\n    const signal = opts?.signal\n\n    if (signal != null && (typeof signal !== 'object' || !('aborted' in signal))) {\n      return Promise.reject(new InvalidArgumentError('signal must be an AbortSignal'))\n    }\n\n    const limit = opts?.limit && Number.isFinite(opts.limit)\n      ? opts.limit\n      : 128 * 1024\n\n    if (signal?.aborted) {\n      return Promise.reject(signal.reason ?? new AbortError())\n    }\n\n    if (this._readableState.closeEmitted) {\n      return Promise.resolve(null)\n    }\n\n    return new Promise((resolve, reject) => {\n      if (\n        (this[kContentLength] && (this[kContentLength] > limit)) ||\n        this[kBytesRead] > limit\n      ) {\n        this.destroy(new AbortError())\n      }\n\n      if (signal) {\n        const onAbort = () => {\n          this.destroy(signal.reason ?? new AbortError())\n        }\n        signal.addEventListener('abort', onAbort)\n        this\n          .on('close', function () {\n            signal.removeEventListener('abort', onAbort)\n            if (signal.aborted) {\n              reject(signal.reason ?? new AbortError())\n            } else {\n              resolve(null)\n            }\n          })\n      } else {\n        this.on('close', resolve)\n      }\n\n      this\n        .on('error', noop)\n        .on('data', () => {\n          if (this[kBytesRead] > limit) {\n            this.destroy()\n          }\n        })\n        .resume()\n    })\n  }\n\n  /**\n   * @param {BufferEncoding} encoding\n   * @returns {this}\n   */\n  setEncoding (encoding) {\n    if (Buffer.isEncoding(encoding)) {\n      this._readableState.encoding = encoding\n    }\n    return this\n  }\n}\n\n/**\n * @see https://streams.spec.whatwg.org/#readablestream-locked\n * @param {BodyReadable} bodyReadable\n * @returns {boolean}\n */\nfunction isLocked (bodyReadable) {\n  // Consume is an implicit lock.\n  return bodyReadable[kBody]?.locked === true || bodyReadable[kConsume] !== null\n}\n\n/**\n * @see https://fetch.spec.whatwg.org/#body-unusable\n * @param {BodyReadable} bodyReadable\n * @returns {boolean}\n */\nfunction isUnusable (bodyReadable) {\n  return util.isDisturbed(bodyReadable) || isLocked(bodyReadable)\n}\n\n/**\n * @typedef {'text' | 'json' | 'blob' | 'bytes' | 'arrayBuffer'} ConsumeType\n */\n\n/**\n * @template {ConsumeType} T\n * @typedef {T extends 'text' ? string :\n *           T extends 'json' ? unknown :\n *           T extends 'blob' ? Blob :\n *           T extends 'arrayBuffer' ? ArrayBuffer :\n *           T extends 'bytes' ? Uint8Array :\n *           never\n * } ConsumeReturnType\n */\n/**\n * @typedef {object} Consume\n * @property {ConsumeType} type\n * @property {BodyReadable} stream\n * @property {((value?: any) => void)} resolve\n * @property {((err: Error) => void)} reject\n * @property {number} length\n * @property {Buffer[]} body\n */\n\n/**\n * @template {ConsumeType} T\n * @param {BodyReadable} stream\n * @param {T} type\n * @returns {Promise<ConsumeReturnType<T>>}\n */\nfunction consume (stream, type) {\n  assert(!stream[kConsume])\n\n  return new Promise((resolve, reject) => {\n    if (isUnusable(stream)) {\n      const rState = stream._readableState\n      if (rState.destroyed && rState.closeEmitted === false) {\n        stream\n          .on('error', reject)\n          .on('close', () => {\n            reject(new TypeError('unusable'))\n          })\n      } else {\n        reject(rState.errored ?? new TypeError('unusable'))\n      }\n    } else {\n      queueMicrotask(() => {\n        stream[kConsume] = {\n          type,\n          stream,\n          resolve,\n          reject,\n          length: 0,\n          body: []\n        }\n\n        stream\n          .on('error', function (err) {\n            consumeFinish(this[kConsume], err)\n          })\n          .on('close', function () {\n            if (this[kConsume].body !== null) {\n              consumeFinish(this[kConsume], new RequestAbortedError())\n            }\n          })\n\n        consumeStart(stream[kConsume])\n      })\n    }\n  })\n}\n\n/**\n * @param {Consume} consume\n * @returns {void}\n */\nfunction consumeStart (consume) {\n  if (consume.body === null) {\n    return\n  }\n\n  const { _readableState: state } = consume.stream\n\n  if (state.bufferIndex) {\n    const start = state.bufferIndex\n    const end = state.buffer.length\n    for (let n = start; n < end; n++) {\n      consumePush(consume, state.buffer[n])\n    }\n  } else {\n    for (const chunk of state.buffer) {\n      consumePush(consume, chunk)\n    }\n  }\n\n  if (state.endEmitted) {\n    consumeEnd(this[kConsume], this._readableState.encoding)\n  } else {\n    consume.stream.on('end', function () {\n      consumeEnd(this[kConsume], this._readableState.encoding)\n    })\n  }\n\n  consume.stream.resume()\n\n  while (consume.stream.read() != null) {\n    // Loop\n  }\n}\n\n/**\n * @param {Buffer[]} chunks\n * @param {number} length\n * @param {BufferEncoding} [encoding='utf8']\n * @returns {string}\n */\nfunction chunksDecode (chunks, length, encoding) {\n  if (chunks.length === 0 || length === 0) {\n    return ''\n  }\n  const buffer = chunks.length === 1 ? chunks[0] : Buffer.concat(chunks, length)\n  const bufferLength = buffer.length\n\n  // Skip BOM.\n  const start =\n    bufferLength > 2 &&\n    buffer[0] === 0xef &&\n    buffer[1] === 0xbb &&\n    buffer[2] === 0xbf\n      ? 3\n      : 0\n  if (!encoding || encoding === 'utf8' || encoding === 'utf-8') {\n    return buffer.utf8Slice(start, bufferLength)\n  } else {\n    return buffer.subarray(start, bufferLength).toString(encoding)\n  }\n}\n\n/**\n * @param {Buffer[]} chunks\n * @param {number} length\n * @returns {Uint8Array}\n */\nfunction chunksConcat (chunks, length) {\n  if (chunks.length === 0 || length === 0) {\n    return new Uint8Array(0)\n  }\n  if (chunks.length === 1) {\n    // fast-path\n    return new Uint8Array(chunks[0])\n  }\n  const buffer = new Uint8Array(Buffer.allocUnsafeSlow(length).buffer)\n\n  let offset = 0\n  for (let i = 0; i < chunks.length; ++i) {\n    const chunk = chunks[i]\n    buffer.set(chunk, offset)\n    offset += chunk.length\n  }\n\n  return buffer\n}\n\n/**\n * @param {Consume} consume\n * @param {BufferEncoding} encoding\n * @returns {void}\n */\nfunction consumeEnd (consume, encoding) {\n  const { type, body, resolve, stream, length } = consume\n\n  try {\n    if (type === 'text') {\n      resolve(chunksDecode(body, length, encoding))\n    } else if (type === 'json') {\n      resolve(JSON.parse(chunksDecode(body, length, encoding)))\n    } else if (type === 'arrayBuffer') {\n      resolve(chunksConcat(body, length).buffer)\n    } else if (type === 'blob') {\n      resolve(new Blob(body, { type: stream[kContentType] }))\n    } else if (type === 'bytes') {\n      resolve(chunksConcat(body, length))\n    }\n\n    consumeFinish(consume)\n  } catch (err) {\n    stream.destroy(err)\n  }\n}\n\n/**\n * @param {Consume} consume\n * @param {Buffer} chunk\n * @returns {void}\n */\nfunction consumePush (consume, chunk) {\n  consume.length += chunk.length\n  consume.body.push(chunk)\n}\n\n/**\n * @param {Consume} consume\n * @param {Error} [err]\n * @returns {void}\n */\nfunction consumeFinish (consume, err) {\n  if (consume.body === null) {\n    return\n  }\n\n  if (err) {\n    consume.reject(err)\n  } else {\n    consume.resolve()\n  }\n\n  // Reset the consume object to allow for garbage collection.\n  consume.type = null\n  consume.stream = null\n  consume.resolve = null\n  consume.reject = null\n  consume.length = 0\n  consume.body = null\n}\n\nmodule.exports = {\n  Readable: BodyReadable,\n  chunksDecode\n}\n", "'use strict'\n\nconst assert = require('node:assert')\nconst { AsyncResource } = require('node:async_hooks')\nconst { Readable } = require('./readable')\nconst { InvalidArgumentError, RequestAbortedError } = require('../core/errors')\nconst util = require('../core/util')\n\nfunction noop () {}\n\nclass RequestHandler extends AsyncResource {\n  constructor (opts, callback) {\n    if (!opts || typeof opts !== 'object') {\n      throw new InvalidArgumentError('invalid opts')\n    }\n\n    const { signal, method, opaque, body, onInfo, responseHeaders, highWaterMark } = opts\n\n    try {\n      if (typeof callback !== 'function') {\n        throw new InvalidArgumentError('invalid callback')\n      }\n\n      if (highWaterMark && (typeof highWaterMark !== 'number' || highWaterMark < 0)) {\n        throw new InvalidArgumentError('invalid highWaterMark')\n      }\n\n      if (signal && typeof signal.on !== 'function' && typeof signal.addEventListener !== 'function') {\n        throw new InvalidArgumentError('signal must be an EventEmitter or EventTarget')\n      }\n\n      if (method === 'CONNECT') {\n        throw new InvalidArgumentError('invalid method')\n      }\n\n      if (onInfo && typeof onInfo !== 'function') {\n        throw new InvalidArgumentError('invalid onInfo callback')\n      }\n\n      super('UNDICI_REQUEST')\n    } catch (err) {\n      if (util.isStream(body)) {\n        util.destroy(body.on('error', noop), err)\n      }\n      throw err\n    }\n\n    this.method = method\n    this.responseHeaders = responseHeaders || null\n    this.opaque = opaque || null\n    this.callback = callback\n    this.res = null\n    this.abort = null\n    this.body = body\n    this.trailers = {}\n    this.context = null\n    this.onInfo = onInfo || null\n    this.highWaterMark = highWaterMark\n    this.reason = null\n    this.removeAbortListener = null\n\n    if (signal?.aborted) {\n      this.reason = signal.reason ?? new RequestAbortedError()\n    } else if (signal) {\n      this.removeAbortListener = util.addAbortListener(signal, () => {\n        this.reason = signal.reason ?? new RequestAbortedError()\n        if (this.res) {\n          util.destroy(this.res.on('error', noop), this.reason)\n        } else if (this.abort) {\n          this.abort(this.reason)\n        }\n      })\n    }\n  }\n\n  onConnect (abort, context) {\n    if (this.reason) {\n      abort(this.reason)\n      return\n    }\n\n    assert(this.callback)\n\n    this.abort = abort\n    this.context = context\n  }\n\n  onHeaders (statusCode, rawHeaders, resume, statusMessage) {\n    const { callback, opaque, abort, context, responseHeaders, highWaterMark } = this\n\n    const headers = responseHeaders === 'raw' ? util.parseRawHeaders(rawHeaders) : util.parseHeaders(rawHeaders)\n\n    if (statusCode < 200) {\n      if (this.onInfo) {\n        this.onInfo({ statusCode, headers })\n      }\n      return\n    }\n\n    const parsedHeaders = responseHeaders === 'raw' ? util.parseHeaders(rawHeaders) : headers\n    const contentType = parsedHeaders['content-type']\n    const contentLength = parsedHeaders['content-length']\n    const res = new Readable({\n      resume,\n      abort,\n      contentType,\n      contentLength: this.method !== 'HEAD' && contentLength\n        ? Number(contentLength)\n        : null,\n      highWaterMark\n    })\n\n    if (this.removeAbortListener) {\n      res.on('close', this.removeAbortListener)\n      this.removeAbortListener = null\n    }\n\n    this.callback = null\n    this.res = res\n    if (callback !== null) {\n      try {\n        this.runInAsyncScope(callback, null, null, {\n          statusCode,\n          statusText: statusMessage,\n          headers,\n          trailers: this.trailers,\n          opaque,\n          body: res,\n          context\n        })\n      } catch (err) {\n        // If the callback throws synchronously, we need to handle it\n        // Remove reference to res to allow res being garbage collected\n        this.res = null\n\n        // Destroy the response stream\n        util.destroy(res.on('error', noop), err)\n\n        // Use queueMicrotask to re-throw the error so it reaches uncaughtException\n        queueMicrotask(() => {\n          throw err\n        })\n      }\n    }\n  }\n\n  onData (chunk) {\n    return this.res.push(chunk)\n  }\n\n  onComplete (trailers) {\n    util.parseHeaders(trailers, this.trailers)\n    this.res.push(null)\n  }\n\n  onError (err) {\n    const { res, callback, body, opaque } = this\n\n    if (callback) {\n      // TODO: Does this need queueMicrotask?\n      this.callback = null\n      queueMicrotask(() => {\n        this.runInAsyncScope(callback, null, err, { opaque })\n      })\n    }\n\n    if (res) {\n      this.res = null\n      // Ensure all queued handlers are invoked before destroying res.\n      queueMicrotask(() => {\n        util.destroy(res.on('error', noop), err)\n      })\n    }\n\n    if (body) {\n      this.body = null\n\n      if (util.isStream(body)) {\n        body.on('error', noop)\n        util.destroy(body, err)\n      }\n    }\n\n    if (this.removeAbortListener) {\n      this.removeAbortListener()\n      this.removeAbortListener = null\n    }\n  }\n}\n\nfunction request (opts, callback) {\n  if (callback === undefined) {\n    return new Promise((resolve, reject) => {\n      request.call(this, opts, (err, data) => {\n        return err ? reject(err) : resolve(data)\n      })\n    })\n  }\n\n  try {\n    const handler = new RequestHandler(opts, callback)\n\n    this.dispatch(opts, handler)\n  } catch (err) {\n    if (typeof callback !== 'function') {\n      throw err\n    }\n    const opaque = opts?.opaque\n    queueMicrotask(() => callback(err, { opaque }))\n  }\n}\n\nmodule.exports = request\nmodule.exports.RequestHandler = RequestHandler\n", "'use strict'\n\nconst { addAbortListener } = require('../core/util')\nconst { RequestAbortedError } = require('../core/errors')\n\nconst kListener = Symbol('kListener')\nconst kSignal = Symbol('kSignal')\n\nfunction abort (self) {\n  if (self.abort) {\n    self.abort(self[kSignal]?.reason)\n  } else {\n    self.reason = self[kSignal]?.reason ?? new RequestAbortedError()\n  }\n  removeSignal(self)\n}\n\nfunction addSignal (self, signal) {\n  self.reason = null\n\n  self[kSignal] = null\n  self[kListener] = null\n\n  if (!signal) {\n    return\n  }\n\n  if (signal.aborted) {\n    abort(self)\n    return\n  }\n\n  self[kSignal] = signal\n  self[kListener] = () => {\n    abort(self)\n  }\n\n  addAbortListener(self[kSignal], self[kListener])\n}\n\nfunction removeSignal (self) {\n  if (!self[kSignal]) {\n    return\n  }\n\n  if ('removeEventListener' in self[kSignal]) {\n    self[kSignal].removeEventListener('abort', self[kListener])\n  } else {\n    self[kSignal].removeListener('abort', self[kListener])\n  }\n\n  self[kSignal] = null\n  self[kListener] = null\n}\n\nmodule.exports = {\n  addSignal,\n  removeSignal\n}\n", "'use strict'\n\nconst assert = require('node:assert')\nconst { finished } = require('node:stream')\nconst { AsyncResource } = require('node:async_hooks')\nconst { InvalidArgumentError, InvalidReturnValueError } = require('../core/errors')\nconst util = require('../core/util')\nconst { addSignal, removeSignal } = require('./abort-signal')\n\nfunction noop () {}\n\nclass StreamHandler extends AsyncResource {\n  constructor (opts, factory, callback) {\n    if (!opts || typeof opts !== 'object') {\n      throw new InvalidArgumentError('invalid opts')\n    }\n\n    const { signal, method, opaque, body, onInfo, responseHeaders } = opts\n\n    try {\n      if (typeof callback !== 'function') {\n        throw new InvalidArgumentError('invalid callback')\n      }\n\n      if (typeof factory !== 'function') {\n        throw new InvalidArgumentError('invalid factory')\n      }\n\n      if (signal && typeof signal.on !== 'function' && typeof signal.addEventListener !== 'function') {\n        throw new InvalidArgumentError('signal must be an EventEmitter or EventTarget')\n      }\n\n      if (method === 'CONNECT') {\n        throw new InvalidArgumentError('invalid method')\n      }\n\n      if (onInfo && typeof onInfo !== 'function') {\n        throw new InvalidArgumentError('invalid onInfo callback')\n      }\n\n      super('UNDICI_STREAM')\n    } catch (err) {\n      if (util.isStream(body)) {\n        util.destroy(body.on('error', noop), err)\n      }\n      throw err\n    }\n\n    this.responseHeaders = responseHeaders || null\n    this.opaque = opaque || null\n    this.factory = factory\n    this.callback = callback\n    this.res = null\n    this.abort = null\n    this.context = null\n    this.trailers = null\n    this.body = body\n    this.onInfo = onInfo || null\n\n    if (util.isStream(body)) {\n      body.on('error', (err) => {\n        this.onError(err)\n      })\n    }\n\n    addSignal(this, signal)\n  }\n\n  onConnect (abort, context) {\n    if (this.reason) {\n      abort(this.reason)\n      return\n    }\n\n    assert(this.callback)\n\n    this.abort = abort\n    this.context = context\n  }\n\n  onHeaders (statusCode, rawHeaders, resume, statusMessage) {\n    const { factory, opaque, context, responseHeaders } = this\n\n    const headers = responseHeaders === 'raw' ? util.parseRawHeaders(rawHeaders) : util.parseHeaders(rawHeaders)\n\n    if (statusCode < 200) {\n      if (this.onInfo) {\n        this.onInfo({ statusCode, headers })\n      }\n      return\n    }\n\n    this.factory = null\n\n    if (factory === null) {\n      return\n    }\n\n    const res = this.runInAsyncScope(factory, null, {\n      statusCode,\n      headers,\n      opaque,\n      context\n    })\n\n    if (\n      !res ||\n      typeof res.write !== 'function' ||\n      typeof res.end !== 'function' ||\n      typeof res.on !== 'function'\n    ) {\n      throw new InvalidReturnValueError('expected Writable')\n    }\n\n    // TODO: Avoid finished. It registers an unnecessary amount of listeners.\n    finished(res, { readable: false }, (err) => {\n      const { callback, res, opaque, trailers, abort } = this\n\n      this.res = null\n      if (err || !res?.readable) {\n        util.destroy(res, err)\n      }\n\n      this.callback = null\n      this.runInAsyncScope(callback, null, err || null, { opaque, trailers })\n\n      if (err) {\n        abort()\n      }\n    })\n\n    res.on('drain', resume)\n\n    this.res = res\n\n    const needDrain = res.writableNeedDrain !== undefined\n      ? res.writableNeedDrain\n      : res._writableState?.needDrain\n\n    return needDrain !== true\n  }\n\n  onData (chunk) {\n    const { res } = this\n\n    return res ? res.write(chunk) : true\n  }\n\n  onComplete (trailers) {\n    const { res } = this\n\n    removeSignal(this)\n\n    if (!res) {\n      return\n    }\n\n    this.trailers = util.parseHeaders(trailers)\n\n    res.end()\n  }\n\n  onError (err) {\n    const { res, callback, opaque, body } = this\n\n    removeSignal(this)\n\n    this.factory = null\n\n    if (res) {\n      this.res = null\n      util.destroy(res, err)\n    } else if (callback) {\n      this.callback = null\n      queueMicrotask(() => {\n        this.runInAsyncScope(callback, null, err, { opaque })\n      })\n    }\n\n    if (body) {\n      this.body = null\n      util.destroy(body, err)\n    }\n  }\n}\n\nfunction stream (opts, factory, callback) {\n  if (callback === undefined) {\n    return new Promise((resolve, reject) => {\n      stream.call(this, opts, factory, (err, data) => {\n        return err ? reject(err) : resolve(data)\n      })\n    })\n  }\n\n  try {\n    const handler = new StreamHandler(opts, factory, callback)\n\n    this.dispatch(opts, handler)\n  } catch (err) {\n    if (typeof callback !== 'function') {\n      throw err\n    }\n    const opaque = opts?.opaque\n    queueMicrotask(() => callback(err, { opaque }))\n  }\n}\n\nmodule.exports = stream\n", "'use strict'\n\nconst {\n  Readable,\n  Duplex,\n  PassThrough\n} = require('node:stream')\nconst assert = require('node:assert')\nconst { AsyncResource } = require('node:async_hooks')\nconst {\n  InvalidArgumentError,\n  InvalidReturnValueError,\n  RequestAbortedError\n} = require('../core/errors')\nconst util = require('../core/util')\nconst { addSignal, removeSignal } = require('./abort-signal')\n\nfunction noop () {}\n\nconst kResume = Symbol('resume')\n\nclass PipelineRequest extends Readable {\n  constructor () {\n    super({ autoDestroy: true })\n\n    this[kResume] = null\n  }\n\n  _read () {\n    const { [kResume]: resume } = this\n\n    if (resume) {\n      this[kResume] = null\n      resume()\n    }\n  }\n\n  _destroy (err, callback) {\n    this._read()\n\n    callback(err)\n  }\n}\n\nclass PipelineResponse extends Readable {\n  constructor (resume) {\n    super({ autoDestroy: true })\n    this[kResume] = resume\n  }\n\n  _read () {\n    this[kResume]()\n  }\n\n  _destroy (err, callback) {\n    if (!err && !this._readableState.endEmitted) {\n      err = new RequestAbortedError()\n    }\n\n    callback(err)\n  }\n}\n\nclass PipelineHandler extends AsyncResource {\n  constructor (opts, handler) {\n    if (!opts || typeof opts !== 'object') {\n      throw new InvalidArgumentError('invalid opts')\n    }\n\n    if (typeof handler !== 'function') {\n      throw new InvalidArgumentError('invalid handler')\n    }\n\n    const { signal, method, opaque, onInfo, responseHeaders } = opts\n\n    if (signal && typeof signal.on !== 'function' && typeof signal.addEventListener !== 'function') {\n      throw new InvalidArgumentError('signal must be an EventEmitter or EventTarget')\n    }\n\n    if (method === 'CONNECT') {\n      throw new InvalidArgumentError('invalid method')\n    }\n\n    if (onInfo && typeof onInfo !== 'function') {\n      throw new InvalidArgumentError('invalid onInfo callback')\n    }\n\n    super('UNDICI_PIPELINE')\n\n    this.opaque = opaque || null\n    this.responseHeaders = responseHeaders || null\n    this.handler = handler\n    this.abort = null\n    this.context = null\n    this.onInfo = onInfo || null\n\n    this.req = new PipelineRequest().on('error', noop)\n\n    this.ret = new Duplex({\n      readableObjectMode: opts.objectMode,\n      autoDestroy: true,\n      read: () => {\n        const { body } = this\n\n        if (body?.resume) {\n          body.resume()\n        }\n      },\n      write: (chunk, encoding, callback) => {\n        const { req } = this\n\n        if (req.push(chunk, encoding) || req._readableState.destroyed) {\n          callback()\n        } else {\n          req[kResume] = callback\n        }\n      },\n      destroy: (err, callback) => {\n        const { body, req, res, ret, abort } = this\n\n        if (!err && !ret._readableState.endEmitted) {\n          err = new RequestAbortedError()\n        }\n\n        if (abort && err) {\n          abort()\n        }\n\n        util.destroy(body, err)\n        util.destroy(req, err)\n        util.destroy(res, err)\n\n        removeSignal(this)\n\n        callback(err)\n      }\n    }).on('prefinish', () => {\n      const { req } = this\n\n      // Node < 15 does not call _final in same tick.\n      req.push(null)\n    })\n\n    this.res = null\n\n    addSignal(this, signal)\n  }\n\n  onConnect (abort, context) {\n    const { res } = this\n\n    if (this.reason) {\n      abort(this.reason)\n      return\n    }\n\n    assert(!res, 'pipeline cannot be retried')\n\n    this.abort = abort\n    this.context = context\n  }\n\n  onHeaders (statusCode, rawHeaders, resume) {\n    const { opaque, handler, context } = this\n\n    if (statusCode < 200) {\n      if (this.onInfo) {\n        const headers = this.responseHeaders === 'raw' ? util.parseRawHeaders(rawHeaders) : util.parseHeaders(rawHeaders)\n        this.onInfo({ statusCode, headers })\n      }\n      return\n    }\n\n    this.res = new PipelineResponse(resume)\n\n    let body\n    try {\n      this.handler = null\n      const headers = this.responseHeaders === 'raw' ? util.parseRawHeaders(rawHeaders) : util.parseHeaders(rawHeaders)\n      body = this.runInAsyncScope(handler, null, {\n        statusCode,\n        headers,\n        opaque,\n        body: this.res,\n        context\n      })\n    } catch (err) {\n      this.res.on('error', noop)\n      throw err\n    }\n\n    if (!body || typeof body.on !== 'function') {\n      throw new InvalidReturnValueError('expected Readable')\n    }\n\n    body\n      .on('data', (chunk) => {\n        const { ret, body } = this\n\n        if (!ret.push(chunk) && body.pause) {\n          body.pause()\n        }\n      })\n      .on('error', (err) => {\n        const { ret } = this\n\n        util.destroy(ret, err)\n      })\n      .on('end', () => {\n        const { ret } = this\n\n        ret.push(null)\n      })\n      .on('close', () => {\n        const { ret } = this\n\n        if (!ret._readableState.ended) {\n          util.destroy(ret, new RequestAbortedError())\n        }\n      })\n\n    this.body = body\n  }\n\n  onData (chunk) {\n    const { res } = this\n    return res.push(chunk)\n  }\n\n  onComplete (trailers) {\n    const { res } = this\n    res.push(null)\n  }\n\n  onError (err) {\n    const { ret } = this\n    this.handler = null\n    util.destroy(ret, err)\n  }\n}\n\nfunction pipeline (opts, handler) {\n  try {\n    const pipelineHandler = new PipelineHandler(opts, handler)\n    this.dispatch({ ...opts, body: pipelineHandler.req }, pipelineHandler)\n    return pipelineHandler.ret\n  } catch (err) {\n    return new PassThrough().destroy(err)\n  }\n}\n\nmodule.exports = pipeline\n", "'use strict'\n\nconst { InvalidArgumentError, SocketError } = require('../core/errors')\nconst { AsyncResource } = require('node:async_hooks')\nconst assert = require('node:assert')\nconst util = require('../core/util')\nconst { kHTTP2Stream } = require('../core/symbols')\nconst { addSignal, removeSignal } = require('./abort-signal')\n\nclass UpgradeHandler extends AsyncResource {\n  constructor (opts, callback) {\n    if (!opts || typeof opts !== 'object') {\n      throw new InvalidArgumentError('invalid opts')\n    }\n\n    if (typeof callback !== 'function') {\n      throw new InvalidArgumentError('invalid callback')\n    }\n\n    const { signal, opaque, responseHeaders } = opts\n\n    if (signal && typeof signal.on !== 'function' && typeof signal.addEventListener !== 'function') {\n      throw new InvalidArgumentError('signal must be an EventEmitter or EventTarget')\n    }\n\n    super('UNDICI_UPGRADE')\n\n    this.responseHeaders = responseHeaders || null\n    this.opaque = opaque || null\n    this.callback = callback\n    this.abort = null\n    this.context = null\n\n    addSignal(this, signal)\n  }\n\n  onConnect (abort, context) {\n    if (this.reason) {\n      abort(this.reason)\n      return\n    }\n\n    assert(this.callback)\n\n    this.abort = abort\n    this.context = null\n  }\n\n  onHeaders () {\n    throw new SocketError('bad upgrade', null)\n  }\n\n  onUpgrade (statusCode, rawHeaders, socket) {\n    assert(socket[kHTTP2Stream] === true ? statusCode === 200 : statusCode === 101)\n\n    const { callback, opaque, context } = this\n\n    removeSignal(this)\n\n    this.callback = null\n    const headers = this.responseHeaders === 'raw' ? util.parseRawHeaders(rawHeaders) : util.parseHeaders(rawHeaders)\n    this.runInAsyncScope(callback, null, null, {\n      headers,\n      socket,\n      opaque,\n      context\n    })\n  }\n\n  onError (err) {\n    const { callback, opaque } = this\n\n    removeSignal(this)\n\n    if (callback) {\n      this.callback = null\n      queueMicrotask(() => {\n        this.runInAsyncScope(callback, null, err, { opaque })\n      })\n    }\n  }\n}\n\nfunction upgrade (opts, callback) {\n  if (callback === undefined) {\n    return new Promise((resolve, reject) => {\n      upgrade.call(this, opts, (err, data) => {\n        return err ? reject(err) : resolve(data)\n      })\n    })\n  }\n\n  try {\n    const upgradeHandler = new UpgradeHandler(opts, callback)\n    const upgradeOpts = {\n      ...opts,\n      method: opts.method || 'GET',\n      upgrade: opts.protocol || 'Websocket'\n    }\n\n    this.dispatch(upgradeOpts, upgradeHandler)\n  } catch (err) {\n    if (typeof callback !== 'function') {\n      throw err\n    }\n    const opaque = opts?.opaque\n    queueMicrotask(() => callback(err, { opaque }))\n  }\n}\n\nmodule.exports = upgrade\n", "'use strict'\n\nconst assert = require('node:assert')\nconst { AsyncResource } = require('node:async_hooks')\nconst { InvalidArgumentError, SocketError } = require('../core/errors')\nconst util = require('../core/util')\nconst { addSignal, removeSignal } = require('./abort-signal')\n\nclass ConnectHandler extends AsyncResource {\n  constructor (opts, callback) {\n    if (!opts || typeof opts !== 'object') {\n      throw new InvalidArgumentError('invalid opts')\n    }\n\n    if (typeof callback !== 'function') {\n      throw new InvalidArgumentError('invalid callback')\n    }\n\n    const { signal, opaque, responseHeaders } = opts\n\n    if (signal && typeof signal.on !== 'function' && typeof signal.addEventListener !== 'function') {\n      throw new InvalidArgumentError('signal must be an EventEmitter or EventTarget')\n    }\n\n    super('UNDICI_CONNECT')\n\n    this.opaque = opaque || null\n    this.responseHeaders = responseHeaders || null\n    this.callback = callback\n    this.abort = null\n\n    addSignal(this, signal)\n  }\n\n  onConnect (abort, context) {\n    if (this.reason) {\n      abort(this.reason)\n      return\n    }\n\n    assert(this.callback)\n\n    this.abort = abort\n    this.context = context\n  }\n\n  onHeaders () {\n    throw new SocketError('bad connect', null)\n  }\n\n  onUpgrade (statusCode, rawHeaders, socket) {\n    const { callback, opaque, context } = this\n\n    removeSignal(this)\n\n    this.callback = null\n\n    let headers = rawHeaders\n    // Indicates is an HTTP2Session\n    if (headers != null) {\n      headers = this.responseHeaders === 'raw' ? util.parseRawHeaders(rawHeaders) : util.parseHeaders(rawHeaders)\n    }\n\n    this.runInAsyncScope(callback, null, null, {\n      statusCode,\n      headers,\n      socket,\n      opaque,\n      context\n    })\n  }\n\n  onError (err) {\n    const { callback, opaque } = this\n\n    removeSignal(this)\n\n    if (callback) {\n      this.callback = null\n      queueMicrotask(() => {\n        this.runInAsyncScope(callback, null, err, { opaque })\n      })\n    }\n  }\n}\n\nfunction connect (opts, callback) {\n  if (callback === undefined) {\n    return new Promise((resolve, reject) => {\n      connect.call(this, opts, (err, data) => {\n        return err ? reject(err) : resolve(data)\n      })\n    })\n  }\n\n  try {\n    const connectHandler = new ConnectHandler(opts, callback)\n    const connectOptions = { ...opts, method: 'CONNECT' }\n\n    this.dispatch(connectOptions, connectHandler)\n  } catch (err) {\n    if (typeof callback !== 'function') {\n      throw err\n    }\n    const opaque = opts?.opaque\n    queueMicrotask(() => callback(err, { opaque }))\n  }\n}\n\nmodule.exports = connect\n", "'use strict'\n\nmodule.exports.request = require('./api-request')\nmodule.exports.stream = require('./api-stream')\nmodule.exports.pipeline = require('./api-pipeline')\nmodule.exports.upgrade = require('./api-upgrade')\nmodule.exports.connect = require('./api-connect')\n", "'use strict'\n\nconst { UndiciError } = require('../core/errors')\n\nconst kMockNotMatchedError = Symbol.for('undici.error.UND_MOCK_ERR_MOCK_NOT_MATCHED')\n\n/**\n * The request does not match any registered mock dispatches.\n */\nclass MockNotMatchedError extends UndiciError {\n  constructor (message) {\n    super(message)\n    this.name = 'MockNotMatchedError'\n    this.message = message || 'The request does not match any registered mock dispatches'\n    this.code = 'UND_MOCK_ERR_MOCK_NOT_MATCHED'\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kMockNotMatchedError] === true\n  }\n\n  get [kMockNotMatchedError] () {\n    return true\n  }\n}\n\nmodule.exports = {\n  MockNotMatchedError\n}\n", "'use strict'\n\nmodule.exports = {\n  kAgent: Symbol('agent'),\n  kOptions: Symbol('options'),\n  kFactory: Symbol('factory'),\n  kDispatches: Symbol('dispatches'),\n  kDispatchKey: Symbol('dispatch key'),\n  kDefaultHeaders: Symbol('default headers'),\n  kDefaultTrailers: Symbol('default trailers'),\n  kContentLength: Symbol('content length'),\n  kMockAgent: Symbol('mock agent'),\n  kMockAgentSet: Symbol('mock agent set'),\n  kMockAgentGet: Symbol('mock agent get'),\n  kMockDispatch: Symbol('mock dispatch'),\n  kClose: Symbol('close'),\n  kOriginalClose: Symbol('original agent close'),\n  kOriginalDispatch: Symbol('original dispatch'),\n  kOrigin: Symbol('origin'),\n  kIsMockActive: Symbol('is mock active'),\n  kNetConnect: Symbol('net connect'),\n  kGetNetConnect: Symbol('get net connect'),\n  kConnected: Symbol('connected'),\n  kIgnoreTrailingSlash: Symbol('ignore trailing slash'),\n  kMockAgentMockCallHistoryInstance: Symbol('mock agent mock call history name'),\n  kMockAgentRegisterCallHistory: Symbol('mock agent register mock call history'),\n  kMockAgentAddCallHistoryLog: Symbol('mock agent add call history log'),\n  kMockAgentIsCallHistoryEnabled: Symbol('mock agent is call history enabled'),\n  kMockAgentAcceptsNonStandardSearchParameters: Symbol('mock agent accepts non standard search parameters'),\n  kMockCallHistoryAddLog: Symbol('mock call history add log')\n}\n", "'use strict'\n\nconst { MockNotMatchedError } = require('./mock-errors')\nconst {\n  kDispatches,\n  kMockAgent,\n  kOriginalDispatch,\n  kOrigin,\n  kGetNetConnect\n} = require('./mock-symbols')\nconst { serializePathWithQuery } = require('../core/util')\nconst { STATUS_CODES } = require('node:http')\nconst {\n  types: {\n    isPromise\n  }\n} = require('node:util')\nconst { InvalidArgumentError } = require('../core/errors')\n\nfunction matchValue (match, value) {\n  if (typeof match === 'string') {\n    return match === value\n  }\n  if (match instanceof RegExp) {\n    return match.test(value)\n  }\n  if (typeof match === 'function') {\n    return match(value) === true\n  }\n  return false\n}\n\nfunction lowerCaseEntries (headers) {\n  return Object.fromEntries(\n    Object.entries(headers).map(([headerName, headerValue]) => {\n      return [headerName.toLocaleLowerCase(), headerValue]\n    })\n  )\n}\n\n/**\n * @param {import('../../index').Headers|string[]|Record<string, string>} headers\n * @param {string} key\n */\nfunction getHeaderByName (headers, key) {\n  if (Array.isArray(headers)) {\n    for (let i = 0; i < headers.length; i += 2) {\n      if (headers[i].toLocaleLowerCase() === key.toLocaleLowerCase()) {\n        return headers[i + 1]\n      }\n    }\n\n    return undefined\n  } else if (typeof headers.get === 'function') {\n    return headers.get(key)\n  } else {\n    return lowerCaseEntries(headers)[key.toLocaleLowerCase()]\n  }\n}\n\n/** @param {string[]} headers */\nfunction buildHeadersFromArray (headers) { // fetch HeadersList\n  const clone = headers.slice()\n  const entries = []\n  for (let index = 0; index < clone.length; index += 2) {\n    entries.push([clone[index], clone[index + 1]])\n  }\n  return Object.fromEntries(entries)\n}\n\nfunction matchHeaders (mockDispatch, headers) {\n  if (typeof mockDispatch.headers === 'function') {\n    if (Array.isArray(headers)) { // fetch HeadersList\n      headers = buildHeadersFromArray(headers)\n    }\n    return mockDispatch.headers(headers ? lowerCaseEntries(headers) : {})\n  }\n  if (typeof mockDispatch.headers === 'undefined') {\n    return true\n  }\n  if (typeof headers !== 'object' || typeof mockDispatch.headers !== 'object') {\n    return false\n  }\n\n  for (const [matchHeaderName, matchHeaderValue] of Object.entries(mockDispatch.headers)) {\n    const headerValue = getHeaderByName(headers, matchHeaderName)\n\n    if (!matchValue(matchHeaderValue, headerValue)) {\n      return false\n    }\n  }\n  return true\n}\n\nfunction normalizeSearchParams (query) {\n  if (typeof query !== 'string') {\n    return query\n  }\n\n  const originalQp = new URLSearchParams(query)\n  const normalizedQp = new URLSearchParams()\n\n  for (let [key, value] of originalQp.entries()) {\n    key = key.replace('[]', '')\n\n    const valueRepresentsString = /^(['\"]).*\\1$/.test(value)\n    if (valueRepresentsString) {\n      normalizedQp.append(key, value)\n      continue\n    }\n\n    if (value.includes(',')) {\n      const values = value.split(',')\n      for (const v of values) {\n        normalizedQp.append(key, v)\n      }\n      continue\n    }\n\n    normalizedQp.append(key, value)\n  }\n\n  return normalizedQp\n}\n\nfunction safeUrl (path) {\n  if (typeof path !== 'string') {\n    return path\n  }\n  const pathSegments = path.split('?', 3)\n  if (pathSegments.length !== 2) {\n    return path\n  }\n\n  const qp = new URLSearchParams(pathSegments.pop())\n  qp.sort()\n  return [...pathSegments, qp.toString()].join('?')\n}\n\nfunction matchKey (mockDispatch, { path, method, body, headers }) {\n  const pathMatch = matchValue(mockDispatch.path, path)\n  const methodMatch = matchValue(mockDispatch.method, method)\n  const bodyMatch = typeof mockDispatch.body !== 'undefined' ? matchValue(mockDispatch.body, body) : true\n  const headersMatch = matchHeaders(mockDispatch, headers)\n  return pathMatch && methodMatch && bodyMatch && headersMatch\n}\n\nfunction getResponseData (data) {\n  if (Buffer.isBuffer(data)) {\n    return data\n  } else if (data instanceof Uint8Array) {\n    return data\n  } else if (data instanceof ArrayBuffer) {\n    return data\n  } else if (typeof data === 'object') {\n    return JSON.stringify(data)\n  } else if (data) {\n    return data.toString()\n  } else {\n    return ''\n  }\n}\n\nfunction getMockDispatch (mockDispatches, key) {\n  const basePath = key.query ? serializePathWithQuery(key.path, key.query) : key.path\n  const resolvedPath = typeof basePath === 'string' ? safeUrl(basePath) : basePath\n\n  const resolvedPathWithoutTrailingSlash = removeTrailingSlash(resolvedPath)\n\n  // Match path\n  let matchedMockDispatches = mockDispatches\n    .filter(({ consumed }) => !consumed)\n    .filter(({ path, ignoreTrailingSlash }) => {\n      return ignoreTrailingSlash\n        ? matchValue(removeTrailingSlash(safeUrl(path)), resolvedPathWithoutTrailingSlash)\n        : matchValue(safeUrl(path), resolvedPath)\n    })\n  if (matchedMockDispatches.length === 0) {\n    throw new MockNotMatchedError(`Mock dispatch not matched for path '${resolvedPath}'`)\n  }\n\n  // Match method\n  matchedMockDispatches = matchedMockDispatches.filter(({ method }) => matchValue(method, key.method))\n  if (matchedMockDispatches.length === 0) {\n    throw new MockNotMatchedError(`Mock dispatch not matched for method '${key.method}' on path '${resolvedPath}'`)\n  }\n\n  // Match body\n  matchedMockDispatches = matchedMockDispatches.filter(({ body }) => typeof body !== 'undefined' ? matchValue(body, key.body) : true)\n  if (matchedMockDispatches.length === 0) {\n    throw new MockNotMatchedError(`Mock dispatch not matched for body '${key.body}' on path '${resolvedPath}'`)\n  }\n\n  // Match headers\n  matchedMockDispatches = matchedMockDispatches.filter((mockDispatch) => matchHeaders(mockDispatch, key.headers))\n  if (matchedMockDispatches.length === 0) {\n    const headers = typeof key.headers === 'object' ? JSON.stringify(key.headers) : key.headers\n    throw new MockNotMatchedError(`Mock dispatch not matched for headers '${headers}' on path '${resolvedPath}'`)\n  }\n\n  return matchedMockDispatches[0]\n}\n\nfunction addMockDispatch (mockDispatches, key, data, opts) {\n  const baseData = { timesInvoked: 0, times: 1, persist: false, consumed: false, ...opts }\n  const replyData = typeof data === 'function' ? { callback: data } : { ...data }\n  const newMockDispatch = { ...baseData, ...key, pending: true, data: { error: null, ...replyData } }\n  mockDispatches.push(newMockDispatch)\n  return newMockDispatch\n}\n\nfunction deleteMockDispatch (mockDispatches, key) {\n  const index = mockDispatches.findIndex(dispatch => {\n    if (!dispatch.consumed) {\n      return false\n    }\n    return matchKey(dispatch, key)\n  })\n  if (index !== -1) {\n    mockDispatches.splice(index, 1)\n  }\n}\n\n/**\n * @param {string} path Path to remove trailing slash from\n */\nfunction removeTrailingSlash (path) {\n  while (path.endsWith('/')) {\n    path = path.slice(0, -1)\n  }\n\n  if (path.length === 0) {\n    path = '/'\n  }\n\n  return path\n}\n\nfunction buildKey (opts) {\n  const { path, method, body, headers, query } = opts\n\n  return {\n    path,\n    method,\n    body,\n    headers,\n    query\n  }\n}\n\nfunction generateKeyValues (data) {\n  const keys = Object.keys(data)\n  const result = []\n  for (let i = 0; i < keys.length; ++i) {\n    const key = keys[i]\n    const value = data[key]\n    const name = Buffer.from(`${key}`)\n    if (Array.isArray(value)) {\n      for (let j = 0; j < value.length; ++j) {\n        result.push(name, Buffer.from(`${value[j]}`))\n      }\n    } else {\n      result.push(name, Buffer.from(`${value}`))\n    }\n  }\n  return result\n}\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Status\n * @param {number} statusCode\n */\nfunction getStatusText (statusCode) {\n  return STATUS_CODES[statusCode] || 'unknown'\n}\n\nasync function getResponse (body) {\n  const buffers = []\n  for await (const data of body) {\n    buffers.push(data)\n  }\n  return Buffer.concat(buffers).toString('utf8')\n}\n\n/**\n * Mock dispatch function used to simulate undici dispatches\n */\nfunction mockDispatch (opts, handler) {\n  // Get mock dispatch from built key\n  const key = buildKey(opts)\n  const mockDispatch = getMockDispatch(this[kDispatches], key)\n\n  mockDispatch.timesInvoked++\n\n  // Here's where we resolve a callback if a callback is present for the dispatch data.\n  if (mockDispatch.data.callback) {\n    mockDispatch.data = { ...mockDispatch.data, ...mockDispatch.data.callback(opts) }\n  }\n\n  // Parse mockDispatch data\n  const { data: { statusCode, data, headers, trailers, error }, delay, persist } = mockDispatch\n  const { timesInvoked, times } = mockDispatch\n\n  // If it's used up and not persistent, mark as consumed\n  mockDispatch.consumed = !persist && timesInvoked >= times\n  mockDispatch.pending = timesInvoked < times\n\n  // If specified, trigger dispatch error\n  if (error !== null) {\n    deleteMockDispatch(this[kDispatches], key)\n    handler.onError(error)\n    return true\n  }\n\n  // Track whether the request has been aborted\n  let aborted = false\n  let timer = null\n\n  function abort (err) {\n    if (aborted) {\n      return\n    }\n    aborted = true\n\n    // Clear the pending delayed response if any\n    if (timer !== null) {\n      clearTimeout(timer)\n      timer = null\n    }\n\n    // Notify the handler of the abort\n    handler.onError(err)\n  }\n\n  // Call onConnect to allow the handler to register the abort callback\n  handler.onConnect?.(abort, null)\n\n  // Handle the request with a delay if necessary\n  if (typeof delay === 'number' && delay > 0) {\n    timer = setTimeout(() => {\n      timer = null\n      handleReply(this[kDispatches])\n    }, delay)\n  } else {\n    handleReply(this[kDispatches])\n  }\n\n  function handleReply (mockDispatches, _data = data) {\n    // Don't send response if the request was aborted\n    if (aborted) {\n      return\n    }\n\n    // fetch's HeadersList is a 1D string array\n    const optsHeaders = Array.isArray(opts.headers)\n      ? buildHeadersFromArray(opts.headers)\n      : opts.headers\n    const body = typeof _data === 'function'\n      ? _data({ ...opts, headers: optsHeaders })\n      : _data\n\n    // util.types.isPromise is likely needed for jest.\n    if (isPromise(body)) {\n      // If handleReply is asynchronous, throwing an error\n      // in the callback will reject the promise, rather than\n      // synchronously throw the error, which breaks some tests.\n      // Rather, we wait for the callback to resolve if it is a\n      // promise, and then re-run handleReply with the new body.\n      return body.then((newData) => handleReply(mockDispatches, newData))\n    }\n\n    // Check again if aborted after async body resolution\n    if (aborted) {\n      return\n    }\n\n    const responseData = getResponseData(body)\n    const responseHeaders = generateKeyValues(headers)\n    const responseTrailers = generateKeyValues(trailers)\n\n    handler.onHeaders?.(statusCode, responseHeaders, resume, getStatusText(statusCode))\n    handler.onData?.(Buffer.from(responseData))\n    handler.onComplete?.(responseTrailers)\n    deleteMockDispatch(mockDispatches, key)\n  }\n\n  function resume () {}\n\n  return true\n}\n\nfunction buildMockDispatch () {\n  const agent = this[kMockAgent]\n  const origin = this[kOrigin]\n  const originalDispatch = this[kOriginalDispatch]\n\n  return function dispatch (opts, handler) {\n    if (agent.isMockActive) {\n      try {\n        mockDispatch.call(this, opts, handler)\n      } catch (error) {\n        if (error.code === 'UND_MOCK_ERR_MOCK_NOT_MATCHED') {\n          const netConnect = agent[kGetNetConnect]()\n          if (netConnect === false) {\n            throw new MockNotMatchedError(`${error.message}: subsequent request to origin ${origin} was not allowed (net.connect disabled)`)\n          }\n          if (checkNetConnect(netConnect, origin)) {\n            originalDispatch.call(this, opts, handler)\n          } else {\n            throw new MockNotMatchedError(`${error.message}: subsequent request to origin ${origin} was not allowed (net.connect is not enabled for this origin)`)\n          }\n        } else {\n          throw error\n        }\n      }\n    } else {\n      originalDispatch.call(this, opts, handler)\n    }\n  }\n}\n\nfunction checkNetConnect (netConnect, origin) {\n  const url = new URL(origin)\n  if (netConnect === true) {\n    return true\n  } else if (Array.isArray(netConnect) && netConnect.some((matcher) => matchValue(matcher, url.host))) {\n    return true\n  }\n  return false\n}\n\nfunction normalizeOrigin (origin) {\n  if (typeof origin !== 'string' && !(origin instanceof URL)) {\n    return origin\n  }\n\n  if (origin instanceof URL) {\n    return origin.origin\n  }\n\n  return origin.toLowerCase()\n}\n\nfunction buildAndValidateMockOptions (opts) {\n  const { agent, ...mockOptions } = opts\n\n  if ('enableCallHistory' in mockOptions && typeof mockOptions.enableCallHistory !== 'boolean') {\n    throw new InvalidArgumentError('options.enableCallHistory must to be a boolean')\n  }\n\n  if ('acceptNonStandardSearchParameters' in mockOptions && typeof mockOptions.acceptNonStandardSearchParameters !== 'boolean') {\n    throw new InvalidArgumentError('options.acceptNonStandardSearchParameters must to be a boolean')\n  }\n\n  if ('ignoreTrailingSlash' in mockOptions && typeof mockOptions.ignoreTrailingSlash !== 'boolean') {\n    throw new InvalidArgumentError('options.ignoreTrailingSlash must to be a boolean')\n  }\n\n  return mockOptions\n}\n\nmodule.exports = {\n  getResponseData,\n  getMockDispatch,\n  addMockDispatch,\n  deleteMockDispatch,\n  buildKey,\n  generateKeyValues,\n  matchValue,\n  getResponse,\n  getStatusText,\n  mockDispatch,\n  buildMockDispatch,\n  checkNetConnect,\n  buildAndValidateMockOptions,\n  getHeaderByName,\n  buildHeadersFromArray,\n  normalizeSearchParams,\n  normalizeOrigin\n}\n", "'use strict'\n\nconst { getResponseData, buildKey, addMockDispatch } = require('./mock-utils')\nconst {\n  kDispatches,\n  kDispatchKey,\n  kDefaultHeaders,\n  kDefaultTrailers,\n  kContentLength,\n  kMockDispatch,\n  kIgnoreTrailingSlash\n} = require('./mock-symbols')\nconst { InvalidArgumentError } = require('../core/errors')\nconst { serializePathWithQuery } = require('../core/util')\n\n/**\n * Defines the scope API for an interceptor reply\n */\nclass MockScope {\n  constructor (mockDispatch) {\n    this[kMockDispatch] = mockDispatch\n  }\n\n  /**\n   * Delay a reply by a set amount in ms.\n   */\n  delay (waitInMs) {\n    if (typeof waitInMs !== 'number' || !Number.isInteger(waitInMs) || waitInMs <= 0) {\n      throw new InvalidArgumentError('waitInMs must be a valid integer > 0')\n    }\n\n    this[kMockDispatch].delay = waitInMs\n    return this\n  }\n\n  /**\n   * For a defined reply, never mark as consumed.\n   */\n  persist () {\n    this[kMockDispatch].persist = true\n    return this\n  }\n\n  /**\n   * Allow one to define a reply for a set amount of matching requests.\n   */\n  times (repeatTimes) {\n    if (typeof repeatTimes !== 'number' || !Number.isInteger(repeatTimes) || repeatTimes <= 0) {\n      throw new InvalidArgumentError('repeatTimes must be a valid integer > 0')\n    }\n\n    this[kMockDispatch].times = repeatTimes\n    return this\n  }\n}\n\n/**\n * Defines an interceptor for a Mock\n */\nclass MockInterceptor {\n  constructor (opts, mockDispatches) {\n    if (typeof opts !== 'object') {\n      throw new InvalidArgumentError('opts must be an object')\n    }\n    if (typeof opts.path === 'undefined') {\n      throw new InvalidArgumentError('opts.path must be defined')\n    }\n    if (typeof opts.method === 'undefined') {\n      opts.method = 'GET'\n    }\n    // See https://github.com/nodejs/undici/issues/1245\n    // As per RFC 3986, clients are not supposed to send URI\n    // fragments to servers when they retrieve a document,\n    if (typeof opts.path === 'string') {\n      if (opts.query) {\n        opts.path = serializePathWithQuery(opts.path, opts.query)\n      } else {\n        // Matches https://github.com/nodejs/undici/blob/main/lib/web/fetch/index.js#L1811\n        const parsedURL = new URL(opts.path, 'data://')\n        opts.path = parsedURL.pathname + parsedURL.search\n      }\n    }\n    if (typeof opts.method === 'string') {\n      opts.method = opts.method.toUpperCase()\n    }\n\n    this[kDispatchKey] = buildKey(opts)\n    this[kDispatches] = mockDispatches\n    this[kIgnoreTrailingSlash] = opts.ignoreTrailingSlash ?? false\n    this[kDefaultHeaders] = {}\n    this[kDefaultTrailers] = {}\n    this[kContentLength] = false\n  }\n\n  createMockScopeDispatchData ({ statusCode, data, responseOptions }) {\n    const responseData = getResponseData(data)\n    const contentLength = this[kContentLength] ? { 'content-length': responseData.length } : {}\n    const headers = { ...this[kDefaultHeaders], ...contentLength, ...responseOptions.headers }\n    const trailers = { ...this[kDefaultTrailers], ...responseOptions.trailers }\n\n    return { statusCode, data, headers, trailers }\n  }\n\n  validateReplyParameters (replyParameters) {\n    if (typeof replyParameters.statusCode === 'undefined') {\n      throw new InvalidArgumentError('statusCode must be defined')\n    }\n    if (typeof replyParameters.responseOptions !== 'object' || replyParameters.responseOptions === null) {\n      throw new InvalidArgumentError('responseOptions must be an object')\n    }\n  }\n\n  /**\n   * Mock an undici request with a defined reply.\n   */\n  reply (replyOptionsCallbackOrStatusCode) {\n    // Values of reply aren't available right now as they\n    // can only be available when the reply callback is invoked.\n    if (typeof replyOptionsCallbackOrStatusCode === 'function') {\n      // We'll first wrap the provided callback in another function,\n      // this function will properly resolve the data from the callback\n      // when invoked.\n      const wrappedDefaultsCallback = (opts) => {\n        // Our reply options callback contains the parameter for statusCode, data and options.\n        const resolvedData = replyOptionsCallbackOrStatusCode(opts)\n\n        // Check if it is in the right format\n        if (typeof resolvedData !== 'object' || resolvedData === null) {\n          throw new InvalidArgumentError('reply options callback must return an object')\n        }\n\n        const replyParameters = { data: '', responseOptions: {}, ...resolvedData }\n        this.validateReplyParameters(replyParameters)\n        // Since the values can be obtained immediately we return them\n        // from this higher order function that will be resolved later.\n        return {\n          ...this.createMockScopeDispatchData(replyParameters)\n        }\n      }\n\n      // Add usual dispatch data, but this time set the data parameter to function that will eventually provide data.\n      const newMockDispatch = addMockDispatch(this[kDispatches], this[kDispatchKey], wrappedDefaultsCallback, { ignoreTrailingSlash: this[kIgnoreTrailingSlash] })\n      return new MockScope(newMockDispatch)\n    }\n\n    // We can have either one or three parameters, if we get here,\n    // we should have 1-3 parameters. So we spread the arguments of\n    // this function to obtain the parameters, since replyData will always\n    // just be the statusCode.\n    const replyParameters = {\n      statusCode: replyOptionsCallbackOrStatusCode,\n      data: arguments[1] === undefined ? '' : arguments[1],\n      responseOptions: arguments[2] === undefined ? {} : arguments[2]\n    }\n    this.validateReplyParameters(replyParameters)\n\n    // Send in-already provided data like usual\n    const dispatchData = this.createMockScopeDispatchData(replyParameters)\n    const newMockDispatch = addMockDispatch(this[kDispatches], this[kDispatchKey], dispatchData, { ignoreTrailingSlash: this[kIgnoreTrailingSlash] })\n    return new MockScope(newMockDispatch)\n  }\n\n  /**\n   * Mock an undici request with a defined error.\n   */\n  replyWithError (error) {\n    if (typeof error === 'undefined') {\n      throw new InvalidArgumentError('error must be defined')\n    }\n\n    const newMockDispatch = addMockDispatch(this[kDispatches], this[kDispatchKey], { error }, { ignoreTrailingSlash: this[kIgnoreTrailingSlash] })\n    return new MockScope(newMockDispatch)\n  }\n\n  /**\n   * Set default reply headers on the interceptor for subsequent replies\n   */\n  defaultReplyHeaders (headers) {\n    if (typeof headers === 'undefined') {\n      throw new InvalidArgumentError('headers must be defined')\n    }\n\n    this[kDefaultHeaders] = headers\n    return this\n  }\n\n  /**\n   * Set default reply trailers on the interceptor for subsequent replies\n   */\n  defaultReplyTrailers (trailers) {\n    if (typeof trailers === 'undefined') {\n      throw new InvalidArgumentError('trailers must be defined')\n    }\n\n    this[kDefaultTrailers] = trailers\n    return this\n  }\n\n  /**\n   * Set reply content length header for replies on the interceptor\n   */\n  replyContentLength () {\n    this[kContentLength] = true\n    return this\n  }\n}\n\nmodule.exports.MockInterceptor = MockInterceptor\nmodule.exports.MockScope = MockScope\n", "'use strict'\n\nconst { promisify } = require('node:util')\nconst Client = require('../dispatcher/client')\nconst { buildMockDispatch } = require('./mock-utils')\nconst {\n  kDispatches,\n  kMockAgent,\n  kClose,\n  kOriginalClose,\n  kOrigin,\n  kOriginalDispatch,\n  kConnected,\n  kIgnoreTrailingSlash\n} = require('./mock-symbols')\nconst { MockInterceptor } = require('./mock-interceptor')\nconst Symbols = require('../core/symbols')\nconst { InvalidArgumentError } = require('../core/errors')\n\n/**\n * MockClient provides an API that extends the Client to influence the mockDispatches.\n */\nclass MockClient extends Client {\n  constructor (origin, opts) {\n    if (!opts || !opts.agent || typeof opts.agent.dispatch !== 'function') {\n      throw new InvalidArgumentError('Argument opts.agent must implement Agent')\n    }\n\n    super(origin, opts)\n\n    this[kMockAgent] = opts.agent\n    this[kOrigin] = origin\n    this[kIgnoreTrailingSlash] = opts.ignoreTrailingSlash ?? false\n    this[kDispatches] = []\n    this[kConnected] = 1\n    this[kOriginalDispatch] = this.dispatch\n    this[kOriginalClose] = this.close.bind(this)\n\n    this.dispatch = buildMockDispatch.call(this)\n    this.close = this[kClose]\n  }\n\n  get [Symbols.kConnected] () {\n    return this[kConnected]\n  }\n\n  /**\n   * Sets up the base interceptor for mocking replies from undici.\n   */\n  intercept (opts) {\n    return new MockInterceptor(\n      opts && { ignoreTrailingSlash: this[kIgnoreTrailingSlash], ...opts },\n      this[kDispatches]\n    )\n  }\n\n  cleanMocks () {\n    this[kDispatches] = []\n  }\n\n  async [kClose] () {\n    await promisify(this[kOriginalClose])()\n    this[kConnected] = 0\n    this[kMockAgent][Symbols.kClients].delete(this[kOrigin])\n  }\n}\n\nmodule.exports = MockClient\n", "'use strict'\n\nconst { kMockCallHistoryAddLog } = require('./mock-symbols')\nconst { InvalidArgumentError } = require('../core/errors')\n\nfunction handleFilterCallsWithOptions (criteria, options, handler, store) {\n  switch (options.operator) {\n    case 'OR':\n      store.push(...handler(criteria))\n\n      return store\n    case 'AND':\n      return handler.call({ logs: store }, criteria)\n    default:\n      // guard -- should never happens because buildAndValidateFilterCallsOptions is called before\n      throw new InvalidArgumentError('options.operator must to be a case insensitive string equal to \\'OR\\' or \\'AND\\'')\n  }\n}\n\nfunction buildAndValidateFilterCallsOptions (options = {}) {\n  const finalOptions = {}\n\n  if ('operator' in options) {\n    if (typeof options.operator !== 'string' || (options.operator.toUpperCase() !== 'OR' && options.operator.toUpperCase() !== 'AND')) {\n      throw new InvalidArgumentError('options.operator must to be a case insensitive string equal to \\'OR\\' or \\'AND\\'')\n    }\n\n    return {\n      ...finalOptions,\n      operator: options.operator.toUpperCase()\n    }\n  }\n\n  return finalOptions\n}\n\nfunction makeFilterCalls (parameterName) {\n  return (parameterValue) => {\n    if (typeof parameterValue === 'string' || parameterValue == null) {\n      return this.logs.filter((log) => {\n        return log[parameterName] === parameterValue\n      })\n    }\n    if (parameterValue instanceof RegExp) {\n      return this.logs.filter((log) => {\n        return parameterValue.test(log[parameterName])\n      })\n    }\n\n    throw new InvalidArgumentError(`${parameterName} parameter should be one of string, regexp, undefined or null`)\n  }\n}\nfunction computeUrlWithMaybeSearchParameters (requestInit) {\n  // path can contains query url parameters\n  // or query can contains query url parameters\n  try {\n    const url = new URL(requestInit.path, requestInit.origin)\n\n    // requestInit.path contains query url parameters\n    // requestInit.query is then undefined\n    if (url.search.length !== 0) {\n      return url\n    }\n\n    // requestInit.query can be populated here\n    url.search = new URLSearchParams(requestInit.query).toString()\n\n    return url\n  } catch (error) {\n    throw new InvalidArgumentError('An error occurred when computing MockCallHistoryLog.url', { cause: error })\n  }\n}\n\nclass MockCallHistoryLog {\n  constructor (requestInit = {}) {\n    this.body = requestInit.body\n    this.headers = requestInit.headers\n    this.method = requestInit.method\n\n    const url = computeUrlWithMaybeSearchParameters(requestInit)\n\n    this.fullUrl = url.toString()\n    this.origin = url.origin\n    this.path = url.pathname\n    this.searchParams = Object.fromEntries(url.searchParams)\n    this.protocol = url.protocol\n    this.host = url.host\n    this.port = url.port\n    this.hash = url.hash\n  }\n\n  toMap () {\n    return new Map([\n      ['protocol', this.protocol],\n      ['host', this.host],\n      ['port', this.port],\n      ['origin', this.origin],\n      ['path', this.path],\n      ['hash', this.hash],\n      ['searchParams', this.searchParams],\n      ['fullUrl', this.fullUrl],\n      ['method', this.method],\n      ['body', this.body],\n      ['headers', this.headers]]\n    )\n  }\n\n  toString () {\n    const options = { betweenKeyValueSeparator: '->', betweenPairSeparator: '|' }\n    let result = ''\n\n    this.toMap().forEach((value, key) => {\n      if (typeof value === 'string' || value === undefined || value === null) {\n        result = `${result}${key}${options.betweenKeyValueSeparator}${value}${options.betweenPairSeparator}`\n      }\n      if ((typeof value === 'object' && value !== null) || Array.isArray(value)) {\n        result = `${result}${key}${options.betweenKeyValueSeparator}${JSON.stringify(value)}${options.betweenPairSeparator}`\n      }\n      // maybe miss something for non Record / Array headers and searchParams here\n    })\n\n    // delete last betweenPairSeparator\n    return result.slice(0, -1)\n  }\n}\n\nclass MockCallHistory {\n  logs = []\n\n  calls () {\n    return this.logs\n  }\n\n  firstCall () {\n    return this.logs.at(0)\n  }\n\n  lastCall () {\n    return this.logs.at(-1)\n  }\n\n  nthCall (number) {\n    if (typeof number !== 'number') {\n      throw new InvalidArgumentError('nthCall must be called with a number')\n    }\n    if (!Number.isInteger(number)) {\n      throw new InvalidArgumentError('nthCall must be called with an integer')\n    }\n    if (Math.sign(number) !== 1) {\n      throw new InvalidArgumentError('nthCall must be called with a positive value. use firstCall or lastCall instead')\n    }\n\n    // non zero based index. this is more human readable\n    return this.logs.at(number - 1)\n  }\n\n  filterCalls (criteria, options) {\n    // perf\n    if (this.logs.length === 0) {\n      return this.logs\n    }\n    if (typeof criteria === 'function') {\n      return this.logs.filter(criteria)\n    }\n    if (criteria instanceof RegExp) {\n      return this.logs.filter((log) => {\n        return criteria.test(log.toString())\n      })\n    }\n    if (typeof criteria === 'object' && criteria !== null) {\n      // no criteria - returning all logs\n      if (Object.keys(criteria).length === 0) {\n        return this.logs\n      }\n\n      const finalOptions = { operator: 'OR', ...buildAndValidateFilterCallsOptions(options) }\n\n      let maybeDuplicatedLogsFiltered = []\n      if ('protocol' in criteria) {\n        maybeDuplicatedLogsFiltered = handleFilterCallsWithOptions(criteria.protocol, finalOptions, this.filterCallsByProtocol, maybeDuplicatedLogsFiltered)\n      }\n      if ('host' in criteria) {\n        maybeDuplicatedLogsFiltered = handleFilterCallsWithOptions(criteria.host, finalOptions, this.filterCallsByHost, maybeDuplicatedLogsFiltered)\n      }\n      if ('port' in criteria) {\n        maybeDuplicatedLogsFiltered = handleFilterCallsWithOptions(criteria.port, finalOptions, this.filterCallsByPort, maybeDuplicatedLogsFiltered)\n      }\n      if ('origin' in criteria) {\n        maybeDuplicatedLogsFiltered = handleFilterCallsWithOptions(criteria.origin, finalOptions, this.filterCallsByOrigin, maybeDuplicatedLogsFiltered)\n      }\n      if ('path' in criteria) {\n        maybeDuplicatedLogsFiltered = handleFilterCallsWithOptions(criteria.path, finalOptions, this.filterCallsByPath, maybeDuplicatedLogsFiltered)\n      }\n      if ('hash' in criteria) {\n        maybeDuplicatedLogsFiltered = handleFilterCallsWithOptions(criteria.hash, finalOptions, this.filterCallsByHash, maybeDuplicatedLogsFiltered)\n      }\n      if ('fullUrl' in criteria) {\n        maybeDuplicatedLogsFiltered = handleFilterCallsWithOptions(criteria.fullUrl, finalOptions, this.filterCallsByFullUrl, maybeDuplicatedLogsFiltered)\n      }\n      if ('method' in criteria) {\n        maybeDuplicatedLogsFiltered = handleFilterCallsWithOptions(criteria.method, finalOptions, this.filterCallsByMethod, maybeDuplicatedLogsFiltered)\n      }\n\n      const uniqLogsFiltered = [...new Set(maybeDuplicatedLogsFiltered)]\n\n      return uniqLogsFiltered\n    }\n\n    throw new InvalidArgumentError('criteria parameter should be one of function, regexp, or object')\n  }\n\n  filterCallsByProtocol = makeFilterCalls.call(this, 'protocol')\n\n  filterCallsByHost = makeFilterCalls.call(this, 'host')\n\n  filterCallsByPort = makeFilterCalls.call(this, 'port')\n\n  filterCallsByOrigin = makeFilterCalls.call(this, 'origin')\n\n  filterCallsByPath = makeFilterCalls.call(this, 'path')\n\n  filterCallsByHash = makeFilterCalls.call(this, 'hash')\n\n  filterCallsByFullUrl = makeFilterCalls.call(this, 'fullUrl')\n\n  filterCallsByMethod = makeFilterCalls.call(this, 'method')\n\n  clear () {\n    this.logs = []\n  }\n\n  [kMockCallHistoryAddLog] (requestInit) {\n    const log = new MockCallHistoryLog(requestInit)\n\n    this.logs.push(log)\n\n    return log\n  }\n\n  * [Symbol.iterator] () {\n    for (const log of this.calls()) {\n      yield log\n    }\n  }\n}\n\nmodule.exports.MockCallHistory = MockCallHistory\nmodule.exports.MockCallHistoryLog = MockCallHistoryLog\n", "'use strict'\n\nconst { promisify } = require('node:util')\nconst Pool = require('../dispatcher/pool')\nconst { buildMockDispatch } = require('./mock-utils')\nconst {\n  kDispatches,\n  kMockAgent,\n  kClose,\n  kOriginalClose,\n  kOrigin,\n  kOriginalDispatch,\n  kConnected,\n  kIgnoreTrailingSlash\n} = require('./mock-symbols')\nconst { MockInterceptor } = require('./mock-interceptor')\nconst Symbols = require('../core/symbols')\nconst { InvalidArgumentError } = require('../core/errors')\n\n/**\n * MockPool provides an API that extends the Pool to influence the mockDispatches.\n */\nclass MockPool extends Pool {\n  constructor (origin, opts) {\n    if (!opts || !opts.agent || typeof opts.agent.dispatch !== 'function') {\n      throw new InvalidArgumentError('Argument opts.agent must implement Agent')\n    }\n\n    super(origin, opts)\n\n    this[kMockAgent] = opts.agent\n    this[kOrigin] = origin\n    this[kIgnoreTrailingSlash] = opts.ignoreTrailingSlash ?? false\n    this[kDispatches] = []\n    this[kConnected] = 1\n    this[kOriginalDispatch] = this.dispatch\n    this[kOriginalClose] = this.close.bind(this)\n\n    this.dispatch = buildMockDispatch.call(this)\n    this.close = this[kClose]\n  }\n\n  get [Symbols.kConnected] () {\n    return this[kConnected]\n  }\n\n  /**\n   * Sets up the base interceptor for mocking replies from undici.\n   */\n  intercept (opts) {\n    return new MockInterceptor(\n      opts && { ignoreTrailingSlash: this[kIgnoreTrailingSlash], ...opts },\n      this[kDispatches]\n    )\n  }\n\n  cleanMocks () {\n    this[kDispatches] = []\n  }\n\n  async [kClose] () {\n    await promisify(this[kOriginalClose])()\n    this[kConnected] = 0\n    this[kMockAgent][Symbols.kClients].delete(this[kOrigin])\n  }\n}\n\nmodule.exports = MockPool\n", "'use strict'\n\nconst { Transform } = require('node:stream')\nconst { Console } = require('node:console')\n\nconst PERSISTENT = process.versions.icu ? '\u2705' : 'Y '\nconst NOT_PERSISTENT = process.versions.icu ? '\u274C' : 'N '\n\n/**\n * Gets the output of `console.table(\u2026)` as a string.\n */\nmodule.exports = class PendingInterceptorsFormatter {\n  constructor ({ disableColors } = {}) {\n    this.transform = new Transform({\n      transform (chunk, _enc, cb) {\n        cb(null, chunk)\n      }\n    })\n\n    this.logger = new Console({\n      stdout: this.transform,\n      inspectOptions: {\n        colors: !disableColors && !process.env.CI\n      }\n    })\n  }\n\n  format (pendingInterceptors) {\n    const withPrettyHeaders = pendingInterceptors.map(\n      ({ method, path, data: { statusCode }, persist, times, timesInvoked, origin }) => ({\n        Method: method,\n        Origin: origin,\n        Path: path,\n        'Status code': statusCode,\n        Persistent: persist ? PERSISTENT : NOT_PERSISTENT,\n        Invocations: timesInvoked,\n        Remaining: persist ? Infinity : times - timesInvoked\n      }))\n\n    this.logger.table(withPrettyHeaders)\n    return this.transform.read().toString()\n  }\n}\n", "'use strict'\n\nconst { kClients } = require('../core/symbols')\nconst Agent = require('../dispatcher/agent')\nconst {\n  kAgent,\n  kMockAgentSet,\n  kMockAgentGet,\n  kDispatches,\n  kIsMockActive,\n  kNetConnect,\n  kGetNetConnect,\n  kOptions,\n  kFactory,\n  kMockAgentRegisterCallHistory,\n  kMockAgentIsCallHistoryEnabled,\n  kMockAgentAddCallHistoryLog,\n  kMockAgentMockCallHistoryInstance,\n  kMockAgentAcceptsNonStandardSearchParameters,\n  kMockCallHistoryAddLog,\n  kIgnoreTrailingSlash\n} = require('./mock-symbols')\nconst MockClient = require('./mock-client')\nconst MockPool = require('./mock-pool')\nconst { matchValue, normalizeSearchParams, buildAndValidateMockOptions, normalizeOrigin } = require('./mock-utils')\nconst { InvalidArgumentError, UndiciError } = require('../core/errors')\nconst Dispatcher = require('../dispatcher/dispatcher')\nconst PendingInterceptorsFormatter = require('./pending-interceptors-formatter')\nconst { MockCallHistory } = require('./mock-call-history')\n\nclass MockAgent extends Dispatcher {\n  constructor (opts = {}) {\n    super(opts)\n\n    const mockOptions = buildAndValidateMockOptions(opts)\n\n    this[kNetConnect] = true\n    this[kIsMockActive] = true\n    this[kMockAgentIsCallHistoryEnabled] = mockOptions.enableCallHistory ?? false\n    this[kMockAgentAcceptsNonStandardSearchParameters] = mockOptions.acceptNonStandardSearchParameters ?? false\n    this[kIgnoreTrailingSlash] = mockOptions.ignoreTrailingSlash ?? false\n\n    // Instantiate Agent and encapsulate\n    if (opts?.agent && typeof opts.agent.dispatch !== 'function') {\n      throw new InvalidArgumentError('Argument opts.agent must implement Agent')\n    }\n    const agent = opts?.agent ? opts.agent : new Agent(opts)\n    this[kAgent] = agent\n\n    this[kClients] = agent[kClients]\n    this[kOptions] = mockOptions\n\n    if (this[kMockAgentIsCallHistoryEnabled]) {\n      this[kMockAgentRegisterCallHistory]()\n    }\n  }\n\n  get (origin) {\n    // Normalize origin to handle URL objects and case-insensitive hostnames\n    const normalizedOrigin = normalizeOrigin(origin)\n    const originKey = this[kIgnoreTrailingSlash] ? normalizedOrigin.replace(/\\/$/, '') : normalizedOrigin\n\n    let dispatcher = this[kMockAgentGet](originKey)\n\n    if (!dispatcher) {\n      dispatcher = this[kFactory](originKey)\n      this[kMockAgentSet](originKey, dispatcher)\n    }\n    return dispatcher\n  }\n\n  dispatch (opts, handler) {\n    opts.origin = normalizeOrigin(opts.origin)\n\n    // Call MockAgent.get to perform additional setup before dispatching as normal\n    this.get(opts.origin)\n\n    this[kMockAgentAddCallHistoryLog](opts)\n\n    const acceptNonStandardSearchParameters = this[kMockAgentAcceptsNonStandardSearchParameters]\n\n    const dispatchOpts = { ...opts }\n\n    if (acceptNonStandardSearchParameters && dispatchOpts.path) {\n      const [path, searchParams] = dispatchOpts.path.split('?')\n      const normalizedSearchParams = normalizeSearchParams(searchParams, acceptNonStandardSearchParameters)\n      dispatchOpts.path = `${path}?${normalizedSearchParams}`\n    }\n\n    return this[kAgent].dispatch(dispatchOpts, handler)\n  }\n\n  async close () {\n    this.clearCallHistory()\n    await this[kAgent].close()\n    this[kClients].clear()\n  }\n\n  deactivate () {\n    this[kIsMockActive] = false\n  }\n\n  activate () {\n    this[kIsMockActive] = true\n  }\n\n  enableNetConnect (matcher) {\n    if (typeof matcher === 'string' || typeof matcher === 'function' || matcher instanceof RegExp) {\n      if (Array.isArray(this[kNetConnect])) {\n        this[kNetConnect].push(matcher)\n      } else {\n        this[kNetConnect] = [matcher]\n      }\n    } else if (typeof matcher === 'undefined') {\n      this[kNetConnect] = true\n    } else {\n      throw new InvalidArgumentError('Unsupported matcher. Must be one of String|Function|RegExp.')\n    }\n  }\n\n  disableNetConnect () {\n    this[kNetConnect] = false\n  }\n\n  enableCallHistory () {\n    this[kMockAgentIsCallHistoryEnabled] = true\n\n    return this\n  }\n\n  disableCallHistory () {\n    this[kMockAgentIsCallHistoryEnabled] = false\n\n    return this\n  }\n\n  getCallHistory () {\n    return this[kMockAgentMockCallHistoryInstance]\n  }\n\n  clearCallHistory () {\n    if (this[kMockAgentMockCallHistoryInstance] !== undefined) {\n      this[kMockAgentMockCallHistoryInstance].clear()\n    }\n  }\n\n  // This is required to bypass issues caused by using global symbols - see:\n  // https://github.com/nodejs/undici/issues/1447\n  get isMockActive () {\n    return this[kIsMockActive]\n  }\n\n  [kMockAgentRegisterCallHistory] () {\n    if (this[kMockAgentMockCallHistoryInstance] === undefined) {\n      this[kMockAgentMockCallHistoryInstance] = new MockCallHistory()\n    }\n  }\n\n  [kMockAgentAddCallHistoryLog] (opts) {\n    if (this[kMockAgentIsCallHistoryEnabled]) {\n      // additional setup when enableCallHistory class method is used after mockAgent instantiation\n      this[kMockAgentRegisterCallHistory]()\n\n      // add call history log on every call (intercepted or not)\n      this[kMockAgentMockCallHistoryInstance][kMockCallHistoryAddLog](opts)\n    }\n  }\n\n  [kMockAgentSet] (origin, dispatcher) {\n    this[kClients].set(origin, { count: 0, dispatcher })\n  }\n\n  [kFactory] (origin) {\n    const mockOptions = Object.assign({ agent: this }, this[kOptions])\n    return this[kOptions] && this[kOptions].connections === 1\n      ? new MockClient(origin, mockOptions)\n      : new MockPool(origin, mockOptions)\n  }\n\n  [kMockAgentGet] (origin) {\n    // First check if we can immediately find it\n    const result = this[kClients].get(origin)\n    if (result?.dispatcher) {\n      return result.dispatcher\n    }\n\n    // If the origin is not a string create a dummy parent pool and return to user\n    if (typeof origin !== 'string') {\n      const dispatcher = this[kFactory]('http://localhost:9999')\n      this[kMockAgentSet](origin, dispatcher)\n      return dispatcher\n    }\n\n    // If we match, create a pool and assign the same dispatches\n    for (const [keyMatcher, result] of Array.from(this[kClients])) {\n      if (result && typeof keyMatcher !== 'string' && matchValue(keyMatcher, origin)) {\n        const dispatcher = this[kFactory](origin)\n        this[kMockAgentSet](origin, dispatcher)\n        dispatcher[kDispatches] = result.dispatcher[kDispatches]\n        return dispatcher\n      }\n    }\n  }\n\n  [kGetNetConnect] () {\n    return this[kNetConnect]\n  }\n\n  pendingInterceptors () {\n    const mockAgentClients = this[kClients]\n\n    return Array.from(mockAgentClients.entries())\n      .flatMap(([origin, result]) => result.dispatcher[kDispatches].map(dispatch => ({ ...dispatch, origin })))\n      .filter(({ pending }) => pending)\n  }\n\n  assertNoPendingInterceptors ({ pendingInterceptorsFormatter = new PendingInterceptorsFormatter() } = {}) {\n    const pending = this.pendingInterceptors()\n\n    if (pending.length === 0) {\n      return\n    }\n\n    throw new UndiciError(\n      pending.length === 1\n        ? `1 interceptor is pending:\\n\\n${pendingInterceptorsFormatter.format(pending)}`.trim()\n        : `${pending.length} interceptors are pending:\\n\\n${pendingInterceptorsFormatter.format(pending)}`.trim()\n    )\n  }\n}\n\nmodule.exports = MockAgent\n", "'use strict'\n\nconst { InvalidArgumentError } = require('../core/errors')\nconst { runtimeFeatures } = require('../util/runtime-features.js')\n\n/**\n * @typedef {Object} HeaderFilters\n * @property {Set<string>} ignore - Set of headers to ignore for matching\n * @property {Set<string>} exclude - Set of headers to exclude from matching\n * @property {Set<string>} match - Set of headers to match (empty means match\n */\n\n/**\n * Creates cached header sets for performance\n *\n * @param {import('./snapshot-recorder').SnapshotRecorderMatchOptions} matchOptions - Matching options for headers\n * @returns {HeaderFilters} - Cached sets for ignore, exclude, and match headers\n */\nfunction createHeaderFilters (matchOptions = {}) {\n  const { ignoreHeaders = [], excludeHeaders = [], matchHeaders = [], caseSensitive = false } = matchOptions\n\n  return {\n    ignore: new Set(ignoreHeaders.map(header => caseSensitive ? header : header.toLowerCase())),\n    exclude: new Set(excludeHeaders.map(header => caseSensitive ? header : header.toLowerCase())),\n    match: new Set(matchHeaders.map(header => caseSensitive ? header : header.toLowerCase()))\n  }\n}\n\nconst crypto = runtimeFeatures.has('crypto')\n  ? require('node:crypto')\n  : null\n\n/**\n * @callback HashIdFunction\n * @param {string} value - The value to hash\n * @returns {string} - The base64url encoded hash of the value\n */\n\n/**\n * Generates a hash for a given value\n * @type {HashIdFunction}\n */\nconst hashId = crypto?.hash\n  ? (value) => crypto.hash('sha256', value, 'base64url')\n  : (value) => Buffer.from(value).toString('base64url')\n\n/**\n * @typedef {(url: string) => boolean} IsUrlExcluded Checks if a URL matches any of the exclude patterns\n */\n\n/** @typedef {{[key: Lowercase<string>]: string}} NormalizedHeaders */\n/** @typedef {Array<string>} UndiciHeaders */\n/** @typedef {Record<string, string|string[]>} Headers */\n\n/**\n * @param {*} headers\n * @returns {headers is UndiciHeaders}\n */\nfunction isUndiciHeaders (headers) {\n  return Array.isArray(headers) && (headers.length & 1) === 0\n}\n\n/**\n * Factory function to create a URL exclusion checker\n * @param {Array<string| RegExp>} [excludePatterns=[]] - Array of patterns to exclude\n * @returns {IsUrlExcluded} - A function that checks if a URL matches any of the exclude patterns\n */\nfunction isUrlExcludedFactory (excludePatterns = []) {\n  if (excludePatterns.length === 0) {\n    return () => false\n  }\n\n  return function isUrlExcluded (url) {\n    let urlLowerCased\n\n    for (const pattern of excludePatterns) {\n      if (typeof pattern === 'string') {\n        if (!urlLowerCased) {\n          // Convert URL to lowercase only once\n          urlLowerCased = url.toLowerCase()\n        }\n        // Simple string match (case-insensitive)\n        if (urlLowerCased.includes(pattern.toLowerCase())) {\n          return true\n        }\n      } else if (pattern instanceof RegExp) {\n        // Regex pattern match\n        if (pattern.test(url)) {\n          return true\n        }\n      }\n    }\n\n    return false\n  }\n}\n\n/**\n * Normalizes headers for consistent comparison\n *\n * @param {Object|UndiciHeaders} headers - Headers to normalize\n * @returns {NormalizedHeaders} - Normalized headers as a lowercase object\n */\nfunction normalizeHeaders (headers) {\n  /** @type {NormalizedHeaders} */\n  const normalizedHeaders = {}\n\n  if (!headers) return normalizedHeaders\n\n  // Handle array format (undici internal format: [name, value, name, value, ...])\n  if (isUndiciHeaders(headers)) {\n    for (let i = 0; i < headers.length; i += 2) {\n      const key = headers[i]\n      const value = headers[i + 1]\n      if (key && value !== undefined) {\n        // Convert Buffers to strings if needed\n        const keyStr = Buffer.isBuffer(key) ? key.toString() : key\n        const valueStr = Buffer.isBuffer(value) ? value.toString() : value\n        normalizedHeaders[keyStr.toLowerCase()] = valueStr\n      }\n    }\n    return normalizedHeaders\n  }\n\n  // Handle object format\n  if (headers && typeof headers === 'object') {\n    for (const [key, value] of Object.entries(headers)) {\n      if (key && typeof key === 'string') {\n        normalizedHeaders[key.toLowerCase()] = Array.isArray(value) ? value.join(', ') : String(value)\n      }\n    }\n  }\n\n  return normalizedHeaders\n}\n\nconst validSnapshotModes = /** @type {const} */ (['record', 'playback', 'update'])\n\n/** @typedef {typeof validSnapshotModes[number]} SnapshotMode */\n\n/**\n * @param {*} mode - The snapshot mode to validate\n * @returns {asserts mode is SnapshotMode}\n */\nfunction validateSnapshotMode (mode) {\n  if (!validSnapshotModes.includes(mode)) {\n    throw new InvalidArgumentError(`Invalid snapshot mode: ${mode}. Must be one of: ${validSnapshotModes.join(', ')}`)\n  }\n}\n\nmodule.exports = {\n  createHeaderFilters,\n  hashId,\n  isUndiciHeaders,\n  normalizeHeaders,\n  isUrlExcludedFactory,\n  validateSnapshotMode\n}\n", "'use strict'\n\nconst { writeFile, readFile, mkdir } = require('node:fs/promises')\nconst { dirname, resolve } = require('node:path')\nconst { setTimeout, clearTimeout } = require('node:timers')\nconst { InvalidArgumentError, UndiciError } = require('../core/errors')\nconst { hashId, isUrlExcludedFactory, normalizeHeaders, createHeaderFilters } = require('./snapshot-utils')\n\n/**\n * @typedef {Object} SnapshotRequestOptions\n * @property {string} method - HTTP method (e.g. 'GET', 'POST', etc.)\n * @property {string} path - Request path\n * @property {string} origin - Request origin (base URL)\n * @property {import('./snapshot-utils').Headers|import('./snapshot-utils').UndiciHeaders} headers - Request headers\n * @property {import('./snapshot-utils').NormalizedHeaders} _normalizedHeaders - Request headers as a lowercase object\n * @property {string|Buffer} [body] - Request body (optional)\n */\n\n/**\n * @typedef {Object} SnapshotEntryRequest\n * @property {string} method - HTTP method (e.g. 'GET', 'POST', etc.)\n * @property {string} url - Full URL of the request\n * @property {import('./snapshot-utils').NormalizedHeaders} headers - Normalized headers as a lowercase object\n * @property {string|Buffer} [body] - Request body (optional)\n */\n\n/**\n * @typedef {Object} SnapshotEntryResponse\n * @property {number} statusCode - HTTP status code of the response\n * @property {import('./snapshot-utils').NormalizedHeaders} headers - Normalized response headers as a lowercase object\n * @property {string} body - Response body as a base64url encoded string\n * @property {Object} [trailers] - Optional response trailers\n */\n\n/**\n * @typedef {Object} SnapshotEntry\n * @property {SnapshotEntryRequest} request - The request object\n * @property {Array<SnapshotEntryResponse>} responses - Array of response objects\n * @property {number} callCount - Number of times this snapshot has been called\n * @property {string} timestamp - ISO timestamp of when the snapshot was created\n */\n\n/**\n * @typedef {Object} SnapshotRecorderMatchOptions\n * @property {Array<string>} [matchHeaders=[]] - Headers to match (empty array means match all headers)\n * @property {Array<string>} [ignoreHeaders=[]] - Headers to ignore for matching\n * @property {Array<string>} [excludeHeaders=[]] - Headers to exclude from matching\n * @property {boolean} [matchBody=true] - Whether to match request body\n * @property {boolean} [matchQuery=true] - Whether to match query properties\n * @property {boolean} [caseSensitive=false] - Whether header matching is case-sensitive\n */\n\n/**\n * @typedef {Object} SnapshotRecorderOptions\n * @property {string} [snapshotPath] - Path to save/load snapshots\n * @property {import('./snapshot-utils').SnapshotMode} [mode='record'] - Mode: 'record' or 'playback'\n * @property {number} [maxSnapshots=Infinity] - Maximum number of snapshots to keep\n * @property {boolean} [autoFlush=false] - Whether to automatically flush snapshots to disk\n * @property {number} [flushInterval=30000] - Auto-flush interval in milliseconds (default: 30 seconds)\n * @property {Array<string|RegExp>} [excludeUrls=[]] - URLs to exclude from recording\n * @property {function} [shouldRecord=null] - Function to filter requests for recording\n * @property {function} [shouldPlayback=null] - Function to filter requests\n */\n\n/**\n * @typedef {Object} SnapshotFormattedRequest\n * @property {string} method - HTTP method (e.g. 'GET', 'POST', etc.)\n * @property {string} url - Full URL of the request (with query parameters if matchQuery is true)\n * @property {import('./snapshot-utils').NormalizedHeaders} headers - Normalized headers as a lowercase object\n * @property {string} body - Request body (optional, only if matchBody is true)\n */\n\n/**\n * @typedef {Object} SnapshotInfo\n * @property {string} hash - Hash key for the snapshot\n * @property {SnapshotEntryRequest} request - The request object\n * @property {number} responseCount - Number of responses recorded for this request\n * @property {number} callCount - Number of times this snapshot has been called\n * @property {string} timestamp - ISO timestamp of when the snapshot was created\n */\n\n/**\n * Formats a request for consistent snapshot storage\n * Caches normalized headers to avoid repeated processing\n *\n * @param {SnapshotRequestOptions} opts - Request options\n * @param {import('./snapshot-utils').HeaderFilters} headerFilters - Cached header sets for performance\n * @param {SnapshotRecorderMatchOptions} [matchOptions] - Matching options for headers and body\n * @returns {SnapshotFormattedRequest} - Formatted request object\n */\nfunction formatRequestKey (opts, headerFilters, matchOptions = {}) {\n  const url = new URL(opts.path, opts.origin)\n\n  // Cache normalized headers if not already done\n  const normalized = opts._normalizedHeaders || normalizeHeaders(opts.headers)\n  if (!opts._normalizedHeaders) {\n    opts._normalizedHeaders = normalized\n  }\n\n  return {\n    method: opts.method || 'GET',\n    url: matchOptions.matchQuery !== false ? url.toString() : `${url.origin}${url.pathname}`,\n    headers: filterHeadersForMatching(normalized, headerFilters, matchOptions),\n    body: matchOptions.matchBody !== false && opts.body ? String(opts.body) : ''\n  }\n}\n\n/**\n * Filters headers based on matching configuration\n *\n * @param {import('./snapshot-utils').Headers} headers - Headers to filter\n * @param {import('./snapshot-utils').HeaderFilters} headerFilters - Cached sets for ignore, exclude, and match headers\n * @param {SnapshotRecorderMatchOptions} [matchOptions] - Matching options for headers\n */\nfunction filterHeadersForMatching (headers, headerFilters, matchOptions = {}) {\n  if (!headers || typeof headers !== 'object') return {}\n\n  const {\n    caseSensitive = false\n  } = matchOptions\n\n  const filtered = {}\n  const { ignore, exclude, match } = headerFilters\n\n  for (const [key, value] of Object.entries(headers)) {\n    const headerKey = caseSensitive ? key : key.toLowerCase()\n\n    // Skip if in exclude list (for security)\n    if (exclude.has(headerKey)) continue\n\n    // Skip if in ignore list (for matching)\n    if (ignore.has(headerKey)) continue\n\n    // If matchHeaders is specified, only include those headers\n    if (match.size !== 0) {\n      if (!match.has(headerKey)) continue\n    }\n\n    filtered[headerKey] = value\n  }\n\n  return filtered\n}\n\n/**\n * Filters headers for storage (only excludes sensitive headers)\n *\n * @param {import('./snapshot-utils').Headers} headers - Headers to filter\n * @param {import('./snapshot-utils').HeaderFilters} headerFilters - Cached sets for ignore, exclude, and match headers\n * @param {SnapshotRecorderMatchOptions} [matchOptions] - Matching options for headers\n */\nfunction filterHeadersForStorage (headers, headerFilters, matchOptions = {}) {\n  if (!headers || typeof headers !== 'object') return {}\n\n  const {\n    caseSensitive = false\n  } = matchOptions\n\n  const filtered = {}\n  const { exclude: excludeSet } = headerFilters\n\n  for (const [key, value] of Object.entries(headers)) {\n    const headerKey = caseSensitive ? key : key.toLowerCase()\n\n    // Skip if in exclude list (for security)\n    if (excludeSet.has(headerKey)) continue\n\n    filtered[headerKey] = value\n  }\n\n  return filtered\n}\n\n/**\n * Creates a hash key for request matching\n * Properly orders headers to avoid conflicts and uses crypto hashing when available\n *\n * @param {SnapshotFormattedRequest} formattedRequest - Request object\n * @returns {string} - Base64url encoded hash of the request\n */\nfunction createRequestHash (formattedRequest) {\n  const parts = [\n    formattedRequest.method,\n    formattedRequest.url\n  ]\n\n  // Process headers in a deterministic way to avoid conflicts\n  if (formattedRequest.headers && typeof formattedRequest.headers === 'object') {\n    const headerKeys = Object.keys(formattedRequest.headers).sort()\n    for (const key of headerKeys) {\n      const values = Array.isArray(formattedRequest.headers[key])\n        ? formattedRequest.headers[key]\n        : [formattedRequest.headers[key]]\n\n      // Add header name\n      parts.push(key)\n\n      // Add all values for this header, sorted for consistency\n      for (const value of values.sort()) {\n        parts.push(String(value))\n      }\n    }\n  }\n\n  // Add body\n  parts.push(formattedRequest.body)\n\n  const content = parts.join('|')\n\n  return hashId(content)\n}\n\nclass SnapshotRecorder {\n  /** @type {NodeJS.Timeout | null} */\n  #flushTimeout\n\n  /** @type {import('./snapshot-utils').IsUrlExcluded} */\n  #isUrlExcluded\n\n  /** @type {Map<string, SnapshotEntry>} */\n  #snapshots = new Map()\n\n  /** @type {string|undefined} */\n  #snapshotPath\n\n  /** @type {number} */\n  #maxSnapshots = Infinity\n\n  /** @type {boolean} */\n  #autoFlush = false\n\n  /** @type {import('./snapshot-utils').HeaderFilters} */\n  #headerFilters\n\n  /**\n   * Creates a new SnapshotRecorder instance\n   * @param {SnapshotRecorderOptions&SnapshotRecorderMatchOptions} [options={}] - Configuration options for the recorder\n   */\n  constructor (options = {}) {\n    this.#snapshotPath = options.snapshotPath\n    this.#maxSnapshots = options.maxSnapshots || Infinity\n    this.#autoFlush = options.autoFlush || false\n    this.flushInterval = options.flushInterval || 30000 // 30 seconds default\n    this._flushTimer = null\n\n    // Matching configuration\n    /** @type {Required<SnapshotRecorderMatchOptions>} */\n    this.matchOptions = {\n      matchHeaders: options.matchHeaders || [], // empty means match all headers\n      ignoreHeaders: options.ignoreHeaders || [],\n      excludeHeaders: options.excludeHeaders || [],\n      matchBody: options.matchBody !== false, // default: true\n      matchQuery: options.matchQuery !== false, // default: true\n      caseSensitive: options.caseSensitive || false\n    }\n\n    // Cache processed header sets to avoid recreating them on every request\n    this.#headerFilters = createHeaderFilters(this.matchOptions)\n\n    // Request filtering callbacks\n    this.shouldRecord = options.shouldRecord || (() => true) // function(requestOpts) -> boolean\n    this.shouldPlayback = options.shouldPlayback || (() => true) // function(requestOpts) -> boolean\n\n    // URL pattern filtering\n    this.#isUrlExcluded = isUrlExcludedFactory(options.excludeUrls) // Array of regex patterns or strings\n\n    // Start auto-flush timer if enabled\n    if (this.#autoFlush && this.#snapshotPath) {\n      this.#startAutoFlush()\n    }\n  }\n\n  /**\n   * Records a request-response interaction\n   * @param {SnapshotRequestOptions} requestOpts - Request options\n   * @param {SnapshotEntryResponse} response - Response data to record\n   * @return {Promise<void>} - Resolves when the recording is complete\n   */\n  async record (requestOpts, response) {\n    // Check if recording should be filtered out\n    if (!this.shouldRecord(requestOpts)) {\n      return // Skip recording\n    }\n\n    // Check URL exclusion patterns\n    if (this.isUrlExcluded(requestOpts)) {\n      return // Skip recording\n    }\n\n    const request = formatRequestKey(requestOpts, this.#headerFilters, this.matchOptions)\n    const hash = createRequestHash(request)\n\n    // Extract response data - always store body as base64\n    const normalizedHeaders = normalizeHeaders(response.headers)\n\n    /** @type {SnapshotEntryResponse} */\n    const responseData = {\n      statusCode: response.statusCode,\n      headers: filterHeadersForStorage(normalizedHeaders, this.#headerFilters, this.matchOptions),\n      body: Buffer.isBuffer(response.body)\n        ? response.body.toString('base64')\n        : Buffer.from(String(response.body || '')).toString('base64'),\n      trailers: response.trailers\n    }\n\n    // Remove oldest snapshot if we exceed maxSnapshots limit\n    if (this.#snapshots.size >= this.#maxSnapshots && !this.#snapshots.has(hash)) {\n      const oldestKey = this.#snapshots.keys().next().value\n      this.#snapshots.delete(oldestKey)\n    }\n\n    // Support sequential responses - if snapshot exists, add to responses array\n    const existingSnapshot = this.#snapshots.get(hash)\n    if (existingSnapshot && existingSnapshot.responses) {\n      existingSnapshot.responses.push(responseData)\n      existingSnapshot.timestamp = new Date().toISOString()\n    } else {\n      this.#snapshots.set(hash, {\n        request,\n        responses: [responseData], // Always store as array for consistency\n        callCount: 0,\n        timestamp: new Date().toISOString()\n      })\n    }\n\n    // Auto-flush if enabled\n    if (this.#autoFlush && this.#snapshotPath) {\n      this.#scheduleFlush()\n    }\n  }\n\n  /**\n   * Checks if a URL should be excluded from recording/playback\n   * @param {SnapshotRequestOptions} requestOpts - Request options to check\n   * @returns {boolean} - True if URL is excluded\n   */\n  isUrlExcluded (requestOpts) {\n    const url = new URL(requestOpts.path, requestOpts.origin).toString()\n    return this.#isUrlExcluded(url)\n  }\n\n  /**\n   * Finds a matching snapshot for the given request\n   * Returns the appropriate response based on call count for sequential responses\n   *\n   * @param {SnapshotRequestOptions} requestOpts - Request options to match\n   * @returns {SnapshotEntry&Record<'response', SnapshotEntryResponse>|undefined} - Matching snapshot response or undefined if not found\n   */\n  findSnapshot (requestOpts) {\n    // Check if playback should be filtered out\n    if (!this.shouldPlayback(requestOpts)) {\n      return undefined // Skip playback\n    }\n\n    // Check URL exclusion patterns\n    if (this.isUrlExcluded(requestOpts)) {\n      return undefined // Skip playback\n    }\n\n    const request = formatRequestKey(requestOpts, this.#headerFilters, this.matchOptions)\n    const hash = createRequestHash(request)\n    const snapshot = this.#snapshots.get(hash)\n\n    if (!snapshot) return undefined\n\n    // Handle sequential responses\n    const currentCallCount = snapshot.callCount || 0\n    const responseIndex = Math.min(currentCallCount, snapshot.responses.length - 1)\n    snapshot.callCount = currentCallCount + 1\n\n    return {\n      ...snapshot,\n      response: snapshot.responses[responseIndex]\n    }\n  }\n\n  /**\n   * Loads snapshots from file\n   * @param {string} [filePath] - Optional file path to load snapshots from\n   * @return {Promise<void>} - Resolves when snapshots are loaded\n   */\n  async loadSnapshots (filePath) {\n    const path = filePath || this.#snapshotPath\n    if (!path) {\n      throw new InvalidArgumentError('Snapshot path is required')\n    }\n\n    try {\n      const data = await readFile(resolve(path), 'utf8')\n      const parsed = JSON.parse(data)\n\n      // Convert array format back to Map\n      if (Array.isArray(parsed)) {\n        this.#snapshots.clear()\n        for (const { hash, snapshot } of parsed) {\n          this.#snapshots.set(hash, snapshot)\n        }\n      } else {\n        // Legacy object format\n        this.#snapshots = new Map(Object.entries(parsed))\n      }\n    } catch (error) {\n      if (error.code === 'ENOENT') {\n        // File doesn't exist yet - that's ok for recording mode\n        this.#snapshots.clear()\n      } else {\n        throw new UndiciError(`Failed to load snapshots from ${path}`, { cause: error })\n      }\n    }\n  }\n\n  /**\n   * Saves snapshots to file\n   *\n   * @param {string} [filePath] - Optional file path to save snapshots\n   * @returns {Promise<void>} - Resolves when snapshots are saved\n   */\n  async saveSnapshots (filePath) {\n    const path = filePath || this.#snapshotPath\n    if (!path) {\n      throw new InvalidArgumentError('Snapshot path is required')\n    }\n\n    const resolvedPath = resolve(path)\n\n    // Ensure directory exists\n    await mkdir(dirname(resolvedPath), { recursive: true })\n\n    // Convert Map to serializable format\n    const data = Array.from(this.#snapshots.entries()).map(([hash, snapshot]) => ({\n      hash,\n      snapshot\n    }))\n\n    await writeFile(resolvedPath, JSON.stringify(data, null, 2), { flush: true })\n  }\n\n  /**\n   * Clears all recorded snapshots\n   * @returns {void}\n   */\n  clear () {\n    this.#snapshots.clear()\n  }\n\n  /**\n   * Gets all recorded snapshots\n   * @return {Array<SnapshotEntry>} - Array of all recorded snapshots\n   */\n  getSnapshots () {\n    return Array.from(this.#snapshots.values())\n  }\n\n  /**\n   * Gets snapshot count\n   * @return {number} - Number of recorded snapshots\n   */\n  size () {\n    return this.#snapshots.size\n  }\n\n  /**\n   * Resets call counts for all snapshots (useful for test cleanup)\n   * @returns {void}\n   */\n  resetCallCounts () {\n    for (const snapshot of this.#snapshots.values()) {\n      snapshot.callCount = 0\n    }\n  }\n\n  /**\n   * Deletes a specific snapshot by request options\n   * @param {SnapshotRequestOptions} requestOpts - Request options to match\n   * @returns {boolean} - True if snapshot was deleted, false if not found\n   */\n  deleteSnapshot (requestOpts) {\n    const request = formatRequestKey(requestOpts, this.#headerFilters, this.matchOptions)\n    const hash = createRequestHash(request)\n    return this.#snapshots.delete(hash)\n  }\n\n  /**\n   * Gets information about a specific snapshot\n   * @param {SnapshotRequestOptions} requestOpts - Request options to match\n   * @returns {SnapshotInfo|null} - Snapshot information or null if not found\n   */\n  getSnapshotInfo (requestOpts) {\n    const request = formatRequestKey(requestOpts, this.#headerFilters, this.matchOptions)\n    const hash = createRequestHash(request)\n    const snapshot = this.#snapshots.get(hash)\n\n    if (!snapshot) return null\n\n    return {\n      hash,\n      request: snapshot.request,\n      responseCount: snapshot.responses ? snapshot.responses.length : (snapshot.response ? 1 : 0), // .response for legacy snapshots\n      callCount: snapshot.callCount || 0,\n      timestamp: snapshot.timestamp\n    }\n  }\n\n  /**\n   * Replaces all snapshots with new data (full replacement)\n   * @param {Array<{hash: string; snapshot: SnapshotEntry}>|Record<string, SnapshotEntry>} snapshotData - New snapshot data to replace existing ones\n   * @returns {void}\n   */\n  replaceSnapshots (snapshotData) {\n    this.#snapshots.clear()\n\n    if (Array.isArray(snapshotData)) {\n      for (const { hash, snapshot } of snapshotData) {\n        this.#snapshots.set(hash, snapshot)\n      }\n    } else if (snapshotData && typeof snapshotData === 'object') {\n      // Legacy object format\n      this.#snapshots = new Map(Object.entries(snapshotData))\n    }\n  }\n\n  /**\n   * Starts the auto-flush timer\n   * @returns {void}\n   */\n  #startAutoFlush () {\n    return this.#scheduleFlush()\n  }\n\n  /**\n   * Stops the auto-flush timer\n   * @returns {void}\n   */\n  #stopAutoFlush () {\n    if (this.#flushTimeout) {\n      clearTimeout(this.#flushTimeout)\n      // Ensure any pending flush is completed\n      this.saveSnapshots().catch(() => {\n      // Ignore flush errors\n      })\n      this.#flushTimeout = null\n    }\n  }\n\n  /**\n   * Schedules a flush (debounced to avoid excessive writes)\n   */\n  #scheduleFlush () {\n    this.#flushTimeout = setTimeout(() => {\n      this.saveSnapshots().catch(() => {\n        // Ignore flush errors\n      })\n      if (this.#autoFlush) {\n        this.#flushTimeout?.refresh()\n      } else {\n        this.#flushTimeout = null\n      }\n    }, 1000) // 1 second debounce\n  }\n\n  /**\n   * Cleanup method to stop timers\n   * @returns {void}\n   */\n  destroy () {\n    this.#stopAutoFlush()\n    if (this.#flushTimeout) {\n      clearTimeout(this.#flushTimeout)\n      this.#flushTimeout = null\n    }\n  }\n\n  /**\n   * Async close method that saves all recordings and performs cleanup\n   * @returns {Promise<void>}\n   */\n  async close () {\n    // Save any pending recordings if we have a snapshot path\n    if (this.#snapshotPath && this.#snapshots.size !== 0) {\n      await this.saveSnapshots()\n    }\n\n    // Perform cleanup\n    this.destroy()\n  }\n}\n\nmodule.exports = { SnapshotRecorder, formatRequestKey, createRequestHash, filterHeadersForMatching, filterHeadersForStorage, createHeaderFilters }\n", "'use strict'\n\nconst Agent = require('../dispatcher/agent')\nconst MockAgent = require('./mock-agent')\nconst { SnapshotRecorder } = require('./snapshot-recorder')\nconst WrapHandler = require('../handler/wrap-handler')\nconst { InvalidArgumentError, UndiciError } = require('../core/errors')\nconst { validateSnapshotMode } = require('./snapshot-utils')\n\nconst kSnapshotRecorder = Symbol('kSnapshotRecorder')\nconst kSnapshotMode = Symbol('kSnapshotMode')\nconst kSnapshotPath = Symbol('kSnapshotPath')\nconst kSnapshotLoaded = Symbol('kSnapshotLoaded')\nconst kRealAgent = Symbol('kRealAgent')\n\n// Static flag to ensure warning is only emitted once per process\nlet warningEmitted = false\n\nclass SnapshotAgent extends MockAgent {\n  constructor (opts = {}) {\n    // Emit experimental warning only once\n    if (!warningEmitted) {\n      process.emitWarning(\n        'SnapshotAgent is experimental and subject to change',\n        'ExperimentalWarning'\n      )\n      warningEmitted = true\n    }\n\n    const {\n      mode = 'record',\n      snapshotPath = null,\n      ...mockAgentOpts\n    } = opts\n\n    super(mockAgentOpts)\n\n    validateSnapshotMode(mode)\n\n    // Validate snapshotPath is provided when required\n    if ((mode === 'playback' || mode === 'update') && !snapshotPath) {\n      throw new InvalidArgumentError(`snapshotPath is required when mode is '${mode}'`)\n    }\n\n    this[kSnapshotMode] = mode\n    this[kSnapshotPath] = snapshotPath\n\n    this[kSnapshotRecorder] = new SnapshotRecorder({\n      snapshotPath: this[kSnapshotPath],\n      mode: this[kSnapshotMode],\n      maxSnapshots: opts.maxSnapshots,\n      autoFlush: opts.autoFlush,\n      flushInterval: opts.flushInterval,\n      matchHeaders: opts.matchHeaders,\n      ignoreHeaders: opts.ignoreHeaders,\n      excludeHeaders: opts.excludeHeaders,\n      matchBody: opts.matchBody,\n      matchQuery: opts.matchQuery,\n      caseSensitive: opts.caseSensitive,\n      shouldRecord: opts.shouldRecord,\n      shouldPlayback: opts.shouldPlayback,\n      excludeUrls: opts.excludeUrls\n    })\n    this[kSnapshotLoaded] = false\n\n    // For recording/update mode, we need a real agent to make actual requests\n    // For playback mode, we need a real agent if there are excluded URLs\n    if (this[kSnapshotMode] === 'record' || this[kSnapshotMode] === 'update' ||\n        (this[kSnapshotMode] === 'playback' && opts.excludeUrls && opts.excludeUrls.length > 0)) {\n      this[kRealAgent] = new Agent(opts)\n    }\n\n    // Auto-load snapshots in playback/update mode\n    if ((this[kSnapshotMode] === 'playback' || this[kSnapshotMode] === 'update') && this[kSnapshotPath]) {\n      this.loadSnapshots().catch(() => {\n        // Ignore load errors - file might not exist yet\n      })\n    }\n  }\n\n  dispatch (opts, handler) {\n    handler = WrapHandler.wrap(handler)\n    const mode = this[kSnapshotMode]\n\n    // Check if URL should be excluded (pass through without mocking/recording)\n    if (this[kSnapshotRecorder].isUrlExcluded(opts)) {\n      // Real agent is guaranteed by constructor when excludeUrls is configured\n      return this[kRealAgent].dispatch(opts, handler)\n    }\n\n    if (mode === 'playback' || mode === 'update') {\n      // Ensure snapshots are loaded\n      if (!this[kSnapshotLoaded]) {\n        // Need to load asynchronously, delegate to async version\n        return this.#asyncDispatch(opts, handler)\n      }\n\n      // Try to find existing snapshot (synchronous)\n      const snapshot = this[kSnapshotRecorder].findSnapshot(opts)\n\n      if (snapshot) {\n        // Use recorded response (synchronous)\n        return this.#replaySnapshot(snapshot, handler)\n      } else if (mode === 'update') {\n        // Make real request and record it (async required)\n        return this.#recordAndReplay(opts, handler)\n      } else {\n        // Playback mode but no snapshot found\n        const error = new UndiciError(`No snapshot found for ${opts.method || 'GET'} ${opts.path}`)\n        if (handler.onError) {\n          handler.onError(error)\n          return\n        }\n        throw error\n      }\n    } else if (mode === 'record') {\n      // Record mode - make real request and save response (async required)\n      return this.#recordAndReplay(opts, handler)\n    }\n  }\n\n  /**\n   * Async version of dispatch for when we need to load snapshots first\n   */\n  async #asyncDispatch (opts, handler) {\n    await this.loadSnapshots()\n    return this.dispatch(opts, handler)\n  }\n\n  /**\n   * Records a real request and replays the response\n   */\n  #recordAndReplay (opts, handler) {\n    const responseData = {\n      statusCode: null,\n      headers: {},\n      trailers: {},\n      body: []\n    }\n\n    const self = this // Capture 'this' context for use within nested handler callbacks\n\n    const recordingHandler = {\n      onRequestStart (controller, context) {\n        return handler.onRequestStart(controller, { ...context, history: this.history })\n      },\n\n      onRequestUpgrade (controller, statusCode, headers, socket) {\n        return handler.onRequestUpgrade(controller, statusCode, headers, socket)\n      },\n\n      onResponseStart (controller, statusCode, headers, statusMessage) {\n        responseData.statusCode = statusCode\n        responseData.headers = headers\n        return handler.onResponseStart(controller, statusCode, headers, statusMessage)\n      },\n\n      onResponseData (controller, chunk) {\n        responseData.body.push(chunk)\n        return handler.onResponseData(controller, chunk)\n      },\n\n      onResponseEnd (controller, trailers) {\n        responseData.trailers = trailers\n\n        // Record the interaction using captured 'self' context (fire and forget)\n        const responseBody = Buffer.concat(responseData.body)\n        self[kSnapshotRecorder].record(opts, {\n          statusCode: responseData.statusCode,\n          headers: responseData.headers,\n          body: responseBody,\n          trailers: responseData.trailers\n        })\n          .then(() => handler.onResponseEnd(controller, trailers))\n          .catch((error) => handler.onResponseError(controller, error))\n      }\n    }\n\n    // Use composed agent if available (includes interceptors), otherwise use real agent\n    const agent = this[kRealAgent]\n    return agent.dispatch(opts, recordingHandler)\n  }\n\n  /**\n   * Replays a recorded response\n   *\n   * @param {Object} snapshot - The recorded snapshot to replay.\n   * @param {Object} handler - The handler to call with the response data.\n   * @returns {void}\n   */\n  #replaySnapshot (snapshot, handler) {\n    try {\n      const { response } = snapshot\n\n      const controller = {\n        pause () { },\n        resume () { },\n        abort (reason) {\n          this.aborted = true\n          this.reason = reason\n        },\n\n        aborted: false,\n        paused: false\n      }\n\n      handler.onRequestStart(controller)\n\n      handler.onResponseStart(controller, response.statusCode, response.headers)\n\n      // Body is always stored as base64 string\n      const body = Buffer.from(response.body, 'base64')\n      handler.onResponseData(controller, body)\n\n      handler.onResponseEnd(controller, response.trailers)\n    } catch (error) {\n      handler.onError?.(error)\n    }\n  }\n\n  /**\n   * Loads snapshots from file\n   *\n   * @param {string} [filePath] - Optional file path to load snapshots from.\n   * @returns {Promise<void>} - Resolves when snapshots are loaded.\n   */\n  async loadSnapshots (filePath) {\n    await this[kSnapshotRecorder].loadSnapshots(filePath || this[kSnapshotPath])\n    this[kSnapshotLoaded] = true\n\n    // In playback mode, set up MockAgent interceptors for all snapshots\n    if (this[kSnapshotMode] === 'playback') {\n      this.#setupMockInterceptors()\n    }\n  }\n\n  /**\n   * Saves snapshots to file\n   *\n   * @param {string} [filePath] - Optional file path to save snapshots to.\n   * @returns {Promise<void>} - Resolves when snapshots are saved.\n   */\n  async saveSnapshots (filePath) {\n    return this[kSnapshotRecorder].saveSnapshots(filePath || this[kSnapshotPath])\n  }\n\n  /**\n   * Sets up MockAgent interceptors based on recorded snapshots.\n   *\n   * This method creates MockAgent interceptors for each recorded snapshot,\n   * allowing the SnapshotAgent to fall back to MockAgent's standard intercept\n   * mechanism in playback mode. Each interceptor is configured to persist\n   * (remain active for multiple requests) and responds with the recorded\n   * response data.\n   *\n   * Called automatically when loading snapshots in playback mode.\n   *\n   * @returns {void}\n   */\n  #setupMockInterceptors () {\n    for (const snapshot of this[kSnapshotRecorder].getSnapshots()) {\n      const { request, responses, response } = snapshot\n      const url = new URL(request.url)\n\n      const mockPool = this.get(url.origin)\n\n      // Handle both new format (responses array) and legacy format (response object)\n      const responseData = responses ? responses[0] : response\n      if (!responseData) continue\n\n      mockPool.intercept({\n        path: url.pathname + url.search,\n        method: request.method,\n        headers: request.headers,\n        body: request.body\n      }).reply(responseData.statusCode, responseData.body, {\n        headers: responseData.headers,\n        trailers: responseData.trailers\n      }).persist()\n    }\n  }\n\n  /**\n   * Gets the snapshot recorder\n   * @return {SnapshotRecorder} - The snapshot recorder instance\n   */\n  getRecorder () {\n    return this[kSnapshotRecorder]\n  }\n\n  /**\n   * Gets the current mode\n   * @return {import('./snapshot-utils').SnapshotMode} - The current snapshot mode\n   */\n  getMode () {\n    return this[kSnapshotMode]\n  }\n\n  /**\n   * Clears all snapshots\n   * @returns {void}\n   */\n  clearSnapshots () {\n    this[kSnapshotRecorder].clear()\n  }\n\n  /**\n   * Resets call counts for all snapshots (useful for test cleanup)\n   * @returns {void}\n   */\n  resetCallCounts () {\n    this[kSnapshotRecorder].resetCallCounts()\n  }\n\n  /**\n   * Deletes a specific snapshot by request options\n   * @param {import('./snapshot-recorder').SnapshotRequestOptions} requestOpts - Request options to identify the snapshot\n   * @return {Promise<boolean>} - Returns true if the snapshot was deleted, false if not found\n   */\n  deleteSnapshot (requestOpts) {\n    return this[kSnapshotRecorder].deleteSnapshot(requestOpts)\n  }\n\n  /**\n   * Gets information about a specific snapshot\n   * @returns {import('./snapshot-recorder').SnapshotInfo|null} - Snapshot information or null if not found\n   */\n  getSnapshotInfo (requestOpts) {\n    return this[kSnapshotRecorder].getSnapshotInfo(requestOpts)\n  }\n\n  /**\n   * Replaces all snapshots with new data (full replacement)\n   * @param {Array<{hash: string; snapshot: import('./snapshot-recorder').SnapshotEntryshotEntry}>|Record<string, import('./snapshot-recorder').SnapshotEntry>} snapshotData - New snapshot data to replace existing snapshots\n   * @returns {void}\n   */\n  replaceSnapshots (snapshotData) {\n    this[kSnapshotRecorder].replaceSnapshots(snapshotData)\n  }\n\n  /**\n   * Closes the agent, saving snapshots and cleaning up resources.\n   *\n   * @returns {Promise<void>}\n   */\n  async close () {\n    await this[kSnapshotRecorder].close()\n    await this[kRealAgent]?.close()\n    await super.close()\n  }\n}\n\nmodule.exports = SnapshotAgent\n", "'use strict'\n\n// We include a version number for the Dispatcher API. In case of breaking changes,\n// this version number must be increased to avoid conflicts.\nconst globalDispatcher = Symbol.for('undici.globalDispatcher.1')\nconst { InvalidArgumentError } = require('./core/errors')\nconst Agent = require('./dispatcher/agent')\n\nif (getGlobalDispatcher() === undefined) {\n  setGlobalDispatcher(new Agent())\n}\n\nfunction setGlobalDispatcher (agent) {\n  if (!agent || typeof agent.dispatch !== 'function') {\n    throw new InvalidArgumentError('Argument agent must implement Agent')\n  }\n  Object.defineProperty(globalThis, globalDispatcher, {\n    value: agent,\n    writable: true,\n    enumerable: false,\n    configurable: false\n  })\n}\n\nfunction getGlobalDispatcher () {\n  return globalThis[globalDispatcher]\n}\n\n// These are the globals that can be installed by undici.install().\n// Not exported by index.js to avoid use outside of this module.\nconst installedExports = /** @type {const} */ (\n  [\n    'fetch',\n    'Headers',\n    'Response',\n    'Request',\n    'FormData',\n    'WebSocket',\n    'CloseEvent',\n    'ErrorEvent',\n    'MessageEvent',\n    'EventSource'\n  ]\n)\n\nmodule.exports = {\n  setGlobalDispatcher,\n  getGlobalDispatcher,\n  installedExports\n}\n", "'use strict'\n\nconst assert = require('node:assert')\nconst WrapHandler = require('./wrap-handler')\n\n/**\n * @deprecated\n */\nmodule.exports = class DecoratorHandler {\n  #handler\n  #onCompleteCalled = false\n  #onErrorCalled = false\n  #onResponseStartCalled = false\n\n  constructor (handler) {\n    if (typeof handler !== 'object' || handler === null) {\n      throw new TypeError('handler must be an object')\n    }\n    this.#handler = WrapHandler.wrap(handler)\n  }\n\n  onRequestStart (...args) {\n    this.#handler.onRequestStart?.(...args)\n  }\n\n  onRequestUpgrade (...args) {\n    assert(!this.#onCompleteCalled)\n    assert(!this.#onErrorCalled)\n\n    return this.#handler.onRequestUpgrade?.(...args)\n  }\n\n  onResponseStart (...args) {\n    assert(!this.#onCompleteCalled)\n    assert(!this.#onErrorCalled)\n    assert(!this.#onResponseStartCalled)\n\n    this.#onResponseStartCalled = true\n\n    return this.#handler.onResponseStart?.(...args)\n  }\n\n  onResponseData (...args) {\n    assert(!this.#onCompleteCalled)\n    assert(!this.#onErrorCalled)\n\n    return this.#handler.onResponseData?.(...args)\n  }\n\n  onResponseEnd (...args) {\n    assert(!this.#onCompleteCalled)\n    assert(!this.#onErrorCalled)\n\n    this.#onCompleteCalled = true\n    return this.#handler.onResponseEnd?.(...args)\n  }\n\n  onResponseError (...args) {\n    this.#onErrorCalled = true\n    return this.#handler.onResponseError?.(...args)\n  }\n\n  /**\n   * @deprecated\n   */\n  onBodySent () {}\n}\n", "'use strict'\n\nconst util = require('../core/util')\nconst { kBodyUsed } = require('../core/symbols')\nconst assert = require('node:assert')\nconst { InvalidArgumentError } = require('../core/errors')\nconst EE = require('node:events')\n\nconst redirectableStatusCodes = [300, 301, 302, 303, 307, 308]\n\nconst kBody = Symbol('body')\n\nconst noop = () => {}\n\nclass BodyAsyncIterable {\n  constructor (body) {\n    this[kBody] = body\n    this[kBodyUsed] = false\n  }\n\n  async * [Symbol.asyncIterator] () {\n    assert(!this[kBodyUsed], 'disturbed')\n    this[kBodyUsed] = true\n    yield * this[kBody]\n  }\n}\n\nclass RedirectHandler {\n  static buildDispatch (dispatcher, maxRedirections) {\n    if (maxRedirections != null && (!Number.isInteger(maxRedirections) || maxRedirections < 0)) {\n      throw new InvalidArgumentError('maxRedirections must be a positive number')\n    }\n\n    const dispatch = dispatcher.dispatch.bind(dispatcher)\n    return (opts, originalHandler) => dispatch(opts, new RedirectHandler(dispatch, maxRedirections, opts, originalHandler))\n  }\n\n  constructor (dispatch, maxRedirections, opts, handler) {\n    if (maxRedirections != null && (!Number.isInteger(maxRedirections) || maxRedirections < 0)) {\n      throw new InvalidArgumentError('maxRedirections must be a positive number')\n    }\n\n    this.dispatch = dispatch\n    this.location = null\n    const { maxRedirections: _, ...cleanOpts } = opts\n    this.opts = cleanOpts // opts must be a copy, exclude maxRedirections\n    this.maxRedirections = maxRedirections\n    this.handler = handler\n    this.history = []\n\n    if (util.isStream(this.opts.body)) {\n      // TODO (fix): Provide some way for the user to cache the file to e.g. /tmp\n      // so that it can be dispatched again?\n      // TODO (fix): Do we need 100-expect support to provide a way to do this properly?\n      if (util.bodyLength(this.opts.body) === 0) {\n        this.opts.body\n          .on('data', function () {\n            assert(false)\n          })\n      }\n\n      if (typeof this.opts.body.readableDidRead !== 'boolean') {\n        this.opts.body[kBodyUsed] = false\n        EE.prototype.on.call(this.opts.body, 'data', function () {\n          this[kBodyUsed] = true\n        })\n      }\n    } else if (this.opts.body && typeof this.opts.body.pipeTo === 'function') {\n      // TODO (fix): We can't access ReadableStream internal state\n      // to determine whether or not it has been disturbed. This is just\n      // a workaround.\n      this.opts.body = new BodyAsyncIterable(this.opts.body)\n    } else if (\n      this.opts.body &&\n      typeof this.opts.body !== 'string' &&\n      !ArrayBuffer.isView(this.opts.body) &&\n      util.isIterable(this.opts.body) &&\n      !util.isFormDataLike(this.opts.body)\n    ) {\n      // TODO: Should we allow re-using iterable if !this.opts.idempotent\n      // or through some other flag?\n      this.opts.body = new BodyAsyncIterable(this.opts.body)\n    }\n  }\n\n  onRequestStart (controller, context) {\n    this.handler.onRequestStart?.(controller, { ...context, history: this.history })\n  }\n\n  onRequestUpgrade (controller, statusCode, headers, socket) {\n    this.handler.onRequestUpgrade?.(controller, statusCode, headers, socket)\n  }\n\n  onResponseStart (controller, statusCode, headers, statusMessage) {\n    if (this.opts.throwOnMaxRedirect && this.history.length >= this.maxRedirections) {\n      throw new Error('max redirects')\n    }\n\n    // https://tools.ietf.org/html/rfc7231#section-6.4.2\n    // https://fetch.spec.whatwg.org/#http-redirect-fetch\n    // In case of HTTP 301 or 302 with POST, change the method to GET\n    if ((statusCode === 301 || statusCode === 302) && this.opts.method === 'POST') {\n      this.opts.method = 'GET'\n      if (util.isStream(this.opts.body)) {\n        util.destroy(this.opts.body.on('error', noop))\n      }\n      this.opts.body = null\n    }\n\n    // https://tools.ietf.org/html/rfc7231#section-6.4.4\n    // In case of HTTP 303, always replace method to be either HEAD or GET\n    if (statusCode === 303 && this.opts.method !== 'HEAD') {\n      this.opts.method = 'GET'\n      if (util.isStream(this.opts.body)) {\n        util.destroy(this.opts.body.on('error', noop))\n      }\n      this.opts.body = null\n    }\n\n    this.location = this.history.length >= this.maxRedirections || util.isDisturbed(this.opts.body) || redirectableStatusCodes.indexOf(statusCode) === -1\n      ? null\n      : headers.location\n\n    if (this.opts.origin) {\n      this.history.push(new URL(this.opts.path, this.opts.origin))\n    }\n\n    if (!this.location) {\n      this.handler.onResponseStart?.(controller, statusCode, headers, statusMessage)\n      return\n    }\n\n    const { origin, pathname, search } = util.parseURL(new URL(this.location, this.opts.origin && new URL(this.opts.path, this.opts.origin)))\n    const path = search ? `${pathname}${search}` : pathname\n\n    // Check for redirect loops by seeing if we've already visited this URL in our history\n    // This catches the case where Client/Pool try to handle cross-origin redirects but fail\n    // and keep redirecting to the same URL in an infinite loop\n    const redirectUrlString = `${origin}${path}`\n    for (const historyUrl of this.history) {\n      if (historyUrl.toString() === redirectUrlString) {\n        throw new InvalidArgumentError(`Redirect loop detected. Cannot redirect to ${origin}. This typically happens when using a Client or Pool with cross-origin redirects. Use an Agent for cross-origin redirects.`)\n      }\n    }\n\n    // Remove headers referring to the original URL.\n    // By default it is Host only, unless it's a 303 (see below), which removes also all Content-* headers.\n    // https://tools.ietf.org/html/rfc7231#section-6.4\n    this.opts.headers = cleanRequestHeaders(this.opts.headers, statusCode === 303, this.opts.origin !== origin)\n    this.opts.path = path\n    this.opts.origin = origin\n    this.opts.query = null\n  }\n\n  onResponseData (controller, chunk) {\n    if (this.location) {\n      /*\n        https://tools.ietf.org/html/rfc7231#section-6.4\n\n        TLDR: undici always ignores 3xx response bodies.\n\n        Redirection is used to serve the requested resource from another URL, so it assumes that\n        no body is generated (and thus can be ignored). Even though generating a body is not prohibited.\n\n        For status 301, 302, 303, 307 and 308 (the latter from RFC 7238), the specs mention that the body usually\n        (which means it's optional and not mandated) contain just an hyperlink to the value of\n        the Location response header, so the body can be ignored safely.\n\n        For status 300, which is \"Multiple Choices\", the spec mentions both generating a Location\n        response header AND a response body with the other possible location to follow.\n        Since the spec explicitly chooses not to specify a format for such body and leave it to\n        servers and browsers implementors, we ignore the body as there is no specified way to eventually parse it.\n      */\n    } else {\n      this.handler.onResponseData?.(controller, chunk)\n    }\n  }\n\n  onResponseEnd (controller, trailers) {\n    if (this.location) {\n      /*\n        https://tools.ietf.org/html/rfc7231#section-6.4\n\n        TLDR: undici always ignores 3xx response trailers as they are not expected in case of redirections\n        and neither are useful if present.\n\n        See comment on onData method above for more detailed information.\n      */\n      this.dispatch(this.opts, this)\n    } else {\n      this.handler.onResponseEnd(controller, trailers)\n    }\n  }\n\n  onResponseError (controller, error) {\n    this.handler.onResponseError?.(controller, error)\n  }\n}\n\n// https://tools.ietf.org/html/rfc7231#section-6.4.4\nfunction shouldRemoveHeader (header, removeContent, unknownOrigin) {\n  if (header.length === 4) {\n    return util.headerNameToString(header) === 'host'\n  }\n  if (removeContent && util.headerNameToString(header).startsWith('content-')) {\n    return true\n  }\n  if (unknownOrigin && (header.length === 13 || header.length === 6 || header.length === 19)) {\n    const name = util.headerNameToString(header)\n    return name === 'authorization' || name === 'cookie' || name === 'proxy-authorization'\n  }\n  return false\n}\n\n// https://tools.ietf.org/html/rfc7231#section-6.4\nfunction cleanRequestHeaders (headers, removeContent, unknownOrigin) {\n  const ret = []\n  if (Array.isArray(headers)) {\n    for (let i = 0; i < headers.length; i += 2) {\n      if (!shouldRemoveHeader(headers[i], removeContent, unknownOrigin)) {\n        ret.push(headers[i], headers[i + 1])\n      }\n    }\n  } else if (headers && typeof headers === 'object') {\n    const entries = util.hasSafeIterator(headers) ? headers : Object.entries(headers)\n\n    for (const [key, value] of entries) {\n      if (!shouldRemoveHeader(key, removeContent, unknownOrigin)) {\n        ret.push(key, value)\n      }\n    }\n  } else {\n    assert(headers == null, 'headers must be an object or an array')\n  }\n  return ret\n}\n\nmodule.exports = RedirectHandler\n", "'use strict'\n\nconst RedirectHandler = require('../handler/redirect-handler')\n\nfunction createRedirectInterceptor ({ maxRedirections: defaultMaxRedirections } = {}) {\n  return (dispatch) => {\n    return function Intercept (opts, handler) {\n      const { maxRedirections = defaultMaxRedirections, ...rest } = opts\n\n      if (maxRedirections == null || maxRedirections === 0) {\n        return dispatch(opts, handler)\n      }\n\n      const dispatchOpts = { ...rest } // Stop sub dispatcher from also redirecting.\n      const redirectHandler = new RedirectHandler(dispatch, maxRedirections, dispatchOpts, handler)\n      return dispatch(dispatchOpts, redirectHandler)\n    }\n  }\n}\n\nmodule.exports = createRedirectInterceptor\n", "'use strict'\n\n// const { parseHeaders } = require('../core/util')\nconst DecoratorHandler = require('../handler/decorator-handler')\nconst { ResponseError } = require('../core/errors')\n\nclass ResponseErrorHandler extends DecoratorHandler {\n  #statusCode\n  #contentType\n  #decoder\n  #headers\n  #body\n\n  constructor (_opts, { handler }) {\n    super(handler)\n  }\n\n  #checkContentType (contentType) {\n    return (this.#contentType ?? '').indexOf(contentType) === 0\n  }\n\n  onRequestStart (controller, context) {\n    this.#statusCode = 0\n    this.#contentType = null\n    this.#decoder = null\n    this.#headers = null\n    this.#body = ''\n\n    return super.onRequestStart(controller, context)\n  }\n\n  onResponseStart (controller, statusCode, headers, statusMessage) {\n    this.#statusCode = statusCode\n    this.#headers = headers\n    this.#contentType = headers['content-type']\n\n    if (this.#statusCode < 400) {\n      return super.onResponseStart(controller, statusCode, headers, statusMessage)\n    }\n\n    if (this.#checkContentType('application/json') || this.#checkContentType('text/plain')) {\n      this.#decoder = new TextDecoder('utf-8')\n    }\n  }\n\n  onResponseData (controller, chunk) {\n    if (this.#statusCode < 400) {\n      return super.onResponseData(controller, chunk)\n    }\n\n    this.#body += this.#decoder?.decode(chunk, { stream: true }) ?? ''\n  }\n\n  onResponseEnd (controller, trailers) {\n    if (this.#statusCode >= 400) {\n      this.#body += this.#decoder?.decode(undefined, { stream: false }) ?? ''\n\n      if (this.#checkContentType('application/json')) {\n        try {\n          this.#body = JSON.parse(this.#body)\n        } catch {\n          // Do nothing...\n        }\n      }\n\n      let err\n      const stackTraceLimit = Error.stackTraceLimit\n      Error.stackTraceLimit = 0\n      try {\n        err = new ResponseError('Response Error', this.#statusCode, {\n          body: this.#body,\n          headers: this.#headers\n        })\n      } finally {\n        Error.stackTraceLimit = stackTraceLimit\n      }\n\n      super.onResponseError(controller, err)\n    } else {\n      super.onResponseEnd(controller, trailers)\n    }\n  }\n\n  onResponseError (controller, err) {\n    super.onResponseError(controller, err)\n  }\n}\n\nmodule.exports = () => {\n  return (dispatch) => {\n    return function Intercept (opts, handler) {\n      return dispatch(opts, new ResponseErrorHandler(opts, { handler }))\n    }\n  }\n}\n", "'use strict'\nconst RetryHandler = require('../handler/retry-handler')\n\nmodule.exports = globalOpts => {\n  return dispatch => {\n    return function retryInterceptor (opts, handler) {\n      return dispatch(\n        opts,\n        new RetryHandler(\n          { ...opts, retryOptions: { ...globalOpts, ...opts.retryOptions } },\n          {\n            handler,\n            dispatch\n          }\n        )\n      )\n    }\n  }\n}\n", "'use strict'\n\nconst { InvalidArgumentError, RequestAbortedError } = require('../core/errors')\nconst DecoratorHandler = require('../handler/decorator-handler')\n\nclass DumpHandler extends DecoratorHandler {\n  #maxSize = 1024 * 1024\n  #dumped = false\n  #size = 0\n  #controller = null\n  aborted = false\n  reason = false\n\n  constructor ({ maxSize, signal }, handler) {\n    if (maxSize != null && (!Number.isFinite(maxSize) || maxSize < 1)) {\n      throw new InvalidArgumentError('maxSize must be a number greater than 0')\n    }\n\n    super(handler)\n\n    this.#maxSize = maxSize ?? this.#maxSize\n    // this.#handler = handler\n  }\n\n  #abort (reason) {\n    this.aborted = true\n    this.reason = reason\n  }\n\n  onRequestStart (controller, context) {\n    controller.abort = this.#abort.bind(this)\n    this.#controller = controller\n\n    return super.onRequestStart(controller, context)\n  }\n\n  onResponseStart (controller, statusCode, headers, statusMessage) {\n    const contentLength = headers['content-length']\n\n    if (contentLength != null && contentLength > this.#maxSize) {\n      throw new RequestAbortedError(\n        `Response size (${contentLength}) larger than maxSize (${\n          this.#maxSize\n        })`\n      )\n    }\n\n    if (this.aborted === true) {\n      return true\n    }\n\n    return super.onResponseStart(controller, statusCode, headers, statusMessage)\n  }\n\n  onResponseError (controller, err) {\n    if (this.#dumped) {\n      return\n    }\n\n    // On network errors before connect, controller will be null\n    err = this.#controller?.reason ?? err\n\n    super.onResponseError(controller, err)\n  }\n\n  onResponseData (controller, chunk) {\n    this.#size = this.#size + chunk.length\n\n    if (this.#size >= this.#maxSize) {\n      this.#dumped = true\n\n      if (this.aborted === true) {\n        super.onResponseError(controller, this.reason)\n      } else {\n        super.onResponseEnd(controller, {})\n      }\n    }\n\n    return true\n  }\n\n  onResponseEnd (controller, trailers) {\n    if (this.#dumped) {\n      return\n    }\n\n    if (this.#controller.aborted === true) {\n      super.onResponseError(controller, this.reason)\n      return\n    }\n\n    super.onResponseEnd(controller, trailers)\n  }\n}\n\nfunction createDumpInterceptor (\n  { maxSize: defaultMaxSize } = {\n    maxSize: 1024 * 1024\n  }\n) {\n  return dispatch => {\n    return function Intercept (opts, handler) {\n      const { dumpMaxSize = defaultMaxSize } = opts\n\n      const dumpHandler = new DumpHandler({ maxSize: dumpMaxSize, signal: opts.signal }, handler)\n\n      return dispatch(opts, dumpHandler)\n    }\n  }\n}\n\nmodule.exports = createDumpInterceptor\n", "'use strict'\nconst { isIP } = require('node:net')\nconst { lookup } = require('node:dns')\nconst DecoratorHandler = require('../handler/decorator-handler')\nconst { InvalidArgumentError, InformationalError } = require('../core/errors')\nconst maxInt = Math.pow(2, 31) - 1\n\nfunction hasSafeIterator (headers) {\n  const prototype = Object.getPrototypeOf(headers)\n  const ownIterator = Object.prototype.hasOwnProperty.call(headers, Symbol.iterator)\n  return ownIterator || (prototype != null && prototype !== Object.prototype && typeof headers[Symbol.iterator] === 'function')\n}\n\nfunction isHostHeader (key) {\n  return typeof key === 'string' && key.toLowerCase() === 'host'\n}\n\nfunction normalizeHeaders (headers) {\n  if (headers == null) {\n    return null\n  }\n\n  if (Array.isArray(headers)) {\n    if (headers.length === 0 || !Array.isArray(headers[0])) {\n      return headers\n    }\n\n    const normalized = []\n    for (const header of headers) {\n      if (Array.isArray(header) && header.length === 2) {\n        normalized.push(header[0], header[1])\n      } else {\n        normalized.push(header)\n      }\n    }\n\n    return normalized\n  }\n\n  if (typeof headers === 'object' && hasSafeIterator(headers)) {\n    const normalized = []\n    for (const header of headers) {\n      if (Array.isArray(header) && header.length === 2) {\n        normalized.push(header[0], header[1])\n      } else {\n        normalized.push(header)\n      }\n    }\n\n    return normalized\n  }\n\n  return headers\n}\n\nfunction hasHostHeader (headers) {\n  if (headers == null) {\n    return false\n  }\n\n  if (Array.isArray(headers)) {\n    if (headers.length === 0) {\n      return false\n    }\n\n    for (let i = 0; i < headers.length; i += 2) {\n      if (isHostHeader(headers[i])) {\n        return true\n      }\n    }\n\n    return false\n  }\n\n  if (typeof headers === 'object') {\n    for (const key in headers) {\n      if (isHostHeader(key)) {\n        return true\n      }\n    }\n  }\n\n  return false\n}\n\nfunction withHostHeader (host, headers) {\n  const normalizedHeaders = normalizeHeaders(headers)\n\n  if (hasHostHeader(normalizedHeaders)) {\n    return normalizedHeaders\n  }\n\n  if (Array.isArray(normalizedHeaders)) {\n    return ['host', host, ...normalizedHeaders]\n  }\n\n  if (normalizedHeaders && typeof normalizedHeaders === 'object') {\n    return {\n      host,\n      ...normalizedHeaders\n    }\n  }\n\n  return { host }\n}\n\nclass DNSStorage {\n  #maxItems = 0\n  #records = new Map()\n\n  constructor (opts) {\n    this.#maxItems = opts.maxItems\n  }\n\n  get size () {\n    return this.#records.size\n  }\n\n  get (hostname) {\n    return this.#records.get(hostname) ?? null\n  }\n\n  set (hostname, records) {\n    this.#records.set(hostname, records)\n  }\n\n  delete (hostname) {\n    this.#records.delete(hostname)\n  }\n\n  // Delegate to storage decide can we do more lookups or not\n  full () {\n    return this.size >= this.#maxItems\n  }\n}\n\nclass DNSInstance {\n  #maxTTL = 0\n  #maxItems = 0\n  dualStack = true\n  affinity = null\n  lookup = null\n  pick = null\n  storage = null\n\n  constructor (opts) {\n    this.#maxTTL = opts.maxTTL\n    this.#maxItems = opts.maxItems\n    this.dualStack = opts.dualStack\n    this.affinity = opts.affinity\n    this.lookup = opts.lookup ?? this.#defaultLookup\n    this.pick = opts.pick ?? this.#defaultPick\n    this.storage = opts.storage ?? new DNSStorage(opts)\n  }\n\n  runLookup (origin, opts, cb) {\n    const ips = this.storage.get(origin.hostname)\n\n    // If full, we just return the origin\n    if (ips == null && this.storage.full()) {\n      cb(null, origin)\n      return\n    }\n\n    const newOpts = {\n      affinity: this.affinity,\n      dualStack: this.dualStack,\n      lookup: this.lookup,\n      pick: this.pick,\n      ...opts.dns,\n      maxTTL: this.#maxTTL,\n      maxItems: this.#maxItems\n    }\n\n    // If no IPs we lookup\n    if (ips == null) {\n      this.lookup(origin, newOpts, (err, addresses) => {\n        if (err || addresses == null || addresses.length === 0) {\n          cb(err ?? new InformationalError('No DNS entries found'))\n          return\n        }\n\n        this.setRecords(origin, addresses)\n        const records = this.storage.get(origin.hostname)\n\n        const ip = this.pick(\n          origin,\n          records,\n          newOpts.affinity\n        )\n\n        let port\n        if (typeof ip.port === 'number') {\n          port = `:${ip.port}`\n        } else if (origin.port !== '') {\n          port = `:${origin.port}`\n        } else {\n          port = ''\n        }\n\n        cb(\n          null,\n          new URL(`${origin.protocol}//${\n            ip.family === 6 ? `[${ip.address}]` : ip.address\n          }${port}`)\n        )\n      })\n    } else {\n      // If there's IPs we pick\n      const ip = this.pick(\n        origin,\n        ips,\n        newOpts.affinity\n      )\n\n      // If no IPs we lookup - deleting old records\n      if (ip == null) {\n        this.storage.delete(origin.hostname)\n        this.runLookup(origin, opts, cb)\n        return\n      }\n\n      let port\n      if (typeof ip.port === 'number') {\n        port = `:${ip.port}`\n      } else if (origin.port !== '') {\n        port = `:${origin.port}`\n      } else {\n        port = ''\n      }\n\n      cb(\n        null,\n        new URL(`${origin.protocol}//${\n          ip.family === 6 ? `[${ip.address}]` : ip.address\n        }${port}`)\n      )\n    }\n  }\n\n  #defaultLookup (origin, opts, cb) {\n    lookup(\n      origin.hostname,\n      {\n        all: true,\n        family: this.dualStack === false ? this.affinity : 0,\n        order: 'ipv4first'\n      },\n      (err, addresses) => {\n        if (err) {\n          return cb(err)\n        }\n\n        const results = new Map()\n\n        for (const addr of addresses) {\n          // On linux we found duplicates, we attempt to remove them with\n          // the latest record\n          results.set(`${addr.address}:${addr.family}`, addr)\n        }\n\n        cb(null, results.values())\n      }\n    )\n  }\n\n  #defaultPick (origin, hostnameRecords, affinity) {\n    let ip = null\n    const { records, offset } = hostnameRecords\n\n    let family\n    if (this.dualStack) {\n      if (affinity == null) {\n        // Balance between ip families\n        if (offset == null || offset === maxInt) {\n          hostnameRecords.offset = 0\n          affinity = 4\n        } else {\n          hostnameRecords.offset++\n          affinity = (hostnameRecords.offset & 1) === 1 ? 6 : 4\n        }\n      }\n\n      if (records[affinity] != null && records[affinity].ips.length > 0) {\n        family = records[affinity]\n      } else {\n        family = records[affinity === 4 ? 6 : 4]\n      }\n    } else {\n      family = records[affinity]\n    }\n\n    // If no IPs we return null\n    if (family == null || family.ips.length === 0) {\n      return ip\n    }\n\n    if (family.offset == null || family.offset === maxInt) {\n      family.offset = 0\n    } else {\n      family.offset++\n    }\n\n    const position = family.offset % family.ips.length\n    ip = family.ips[position] ?? null\n\n    if (ip == null) {\n      return ip\n    }\n\n    if (Date.now() - ip.timestamp > ip.ttl) { // record TTL is already in ms\n      // We delete expired records\n      // It is possible that they have different TTL, so we manage them individually\n      family.ips.splice(position, 1)\n      return this.pick(origin, hostnameRecords, affinity)\n    }\n\n    return ip\n  }\n\n  pickFamily (origin, ipFamily) {\n    const records = this.storage.get(origin.hostname)?.records\n    if (!records) {\n      return null\n    }\n\n    const family = records[ipFamily]\n    if (!family) {\n      return null\n    }\n\n    if (family.offset == null || family.offset === maxInt) {\n      family.offset = 0\n    } else {\n      family.offset++\n    }\n\n    const position = family.offset % family.ips.length\n    const ip = family.ips[position] ?? null\n    if (ip == null) {\n      return ip\n    }\n\n    if (Date.now() - ip.timestamp > ip.ttl) { // record TTL is already in ms\n      // We delete expired records\n      // It is possible that they have different TTL, so we manage them individually\n      family.ips.splice(position, 1)\n    }\n\n    return ip\n  }\n\n  setRecords (origin, addresses) {\n    const timestamp = Date.now()\n    const records = { records: { 4: null, 6: null } }\n    let minTTL = this.#maxTTL\n    for (const record of addresses) {\n      record.timestamp = timestamp\n      if (typeof record.ttl === 'number') {\n        // The record TTL is expected to be in ms\n        record.ttl = Math.min(record.ttl, this.#maxTTL)\n        minTTL = Math.min(minTTL, record.ttl)\n      } else {\n        record.ttl = this.#maxTTL\n      }\n\n      const familyRecords = records.records[record.family] ?? { ips: [] }\n\n      familyRecords.ips.push(record)\n      records.records[record.family] = familyRecords\n    }\n\n    // We provide a default TTL if external storage will be used without TTL per record-level support\n    this.storage.set(origin.hostname, records, { ttl: minTTL })\n  }\n\n  deleteRecords (origin) {\n    this.storage.delete(origin.hostname)\n  }\n\n  getHandler (meta, opts) {\n    return new DNSDispatchHandler(this, meta, opts)\n  }\n}\n\nclass DNSDispatchHandler extends DecoratorHandler {\n  #state = null\n  #opts = null\n  #dispatch = null\n  #origin = null\n  #controller = null\n  #newOrigin = null\n  #firstTry = true\n\n  constructor (state, { origin, handler, dispatch, newOrigin }, opts) {\n    super(handler)\n    this.#origin = origin\n    this.#newOrigin = newOrigin\n    this.#opts = { ...opts }\n    this.#state = state\n    this.#dispatch = dispatch\n  }\n\n  onResponseError (controller, err) {\n    switch (err.code) {\n      case 'ETIMEDOUT':\n      case 'ECONNREFUSED': {\n        if (this.#state.dualStack) {\n          if (!this.#firstTry) {\n            super.onResponseError(controller, err)\n            return\n          }\n          this.#firstTry = false\n\n          // Pick an ip address from the other family\n          const otherFamily = this.#newOrigin.hostname[0] === '[' ? 4 : 6\n          const ip = this.#state.pickFamily(this.#origin, otherFamily)\n          if (ip == null) {\n            super.onResponseError(controller, err)\n            return\n          }\n\n          let port\n          if (typeof ip.port === 'number') {\n            port = `:${ip.port}`\n          } else if (this.#origin.port !== '') {\n            port = `:${this.#origin.port}`\n          } else {\n            port = ''\n          }\n\n          const dispatchOpts = {\n            ...this.#opts,\n            origin: `${this.#origin.protocol}//${\n              ip.family === 6 ? `[${ip.address}]` : ip.address\n            }${port}`,\n            headers: withHostHeader(this.#origin.host, this.#opts.headers)\n          }\n          this.#dispatch(dispatchOpts, this)\n          return\n        }\n\n        // if dual-stack disabled, we error out\n        super.onResponseError(controller, err)\n        break\n      }\n      case 'ENOTFOUND':\n        this.#state.deleteRecords(this.#origin)\n        super.onResponseError(controller, err)\n        break\n      default:\n        super.onResponseError(controller, err)\n        break\n    }\n  }\n}\n\nmodule.exports = interceptorOpts => {\n  if (\n    interceptorOpts?.maxTTL != null &&\n    (typeof interceptorOpts?.maxTTL !== 'number' || interceptorOpts?.maxTTL < 0)\n  ) {\n    throw new InvalidArgumentError('Invalid maxTTL. Must be a positive number')\n  }\n\n  if (\n    interceptorOpts?.maxItems != null &&\n    (typeof interceptorOpts?.maxItems !== 'number' ||\n      interceptorOpts?.maxItems < 1)\n  ) {\n    throw new InvalidArgumentError(\n      'Invalid maxItems. Must be a positive number and greater than zero'\n    )\n  }\n\n  if (\n    interceptorOpts?.affinity != null &&\n    interceptorOpts?.affinity !== 4 &&\n    interceptorOpts?.affinity !== 6\n  ) {\n    throw new InvalidArgumentError('Invalid affinity. Must be either 4 or 6')\n  }\n\n  if (\n    interceptorOpts?.dualStack != null &&\n    typeof interceptorOpts?.dualStack !== 'boolean'\n  ) {\n    throw new InvalidArgumentError('Invalid dualStack. Must be a boolean')\n  }\n\n  if (\n    interceptorOpts?.lookup != null &&\n    typeof interceptorOpts?.lookup !== 'function'\n  ) {\n    throw new InvalidArgumentError('Invalid lookup. Must be a function')\n  }\n\n  if (\n    interceptorOpts?.pick != null &&\n    typeof interceptorOpts?.pick !== 'function'\n  ) {\n    throw new InvalidArgumentError('Invalid pick. Must be a function')\n  }\n\n  if (\n    interceptorOpts?.storage != null &&\n    (typeof interceptorOpts?.storage?.get !== 'function' ||\n      typeof interceptorOpts?.storage?.set !== 'function' ||\n      typeof interceptorOpts?.storage?.full !== 'function' ||\n      typeof interceptorOpts?.storage?.delete !== 'function'\n    )\n  ) {\n    throw new InvalidArgumentError('Invalid storage. Must be a object with methods: { get, set, full, delete }')\n  }\n\n  const dualStack = interceptorOpts?.dualStack ?? true\n  let affinity\n  if (dualStack) {\n    affinity = interceptorOpts?.affinity ?? null\n  } else {\n    affinity = interceptorOpts?.affinity ?? 4\n  }\n\n  const opts = {\n    maxTTL: interceptorOpts?.maxTTL ?? 10e3, // Expressed in ms\n    lookup: interceptorOpts?.lookup ?? null,\n    pick: interceptorOpts?.pick ?? null,\n    dualStack,\n    affinity,\n    maxItems: interceptorOpts?.maxItems ?? Infinity,\n    storage: interceptorOpts?.storage\n  }\n\n  const instance = new DNSInstance(opts)\n\n  return dispatch => {\n    return function dnsInterceptor (origDispatchOpts, handler) {\n      const origin =\n        origDispatchOpts.origin.constructor === URL\n          ? origDispatchOpts.origin\n          : new URL(origDispatchOpts.origin)\n\n      if (isIP(origin.hostname) !== 0) {\n        return dispatch(origDispatchOpts, handler)\n      }\n\n      instance.runLookup(origin, origDispatchOpts, (err, newOrigin) => {\n        if (err) {\n          return handler.onResponseError(null, err)\n        }\n\n        const dispatchOpts = {\n          ...origDispatchOpts,\n          servername: origin.hostname, // For SNI on TLS\n          origin: newOrigin.origin,\n          headers: withHostHeader(origin.host, origDispatchOpts.headers)\n        }\n\n        dispatch(\n          dispatchOpts,\n          instance.getHandler(\n            { origin, dispatch, handler, newOrigin },\n            origDispatchOpts\n          )\n        )\n      })\n\n      return true\n    }\n  }\n}\n", "'use strict'\n\nconst {\n  safeHTTPMethods,\n  pathHasQueryOrFragment,\n  hasSafeIterator\n} = require('../core/util')\n\nconst { serializePathWithQuery } = require('../core/util')\n\n/**\n * @param {import('../../types/dispatcher.d.ts').default.DispatchOptions} opts\n */\nfunction makeCacheKey (opts) {\n  if (!opts.origin) {\n    throw new Error('opts.origin is undefined')\n  }\n\n  let fullPath = opts.path || '/'\n\n  if (opts.query && !pathHasQueryOrFragment(opts.path)) {\n    fullPath = serializePathWithQuery(fullPath, opts.query)\n  }\n\n  return {\n    origin: opts.origin.toString(),\n    method: opts.method,\n    path: fullPath,\n    headers: opts.headers\n  }\n}\n\n/**\n * @param {Record<string, string[] | string>}\n * @returns {Record<string, string[] | string>}\n */\nfunction normalizeHeaders (opts) {\n  let headers\n  if (opts.headers == null) {\n    headers = {}\n  } else if (typeof opts.headers === 'object') {\n    headers = {}\n\n    if (hasSafeIterator(opts.headers)) {\n      for (const x of opts.headers) {\n        if (!Array.isArray(x)) {\n          throw new Error('opts.headers is not a valid header map')\n        }\n        const [key, val] = x\n        if (typeof key !== 'string' || typeof val !== 'string') {\n          throw new Error('opts.headers is not a valid header map')\n        }\n        headers[key.toLowerCase()] = val\n      }\n    } else {\n      for (const key of Object.keys(opts.headers)) {\n        headers[key.toLowerCase()] = opts.headers[key]\n      }\n    }\n  } else {\n    throw new Error('opts.headers is not an object')\n  }\n\n  return headers\n}\n\n/**\n * @param {any} key\n */\nfunction assertCacheKey (key) {\n  if (typeof key !== 'object') {\n    throw new TypeError(`expected key to be object, got ${typeof key}`)\n  }\n\n  for (const property of ['origin', 'method', 'path']) {\n    if (typeof key[property] !== 'string') {\n      throw new TypeError(`expected key.${property} to be string, got ${typeof key[property]}`)\n    }\n  }\n\n  if (key.headers !== undefined && typeof key.headers !== 'object') {\n    throw new TypeError(`expected headers to be object, got ${typeof key}`)\n  }\n}\n\n/**\n * @param {any} value\n */\nfunction assertCacheValue (value) {\n  if (typeof value !== 'object') {\n    throw new TypeError(`expected value to be object, got ${typeof value}`)\n  }\n\n  for (const property of ['statusCode', 'cachedAt', 'staleAt', 'deleteAt']) {\n    if (typeof value[property] !== 'number') {\n      throw new TypeError(`expected value.${property} to be number, got ${typeof value[property]}`)\n    }\n  }\n\n  if (typeof value.statusMessage !== 'string') {\n    throw new TypeError(`expected value.statusMessage to be string, got ${typeof value.statusMessage}`)\n  }\n\n  if (value.headers != null && typeof value.headers !== 'object') {\n    throw new TypeError(`expected value.rawHeaders to be object, got ${typeof value.headers}`)\n  }\n\n  if (value.vary !== undefined && typeof value.vary !== 'object') {\n    throw new TypeError(`expected value.vary to be object, got ${typeof value.vary}`)\n  }\n\n  if (value.etag !== undefined && typeof value.etag !== 'string') {\n    throw new TypeError(`expected value.etag to be string, got ${typeof value.etag}`)\n  }\n}\n\n/**\n * @see https://www.rfc-editor.org/rfc/rfc9111.html#name-cache-control\n * @see https://www.iana.org/assignments/http-cache-directives/http-cache-directives.xhtml\n\n * @param {string | string[]} header\n * @returns {import('../../types/cache-interceptor.d.ts').default.CacheControlDirectives}\n */\nfunction parseCacheControlHeader (header) {\n  /**\n   * @type {import('../../types/cache-interceptor.d.ts').default.CacheControlDirectives}\n   */\n  const output = {}\n\n  let directives\n  if (Array.isArray(header)) {\n    directives = []\n\n    for (const directive of header) {\n      directives.push(...directive.split(','))\n    }\n  } else {\n    directives = header.split(',')\n  }\n\n  for (let i = 0; i < directives.length; i++) {\n    const directive = directives[i].toLowerCase()\n    const keyValueDelimiter = directive.indexOf('=')\n\n    let key\n    let value\n    if (keyValueDelimiter !== -1) {\n      key = directive.substring(0, keyValueDelimiter).trimStart()\n      value = directive.substring(keyValueDelimiter + 1)\n    } else {\n      key = directive.trim()\n    }\n\n    switch (key) {\n      case 'min-fresh':\n      case 'max-stale':\n      case 'max-age':\n      case 's-maxage':\n      case 'stale-while-revalidate':\n      case 'stale-if-error': {\n        if (value === undefined || value[0] === ' ') {\n          continue\n        }\n\n        if (\n          value.length >= 2 &&\n          value[0] === '\"' &&\n          value[value.length - 1] === '\"'\n        ) {\n          value = value.substring(1, value.length - 1)\n        }\n\n        const parsedValue = parseInt(value, 10)\n        // eslint-disable-next-line no-self-compare\n        if (parsedValue !== parsedValue) {\n          continue\n        }\n\n        if (key === 'max-age' && key in output && output[key] >= parsedValue) {\n          continue\n        }\n\n        output[key] = parsedValue\n\n        break\n      }\n      case 'private':\n      case 'no-cache': {\n        if (value) {\n          // The private and no-cache directives can be unqualified (aka just\n          //  `private` or `no-cache`) or qualified (w/ a value). When they're\n          //  qualified, it's a list of headers like `no-cache=header1`,\n          //  `no-cache=\"header1\"`, or `no-cache=\"header1, header2\"`\n          // If we're given multiple headers, the comma messes us up since\n          //  we split the full header by commas. So, let's loop through the\n          //  remaining parts in front of us until we find one that ends in a\n          //  quote. We can then just splice all of the parts in between the\n          //  starting quote and the ending quote out of the directives array\n          //  and continue parsing like normal.\n          // https://www.rfc-editor.org/rfc/rfc9111.html#name-no-cache-2\n          if (value[0] === '\"') {\n            // Something like `no-cache=\"some-header\"` OR `no-cache=\"some-header, another-header\"`.\n\n            // Add the first header on and cut off the leading quote\n            const headers = [value.substring(1)]\n\n            let foundEndingQuote = value[value.length - 1] === '\"'\n            if (!foundEndingQuote) {\n              // Something like `no-cache=\"some-header, another-header\"`\n              //  This can still be something invalid, e.g. `no-cache=\"some-header, ...`\n              for (let j = i + 1; j < directives.length; j++) {\n                const nextPart = directives[j]\n                const nextPartLength = nextPart.length\n\n                headers.push(nextPart.trim())\n\n                if (nextPartLength !== 0 && nextPart[nextPartLength - 1] === '\"') {\n                  foundEndingQuote = true\n                  break\n                }\n              }\n            }\n\n            if (foundEndingQuote) {\n              let lastHeader = headers[headers.length - 1]\n              if (lastHeader[lastHeader.length - 1] === '\"') {\n                lastHeader = lastHeader.substring(0, lastHeader.length - 1)\n                headers[headers.length - 1] = lastHeader\n              }\n\n              if (key in output) {\n                output[key] = output[key].concat(headers)\n              } else {\n                output[key] = headers\n              }\n            }\n          } else {\n            // Something like `no-cache=\"some-header\"`\n            if (key in output) {\n              output[key] = output[key].concat(value)\n            } else {\n              output[key] = [value]\n            }\n          }\n\n          break\n        }\n      }\n      // eslint-disable-next-line no-fallthrough\n      case 'public':\n      case 'no-store':\n      case 'must-revalidate':\n      case 'proxy-revalidate':\n      case 'immutable':\n      case 'no-transform':\n      case 'must-understand':\n      case 'only-if-cached':\n        if (value) {\n          // These are qualified (something like `public=...`) when they aren't\n          //  allowed to be, skip\n          continue\n        }\n\n        output[key] = true\n        break\n      default:\n        // Ignore unknown directives as per https://www.rfc-editor.org/rfc/rfc9111.html#section-5.2.3-1\n        continue\n    }\n  }\n\n  return output\n}\n\n/**\n * @param {string | string[]} varyHeader Vary header from the server\n * @param {Record<string, string | string[]>} headers Request headers\n * @returns {Record<string, string | string[]>}\n */\nfunction parseVaryHeader (varyHeader, headers) {\n  if (typeof varyHeader === 'string' && varyHeader.includes('*')) {\n    return headers\n  }\n\n  const output = /** @type {Record<string, string | string[] | null>} */ ({})\n\n  const varyingHeaders = typeof varyHeader === 'string'\n    ? varyHeader.split(',')\n    : varyHeader\n\n  for (const header of varyingHeaders) {\n    const trimmedHeader = header.trim().toLowerCase()\n\n    output[trimmedHeader] = headers[trimmedHeader] ?? null\n  }\n\n  return output\n}\n\n/**\n * Note: this deviates from the spec a little. Empty etags (\"\", W/\"\") are valid,\n *  however, including them in cached resposnes serves little to no purpose.\n *\n * @see https://www.rfc-editor.org/rfc/rfc9110.html#name-etag\n *\n * @param {string} etag\n * @returns {boolean}\n */\nfunction isEtagUsable (etag) {\n  if (etag.length <= 2) {\n    // Shortest an etag can be is two chars (just \"\"). This is where we deviate\n    //  from the spec requiring a min of 3 chars however\n    return false\n  }\n\n  if (etag[0] === '\"' && etag[etag.length - 1] === '\"') {\n    // ETag: \"\"asd123\"\" or ETag: \"W/\"asd123\"\", kinda undefined behavior in the\n    //  spec. Some servers will accept these while others don't.\n    // ETag: \"asd123\"\n    return !(etag[1] === '\"' || etag.startsWith('\"W/'))\n  }\n\n  if (etag.startsWith('W/\"') && etag[etag.length - 1] === '\"') {\n    // ETag: W/\"\", also where we deviate from the spec & require a min of 3\n    //  chars\n    // ETag: for W/\"\", W/\"asd123\"\n    return etag.length !== 4\n  }\n\n  // Anything else\n  return false\n}\n\n/**\n * @param {unknown} store\n * @returns {asserts store is import('../../types/cache-interceptor.d.ts').default.CacheStore}\n */\nfunction assertCacheStore (store, name = 'CacheStore') {\n  if (typeof store !== 'object' || store === null) {\n    throw new TypeError(`expected type of ${name} to be a CacheStore, got ${store === null ? 'null' : typeof store}`)\n  }\n\n  for (const fn of ['get', 'createWriteStream', 'delete']) {\n    if (typeof store[fn] !== 'function') {\n      throw new TypeError(`${name} needs to have a \\`${fn}()\\` function`)\n    }\n  }\n}\n/**\n * @param {unknown} methods\n * @returns {asserts methods is import('../../types/cache-interceptor.d.ts').default.CacheMethods[]}\n */\nfunction assertCacheMethods (methods, name = 'CacheMethods') {\n  if (!Array.isArray(methods)) {\n    throw new TypeError(`expected type of ${name} needs to be an array, got ${methods === null ? 'null' : typeof methods}`)\n  }\n\n  if (methods.length === 0) {\n    throw new TypeError(`${name} needs to have at least one method`)\n  }\n\n  for (const method of methods) {\n    if (!safeHTTPMethods.includes(method)) {\n      throw new TypeError(`element of ${name}-array needs to be one of following values: ${safeHTTPMethods.join(', ')}, got ${method}`)\n    }\n  }\n}\n\n/**\n * Creates a string key for request deduplication purposes.\n * This key is used to identify in-flight requests that can be shared.\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheKey} cacheKey\n * @param {Set<string>} [excludeHeaders] Set of lowercase header names to exclude from the key\n * @returns {string}\n */\nfunction makeDeduplicationKey (cacheKey, excludeHeaders) {\n  // Create a deterministic string key from the cache key\n  // Include origin, method, path, and sorted headers\n  let key = `${cacheKey.origin}:${cacheKey.method}:${cacheKey.path}`\n\n  if (cacheKey.headers) {\n    const sortedHeaders = Object.keys(cacheKey.headers).sort()\n    for (const header of sortedHeaders) {\n      // Skip excluded headers\n      if (excludeHeaders?.has(header.toLowerCase())) {\n        continue\n      }\n      const value = cacheKey.headers[header]\n      key += `:${header}=${Array.isArray(value) ? value.join(',') : value}`\n    }\n  }\n\n  return key\n}\n\nmodule.exports = {\n  makeCacheKey,\n  normalizeHeaders,\n  assertCacheKey,\n  assertCacheValue,\n  parseCacheControlHeader,\n  parseVaryHeader,\n  isEtagUsable,\n  assertCacheMethods,\n  assertCacheStore,\n  makeDeduplicationKey\n}\n", "'use strict'\n\n/**\n * @see https://www.rfc-editor.org/rfc/rfc9110.html#name-date-time-formats\n *\n * @param {string} date\n * @returns {Date | undefined}\n */\nfunction parseHttpDate (date) {\n  // Sun, 06 Nov 1994 08:49:37 GMT    ; IMF-fixdate\n  // Sun Nov  6 08:49:37 1994         ; ANSI C's asctime() format\n  // Sunday, 06-Nov-94 08:49:37 GMT   ; obsolete RFC 850 format\n\n  switch (date[3]) {\n    case ',': return parseImfDate(date)\n    case ' ': return parseAscTimeDate(date)\n    default: return parseRfc850Date(date)\n  }\n}\n\n/**\n * @see https://httpwg.org/specs/rfc9110.html#preferred.date.format\n *\n * @param {string} date\n * @returns {Date | undefined}\n */\nfunction parseImfDate (date) {\n  if (\n    date.length !== 29 ||\n    date[4] !== ' ' ||\n    date[7] !== ' ' ||\n    date[11] !== ' ' ||\n    date[16] !== ' ' ||\n    date[19] !== ':' ||\n    date[22] !== ':' ||\n    date[25] !== ' ' ||\n    date[26] !== 'G' ||\n    date[27] !== 'M' ||\n    date[28] !== 'T'\n  ) {\n    return undefined\n  }\n\n  let weekday = -1\n  if (date[0] === 'S' && date[1] === 'u' && date[2] === 'n') { // Sunday\n    weekday = 0\n  } else if (date[0] === 'M' && date[1] === 'o' && date[2] === 'n') { // Monday\n    weekday = 1\n  } else if (date[0] === 'T' && date[1] === 'u' && date[2] === 'e') { // Tuesday\n    weekday = 2\n  } else if (date[0] === 'W' && date[1] === 'e' && date[2] === 'd') { // Wednesday\n    weekday = 3\n  } else if (date[0] === 'T' && date[1] === 'h' && date[2] === 'u') { // Thursday\n    weekday = 4\n  } else if (date[0] === 'F' && date[1] === 'r' && date[2] === 'i') { // Friday\n    weekday = 5\n  } else if (date[0] === 'S' && date[1] === 'a' && date[2] === 't') { // Saturday\n    weekday = 6\n  } else {\n    return undefined // Not a valid day of the week\n  }\n\n  let day = 0\n  if (date[5] === '0') {\n    // Single digit day, e.g. \"Sun Nov 6 08:49:37 1994\"\n    const code = date.charCodeAt(6)\n    if (code < 49 || code > 57) {\n      return undefined // Not a digit\n    }\n    day = code - 48 // Convert ASCII code to number\n  } else {\n    const code1 = date.charCodeAt(5)\n    if (code1 < 49 || code1 > 51) {\n      return undefined // Not a digit between 1 and 3\n    }\n    const code2 = date.charCodeAt(6)\n    if (code2 < 48 || code2 > 57) {\n      return undefined // Not a digit\n    }\n    day = (code1 - 48) * 10 + (code2 - 48) // Convert ASCII codes to number\n  }\n\n  let monthIdx = -1\n  if (\n    (date[8] === 'J' && date[9] === 'a' && date[10] === 'n')\n  ) {\n    monthIdx = 0 // Jan\n  } else if (\n    (date[8] === 'F' && date[9] === 'e' && date[10] === 'b')\n  ) {\n    monthIdx = 1 // Feb\n  } else if (\n    (date[8] === 'M' && date[9] === 'a')\n  ) {\n    if (date[10] === 'r') {\n      monthIdx = 2 // Mar\n    } else if (date[10] === 'y') {\n      monthIdx = 4 // May\n    } else {\n      return undefined // Invalid month\n    }\n  } else if (\n    (date[8] === 'J')\n  ) {\n    if (date[9] === 'a' && date[10] === 'n') {\n      monthIdx = 0 // Jan\n    } else if (date[9] === 'u') {\n      if (date[10] === 'n') {\n        monthIdx = 5 // Jun\n      } else if (date[10] === 'l') {\n        monthIdx = 6 // Jul\n      } else {\n        return undefined // Invalid month\n      }\n    } else {\n      return undefined // Invalid month\n    }\n  } else if (\n    (date[8] === 'A')\n  ) {\n    if (date[9] === 'p' && date[10] === 'r') {\n      monthIdx = 3 // Apr\n    } else if (date[9] === 'u' && date[10] === 'g') {\n      monthIdx = 7 // Aug\n    } else {\n      return undefined // Invalid month\n    }\n  } else if (\n    (date[8] === 'S' && date[9] === 'e' && date[10] === 'p')\n  ) {\n    monthIdx = 8 // Sep\n  } else if (\n    (date[8] === 'O' && date[9] === 'c' && date[10] === 't')\n  ) {\n    monthIdx = 9 // Oct\n  } else if (\n    (date[8] === 'N' && date[9] === 'o' && date[10] === 'v')\n  ) {\n    monthIdx = 10 // Nov\n  } else if (\n    (date[8] === 'D' && date[9] === 'e' && date[10] === 'c')\n  ) {\n    monthIdx = 11 // Dec\n  } else {\n    // Not a valid month\n    return undefined\n  }\n\n  const yearDigit1 = date.charCodeAt(12)\n  if (yearDigit1 < 48 || yearDigit1 > 57) {\n    return undefined // Not a digit\n  }\n  const yearDigit2 = date.charCodeAt(13)\n  if (yearDigit2 < 48 || yearDigit2 > 57) {\n    return undefined // Not a digit\n  }\n  const yearDigit3 = date.charCodeAt(14)\n  if (yearDigit3 < 48 || yearDigit3 > 57) {\n    return undefined // Not a digit\n  }\n  const yearDigit4 = date.charCodeAt(15)\n  if (yearDigit4 < 48 || yearDigit4 > 57) {\n    return undefined // Not a digit\n  }\n  const year = (yearDigit1 - 48) * 1000 + (yearDigit2 - 48) * 100 + (yearDigit3 - 48) * 10 + (yearDigit4 - 48)\n\n  let hour = 0\n  if (date[17] === '0') {\n    const code = date.charCodeAt(18)\n    if (code < 48 || code > 57) {\n      return undefined // Not a digit\n    }\n    hour = code - 48 // Convert ASCII code to number\n  } else {\n    const code1 = date.charCodeAt(17)\n    if (code1 < 48 || code1 > 50) {\n      return undefined // Not a digit between 0 and 2\n    }\n    const code2 = date.charCodeAt(18)\n    if (code2 < 48 || code2 > 57) {\n      return undefined // Not a digit\n    }\n    if (code1 === 50 && code2 > 51) {\n      return undefined // Hour cannot be greater than 23\n    }\n    hour = (code1 - 48) * 10 + (code2 - 48) // Convert ASCII codes to number\n  }\n\n  let minute = 0\n  if (date[20] === '0') {\n    const code = date.charCodeAt(21)\n    if (code < 48 || code > 57) {\n      return undefined // Not a digit\n    }\n    minute = code - 48 // Convert ASCII code to number\n  } else {\n    const code1 = date.charCodeAt(20)\n    if (code1 < 48 || code1 > 53) {\n      return undefined // Not a digit between 0 and 5\n    }\n    const code2 = date.charCodeAt(21)\n    if (code2 < 48 || code2 > 57) {\n      return undefined // Not a digit\n    }\n    minute = (code1 - 48) * 10 + (code2 - 48) // Convert ASCII codes to number\n  }\n\n  let second = 0\n  if (date[23] === '0') {\n    const code = date.charCodeAt(24)\n    if (code < 48 || code > 57) {\n      return undefined // Not a digit\n    }\n    second = code - 48 // Convert ASCII code to number\n  } else {\n    const code1 = date.charCodeAt(23)\n    if (code1 < 48 || code1 > 53) {\n      return undefined // Not a digit between 0 and 5\n    }\n    const code2 = date.charCodeAt(24)\n    if (code2 < 48 || code2 > 57) {\n      return undefined // Not a digit\n    }\n    second = (code1 - 48) * 10 + (code2 - 48) // Convert ASCII codes to number\n  }\n\n  const result = new Date(Date.UTC(year, monthIdx, day, hour, minute, second))\n  return result.getUTCDay() === weekday ? result : undefined\n}\n\n/**\n * @see https://httpwg.org/specs/rfc9110.html#obsolete.date.formats\n *\n * @param {string} date\n * @returns {Date | undefined}\n */\nfunction parseAscTimeDate (date) {\n  // This is assumed to be in UTC\n\n  if (\n    date.length !== 24 ||\n    date[7] !== ' ' ||\n    date[10] !== ' ' ||\n    date[19] !== ' '\n  ) {\n    return undefined\n  }\n\n  let weekday = -1\n  if (date[0] === 'S' && date[1] === 'u' && date[2] === 'n') { // Sunday\n    weekday = 0\n  } else if (date[0] === 'M' && date[1] === 'o' && date[2] === 'n') { // Monday\n    weekday = 1\n  } else if (date[0] === 'T' && date[1] === 'u' && date[2] === 'e') { // Tuesday\n    weekday = 2\n  } else if (date[0] === 'W' && date[1] === 'e' && date[2] === 'd') { // Wednesday\n    weekday = 3\n  } else if (date[0] === 'T' && date[1] === 'h' && date[2] === 'u') { // Thursday\n    weekday = 4\n  } else if (date[0] === 'F' && date[1] === 'r' && date[2] === 'i') { // Friday\n    weekday = 5\n  } else if (date[0] === 'S' && date[1] === 'a' && date[2] === 't') { // Saturday\n    weekday = 6\n  } else {\n    return undefined // Not a valid day of the week\n  }\n\n  let monthIdx = -1\n  if (\n    (date[4] === 'J' && date[5] === 'a' && date[6] === 'n')\n  ) {\n    monthIdx = 0 // Jan\n  } else if (\n    (date[4] === 'F' && date[5] === 'e' && date[6] === 'b')\n  ) {\n    monthIdx = 1 // Feb\n  } else if (\n    (date[4] === 'M' && date[5] === 'a')\n  ) {\n    if (date[6] === 'r') {\n      monthIdx = 2 // Mar\n    } else if (date[6] === 'y') {\n      monthIdx = 4 // May\n    } else {\n      return undefined // Invalid month\n    }\n  } else if (\n    (date[4] === 'J')\n  ) {\n    if (date[5] === 'a' && date[6] === 'n') {\n      monthIdx = 0 // Jan\n    } else if (date[5] === 'u') {\n      if (date[6] === 'n') {\n        monthIdx = 5 // Jun\n      } else if (date[6] === 'l') {\n        monthIdx = 6 // Jul\n      } else {\n        return undefined // Invalid month\n      }\n    } else {\n      return undefined // Invalid month\n    }\n  } else if (\n    (date[4] === 'A')\n  ) {\n    if (date[5] === 'p' && date[6] === 'r') {\n      monthIdx = 3 // Apr\n    } else if (date[5] === 'u' && date[6] === 'g') {\n      monthIdx = 7 // Aug\n    } else {\n      return undefined // Invalid month\n    }\n  } else if (\n    (date[4] === 'S' && date[5] === 'e' && date[6] === 'p')\n  ) {\n    monthIdx = 8 // Sep\n  } else if (\n    (date[4] === 'O' && date[5] === 'c' && date[6] === 't')\n  ) {\n    monthIdx = 9 // Oct\n  } else if (\n    (date[4] === 'N' && date[5] === 'o' && date[6] === 'v')\n  ) {\n    monthIdx = 10 // Nov\n  } else if (\n    (date[4] === 'D' && date[5] === 'e' && date[6] === 'c')\n  ) {\n    monthIdx = 11 // Dec\n  } else {\n    // Not a valid month\n    return undefined\n  }\n\n  let day = 0\n  if (date[8] === ' ') {\n    // Single digit day, e.g. \"Sun Nov 6 08:49:37 1994\"\n    const code = date.charCodeAt(9)\n    if (code < 49 || code > 57) {\n      return undefined // Not a digit\n    }\n    day = code - 48 // Convert ASCII code to number\n  } else {\n    const code1 = date.charCodeAt(8)\n    if (code1 < 49 || code1 > 51) {\n      return undefined // Not a digit between 1 and 3\n    }\n    const code2 = date.charCodeAt(9)\n    if (code2 < 48 || code2 > 57) {\n      return undefined // Not a digit\n    }\n    day = (code1 - 48) * 10 + (code2 - 48) // Convert ASCII codes to number\n  }\n\n  let hour = 0\n  if (date[11] === '0') {\n    const code = date.charCodeAt(12)\n    if (code < 48 || code > 57) {\n      return undefined // Not a digit\n    }\n    hour = code - 48 // Convert ASCII code to number\n  } else {\n    const code1 = date.charCodeAt(11)\n    if (code1 < 48 || code1 > 50) {\n      return undefined // Not a digit between 0 and 2\n    }\n    const code2 = date.charCodeAt(12)\n    if (code2 < 48 || code2 > 57) {\n      return undefined // Not a digit\n    }\n    if (code1 === 50 && code2 > 51) {\n      return undefined // Hour cannot be greater than 23\n    }\n    hour = (code1 - 48) * 10 + (code2 - 48) // Convert ASCII codes to number\n  }\n\n  let minute = 0\n  if (date[14] === '0') {\n    const code = date.charCodeAt(15)\n    if (code < 48 || code > 57) {\n      return undefined // Not a digit\n    }\n    minute = code - 48 // Convert ASCII code to number\n  } else {\n    const code1 = date.charCodeAt(14)\n    if (code1 < 48 || code1 > 53) {\n      return undefined // Not a digit between 0 and 5\n    }\n    const code2 = date.charCodeAt(15)\n    if (code2 < 48 || code2 > 57) {\n      return undefined // Not a digit\n    }\n    minute = (code1 - 48) * 10 + (code2 - 48) // Convert ASCII codes to number\n  }\n\n  let second = 0\n  if (date[17] === '0') {\n    const code = date.charCodeAt(18)\n    if (code < 48 || code > 57) {\n      return undefined // Not a digit\n    }\n    second = code - 48 // Convert ASCII code to number\n  } else {\n    const code1 = date.charCodeAt(17)\n    if (code1 < 48 || code1 > 53) {\n      return undefined // Not a digit between 0 and 5\n    }\n    const code2 = date.charCodeAt(18)\n    if (code2 < 48 || code2 > 57) {\n      return undefined // Not a digit\n    }\n    second = (code1 - 48) * 10 + (code2 - 48) // Convert ASCII codes to number\n  }\n\n  const yearDigit1 = date.charCodeAt(20)\n  if (yearDigit1 < 48 || yearDigit1 > 57) {\n    return undefined // Not a digit\n  }\n  const yearDigit2 = date.charCodeAt(21)\n  if (yearDigit2 < 48 || yearDigit2 > 57) {\n    return undefined // Not a digit\n  }\n  const yearDigit3 = date.charCodeAt(22)\n  if (yearDigit3 < 48 || yearDigit3 > 57) {\n    return undefined // Not a digit\n  }\n  const yearDigit4 = date.charCodeAt(23)\n  if (yearDigit4 < 48 || yearDigit4 > 57) {\n    return undefined // Not a digit\n  }\n  const year = (yearDigit1 - 48) * 1000 + (yearDigit2 - 48) * 100 + (yearDigit3 - 48) * 10 + (yearDigit4 - 48)\n\n  const result = new Date(Date.UTC(year, monthIdx, day, hour, minute, second))\n  return result.getUTCDay() === weekday ? result : undefined\n}\n\n/**\n * @see https://httpwg.org/specs/rfc9110.html#obsolete.date.formats\n *\n * @param {string} date\n * @returns {Date | undefined}\n */\nfunction parseRfc850Date (date) {\n  let commaIndex = -1\n\n  let weekday = -1\n  if (date[0] === 'S') {\n    if (date[1] === 'u' && date[2] === 'n' && date[3] === 'd' && date[4] === 'a' && date[5] === 'y') {\n      weekday = 0 // Sunday\n      commaIndex = 6\n    } else if (date[1] === 'a' && date[2] === 't' && date[3] === 'u' && date[4] === 'r' && date[5] === 'd' && date[6] === 'a' && date[7] === 'y') {\n      weekday = 6 // Saturday\n      commaIndex = 8\n    }\n  } else if (date[0] === 'M' && date[1] === 'o' && date[2] === 'n' && date[3] === 'd' && date[4] === 'a' && date[5] === 'y') {\n    weekday = 1 // Monday\n    commaIndex = 6\n  } else if (date[0] === 'T') {\n    if (date[1] === 'u' && date[2] === 'e' && date[3] === 's' && date[4] === 'd' && date[5] === 'a' && date[6] === 'y') {\n      weekday = 2 // Tuesday\n      commaIndex = 7\n    } else if (date[1] === 'h' && date[2] === 'u' && date[3] === 'r' && date[4] === 's' && date[5] === 'd' && date[6] === 'a' && date[7] === 'y') {\n      weekday = 4 // Thursday\n      commaIndex = 8\n    }\n  } else if (date[0] === 'W' && date[1] === 'e' && date[2] === 'd' && date[3] === 'n' && date[4] === 'e' && date[5] === 's' && date[6] === 'd' && date[7] === 'a' && date[8] === 'y') {\n    weekday = 3 // Wednesday\n    commaIndex = 9\n  } else if (date[0] === 'F' && date[1] === 'r' && date[2] === 'i' && date[3] === 'd' && date[4] === 'a' && date[5] === 'y') {\n    weekday = 5 // Friday\n    commaIndex = 6\n  } else {\n    // Not a valid day name\n    return undefined\n  }\n\n  if (\n    date[commaIndex] !== ',' ||\n    (date.length - commaIndex - 1) !== 23 ||\n    date[commaIndex + 1] !== ' ' ||\n    date[commaIndex + 4] !== '-' ||\n    date[commaIndex + 8] !== '-' ||\n    date[commaIndex + 11] !== ' ' ||\n    date[commaIndex + 14] !== ':' ||\n    date[commaIndex + 17] !== ':' ||\n    date[commaIndex + 20] !== ' ' ||\n    date[commaIndex + 21] !== 'G' ||\n    date[commaIndex + 22] !== 'M' ||\n    date[commaIndex + 23] !== 'T'\n  ) {\n    return undefined\n  }\n\n  let day = 0\n  if (date[commaIndex + 2] === '0') {\n    // Single digit day, e.g. \"Sun Nov 6 08:49:37 1994\"\n    const code = date.charCodeAt(commaIndex + 3)\n    if (code < 49 || code > 57) {\n      return undefined // Not a digit\n    }\n    day = code - 48 // Convert ASCII code to number\n  } else {\n    const code1 = date.charCodeAt(commaIndex + 2)\n    if (code1 < 49 || code1 > 51) {\n      return undefined // Not a digit between 1 and 3\n    }\n    const code2 = date.charCodeAt(commaIndex + 3)\n    if (code2 < 48 || code2 > 57) {\n      return undefined // Not a digit\n    }\n    day = (code1 - 48) * 10 + (code2 - 48) // Convert ASCII codes to number\n  }\n\n  let monthIdx = -1\n  if (\n    (date[commaIndex + 5] === 'J' && date[commaIndex + 6] === 'a' && date[commaIndex + 7] === 'n')\n  ) {\n    monthIdx = 0 // Jan\n  } else if (\n    (date[commaIndex + 5] === 'F' && date[commaIndex + 6] === 'e' && date[commaIndex + 7] === 'b')\n  ) {\n    monthIdx = 1 // Feb\n  } else if (\n    (date[commaIndex + 5] === 'M' && date[commaIndex + 6] === 'a' && date[commaIndex + 7] === 'r')\n  ) {\n    monthIdx = 2 // Mar\n  } else if (\n    (date[commaIndex + 5] === 'A' && date[commaIndex + 6] === 'p' && date[commaIndex + 7] === 'r')\n  ) {\n    monthIdx = 3 // Apr\n  } else if (\n    (date[commaIndex + 5] === 'M' && date[commaIndex + 6] === 'a' && date[commaIndex + 7] === 'y')\n  ) {\n    monthIdx = 4 // May\n  } else if (\n    (date[commaIndex + 5] === 'J' && date[commaIndex + 6] === 'u' && date[commaIndex + 7] === 'n')\n  ) {\n    monthIdx = 5 // Jun\n  } else if (\n    (date[commaIndex + 5] === 'J' && date[commaIndex + 6] === 'u' && date[commaIndex + 7] === 'l')\n  ) {\n    monthIdx = 6 // Jul\n  } else if (\n    (date[commaIndex + 5] === 'A' && date[commaIndex + 6] === 'u' && date[commaIndex + 7] === 'g')\n  ) {\n    monthIdx = 7 // Aug\n  } else if (\n    (date[commaIndex + 5] === 'S' && date[commaIndex + 6] === 'e' && date[commaIndex + 7] === 'p')\n  ) {\n    monthIdx = 8 // Sep\n  } else if (\n    (date[commaIndex + 5] === 'O' && date[commaIndex + 6] === 'c' && date[commaIndex + 7] === 't')\n  ) {\n    monthIdx = 9 // Oct\n  } else if (\n    (date[commaIndex + 5] === 'N' && date[commaIndex + 6] === 'o' && date[commaIndex + 7] === 'v')\n  ) {\n    monthIdx = 10 // Nov\n  } else if (\n    (date[commaIndex + 5] === 'D' && date[commaIndex + 6] === 'e' && date[commaIndex + 7] === 'c')\n  ) {\n    monthIdx = 11 // Dec\n  } else {\n    // Not a valid month\n    return undefined\n  }\n\n  const yearDigit1 = date.charCodeAt(commaIndex + 9)\n  if (yearDigit1 < 48 || yearDigit1 > 57) {\n    return undefined // Not a digit\n  }\n  const yearDigit2 = date.charCodeAt(commaIndex + 10)\n  if (yearDigit2 < 48 || yearDigit2 > 57) {\n    return undefined // Not a digit\n  }\n\n  let year = (yearDigit1 - 48) * 10 + (yearDigit2 - 48) // Convert ASCII codes to number\n\n  // RFC 6265 states that the year is in the range 1970-2069.\n  // @see https://datatracker.ietf.org/doc/html/rfc6265#section-5.1.1\n  //\n  // 3. If the year-value is greater than or equal to 70 and less than or\n  //    equal to 99, increment the year-value by 1900.\n  // 4. If the year-value is greater than or equal to 0 and less than or\n  //    equal to 69, increment the year-value by 2000.\n  year += year < 70 ? 2000 : 1900\n\n  let hour = 0\n  if (date[commaIndex + 12] === '0') {\n    const code = date.charCodeAt(commaIndex + 13)\n    if (code < 48 || code > 57) {\n      return undefined // Not a digit\n    }\n    hour = code - 48 // Convert ASCII code to number\n  } else {\n    const code1 = date.charCodeAt(commaIndex + 12)\n    if (code1 < 48 || code1 > 50) {\n      return undefined // Not a digit between 0 and 2\n    }\n    const code2 = date.charCodeAt(commaIndex + 13)\n    if (code2 < 48 || code2 > 57) {\n      return undefined // Not a digit\n    }\n    if (code1 === 50 && code2 > 51) {\n      return undefined // Hour cannot be greater than 23\n    }\n    hour = (code1 - 48) * 10 + (code2 - 48) // Convert ASCII codes to number\n  }\n\n  let minute = 0\n  if (date[commaIndex + 15] === '0') {\n    const code = date.charCodeAt(commaIndex + 16)\n    if (code < 48 || code > 57) {\n      return undefined // Not a digit\n    }\n    minute = code - 48 // Convert ASCII code to number\n  } else {\n    const code1 = date.charCodeAt(commaIndex + 15)\n    if (code1 < 48 || code1 > 53) {\n      return undefined // Not a digit between 0 and 5\n    }\n    const code2 = date.charCodeAt(commaIndex + 16)\n    if (code2 < 48 || code2 > 57) {\n      return undefined // Not a digit\n    }\n    minute = (code1 - 48) * 10 + (code2 - 48) // Convert ASCII codes to number\n  }\n\n  let second = 0\n  if (date[commaIndex + 18] === '0') {\n    const code = date.charCodeAt(commaIndex + 19)\n    if (code < 48 || code > 57) {\n      return undefined // Not a digit\n    }\n    second = code - 48 // Convert ASCII code to number\n  } else {\n    const code1 = date.charCodeAt(commaIndex + 18)\n    if (code1 < 48 || code1 > 53) {\n      return undefined // Not a digit between 0 and 5\n    }\n    const code2 = date.charCodeAt(commaIndex + 19)\n    if (code2 < 48 || code2 > 57) {\n      return undefined // Not a digit\n    }\n    second = (code1 - 48) * 10 + (code2 - 48) // Convert ASCII codes to number\n  }\n\n  const result = new Date(Date.UTC(year, monthIdx, day, hour, minute, second))\n  return result.getUTCDay() === weekday ? result : undefined\n}\n\nmodule.exports = {\n  parseHttpDate\n}\n", "'use strict'\n\nconst util = require('../core/util')\nconst {\n  parseCacheControlHeader,\n  parseVaryHeader,\n  isEtagUsable\n} = require('../util/cache')\nconst { parseHttpDate } = require('../util/date.js')\n\nfunction noop () {}\n\n// Status codes that we can use some heuristics on to cache\nconst HEURISTICALLY_CACHEABLE_STATUS_CODES = [\n  200, 203, 204, 206, 300, 301, 308, 404, 405, 410, 414, 501\n]\n\n// Status codes which semantic is not handled by the cache\n// https://datatracker.ietf.org/doc/html/rfc9111#section-3\n// This list should not grow beyond 206 unless the RFC is updated\n// by a newer one including more. Please introduce another list if\n// implementing caching of responses with the 'must-understand' directive.\nconst NOT_UNDERSTOOD_STATUS_CODES = [\n  206\n]\n\nconst MAX_RESPONSE_AGE = 2147483647000\n\n/**\n * @typedef {import('../../types/dispatcher.d.ts').default.DispatchHandler} DispatchHandler\n *\n * @implements {DispatchHandler}\n */\nclass CacheHandler {\n  /**\n   * @type {import('../../types/cache-interceptor.d.ts').default.CacheKey}\n   */\n  #cacheKey\n\n  /**\n   * @type {import('../../types/cache-interceptor.d.ts').default.CacheHandlerOptions['type']}\n   */\n  #cacheType\n\n  /**\n   * @type {number | undefined}\n   */\n  #cacheByDefault\n\n  /**\n   * @type {import('../../types/cache-interceptor.d.ts').default.CacheStore}\n   */\n  #store\n\n  /**\n   * @type {import('../../types/dispatcher.d.ts').default.DispatchHandler}\n   */\n  #handler\n\n  /**\n   * @type {import('node:stream').Writable | undefined}\n   */\n  #writeStream\n\n  /**\n   * @param {import('../../types/cache-interceptor.d.ts').default.CacheHandlerOptions} opts\n   * @param {import('../../types/cache-interceptor.d.ts').default.CacheKey} cacheKey\n   * @param {import('../../types/dispatcher.d.ts').default.DispatchHandler} handler\n   */\n  constructor ({ store, type, cacheByDefault }, cacheKey, handler) {\n    this.#store = store\n    this.#cacheType = type\n    this.#cacheByDefault = cacheByDefault\n    this.#cacheKey = cacheKey\n    this.#handler = handler\n  }\n\n  onRequestStart (controller, context) {\n    this.#writeStream?.destroy()\n    this.#writeStream = undefined\n    this.#handler.onRequestStart?.(controller, context)\n  }\n\n  onRequestUpgrade (controller, statusCode, headers, socket) {\n    this.#handler.onRequestUpgrade?.(controller, statusCode, headers, socket)\n  }\n\n  /**\n   * @param {import('../../types/dispatcher.d.ts').default.DispatchController} controller\n   * @param {number} statusCode\n   * @param {import('../../types/header.d.ts').IncomingHttpHeaders} resHeaders\n   * @param {string} statusMessage\n   */\n  onResponseStart (\n    controller,\n    statusCode,\n    resHeaders,\n    statusMessage\n  ) {\n    const downstreamOnHeaders = () =>\n      this.#handler.onResponseStart?.(\n        controller,\n        statusCode,\n        resHeaders,\n        statusMessage\n      )\n    const handler = this\n\n    if (\n      !util.safeHTTPMethods.includes(this.#cacheKey.method) &&\n      statusCode >= 200 &&\n      statusCode <= 399\n    ) {\n      // Successful response to an unsafe method, delete it from cache\n      //  https://www.rfc-editor.org/rfc/rfc9111.html#name-invalidating-stored-response\n      try {\n        this.#store.delete(this.#cacheKey)?.catch?.(noop)\n      } catch {\n        // Fail silently\n      }\n      return downstreamOnHeaders()\n    }\n\n    const cacheControlHeader = resHeaders['cache-control']\n    const heuristicallyCacheable = resHeaders['last-modified'] && HEURISTICALLY_CACHEABLE_STATUS_CODES.includes(statusCode)\n    if (\n      !cacheControlHeader &&\n      !resHeaders['expires'] &&\n      !heuristicallyCacheable &&\n      !this.#cacheByDefault\n    ) {\n      // Don't have anything to tell us this response is cachable and we're not\n      //  caching by default\n      return downstreamOnHeaders()\n    }\n\n    const cacheControlDirectives = cacheControlHeader ? parseCacheControlHeader(cacheControlHeader) : {}\n    if (!canCacheResponse(this.#cacheType, statusCode, resHeaders, cacheControlDirectives)) {\n      return downstreamOnHeaders()\n    }\n\n    const now = Date.now()\n    const resAge = resHeaders.age ? getAge(resHeaders.age) : undefined\n    if (resAge && resAge >= MAX_RESPONSE_AGE) {\n      // Response considered stale\n      return downstreamOnHeaders()\n    }\n\n    const resDate = typeof resHeaders.date === 'string'\n      ? parseHttpDate(resHeaders.date)\n      : undefined\n\n    const staleAt =\n      determineStaleAt(this.#cacheType, now, resAge, resHeaders, resDate, cacheControlDirectives) ??\n      this.#cacheByDefault\n    if (staleAt === undefined || (resAge && resAge > staleAt)) {\n      return downstreamOnHeaders()\n    }\n\n    const baseTime = resDate ? resDate.getTime() : now\n    const absoluteStaleAt = staleAt + baseTime\n    if (now >= absoluteStaleAt) {\n      // Response is already stale\n      return downstreamOnHeaders()\n    }\n\n    let varyDirectives\n    if (this.#cacheKey.headers && resHeaders.vary) {\n      varyDirectives = parseVaryHeader(resHeaders.vary, this.#cacheKey.headers)\n      if (!varyDirectives) {\n        // Parse error\n        return downstreamOnHeaders()\n      }\n    }\n\n    const deleteAt = determineDeleteAt(baseTime, cacheControlDirectives, absoluteStaleAt)\n    const strippedHeaders = stripNecessaryHeaders(resHeaders, cacheControlDirectives)\n\n    /**\n     * @type {import('../../types/cache-interceptor.d.ts').default.CacheValue}\n     */\n    const value = {\n      statusCode,\n      statusMessage,\n      headers: strippedHeaders,\n      vary: varyDirectives,\n      cacheControlDirectives,\n      cachedAt: resAge ? now - resAge : now,\n      staleAt: absoluteStaleAt,\n      deleteAt\n    }\n\n    // Not modified, re-use the cached value\n    // https://www.rfc-editor.org/rfc/rfc9111.html#name-handling-304-not-modified\n    if (statusCode === 304) {\n      const handle304 = (cachedValue) => {\n        if (!cachedValue) {\n          // Do not create a new cache entry, as a 304 won't have a body - so cannot be cached.\n          return downstreamOnHeaders()\n        }\n\n        // Re-use the cached value: statuscode, statusmessage, headers and body\n        value.statusCode = cachedValue.statusCode\n        value.statusMessage = cachedValue.statusMessage\n        value.etag = cachedValue.etag\n        value.headers = { ...cachedValue.headers, ...strippedHeaders }\n\n        downstreamOnHeaders()\n\n        this.#writeStream = this.#store.createWriteStream(this.#cacheKey, value)\n\n        if (!this.#writeStream || !cachedValue?.body) {\n          return\n        }\n\n        if (typeof cachedValue.body.values === 'function') {\n          const bodyIterator = cachedValue.body.values()\n\n          const streamCachedBody = () => {\n            for (const chunk of bodyIterator) {\n              const full = this.#writeStream.write(chunk) === false\n              this.#handler.onResponseData?.(controller, chunk)\n              // when stream is full stop writing until we get a 'drain' event\n              if (full) {\n                break\n              }\n            }\n          }\n\n          this.#writeStream\n            .on('error', function () {\n              handler.#writeStream = undefined\n              handler.#store.delete(handler.#cacheKey)\n            })\n            .on('drain', () => {\n              streamCachedBody()\n            })\n            .on('close', function () {\n              if (handler.#writeStream === this) {\n                handler.#writeStream = undefined\n              }\n            })\n\n          streamCachedBody()\n        } else if (typeof cachedValue.body.on === 'function') {\n          // Readable stream body (e.g. from async/remote cache stores)\n          cachedValue.body\n            .on('data', (chunk) => {\n              this.#writeStream.write(chunk)\n              this.#handler.onResponseData?.(controller, chunk)\n            })\n            .on('end', () => {\n              this.#writeStream.end()\n            })\n            .on('error', () => {\n              this.#writeStream = undefined\n              this.#store.delete(this.#cacheKey)\n            })\n\n          this.#writeStream\n            .on('error', function () {\n              handler.#writeStream = undefined\n              handler.#store.delete(handler.#cacheKey)\n            })\n            .on('close', function () {\n              if (handler.#writeStream === this) {\n                handler.#writeStream = undefined\n              }\n            })\n        }\n      }\n\n      /**\n       * @type {import('../../types/cache-interceptor.d.ts').default.CacheValue}\n       */\n      const result = this.#store.get(this.#cacheKey)\n      if (result && typeof result.then === 'function') {\n        result.then(handle304)\n      } else {\n        handle304(result)\n      }\n    } else {\n      if (typeof resHeaders.etag === 'string' && isEtagUsable(resHeaders.etag)) {\n        value.etag = resHeaders.etag\n      }\n\n      this.#writeStream = this.#store.createWriteStream(this.#cacheKey, value)\n\n      if (!this.#writeStream) {\n        return downstreamOnHeaders()\n      }\n\n      this.#writeStream\n        .on('drain', () => controller.resume())\n        .on('error', function () {\n          // TODO (fix): Make error somehow observable?\n          handler.#writeStream = undefined\n\n          // Delete the value in case the cache store is holding onto state from\n          //  the call to createWriteStream\n          handler.#store.delete(handler.#cacheKey)\n        })\n        .on('close', function () {\n          if (handler.#writeStream === this) {\n            handler.#writeStream = undefined\n          }\n\n          // TODO (fix): Should we resume even if was paused downstream?\n          controller.resume()\n        })\n\n      downstreamOnHeaders()\n    }\n  }\n\n  onResponseData (controller, chunk) {\n    if (this.#writeStream?.write(chunk) === false) {\n      controller.pause()\n    }\n\n    this.#handler.onResponseData?.(controller, chunk)\n  }\n\n  onResponseEnd (controller, trailers) {\n    this.#writeStream?.end()\n    this.#handler.onResponseEnd?.(controller, trailers)\n  }\n\n  onResponseError (controller, err) {\n    this.#writeStream?.destroy(err)\n    this.#writeStream = undefined\n    this.#handler.onResponseError?.(controller, err)\n  }\n}\n\n/**\n * @see https://www.rfc-editor.org/rfc/rfc9111.html#name-storing-responses-to-authen\n *\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheOptions['type']} cacheType\n * @param {number} statusCode\n * @param {import('../../types/header.d.ts').IncomingHttpHeaders} resHeaders\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheControlDirectives} cacheControlDirectives\n */\nfunction canCacheResponse (cacheType, statusCode, resHeaders, cacheControlDirectives) {\n  // Status code must be final and understood.\n  if (statusCode < 200 || NOT_UNDERSTOOD_STATUS_CODES.includes(statusCode)) {\n    return false\n  }\n  // Responses with neither status codes that are heuristically cacheable, nor \"explicit enough\" caching\n  // directives, are not cacheable. \"Explicit enough\": see https://www.rfc-editor.org/rfc/rfc9111.html#section-3\n  if (!HEURISTICALLY_CACHEABLE_STATUS_CODES.includes(statusCode) && !resHeaders['expires'] &&\n    !cacheControlDirectives.public &&\n    cacheControlDirectives['max-age'] === undefined &&\n    // RFC 9111: a private response directive, if the cache is not shared\n    !(cacheControlDirectives.private && cacheType === 'private') &&\n    !(cacheControlDirectives['s-maxage'] !== undefined && cacheType === 'shared')\n  ) {\n    return false\n  }\n\n  if (cacheControlDirectives['no-store']) {\n    return false\n  }\n\n  if (cacheType === 'shared' && cacheControlDirectives.private === true) {\n    return false\n  }\n\n  // https://www.rfc-editor.org/rfc/rfc9111.html#section-4.1-5\n  if (resHeaders.vary?.includes('*')) {\n    return false\n  }\n\n  // https://www.rfc-editor.org/rfc/rfc9111.html#name-storing-responses-to-authen\n  if (resHeaders.authorization) {\n    if (!cacheControlDirectives.public || typeof resHeaders.authorization !== 'string') {\n      return false\n    }\n\n    if (\n      Array.isArray(cacheControlDirectives['no-cache']) &&\n      cacheControlDirectives['no-cache'].includes('authorization')\n    ) {\n      return false\n    }\n\n    if (\n      Array.isArray(cacheControlDirectives['private']) &&\n      cacheControlDirectives['private'].includes('authorization')\n    ) {\n      return false\n    }\n  }\n\n  return true\n}\n\n/**\n * @param {string | string[]} ageHeader\n * @returns {number | undefined}\n */\nfunction getAge (ageHeader) {\n  const age = parseInt(Array.isArray(ageHeader) ? ageHeader[0] : ageHeader)\n\n  return isNaN(age) ? undefined : age * 1000\n}\n\n/**\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheOptions['type']} cacheType\n * @param {number} now\n * @param {number | undefined} age\n * @param {import('../../types/header.d.ts').IncomingHttpHeaders} resHeaders\n * @param {Date | undefined} responseDate\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheControlDirectives} cacheControlDirectives\n *\n * @returns {number | undefined} time that the value is stale at in seconds or undefined if it shouldn't be cached\n */\nfunction determineStaleAt (cacheType, now, age, resHeaders, responseDate, cacheControlDirectives) {\n  if (cacheType === 'shared') {\n    // Prioritize s-maxage since we're a shared cache\n    //  s-maxage > max-age > Expire\n    //  https://www.rfc-editor.org/rfc/rfc9111.html#section-5.2.2.10-3\n    const sMaxAge = cacheControlDirectives['s-maxage']\n    if (sMaxAge !== undefined) {\n      return sMaxAge > 0 ? sMaxAge * 1000 : undefined\n    }\n  }\n\n  const maxAge = cacheControlDirectives['max-age']\n  if (maxAge !== undefined) {\n    return maxAge > 0 ? maxAge * 1000 : undefined\n  }\n\n  if (typeof resHeaders.expires === 'string') {\n    // https://www.rfc-editor.org/rfc/rfc9111.html#section-5.3\n    const expiresDate = parseHttpDate(resHeaders.expires)\n    if (expiresDate) {\n      if (now >= expiresDate.getTime()) {\n        return undefined\n      }\n\n      if (responseDate) {\n        if (responseDate >= expiresDate) {\n          return undefined\n        }\n\n        if (age !== undefined && age > (expiresDate - responseDate)) {\n          return undefined\n        }\n      }\n\n      return expiresDate.getTime() - now\n    }\n  }\n\n  if (typeof resHeaders['last-modified'] === 'string') {\n    // https://www.rfc-editor.org/rfc/rfc9111.html#name-calculating-heuristic-fresh\n    const lastModified = new Date(resHeaders['last-modified'])\n    if (isValidDate(lastModified)) {\n      if (lastModified.getTime() >= now) {\n        return undefined\n      }\n\n      const responseAge = now - lastModified.getTime()\n\n      return responseAge * 0.1\n    }\n  }\n\n  if (cacheControlDirectives.immutable) {\n    // https://www.rfc-editor.org/rfc/rfc8246.html#section-2.2\n    return 31536000\n  }\n\n  return undefined\n}\n\n/**\n * @param {number} now\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheControlDirectives} cacheControlDirectives\n * @param {number} staleAt\n */\nfunction determineDeleteAt (now, cacheControlDirectives, staleAt) {\n  let staleWhileRevalidate = -Infinity\n  let staleIfError = -Infinity\n  let immutable = -Infinity\n\n  if (cacheControlDirectives['stale-while-revalidate']) {\n    staleWhileRevalidate = staleAt + (cacheControlDirectives['stale-while-revalidate'] * 1000)\n  }\n\n  if (cacheControlDirectives['stale-if-error']) {\n    staleIfError = staleAt + (cacheControlDirectives['stale-if-error'] * 1000)\n  }\n\n  if (staleWhileRevalidate === -Infinity && staleIfError === -Infinity) {\n    immutable = now + 31536000000\n  }\n\n  return Math.max(staleAt, staleWhileRevalidate, staleIfError, immutable)\n}\n\n/**\n * Strips headers required to be removed in cached responses\n * @param {import('../../types/header.d.ts').IncomingHttpHeaders} resHeaders\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheControlDirectives} cacheControlDirectives\n * @returns {Record<string, string | string []>}\n */\nfunction stripNecessaryHeaders (resHeaders, cacheControlDirectives) {\n  const headersToRemove = [\n    'connection',\n    'proxy-authenticate',\n    'proxy-authentication-info',\n    'proxy-authorization',\n    'proxy-connection',\n    'te',\n    'transfer-encoding',\n    'upgrade',\n    // We'll add age back when serving it\n    'age'\n  ]\n\n  if (resHeaders['connection']) {\n    if (Array.isArray(resHeaders['connection'])) {\n      // connection: a\n      // connection: b\n      headersToRemove.push(...resHeaders['connection'].map(header => header.trim()))\n    } else {\n      // connection: a, b\n      headersToRemove.push(...resHeaders['connection'].split(',').map(header => header.trim()))\n    }\n  }\n\n  if (Array.isArray(cacheControlDirectives['no-cache'])) {\n    headersToRemove.push(...cacheControlDirectives['no-cache'])\n  }\n\n  if (Array.isArray(cacheControlDirectives['private'])) {\n    headersToRemove.push(...cacheControlDirectives['private'])\n  }\n\n  let strippedHeaders\n  for (const headerName of headersToRemove) {\n    if (resHeaders[headerName]) {\n      strippedHeaders ??= { ...resHeaders }\n      delete strippedHeaders[headerName]\n    }\n  }\n\n  return strippedHeaders ?? resHeaders\n}\n\n/**\n * @param {Date} date\n * @returns {boolean}\n */\nfunction isValidDate (date) {\n  return date instanceof Date && Number.isFinite(date.valueOf())\n}\n\nmodule.exports = CacheHandler\n", "'use strict'\n\nconst { Writable } = require('node:stream')\nconst { EventEmitter } = require('node:events')\nconst { assertCacheKey, assertCacheValue } = require('../util/cache.js')\n\n/**\n * @typedef {import('../../types/cache-interceptor.d.ts').default.CacheKey} CacheKey\n * @typedef {import('../../types/cache-interceptor.d.ts').default.CacheValue} CacheValue\n * @typedef {import('../../types/cache-interceptor.d.ts').default.CacheStore} CacheStore\n * @typedef {import('../../types/cache-interceptor.d.ts').default.GetResult} GetResult\n */\n\n/**\n * @implements {CacheStore}\n * @extends {EventEmitter}\n */\nclass MemoryCacheStore extends EventEmitter {\n  #maxCount = 1024\n  #maxSize = 104857600 // 100MB\n  #maxEntrySize = 5242880 // 5MB\n\n  #size = 0\n  #count = 0\n  #entries = new Map()\n  #hasEmittedMaxSizeEvent = false\n\n  /**\n   * @param {import('../../types/cache-interceptor.d.ts').default.MemoryCacheStoreOpts | undefined} [opts]\n   */\n  constructor (opts) {\n    super()\n    if (opts) {\n      if (typeof opts !== 'object') {\n        throw new TypeError('MemoryCacheStore options must be an object')\n      }\n\n      if (opts.maxCount !== undefined) {\n        if (\n          typeof opts.maxCount !== 'number' ||\n          !Number.isInteger(opts.maxCount) ||\n          opts.maxCount < 0\n        ) {\n          throw new TypeError('MemoryCacheStore options.maxCount must be a non-negative integer')\n        }\n        this.#maxCount = opts.maxCount\n      }\n\n      if (opts.maxSize !== undefined) {\n        if (\n          typeof opts.maxSize !== 'number' ||\n          !Number.isInteger(opts.maxSize) ||\n          opts.maxSize < 0\n        ) {\n          throw new TypeError('MemoryCacheStore options.maxSize must be a non-negative integer')\n        }\n        this.#maxSize = opts.maxSize\n      }\n\n      if (opts.maxEntrySize !== undefined) {\n        if (\n          typeof opts.maxEntrySize !== 'number' ||\n          !Number.isInteger(opts.maxEntrySize) ||\n          opts.maxEntrySize < 0\n        ) {\n          throw new TypeError('MemoryCacheStore options.maxEntrySize must be a non-negative integer')\n        }\n        this.#maxEntrySize = opts.maxEntrySize\n      }\n    }\n  }\n\n  /**\n   * Get the current size of the cache in bytes\n   * @returns {number} The current size of the cache in bytes\n   */\n  get size () {\n    return this.#size\n  }\n\n  /**\n   * Check if the cache is full (either max size or max count reached)\n   * @returns {boolean} True if the cache is full, false otherwise\n   */\n  isFull () {\n    return this.#size >= this.#maxSize || this.#count >= this.#maxCount\n  }\n\n  /**\n   * @param {import('../../types/cache-interceptor.d.ts').default.CacheKey} req\n   * @returns {import('../../types/cache-interceptor.d.ts').default.GetResult | undefined}\n   */\n  get (key) {\n    assertCacheKey(key)\n\n    const topLevelKey = `${key.origin}:${key.path}`\n\n    const now = Date.now()\n    const entries = this.#entries.get(topLevelKey)\n\n    const entry = entries ? findEntry(key, entries, now) : null\n\n    return entry == null\n      ? undefined\n      : {\n          statusMessage: entry.statusMessage,\n          statusCode: entry.statusCode,\n          headers: entry.headers,\n          body: entry.body,\n          vary: entry.vary ? entry.vary : undefined,\n          etag: entry.etag,\n          cacheControlDirectives: entry.cacheControlDirectives,\n          cachedAt: entry.cachedAt,\n          staleAt: entry.staleAt,\n          deleteAt: entry.deleteAt\n        }\n  }\n\n  /**\n   * @param {import('../../types/cache-interceptor.d.ts').default.CacheKey} key\n   * @param {import('../../types/cache-interceptor.d.ts').default.CacheValue} val\n   * @returns {Writable | undefined}\n   */\n  createWriteStream (key, val) {\n    assertCacheKey(key)\n    assertCacheValue(val)\n\n    const topLevelKey = `${key.origin}:${key.path}`\n\n    const store = this\n    const entry = { ...key, ...val, body: [], size: 0 }\n\n    return new Writable({\n      write (chunk, encoding, callback) {\n        if (typeof chunk === 'string') {\n          chunk = Buffer.from(chunk, encoding)\n        }\n\n        entry.size += chunk.byteLength\n\n        if (entry.size >= store.#maxEntrySize) {\n          this.destroy()\n        } else {\n          entry.body.push(chunk)\n        }\n\n        callback(null)\n      },\n      final (callback) {\n        let entries = store.#entries.get(topLevelKey)\n        if (!entries) {\n          entries = []\n          store.#entries.set(topLevelKey, entries)\n        }\n        const previousEntry = findEntry(key, entries, Date.now())\n        if (previousEntry) {\n          const index = entries.indexOf(previousEntry)\n          entries.splice(index, 1, entry)\n          store.#size -= previousEntry.size\n        } else {\n          entries.push(entry)\n          store.#count += 1\n        }\n\n        store.#size += entry.size\n\n        // Check if cache is full and emit event if needed\n        if (store.#size > store.#maxSize || store.#count > store.#maxCount) {\n          // Emit maxSizeExceeded event if we haven't already\n          if (!store.#hasEmittedMaxSizeEvent) {\n            store.emit('maxSizeExceeded', {\n              size: store.#size,\n              maxSize: store.#maxSize,\n              count: store.#count,\n              maxCount: store.#maxCount\n            })\n            store.#hasEmittedMaxSizeEvent = true\n          }\n\n          // Perform eviction\n          for (const [key, entries] of store.#entries) {\n            for (const entry of entries.splice(0, entries.length / 2)) {\n              store.#size -= entry.size\n              store.#count -= 1\n            }\n            if (entries.length === 0) {\n              store.#entries.delete(key)\n            }\n          }\n\n          // Reset the event flag after eviction\n          if (store.#size < store.#maxSize && store.#count < store.#maxCount) {\n            store.#hasEmittedMaxSizeEvent = false\n          }\n        }\n\n        callback(null)\n      }\n    })\n  }\n\n  /**\n   * @param {CacheKey} key\n   */\n  delete (key) {\n    if (typeof key !== 'object') {\n      throw new TypeError(`expected key to be object, got ${typeof key}`)\n    }\n\n    const topLevelKey = `${key.origin}:${key.path}`\n\n    for (const entry of this.#entries.get(topLevelKey) ?? []) {\n      this.#size -= entry.size\n      this.#count -= 1\n    }\n    this.#entries.delete(topLevelKey)\n  }\n}\n\nfunction findEntry (key, entries, now) {\n  return entries.find((entry) => (\n    entry.deleteAt > now &&\n    entry.method === key.method &&\n    (entry.vary == null || Object.keys(entry.vary).every(headerName => {\n      if (entry.vary[headerName] === null) {\n        return key.headers[headerName] === undefined\n      }\n\n      return entry.vary[headerName] === key.headers[headerName]\n    }))\n  ))\n}\n\nmodule.exports = MemoryCacheStore\n", "'use strict'\n\nconst assert = require('node:assert')\n\n/**\n * This takes care of revalidation requests we send to the origin. If we get\n *  a response indicating that what we have is cached (via a HTTP 304), we can\n *  continue using the cached value. Otherwise, we'll receive the new response\n *  here, which we then just pass on to the next handler (most likely a\n *  CacheHandler). Note that this assumes the proper headers were already\n *  included in the request to tell the origin that we want to revalidate the\n *  response (i.e. if-modified-since or if-none-match).\n *\n * @see https://www.rfc-editor.org/rfc/rfc9111.html#name-validation\n *\n * @implements {import('../../types/dispatcher.d.ts').default.DispatchHandler}\n */\nclass CacheRevalidationHandler {\n  #successful = false\n\n  /**\n   * @type {((boolean, any) => void) | null}\n   */\n  #callback\n\n  /**\n   * @type {(import('../../types/dispatcher.d.ts').default.DispatchHandler)}\n   */\n  #handler\n\n  #context\n\n  /**\n   * @type {boolean}\n   */\n  #allowErrorStatusCodes\n\n  /**\n   * @param {(boolean) => void} callback Function to call if the cached value is valid\n   * @param {import('../../types/dispatcher.d.ts').default.DispatchHandlers} handler\n   * @param {boolean} allowErrorStatusCodes\n   */\n  constructor (callback, handler, allowErrorStatusCodes) {\n    if (typeof callback !== 'function') {\n      throw new TypeError('callback must be a function')\n    }\n\n    this.#callback = callback\n    this.#handler = handler\n    this.#allowErrorStatusCodes = allowErrorStatusCodes\n  }\n\n  onRequestStart (_, context) {\n    this.#successful = false\n    this.#context = context\n  }\n\n  onRequestUpgrade (controller, statusCode, headers, socket) {\n    this.#handler.onRequestUpgrade?.(controller, statusCode, headers, socket)\n  }\n\n  onResponseStart (\n    controller,\n    statusCode,\n    headers,\n    statusMessage\n  ) {\n    assert(this.#callback != null)\n\n    // https://www.rfc-editor.org/rfc/rfc9111.html#name-handling-a-validation-respo\n    // https://datatracker.ietf.org/doc/html/rfc5861#section-4\n    this.#successful = statusCode === 304 ||\n      (this.#allowErrorStatusCodes && statusCode >= 500 && statusCode <= 504)\n    this.#callback(this.#successful, this.#context)\n    this.#callback = null\n\n    if (this.#successful) {\n      return true\n    }\n\n    this.#handler.onRequestStart?.(controller, this.#context)\n    this.#handler.onResponseStart?.(\n      controller,\n      statusCode,\n      headers,\n      statusMessage\n    )\n  }\n\n  onResponseData (controller, chunk) {\n    if (this.#successful) {\n      return\n    }\n\n    return this.#handler.onResponseData?.(controller, chunk)\n  }\n\n  onResponseEnd (controller, trailers) {\n    if (this.#successful) {\n      return\n    }\n\n    this.#handler.onResponseEnd?.(controller, trailers)\n  }\n\n  onResponseError (controller, err) {\n    if (this.#successful) {\n      return\n    }\n\n    if (this.#callback) {\n      this.#callback(false)\n      this.#callback = null\n    }\n\n    if (typeof this.#handler.onResponseError === 'function') {\n      this.#handler.onResponseError(controller, err)\n    } else {\n      throw err\n    }\n  }\n}\n\nmodule.exports = CacheRevalidationHandler\n", "'use strict'\n\nconst assert = require('node:assert')\nconst { Readable } = require('node:stream')\nconst util = require('../core/util')\nconst CacheHandler = require('../handler/cache-handler')\nconst MemoryCacheStore = require('../cache/memory-cache-store')\nconst CacheRevalidationHandler = require('../handler/cache-revalidation-handler')\nconst { assertCacheStore, assertCacheMethods, makeCacheKey, normalizeHeaders, parseCacheControlHeader } = require('../util/cache.js')\nconst { AbortError } = require('../core/errors.js')\n\n/**\n * @param {(string | RegExp)[] | undefined} origins\n * @param {string} name\n */\nfunction assertCacheOrigins (origins, name) {\n  if (origins === undefined) return\n  if (!Array.isArray(origins)) {\n    throw new TypeError(`expected ${name} to be an array or undefined, got ${typeof origins}`)\n  }\n  for (let i = 0; i < origins.length; i++) {\n    const origin = origins[i]\n    if (typeof origin !== 'string' && !(origin instanceof RegExp)) {\n      throw new TypeError(`expected ${name}[${i}] to be a string or RegExp, got ${typeof origin}`)\n    }\n  }\n}\n\nconst nop = () => {}\n\n/**\n * @typedef {(options: import('../../types/dispatcher.d.ts').default.DispatchOptions, handler: import('../../types/dispatcher.d.ts').default.DispatchHandler) => void} DispatchFn\n */\n\n/**\n * @param {import('../../types/cache-interceptor.d.ts').default.GetResult} result\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheControlDirectives | undefined} cacheControlDirectives\n * @param {import('../../types/dispatcher.d.ts').default.RequestOptions} opts\n * @returns {boolean}\n */\nfunction needsRevalidation (result, cacheControlDirectives, { headers = {} }) {\n  // Always revalidate requests with the no-cache request directive.\n  if (cacheControlDirectives?.['no-cache']) {\n    return true\n  }\n\n  // Always revalidate requests with unqualified no-cache response directive.\n  if (result.cacheControlDirectives?.['no-cache'] && !Array.isArray(result.cacheControlDirectives['no-cache'])) {\n    return true\n  }\n\n  // Always revalidate requests with conditional headers.\n  if (headers['if-modified-since'] || headers['if-none-match']) {\n    return true\n  }\n\n  return false\n}\n\n/**\n * @param {import('../../types/cache-interceptor.d.ts').default.GetResult} result\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheControlDirectives | undefined} cacheControlDirectives\n * @returns {boolean}\n */\nfunction isStale (result, cacheControlDirectives) {\n  const now = Date.now()\n  if (now > result.staleAt) {\n    // Response is stale\n    if (cacheControlDirectives?.['max-stale']) {\n      // There's a threshold where we can serve stale responses, let's see if\n      //  we're in it\n      // https://www.rfc-editor.org/rfc/rfc9111.html#name-max-stale\n      const gracePeriod = result.staleAt + (cacheControlDirectives['max-stale'] * 1000)\n      return now > gracePeriod\n    }\n\n    return true\n  }\n\n  if (cacheControlDirectives?.['min-fresh']) {\n    // https://www.rfc-editor.org/rfc/rfc9111.html#section-5.2.1.3\n\n    // At this point, staleAt is always > now\n    const timeLeftTillStale = result.staleAt - now\n    const threshold = cacheControlDirectives['min-fresh'] * 1000\n\n    return timeLeftTillStale <= threshold\n  }\n\n  return false\n}\n\n/**\n * Check if we're within the stale-while-revalidate window for a stale response\n * @param {import('../../types/cache-interceptor.d.ts').default.GetResult} result\n * @returns {boolean}\n */\nfunction withinStaleWhileRevalidateWindow (result) {\n  const staleWhileRevalidate = result.cacheControlDirectives?.['stale-while-revalidate']\n  if (!staleWhileRevalidate) {\n    return false\n  }\n\n  const now = Date.now()\n  const staleWhileRevalidateExpiry = result.staleAt + (staleWhileRevalidate * 1000)\n  return now <= staleWhileRevalidateExpiry\n}\n\n/**\n * @param {DispatchFn} dispatch\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheHandlerOptions} globalOpts\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheKey} cacheKey\n * @param {import('../../types/dispatcher.d.ts').default.DispatchHandler} handler\n * @param {import('../../types/dispatcher.d.ts').default.RequestOptions} opts\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheControlDirectives | undefined} reqCacheControl\n */\nfunction handleUncachedResponse (\n  dispatch,\n  globalOpts,\n  cacheKey,\n  handler,\n  opts,\n  reqCacheControl\n) {\n  if (reqCacheControl?.['only-if-cached']) {\n    let aborted = false\n    try {\n      if (typeof handler.onConnect === 'function') {\n        handler.onConnect(() => {\n          aborted = true\n        })\n\n        if (aborted) {\n          return\n        }\n      }\n\n      if (typeof handler.onHeaders === 'function') {\n        handler.onHeaders(504, [], nop, 'Gateway Timeout')\n        if (aborted) {\n          return\n        }\n      }\n\n      if (typeof handler.onComplete === 'function') {\n        handler.onComplete([])\n      }\n    } catch (err) {\n      if (typeof handler.onError === 'function') {\n        handler.onError(err)\n      }\n    }\n\n    return true\n  }\n\n  return dispatch(opts, new CacheHandler(globalOpts, cacheKey, handler))\n}\n\n/**\n * @param {import('../../types/dispatcher.d.ts').default.DispatchHandler} handler\n * @param {import('../../types/dispatcher.d.ts').default.RequestOptions} opts\n * @param {import('../../types/cache-interceptor.d.ts').default.GetResult} result\n * @param {number} age\n * @param {any} context\n * @param {boolean} isStale\n */\nfunction sendCachedValue (handler, opts, result, age, context, isStale) {\n  // TODO (perf): Readable.from path can be optimized...\n  const stream = util.isStream(result.body)\n    ? result.body\n    : Readable.from(result.body ?? [])\n\n  assert(!stream.destroyed, 'stream should not be destroyed')\n  assert(!stream.readableDidRead, 'stream should not be readableDidRead')\n\n  const controller = {\n    resume () {\n      stream.resume()\n    },\n    pause () {\n      stream.pause()\n    },\n    get paused () {\n      return stream.isPaused()\n    },\n    get aborted () {\n      return stream.destroyed\n    },\n    get reason () {\n      return stream.errored\n    },\n    abort (reason) {\n      stream.destroy(reason ?? new AbortError())\n    }\n  }\n\n  stream\n    .on('error', function (err) {\n      if (!this.readableEnded) {\n        if (typeof handler.onResponseError === 'function') {\n          handler.onResponseError(controller, err)\n        } else {\n          throw err\n        }\n      }\n    })\n    .on('close', function () {\n      if (!this.errored) {\n        handler.onResponseEnd?.(controller, {})\n      }\n    })\n\n  handler.onRequestStart?.(controller, context)\n\n  if (stream.destroyed) {\n    return\n  }\n\n  // Add the age header\n  // https://www.rfc-editor.org/rfc/rfc9111.html#name-age\n  const headers = { ...result.headers, age: String(age) }\n\n  if (isStale) {\n    // Add warning header\n    //  https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Warning\n    headers.warning = '110 - \"response is stale\"'\n  }\n\n  handler.onResponseStart?.(controller, result.statusCode, headers, result.statusMessage)\n\n  if (opts.method === 'HEAD') {\n    stream.destroy()\n  } else {\n    stream.on('data', function (chunk) {\n      handler.onResponseData?.(controller, chunk)\n    })\n  }\n}\n\n/**\n * @param {DispatchFn} dispatch\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheHandlerOptions} globalOpts\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheKey} cacheKey\n * @param {import('../../types/dispatcher.d.ts').default.DispatchHandler} handler\n * @param {import('../../types/dispatcher.d.ts').default.RequestOptions} opts\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheControlDirectives | undefined} reqCacheControl\n * @param {import('../../types/cache-interceptor.d.ts').default.GetResult | undefined} result\n */\nfunction handleResult (\n  dispatch,\n  globalOpts,\n  cacheKey,\n  handler,\n  opts,\n  reqCacheControl,\n  result\n) {\n  if (!result) {\n    return handleUncachedResponse(dispatch, globalOpts, cacheKey, handler, opts, reqCacheControl)\n  }\n\n  const now = Date.now()\n  if (now > result.deleteAt) {\n    // Response is expired, cache store shouldn't have given this to us\n    return dispatch(opts, new CacheHandler(globalOpts, cacheKey, handler))\n  }\n\n  const age = Math.round((now - result.cachedAt) / 1000)\n  if (reqCacheControl?.['max-age'] && age >= reqCacheControl['max-age']) {\n    // Response is considered expired for this specific request\n    //  https://www.rfc-editor.org/rfc/rfc9111.html#section-5.2.1.1\n    return dispatch(opts, handler)\n  }\n\n  const stale = isStale(result, reqCacheControl)\n  const revalidate = needsRevalidation(result, reqCacheControl, opts)\n\n  // Check if the response is stale\n  if (stale || revalidate) {\n    if (util.isStream(opts.body) && util.bodyLength(opts.body) !== 0) {\n      // If body is a stream we can't revalidate...\n      // TODO (fix): This could be less strict...\n      return dispatch(opts, new CacheHandler(globalOpts, cacheKey, handler))\n    }\n\n    // RFC 5861: If we're within stale-while-revalidate window, serve stale immediately\n    // and revalidate in background, unless immediate revalidation is necessary\n    if (!revalidate && withinStaleWhileRevalidateWindow(result)) {\n      // Serve stale response immediately\n      sendCachedValue(handler, opts, result, age, null, true)\n\n      // Start background revalidation (fire-and-forget)\n      queueMicrotask(() => {\n        const headers = {\n          ...opts.headers,\n          'if-modified-since': new Date(result.cachedAt).toUTCString()\n        }\n\n        if (result.etag) {\n          headers['if-none-match'] = result.etag\n        }\n\n        if (result.vary) {\n          for (const key in result.vary) {\n            if (result.vary[key] != null) {\n              headers[key] = result.vary[key]\n            }\n          }\n        }\n\n        // Background revalidation - update cache if we get new data\n        dispatch(\n          {\n            ...opts,\n            headers\n          },\n          new CacheHandler(globalOpts, cacheKey, {\n            // Silent handler that just updates the cache\n            onRequestStart () {},\n            onRequestUpgrade () {},\n            onResponseStart () {},\n            onResponseData () {},\n            onResponseEnd () {},\n            onResponseError () {}\n          })\n        )\n      })\n\n      return true\n    }\n\n    let withinStaleIfErrorThreshold = false\n    const staleIfErrorExpiry = result.cacheControlDirectives['stale-if-error'] ?? reqCacheControl?.['stale-if-error']\n    if (staleIfErrorExpiry) {\n      withinStaleIfErrorThreshold = now < (result.staleAt + (staleIfErrorExpiry * 1000))\n    }\n\n    const headers = {\n      ...opts.headers,\n      'if-modified-since': new Date(result.cachedAt).toUTCString()\n    }\n\n    if (result.etag) {\n      headers['if-none-match'] = result.etag\n    }\n\n    if (result.vary) {\n      for (const key in result.vary) {\n        if (result.vary[key] != null) {\n          headers[key] = result.vary[key]\n        }\n      }\n    }\n\n    // We need to revalidate the response\n    return dispatch(\n      {\n        ...opts,\n        headers\n      },\n      new CacheRevalidationHandler(\n        (success, context) => {\n          if (success) {\n            // TODO: successful revalidation should be considered fresh (not give stale warning).\n            sendCachedValue(handler, opts, result, age, context, stale)\n          } else if (util.isStream(result.body)) {\n            result.body.on('error', nop).destroy()\n          }\n        },\n        new CacheHandler(globalOpts, cacheKey, handler),\n        withinStaleIfErrorThreshold\n      )\n    )\n  }\n\n  // Dump request body.\n  if (util.isStream(opts.body)) {\n    opts.body.on('error', nop).destroy()\n  }\n\n  sendCachedValue(handler, opts, result, age, null, false)\n}\n\n/**\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheOptions} [opts]\n * @returns {import('../../types/dispatcher.d.ts').default.DispatcherComposeInterceptor}\n */\nmodule.exports = (opts = {}) => {\n  const {\n    store = new MemoryCacheStore(),\n    methods = ['GET'],\n    cacheByDefault = undefined,\n    type = 'shared',\n    origins = undefined\n  } = opts\n\n  if (typeof opts !== 'object' || opts === null) {\n    throw new TypeError(`expected type of opts to be an Object, got ${opts === null ? 'null' : typeof opts}`)\n  }\n\n  assertCacheStore(store, 'opts.store')\n  assertCacheMethods(methods, 'opts.methods')\n  assertCacheOrigins(origins, 'opts.origins')\n\n  if (typeof cacheByDefault !== 'undefined' && typeof cacheByDefault !== 'number') {\n    throw new TypeError(`expected opts.cacheByDefault to be number or undefined, got ${typeof cacheByDefault}`)\n  }\n\n  if (typeof type !== 'undefined' && type !== 'shared' && type !== 'private') {\n    throw new TypeError(`expected opts.type to be shared, private, or undefined, got ${typeof type}`)\n  }\n\n  const globalOpts = {\n    store,\n    methods,\n    cacheByDefault,\n    type\n  }\n\n  const safeMethodsToNotCache = util.safeHTTPMethods.filter(method => methods.includes(method) === false)\n\n  return dispatch => {\n    return (opts, handler) => {\n      if (!opts.origin || safeMethodsToNotCache.includes(opts.method)) {\n        // Not a method we want to cache or we don't have the origin, skip\n        return dispatch(opts, handler)\n      }\n\n      // Check if origin is in whitelist\n      if (origins !== undefined) {\n        const requestOrigin = opts.origin.toString().toLowerCase()\n        let isAllowed = false\n\n        for (let i = 0; i < origins.length; i++) {\n          const allowed = origins[i]\n          if (typeof allowed === 'string') {\n            if (allowed.toLowerCase() === requestOrigin) {\n              isAllowed = true\n              break\n            }\n          } else if (allowed.test(requestOrigin)) {\n            isAllowed = true\n            break\n          }\n        }\n\n        if (!isAllowed) {\n          return dispatch(opts, handler)\n        }\n      }\n\n      opts = {\n        ...opts,\n        headers: normalizeHeaders(opts)\n      }\n\n      const reqCacheControl = opts.headers?.['cache-control']\n        ? parseCacheControlHeader(opts.headers['cache-control'])\n        : undefined\n\n      if (reqCacheControl?.['no-store']) {\n        return dispatch(opts, handler)\n      }\n\n      /**\n       * @type {import('../../types/cache-interceptor.d.ts').default.CacheKey}\n       */\n      const cacheKey = makeCacheKey(opts)\n      const result = store.get(cacheKey)\n\n      if (result && typeof result.then === 'function') {\n        return result\n          .then(result => handleResult(dispatch,\n            globalOpts,\n            cacheKey,\n            handler,\n            opts,\n            reqCacheControl,\n            result\n          ))\n      } else {\n        return handleResult(\n          dispatch,\n          globalOpts,\n          cacheKey,\n          handler,\n          opts,\n          reqCacheControl,\n          result\n        )\n      }\n    }\n  }\n}\n", "'use strict'\n\nconst { createInflate, createGunzip, createBrotliDecompress, createZstdDecompress } = require('node:zlib')\nconst { pipeline } = require('node:stream')\nconst DecoratorHandler = require('../handler/decorator-handler')\nconst { runtimeFeatures } = require('../util/runtime-features')\n\n/** @typedef {import('node:stream').Transform} Transform */\n/** @typedef {import('node:stream').Transform} Controller */\n/** @typedef {Transform&import('node:zlib').Zlib} DecompressorStream */\n\n/** @type {Record<string, () => DecompressorStream>} */\nconst supportedEncodings = {\n  gzip: createGunzip,\n  'x-gzip': createGunzip,\n  br: createBrotliDecompress,\n  deflate: createInflate,\n  compress: createInflate,\n  'x-compress': createInflate,\n  ...(runtimeFeatures.has('zstd') ? { zstd: createZstdDecompress } : {})\n}\n\nconst defaultSkipStatusCodes = /** @type {const} */ ([204, 304])\n\nlet warningEmitted = /** @type {boolean} */ (false)\n\n/**\n * @typedef {Object} DecompressHandlerOptions\n * @property {number[]|Readonly<number[]>} [skipStatusCodes=[204, 304]] - List of status codes to skip decompression for\n * @property {boolean} [skipErrorResponses] - Whether to skip decompression for error responses (status codes >= 400)\n */\n\nclass DecompressHandler extends DecoratorHandler {\n  /** @type {Transform[]} */\n  #decompressors = []\n  /** @type {Readonly<number[]>} */\n  #skipStatusCodes\n  /** @type {boolean} */\n  #skipErrorResponses\n\n  constructor (handler, { skipStatusCodes = defaultSkipStatusCodes, skipErrorResponses = true } = {}) {\n    super(handler)\n    this.#skipStatusCodes = skipStatusCodes\n    this.#skipErrorResponses = skipErrorResponses\n  }\n\n  /**\n   * Determines if decompression should be skipped based on encoding and status code\n   * @param {string} contentEncoding - Content-Encoding header value\n   * @param {number} statusCode - HTTP status code of the response\n   * @returns {boolean} - True if decompression should be skipped\n   */\n  #shouldSkipDecompression (contentEncoding, statusCode) {\n    if (!contentEncoding || statusCode < 200) return true\n    if (this.#skipStatusCodes.includes(statusCode)) return true\n    if (this.#skipErrorResponses && statusCode >= 400) return true\n    return false\n  }\n\n  /**\n   * Creates a chain of decompressors for multiple content encodings\n   *\n   * @param {string} encodings - Comma-separated list of content encodings\n   * @returns {Array<DecompressorStream>} - Array of decompressor streams\n   * @throws {Error} - If the number of content-encodings exceeds the maximum allowed\n   */\n  #createDecompressionChain (encodings) {\n    const parts = encodings.split(',')\n\n    // Limit the number of content-encodings to prevent resource exhaustion.\n    // CVE fix similar to urllib3 (GHSA-gm62-xv2j-4w53) and curl (CVE-2022-32206).\n    const maxContentEncodings = 5\n    if (parts.length > maxContentEncodings) {\n      throw new Error(`too many content-encodings in response: ${parts.length}, maximum allowed is ${maxContentEncodings}`)\n    }\n\n    /** @type {DecompressorStream[]} */\n    const decompressors = []\n\n    for (let i = parts.length - 1; i >= 0; i--) {\n      const encoding = parts[i].trim()\n      if (!encoding) continue\n\n      if (!supportedEncodings[encoding]) {\n        decompressors.length = 0 // Clear if unsupported encoding\n        return decompressors // Unsupported encoding\n      }\n\n      decompressors.push(supportedEncodings[encoding]())\n    }\n\n    return decompressors\n  }\n\n  /**\n   * Sets up event handlers for a decompressor stream using readable events\n   * @param {DecompressorStream} decompressor - The decompressor stream\n   * @param {Controller} controller - The controller to coordinate with\n   * @returns {void}\n   */\n  #setupDecompressorEvents (decompressor, controller) {\n    decompressor.on('readable', () => {\n      let chunk\n      while ((chunk = decompressor.read()) !== null) {\n        const result = super.onResponseData(controller, chunk)\n        if (result === false) {\n          break\n        }\n      }\n    })\n\n    decompressor.on('error', (error) => {\n      super.onResponseError(controller, error)\n    })\n  }\n\n  /**\n   * Sets up event handling for a single decompressor\n   * @param {Controller} controller - The controller to handle events\n   * @returns {void}\n   */\n  #setupSingleDecompressor (controller) {\n    const decompressor = this.#decompressors[0]\n    this.#setupDecompressorEvents(decompressor, controller)\n\n    decompressor.on('end', () => {\n      super.onResponseEnd(controller, {})\n    })\n  }\n\n  /**\n   * Sets up event handling for multiple chained decompressors using pipeline\n   * @param {Controller} controller - The controller to handle events\n   * @returns {void}\n   */\n  #setupMultipleDecompressors (controller) {\n    const lastDecompressor = this.#decompressors[this.#decompressors.length - 1]\n    this.#setupDecompressorEvents(lastDecompressor, controller)\n\n    pipeline(this.#decompressors, (err) => {\n      if (err) {\n        super.onResponseError(controller, err)\n        return\n      }\n      super.onResponseEnd(controller, {})\n    })\n  }\n\n  /**\n   * Cleans up decompressor references to prevent memory leaks\n   * @returns {void}\n   */\n  #cleanupDecompressors () {\n    this.#decompressors.length = 0\n  }\n\n  /**\n   * @param {Controller} controller\n   * @param {number} statusCode\n   * @param {Record<string, string | string[] | undefined>} headers\n   * @param {string} statusMessage\n   * @returns {void}\n   */\n  onResponseStart (controller, statusCode, headers, statusMessage) {\n    const contentEncoding = headers['content-encoding']\n\n    // If content encoding is not supported or status code is in skip list\n    if (this.#shouldSkipDecompression(contentEncoding, statusCode)) {\n      return super.onResponseStart(controller, statusCode, headers, statusMessage)\n    }\n\n    const decompressors = this.#createDecompressionChain(contentEncoding.toLowerCase())\n\n    if (decompressors.length === 0) {\n      this.#cleanupDecompressors()\n      return super.onResponseStart(controller, statusCode, headers, statusMessage)\n    }\n\n    this.#decompressors = decompressors\n\n    // Remove compression headers since we're decompressing\n    const { 'content-encoding': _, 'content-length': __, ...newHeaders } = headers\n\n    if (this.#decompressors.length === 1) {\n      this.#setupSingleDecompressor(controller)\n    } else {\n      this.#setupMultipleDecompressors(controller)\n    }\n\n    return super.onResponseStart(controller, statusCode, newHeaders, statusMessage)\n  }\n\n  /**\n   * @param {Controller} controller\n   * @param {Buffer} chunk\n   * @returns {void}\n   */\n  onResponseData (controller, chunk) {\n    if (this.#decompressors.length > 0) {\n      this.#decompressors[0].write(chunk)\n      return\n    }\n    super.onResponseData(controller, chunk)\n  }\n\n  /**\n   * @param {Controller} controller\n   * @param {Record<string, string | string[]> | undefined} trailers\n   * @returns {void}\n   */\n  onResponseEnd (controller, trailers) {\n    if (this.#decompressors.length > 0) {\n      this.#decompressors[0].end()\n      this.#cleanupDecompressors()\n      return\n    }\n    super.onResponseEnd(controller, trailers)\n  }\n\n  /**\n   * @param {Controller} controller\n   * @param {Error} err\n   * @returns {void}\n   */\n  onResponseError (controller, err) {\n    if (this.#decompressors.length > 0) {\n      for (const decompressor of this.#decompressors) {\n        decompressor.destroy(err)\n      }\n      this.#cleanupDecompressors()\n    }\n    super.onResponseError(controller, err)\n  }\n}\n\n/**\n * Creates a decompression interceptor for HTTP responses\n * @param {DecompressHandlerOptions} [options] - Options for the interceptor\n * @returns {Function} - Interceptor function\n */\nfunction createDecompressInterceptor (options = {}) {\n  // Emit experimental warning only once\n  if (!warningEmitted) {\n    process.emitWarning(\n      'DecompressInterceptor is experimental and subject to change',\n      'ExperimentalWarning'\n    )\n    warningEmitted = true\n  }\n\n  return (dispatch) => {\n    return (opts, handler) => {\n      const decompressHandler = new DecompressHandler(handler, options)\n      return dispatch(opts, decompressHandler)\n    }\n  }\n}\n\nmodule.exports = createDecompressInterceptor\n", "'use strict'\n\nconst { RequestAbortedError } = require('../core/errors')\n\n/**\n * @typedef {import('../../types/dispatcher.d.ts').default.DispatchHandler} DispatchHandler\n */\n\nconst DEFAULT_MAX_BUFFER_SIZE = 5 * 1024 * 1024\n\n/**\n * @typedef {Object} WaitingHandler\n * @property {DispatchHandler} handler\n * @property {import('../../types/dispatcher.d.ts').default.DispatchController} controller\n * @property {Buffer[]} bufferedChunks\n * @property {number} bufferedBytes\n * @property {object | null} pendingTrailers\n * @property {boolean} done\n */\n\n/**\n * Handler that forwards response events to multiple waiting handlers.\n * Used for request deduplication.\n *\n * @implements {DispatchHandler}\n */\nclass DeduplicationHandler {\n  /**\n   * @type {DispatchHandler}\n   */\n  #primaryHandler\n\n  /**\n   * @type {WaitingHandler[]}\n   */\n  #waitingHandlers = []\n\n  /**\n   * @type {number}\n   */\n  #maxBufferSize = DEFAULT_MAX_BUFFER_SIZE\n\n  /**\n   * @type {number}\n   */\n  #statusCode = 0\n\n  /**\n   * @type {Record<string, string | string[]>}\n   */\n  #headers = {}\n\n  /**\n   * @type {string}\n   */\n  #statusMessage = ''\n\n  /**\n   * @type {boolean}\n   */\n  #aborted = false\n\n  /**\n   * @type {boolean}\n   */\n  #responseStarted = false\n\n  /**\n   * @type {boolean}\n   */\n  #responseDataStarted = false\n\n  /**\n   * @type {boolean}\n   */\n  #completed = false\n\n  /**\n   * @type {import('../../types/dispatcher.d.ts').default.DispatchController | null}\n   */\n  #controller = null\n\n  /**\n   * @type {(() => void) | null}\n   */\n  #onComplete = null\n\n  /**\n   * @param {DispatchHandler} primaryHandler The primary handler\n   * @param {() => void} onComplete Callback when request completes\n   * @param {number} [maxBufferSize] Maximum paused buffer size per waiting handler\n   */\n  constructor (primaryHandler, onComplete, maxBufferSize = DEFAULT_MAX_BUFFER_SIZE) {\n    this.#primaryHandler = primaryHandler\n    this.#onComplete = onComplete\n    this.#maxBufferSize = maxBufferSize\n  }\n\n  /**\n   * Add a waiting handler that will receive response events.\n   * Returns false if deduplication can no longer safely attach this handler.\n   *\n   * @param {DispatchHandler} handler\n   * @returns {boolean}\n   */\n  addWaitingHandler (handler) {\n    if (this.#completed || this.#responseDataStarted) {\n      return false\n    }\n\n    const waitingHandler = this.#createWaitingHandler(handler)\n    const waitingController = waitingHandler.controller\n\n    try {\n      handler.onRequestStart?.(waitingController, null)\n\n      if (waitingController.aborted) {\n        waitingHandler.done = true\n        return true\n      }\n\n      if (this.#responseStarted) {\n        handler.onResponseStart?.(\n          waitingController,\n          this.#statusCode,\n          this.#headers,\n          this.#statusMessage\n        )\n      }\n    } catch {\n      // Ignore errors from waiting handlers\n      waitingHandler.done = true\n      return true\n    }\n\n    if (!waitingController.aborted) {\n      this.#waitingHandlers.push(waitingHandler)\n    }\n\n    return true\n  }\n\n  /**\n   * @param {import('../../types/dispatcher.d.ts').default.DispatchController} controller\n   * @param {any} context\n   */\n  onRequestStart (controller, context) {\n    this.#controller = controller\n    this.#primaryHandler.onRequestStart?.(controller, context)\n  }\n\n  /**\n   * @param {import('../../types/dispatcher.d.ts').default.DispatchController} controller\n   * @param {number} statusCode\n   * @param {import('../../types/header.d.ts').IncomingHttpHeaders} headers\n   * @param {Socket} socket\n   */\n  onRequestUpgrade (controller, statusCode, headers, socket) {\n    this.#primaryHandler.onRequestUpgrade?.(controller, statusCode, headers, socket)\n  }\n\n  /**\n   * @param {import('../../types/dispatcher.d.ts').default.DispatchController} controller\n   * @param {number} statusCode\n   * @param {Record<string, string | string[]>} headers\n   * @param {string} statusMessage\n   */\n  onResponseStart (controller, statusCode, headers, statusMessage) {\n    this.#responseStarted = true\n    this.#statusCode = statusCode\n    this.#headers = headers\n    this.#statusMessage = statusMessage\n\n    this.#primaryHandler.onResponseStart?.(controller, statusCode, headers, statusMessage)\n\n    for (const waitingHandler of this.#waitingHandlers) {\n      const { handler, controller: waitingController } = waitingHandler\n\n      if (waitingHandler.done || waitingController.aborted) {\n        waitingHandler.done = true\n        continue\n      }\n\n      try {\n        handler.onResponseStart?.(\n          waitingController,\n          statusCode,\n          headers,\n          statusMessage\n        )\n      } catch {\n        // Ignore errors from waiting handlers\n      }\n\n      if (waitingController.aborted) {\n        waitingHandler.done = true\n      }\n    }\n\n    this.#pruneDoneWaitingHandlers()\n  }\n\n  /**\n   * @param {import('../../types/dispatcher.d.ts').default.DispatchController} controller\n   * @param {Buffer} chunk\n   */\n  onResponseData (controller, chunk) {\n    if (this.#aborted || this.#completed) {\n      return\n    }\n\n    this.#responseDataStarted = true\n\n    this.#primaryHandler.onResponseData?.(controller, chunk)\n\n    for (const waitingHandler of this.#waitingHandlers) {\n      const { handler, controller: waitingController } = waitingHandler\n\n      if (waitingHandler.done || waitingController.aborted) {\n        waitingHandler.done = true\n        continue\n      }\n\n      if (waitingController.paused) {\n        this.#bufferWaitingChunk(waitingHandler, chunk)\n        continue\n      }\n\n      try {\n        handler.onResponseData?.(waitingController, chunk)\n      } catch {\n        // Ignore errors from waiting handlers\n      }\n\n      if (waitingController.aborted) {\n        waitingHandler.done = true\n        waitingHandler.bufferedChunks = []\n        waitingHandler.bufferedBytes = 0\n      }\n    }\n\n    this.#pruneDoneWaitingHandlers()\n  }\n\n  /**\n   * @param {import('../../types/dispatcher.d.ts').default.DispatchController} controller\n   * @param {object} trailers\n   */\n  onResponseEnd (controller, trailers) {\n    if (this.#aborted || this.#completed) {\n      return\n    }\n\n    this.#completed = true\n    this.#primaryHandler.onResponseEnd?.(controller, trailers)\n\n    for (const waitingHandler of this.#waitingHandlers) {\n      if (waitingHandler.done || waitingHandler.controller.aborted) {\n        waitingHandler.done = true\n        continue\n      }\n\n      this.#flushWaitingHandler(waitingHandler)\n\n      if (waitingHandler.done || waitingHandler.controller.aborted) {\n        waitingHandler.done = true\n        continue\n      }\n\n      if (waitingHandler.controller.paused && waitingHandler.bufferedChunks.length > 0) {\n        waitingHandler.pendingTrailers = trailers\n        continue\n      }\n\n      try {\n        waitingHandler.handler.onResponseEnd?.(waitingHandler.controller, trailers)\n      } catch {\n        // Ignore errors from waiting handlers\n      }\n\n      waitingHandler.done = true\n    }\n\n    this.#pruneDoneWaitingHandlers()\n    this.#onComplete?.()\n  }\n\n  /**\n   * @param {import('../../types/dispatcher.d.ts').default.DispatchController} controller\n   * @param {Error} err\n   */\n  onResponseError (controller, err) {\n    if (this.#completed) {\n      return\n    }\n\n    this.#aborted = true\n    this.#completed = true\n\n    this.#primaryHandler.onResponseError?.(controller, err)\n\n    for (const waitingHandler of this.#waitingHandlers) {\n      this.#errorWaitingHandler(waitingHandler, err)\n    }\n\n    this.#waitingHandlers = []\n    this.#onComplete?.()\n  }\n\n  /**\n   * @param {DispatchHandler} handler\n   * @returns {WaitingHandler}\n   */\n  #createWaitingHandler (handler) {\n    /** @type {WaitingHandler} */\n    const waitingHandler = {\n      handler,\n      controller: null,\n      bufferedChunks: [],\n      bufferedBytes: 0,\n      pendingTrailers: null,\n      done: false\n    }\n\n    const state = {\n      aborted: false,\n      paused: false,\n      reason: null\n    }\n\n    waitingHandler.controller = {\n      resume: () => {\n        if (state.aborted) {\n          return\n        }\n\n        state.paused = false\n        this.#flushWaitingHandler(waitingHandler)\n\n        if (\n          this.#completed &&\n          waitingHandler.pendingTrailers &&\n          waitingHandler.bufferedChunks.length === 0 &&\n          !state.paused &&\n          !state.aborted\n        ) {\n          try {\n            waitingHandler.handler.onResponseEnd?.(waitingHandler.controller, waitingHandler.pendingTrailers)\n          } catch {\n            // Ignore errors from waiting handlers\n          }\n\n          waitingHandler.pendingTrailers = null\n          waitingHandler.done = true\n        }\n\n        this.#pruneDoneWaitingHandlers()\n      },\n      pause: () => {\n        if (!state.aborted) {\n          state.paused = true\n        }\n      },\n      get paused () { return state.paused },\n      get aborted () { return state.aborted },\n      get reason () { return state.reason },\n      abort: (reason) => {\n        state.aborted = true\n        state.reason = reason ?? null\n        waitingHandler.done = true\n        waitingHandler.pendingTrailers = null\n        waitingHandler.bufferedChunks = []\n        waitingHandler.bufferedBytes = 0\n      }\n    }\n\n    return waitingHandler\n  }\n\n  /**\n   * @param {WaitingHandler} waitingHandler\n   * @param {Buffer} chunk\n   */\n  #bufferWaitingChunk (waitingHandler, chunk) {\n    if (waitingHandler.done || waitingHandler.controller.aborted) {\n      waitingHandler.done = true\n      waitingHandler.bufferedChunks = []\n      waitingHandler.bufferedBytes = 0\n      return\n    }\n\n    const bufferedChunk = Buffer.from(chunk)\n    waitingHandler.bufferedChunks.push(bufferedChunk)\n    waitingHandler.bufferedBytes += bufferedChunk.length\n\n    if (waitingHandler.bufferedBytes > this.#maxBufferSize) {\n      const err = new RequestAbortedError(`Deduplicated waiting handler exceeded maxBufferSize (${this.#maxBufferSize} bytes) while paused`)\n      this.#errorWaitingHandler(waitingHandler, err)\n    }\n  }\n\n  /**\n   * @param {WaitingHandler} waitingHandler\n   */\n  #flushWaitingHandler (waitingHandler) {\n    const { handler, controller } = waitingHandler\n\n    while (\n      !waitingHandler.done &&\n      !controller.aborted &&\n      !controller.paused &&\n      waitingHandler.bufferedChunks.length > 0\n    ) {\n      const bufferedChunk = waitingHandler.bufferedChunks.shift()\n      waitingHandler.bufferedBytes -= bufferedChunk.length\n\n      try {\n        handler.onResponseData?.(controller, bufferedChunk)\n      } catch {\n        // Ignore errors from waiting handlers\n      }\n\n      if (controller.aborted) {\n        waitingHandler.done = true\n        waitingHandler.pendingTrailers = null\n        waitingHandler.bufferedChunks = []\n        waitingHandler.bufferedBytes = 0\n        break\n      }\n    }\n  }\n\n  /**\n   * @param {WaitingHandler} waitingHandler\n   * @param {Error} err\n   */\n  #errorWaitingHandler (waitingHandler, err) {\n    if (waitingHandler.done) {\n      return\n    }\n\n    waitingHandler.done = true\n    waitingHandler.pendingTrailers = null\n    waitingHandler.bufferedChunks = []\n    waitingHandler.bufferedBytes = 0\n\n    try {\n      waitingHandler.controller.abort(err)\n      waitingHandler.handler.onResponseError?.(waitingHandler.controller, err)\n    } catch {\n      // Ignore errors from waiting handlers\n    }\n  }\n\n  #pruneDoneWaitingHandlers () {\n    this.#waitingHandlers = this.#waitingHandlers.filter(waitingHandler => waitingHandler.done === false)\n  }\n}\n\nmodule.exports = DeduplicationHandler\n", "'use strict'\n\nconst diagnosticsChannel = require('node:diagnostics_channel')\nconst util = require('../core/util')\nconst DeduplicationHandler = require('../handler/deduplication-handler')\nconst { normalizeHeaders, makeCacheKey, makeDeduplicationKey } = require('../util/cache.js')\n\nconst pendingRequestsChannel = diagnosticsChannel.channel('undici:request:pending-requests')\n\n/**\n * @param {import('../../types/interceptors.d.ts').default.DeduplicateInterceptorOpts} [opts]\n * @returns {import('../../types/dispatcher.d.ts').default.DispatcherComposeInterceptor}\n */\nmodule.exports = (opts = {}) => {\n  const {\n    methods = ['GET'],\n    skipHeaderNames = [],\n    excludeHeaderNames = [],\n    maxBufferSize = 5 * 1024 * 1024\n  } = opts\n\n  if (typeof opts !== 'object' || opts === null) {\n    throw new TypeError(`expected type of opts to be an Object, got ${opts === null ? 'null' : typeof opts}`)\n  }\n\n  if (!Array.isArray(methods)) {\n    throw new TypeError(`expected opts.methods to be an array, got ${typeof methods}`)\n  }\n\n  for (const method of methods) {\n    if (!util.safeHTTPMethods.includes(method)) {\n      throw new TypeError(`expected opts.methods to only contain safe HTTP methods, got ${method}`)\n    }\n  }\n\n  if (!Array.isArray(skipHeaderNames)) {\n    throw new TypeError(`expected opts.skipHeaderNames to be an array, got ${typeof skipHeaderNames}`)\n  }\n\n  if (!Array.isArray(excludeHeaderNames)) {\n    throw new TypeError(`expected opts.excludeHeaderNames to be an array, got ${typeof excludeHeaderNames}`)\n  }\n\n  if (!Number.isFinite(maxBufferSize) || maxBufferSize <= 0) {\n    throw new TypeError(`expected opts.maxBufferSize to be a positive finite number, got ${maxBufferSize}`)\n  }\n\n  // Convert to lowercase Set for case-insensitive header matching\n  const skipHeaderNamesSet = new Set(skipHeaderNames.map(name => name.toLowerCase()))\n\n  // Convert to lowercase Set for case-insensitive header exclusion from deduplication key\n  const excludeHeaderNamesSet = new Set(excludeHeaderNames.map(name => name.toLowerCase()))\n\n  /**\n   * Map of pending requests for deduplication\n   * @type {Map<string, DeduplicationHandler>}\n   */\n  const pendingRequests = new Map()\n\n  return dispatch => {\n    return (opts, handler) => {\n      if (!opts.origin || methods.includes(opts.method) === false) {\n        return dispatch(opts, handler)\n      }\n\n      opts = {\n        ...opts,\n        headers: normalizeHeaders(opts)\n      }\n\n      // Skip deduplication if request contains any of the specified headers\n      if (skipHeaderNamesSet.size > 0) {\n        for (const headerName of Object.keys(opts.headers)) {\n          if (skipHeaderNamesSet.has(headerName.toLowerCase())) {\n            return dispatch(opts, handler)\n          }\n        }\n      }\n\n      const cacheKey = makeCacheKey(opts)\n      const dedupeKey = makeDeduplicationKey(cacheKey, excludeHeaderNamesSet)\n\n      // Check if there's already a pending request for this key\n      const pendingHandler = pendingRequests.get(dedupeKey)\n      if (pendingHandler) {\n        // Add this handler to the waiting list when safe.\n        // If body streaming has already started, this request must be sent independently.\n        if (pendingHandler.addWaitingHandler(handler)) {\n          return true\n        }\n\n        return dispatch(opts, handler)\n      }\n\n      // Create a new deduplication handler\n      const deduplicationHandler = new DeduplicationHandler(\n        handler,\n        () => {\n          // Clean up when request completes\n          pendingRequests.delete(dedupeKey)\n          if (pendingRequestsChannel.hasSubscribers) {\n            pendingRequestsChannel.publish({ size: pendingRequests.size, key: dedupeKey, type: 'removed' })\n          }\n        },\n        maxBufferSize\n      )\n\n      // Register the pending request\n      pendingRequests.set(dedupeKey, deduplicationHandler)\n      if (pendingRequestsChannel.hasSubscribers) {\n        pendingRequestsChannel.publish({ size: pendingRequests.size, key: dedupeKey, type: 'added' })\n      }\n\n      return dispatch(opts, deduplicationHandler)\n    }\n  }\n}\n", "'use strict'\n\nconst { Writable } = require('node:stream')\nconst { assertCacheKey, assertCacheValue } = require('../util/cache.js')\n\nlet DatabaseSync\n\nconst VERSION = 3\n\n// 2gb\nconst MAX_ENTRY_SIZE = 2 * 1000 * 1000 * 1000\n\n/**\n * @typedef {import('../../types/cache-interceptor.d.ts').default.CacheStore} CacheStore\n * @implements {CacheStore}\n *\n * @typedef {{\n *  id: Readonly<number>,\n *  body?: Uint8Array\n *  statusCode: number\n *  statusMessage: string\n *  headers?: string\n *  vary?: string\n *  etag?: string\n *  cacheControlDirectives?: string\n *  cachedAt: number\n *  staleAt: number\n *  deleteAt: number\n * }} SqliteStoreValue\n */\nmodule.exports = class SqliteCacheStore {\n  #maxEntrySize = MAX_ENTRY_SIZE\n  #maxCount = Infinity\n\n  /**\n   * @type {import('node:sqlite').DatabaseSync}\n   */\n  #db\n\n  /**\n   * @type {import('node:sqlite').StatementSync}\n   */\n  #getValuesQuery\n\n  /**\n   * @type {import('node:sqlite').StatementSync}\n   */\n  #updateValueQuery\n\n  /**\n   * @type {import('node:sqlite').StatementSync}\n   */\n  #insertValueQuery\n\n  /**\n   * @type {import('node:sqlite').StatementSync}\n   */\n  #deleteExpiredValuesQuery\n\n  /**\n   * @type {import('node:sqlite').StatementSync}\n   */\n  #deleteByUrlQuery\n\n  /**\n   * @type {import('node:sqlite').StatementSync}\n   */\n  #countEntriesQuery\n\n  /**\n   * @type {import('node:sqlite').StatementSync | null}\n   */\n  #deleteOldValuesQuery\n\n  /**\n   * @param {import('../../types/cache-interceptor.d.ts').default.SqliteCacheStoreOpts | undefined} opts\n   */\n  constructor (opts) {\n    if (opts) {\n      if (typeof opts !== 'object') {\n        throw new TypeError('SqliteCacheStore options must be an object')\n      }\n\n      if (opts.maxEntrySize !== undefined) {\n        if (\n          typeof opts.maxEntrySize !== 'number' ||\n          !Number.isInteger(opts.maxEntrySize) ||\n          opts.maxEntrySize < 0\n        ) {\n          throw new TypeError('SqliteCacheStore options.maxEntrySize must be a non-negative integer')\n        }\n\n        if (opts.maxEntrySize > MAX_ENTRY_SIZE) {\n          throw new TypeError('SqliteCacheStore options.maxEntrySize must be less than 2gb')\n        }\n\n        this.#maxEntrySize = opts.maxEntrySize\n      }\n\n      if (opts.maxCount !== undefined) {\n        if (\n          typeof opts.maxCount !== 'number' ||\n          !Number.isInteger(opts.maxCount) ||\n          opts.maxCount < 0\n        ) {\n          throw new TypeError('SqliteCacheStore options.maxCount must be a non-negative integer')\n        }\n        this.#maxCount = opts.maxCount\n      }\n    }\n\n    if (!DatabaseSync) {\n      DatabaseSync = require('node:sqlite').DatabaseSync\n    }\n    this.#db = new DatabaseSync(opts?.location ?? ':memory:')\n\n    this.#db.exec(`\n      PRAGMA journal_mode = WAL;\n      PRAGMA synchronous = NORMAL;\n      PRAGMA temp_store = memory;\n      PRAGMA optimize;\n\n      CREATE TABLE IF NOT EXISTS cacheInterceptorV${VERSION} (\n        -- Data specific to us\n        id INTEGER PRIMARY KEY AUTOINCREMENT,\n        url TEXT NOT NULL,\n        method TEXT NOT NULL,\n\n        -- Data returned to the interceptor\n        body BUF NULL,\n        deleteAt INTEGER NOT NULL,\n        statusCode INTEGER NOT NULL,\n        statusMessage TEXT NOT NULL,\n        headers TEXT NULL,\n        cacheControlDirectives TEXT NULL,\n        etag TEXT NULL,\n        vary TEXT NULL,\n        cachedAt INTEGER NOT NULL,\n        staleAt INTEGER NOT NULL\n      );\n\n      CREATE INDEX IF NOT EXISTS idx_cacheInterceptorV${VERSION}_getValuesQuery ON cacheInterceptorV${VERSION}(url, method, deleteAt);\n      CREATE INDEX IF NOT EXISTS idx_cacheInterceptorV${VERSION}_deleteByUrlQuery ON cacheInterceptorV${VERSION}(deleteAt);\n    `)\n\n    this.#getValuesQuery = this.#db.prepare(`\n      SELECT\n        id,\n        body,\n        deleteAt,\n        statusCode,\n        statusMessage,\n        headers,\n        etag,\n        cacheControlDirectives,\n        vary,\n        cachedAt,\n        staleAt\n      FROM cacheInterceptorV${VERSION}\n      WHERE\n        url = ?\n        AND method = ?\n      ORDER BY\n        deleteAt ASC\n    `)\n\n    this.#updateValueQuery = this.#db.prepare(`\n      UPDATE cacheInterceptorV${VERSION} SET\n        body = ?,\n        deleteAt = ?,\n        statusCode = ?,\n        statusMessage = ?,\n        headers = ?,\n        etag = ?,\n        cacheControlDirectives = ?,\n        cachedAt = ?,\n        staleAt = ?\n      WHERE\n        id = ?\n    `)\n\n    this.#insertValueQuery = this.#db.prepare(`\n      INSERT INTO cacheInterceptorV${VERSION} (\n        url,\n        method,\n        body,\n        deleteAt,\n        statusCode,\n        statusMessage,\n        headers,\n        etag,\n        cacheControlDirectives,\n        vary,\n        cachedAt,\n        staleAt\n      ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n    `)\n\n    this.#deleteByUrlQuery = this.#db.prepare(\n      `DELETE FROM cacheInterceptorV${VERSION} WHERE url = ?`\n    )\n\n    this.#countEntriesQuery = this.#db.prepare(\n      `SELECT COUNT(*) AS total FROM cacheInterceptorV${VERSION}`\n    )\n\n    this.#deleteExpiredValuesQuery = this.#db.prepare(\n      `DELETE FROM cacheInterceptorV${VERSION} WHERE deleteAt <= ?`\n    )\n\n    this.#deleteOldValuesQuery = this.#maxCount === Infinity\n      ? null\n      : this.#db.prepare(`\n        DELETE FROM cacheInterceptorV${VERSION}\n        WHERE id IN (\n          SELECT\n            id\n          FROM cacheInterceptorV${VERSION}\n          ORDER BY cachedAt DESC\n          LIMIT ?\n        )\n      `)\n  }\n\n  close () {\n    this.#db.close()\n  }\n\n  /**\n   * @param {import('../../types/cache-interceptor.d.ts').default.CacheKey} key\n   * @returns {(import('../../types/cache-interceptor.d.ts').default.GetResult & { body?: Buffer }) | undefined}\n   */\n  get (key) {\n    assertCacheKey(key)\n\n    const value = this.#findValue(key)\n    return value\n      ? {\n          body: value.body ? Buffer.from(value.body.buffer, value.body.byteOffset, value.body.byteLength) : undefined,\n          statusCode: value.statusCode,\n          statusMessage: value.statusMessage,\n          headers: value.headers ? JSON.parse(value.headers) : undefined,\n          etag: value.etag ? value.etag : undefined,\n          vary: value.vary ? JSON.parse(value.vary) : undefined,\n          cacheControlDirectives: value.cacheControlDirectives\n            ? JSON.parse(value.cacheControlDirectives)\n            : undefined,\n          cachedAt: value.cachedAt,\n          staleAt: value.staleAt,\n          deleteAt: value.deleteAt\n        }\n      : undefined\n  }\n\n  /**\n   * @param {import('../../types/cache-interceptor.d.ts').default.CacheKey} key\n   * @param {import('../../types/cache-interceptor.d.ts').default.CacheValue & { body: null | Buffer | Array<Buffer>}} value\n   */\n  set (key, value) {\n    assertCacheKey(key)\n\n    const url = this.#makeValueUrl(key)\n    const body = Array.isArray(value.body) ? Buffer.concat(value.body) : value.body\n    const size = body?.byteLength\n\n    if (size && size > this.#maxEntrySize) {\n      return\n    }\n\n    const existingValue = this.#findValue(key, true)\n    if (existingValue) {\n      // Updating an existing response, let's overwrite it\n      this.#updateValueQuery.run(\n        body,\n        value.deleteAt,\n        value.statusCode,\n        value.statusMessage,\n        value.headers ? JSON.stringify(value.headers) : null,\n        value.etag ? value.etag : null,\n        value.cacheControlDirectives ? JSON.stringify(value.cacheControlDirectives) : null,\n        value.cachedAt,\n        value.staleAt,\n        existingValue.id\n      )\n    } else {\n      this.#prune()\n      // New response, let's insert it\n      this.#insertValueQuery.run(\n        url,\n        key.method,\n        body,\n        value.deleteAt,\n        value.statusCode,\n        value.statusMessage,\n        value.headers ? JSON.stringify(value.headers) : null,\n        value.etag ? value.etag : null,\n        value.cacheControlDirectives ? JSON.stringify(value.cacheControlDirectives) : null,\n        value.vary ? JSON.stringify(value.vary) : null,\n        value.cachedAt,\n        value.staleAt\n      )\n    }\n  }\n\n  /**\n   * @param {import('../../types/cache-interceptor.d.ts').default.CacheKey} key\n   * @param {import('../../types/cache-interceptor.d.ts').default.CacheValue} value\n   * @returns {Writable | undefined}\n   */\n  createWriteStream (key, value) {\n    assertCacheKey(key)\n    assertCacheValue(value)\n\n    let size = 0\n    /**\n     * @type {Buffer[] | null}\n     */\n    const body = []\n    const store = this\n\n    return new Writable({\n      decodeStrings: true,\n      write (chunk, encoding, callback) {\n        size += chunk.byteLength\n\n        if (size < store.#maxEntrySize) {\n          body.push(chunk)\n        } else {\n          this.destroy()\n        }\n\n        callback()\n      },\n      final (callback) {\n        store.set(key, { ...value, body })\n        callback()\n      }\n    })\n  }\n\n  /**\n   * @param {import('../../types/cache-interceptor.d.ts').default.CacheKey} key\n   */\n  delete (key) {\n    if (typeof key !== 'object') {\n      throw new TypeError(`expected key to be object, got ${typeof key}`)\n    }\n\n    this.#deleteByUrlQuery.run(this.#makeValueUrl(key))\n  }\n\n  #prune () {\n    if (Number.isFinite(this.#maxCount) && this.size <= this.#maxCount) {\n      return 0\n    }\n\n    {\n      const removed = this.#deleteExpiredValuesQuery.run(Date.now()).changes\n      if (removed) {\n        return removed\n      }\n    }\n\n    {\n      const removed = this.#deleteOldValuesQuery?.run(Math.max(Math.floor(this.#maxCount * 0.1), 1)).changes\n      if (removed) {\n        return removed\n      }\n    }\n\n    return 0\n  }\n\n  /**\n   * Counts the number of rows in the cache\n   * @returns {Number}\n   */\n  get size () {\n    const { total } = this.#countEntriesQuery.get()\n    return total\n  }\n\n  /**\n   * @param {import('../../types/cache-interceptor.d.ts').default.CacheKey} key\n   * @returns {string}\n   */\n  #makeValueUrl (key) {\n    return `${key.origin}/${key.path}`\n  }\n\n  /**\n   * @param {import('../../types/cache-interceptor.d.ts').default.CacheKey} key\n   * @param {boolean} [canBeExpired=false]\n   * @returns {SqliteStoreValue | undefined}\n   */\n  #findValue (key, canBeExpired = false) {\n    const url = this.#makeValueUrl(key)\n    const { headers, method } = key\n\n    /**\n     * @type {SqliteStoreValue[]}\n     */\n    const values = this.#getValuesQuery.all(url, method)\n\n    if (values.length === 0) {\n      return undefined\n    }\n\n    const now = Date.now()\n    for (const value of values) {\n      if (now >= value.deleteAt && !canBeExpired) {\n        return undefined\n      }\n\n      let matches = true\n\n      if (value.vary) {\n        const vary = JSON.parse(value.vary)\n\n        for (const header in vary) {\n          if (!headerValueEquals(headers[header], vary[header])) {\n            matches = false\n            break\n          }\n        }\n      }\n\n      if (matches) {\n        return value\n      }\n    }\n\n    return undefined\n  }\n}\n\n/**\n * @param {string|string[]|null|undefined} lhs\n * @param {string|string[]|null|undefined} rhs\n * @returns {boolean}\n */\nfunction headerValueEquals (lhs, rhs) {\n  if (lhs == null && rhs == null) {\n    return true\n  }\n\n  if ((lhs == null && rhs != null) ||\n      (lhs != null && rhs == null)) {\n    return false\n  }\n\n  if (Array.isArray(lhs) && Array.isArray(rhs)) {\n    if (lhs.length !== rhs.length) {\n      return false\n    }\n\n    return lhs.every((x, i) => x === rhs[i])\n  }\n\n  return lhs === rhs\n}\n", "// https://github.com/Ethan-Arrowood/undici-fetch\n\n'use strict'\n\nconst { kConstruct } = require('../../core/symbols')\nconst { kEnumerableProperty } = require('../../core/util')\nconst {\n  iteratorMixin,\n  isValidHeaderName,\n  isValidHeaderValue\n} = require('./util')\nconst { webidl } = require('../webidl')\nconst assert = require('node:assert')\nconst util = require('node:util')\n\n/**\n * @param {number} code\n * @returns {code is (0x0a | 0x0d | 0x09 | 0x20)}\n */\nfunction isHTTPWhiteSpaceCharCode (code) {\n  return code === 0x0a || code === 0x0d || code === 0x09 || code === 0x20\n}\n\n/**\n * @see https://fetch.spec.whatwg.org/#concept-header-value-normalize\n * @param {string} potentialValue\n * @returns {string}\n */\nfunction headerValueNormalize (potentialValue) {\n  //  To normalize a byte sequence potentialValue, remove\n  //  any leading and trailing HTTP whitespace bytes from\n  //  potentialValue.\n  let i = 0; let j = potentialValue.length\n\n  while (j > i && isHTTPWhiteSpaceCharCode(potentialValue.charCodeAt(j - 1))) --j\n  while (j > i && isHTTPWhiteSpaceCharCode(potentialValue.charCodeAt(i))) ++i\n\n  return i === 0 && j === potentialValue.length ? potentialValue : potentialValue.substring(i, j)\n}\n\n/**\n * @param {Headers} headers\n * @param {Array|Object} object\n */\nfunction fill (headers, object) {\n  // To fill a Headers object headers with a given object object, run these steps:\n\n  // 1. If object is a sequence, then for each header in object:\n  // Note: webidl conversion to array has already been done.\n  if (Array.isArray(object)) {\n    for (let i = 0; i < object.length; ++i) {\n      const header = object[i]\n      // 1. If header does not contain exactly two items, then throw a TypeError.\n      if (header.length !== 2) {\n        throw webidl.errors.exception({\n          header: 'Headers constructor',\n          message: `expected name/value pair to be length 2, found ${header.length}.`\n        })\n      }\n\n      // 2. Append (header\u2019s first item, header\u2019s second item) to headers.\n      appendHeader(headers, header[0], header[1])\n    }\n  } else if (typeof object === 'object' && object !== null) {\n    // Note: null should throw\n\n    // 2. Otherwise, object is a record, then for each key \u2192 value in object,\n    //    append (key, value) to headers\n    const keys = Object.keys(object)\n    for (let i = 0; i < keys.length; ++i) {\n      appendHeader(headers, keys[i], object[keys[i]])\n    }\n  } else {\n    throw webidl.errors.conversionFailed({\n      prefix: 'Headers constructor',\n      argument: 'Argument 1',\n      types: ['sequence<sequence<ByteString>>', 'record<ByteString, ByteString>']\n    })\n  }\n}\n\n/**\n * @see https://fetch.spec.whatwg.org/#concept-headers-append\n * @param {Headers} headers\n * @param {string} name\n * @param {string} value\n */\nfunction appendHeader (headers, name, value) {\n  // 1. Normalize value.\n  value = headerValueNormalize(value)\n\n  // 2. If name is not a header name or value is not a\n  //    header value, then throw a TypeError.\n  if (!isValidHeaderName(name)) {\n    throw webidl.errors.invalidArgument({\n      prefix: 'Headers.append',\n      value: name,\n      type: 'header name'\n    })\n  } else if (!isValidHeaderValue(value)) {\n    throw webidl.errors.invalidArgument({\n      prefix: 'Headers.append',\n      value,\n      type: 'header value'\n    })\n  }\n\n  // 3. If headers\u2019s guard is \"immutable\", then throw a TypeError.\n  // 4. Otherwise, if headers\u2019s guard is \"request\" and name is a\n  //    forbidden header name, return.\n  // 5. Otherwise, if headers\u2019s guard is \"request-no-cors\":\n  //    TODO\n  // Note: undici does not implement forbidden header names\n  if (getHeadersGuard(headers) === 'immutable') {\n    throw new TypeError('immutable')\n  }\n\n  // 6. Otherwise, if headers\u2019s guard is \"response\" and name is a\n  //    forbidden response-header name, return.\n\n  // 7. Append (name, value) to headers\u2019s header list.\n  return getHeadersList(headers).append(name, value, false)\n\n  // 8. If headers\u2019s guard is \"request-no-cors\", then remove\n  //    privileged no-CORS request headers from headers\n}\n\n// https://fetch.spec.whatwg.org/#concept-header-list-sort-and-combine\n/**\n * @param {Headers} target\n */\nfunction headersListSortAndCombine (target) {\n  const headersList = getHeadersList(target)\n\n  if (!headersList) {\n    return []\n  }\n\n  if (headersList.sortedMap) {\n    return headersList.sortedMap\n  }\n\n  // 1. Let headers be an empty list of headers with the key being the name\n  //    and value the value.\n  const headers = []\n\n  // 2. Let names be the result of convert header names to a sorted-lowercase\n  //    set with all the names of the headers in list.\n  const names = headersList.toSortedArray()\n\n  const cookies = headersList.cookies\n\n  // fast-path\n  if (cookies === null || cookies.length === 1) {\n    // Note: The non-null assertion of value has already been done by `HeadersList#toSortedArray`\n    return (headersList.sortedMap = names)\n  }\n\n  // 3. For each name of names:\n  for (let i = 0; i < names.length; ++i) {\n    const { 0: name, 1: value } = names[i]\n    // 1. If name is `set-cookie`, then:\n    if (name === 'set-cookie') {\n      // 1. Let values be a list of all values of headers in list whose name\n      //    is a byte-case-insensitive match for name, in order.\n\n      // 2. For each value of values:\n      // 1. Append (name, value) to headers.\n      for (let j = 0; j < cookies.length; ++j) {\n        headers.push([name, cookies[j]])\n      }\n    } else {\n      // 2. Otherwise:\n\n      // 1. Let value be the result of getting name from list.\n\n      // 2. Assert: value is non-null.\n      // Note: This operation was done by `HeadersList#toSortedArray`.\n\n      // 3. Append (name, value) to headers.\n      headers.push([name, value])\n    }\n  }\n\n  // 4. Return headers.\n  return (headersList.sortedMap = headers)\n}\n\nfunction compareHeaderName (a, b) {\n  return a[0] < b[0] ? -1 : 1\n}\n\nclass HeadersList {\n  /** @type {[string, string][]|null} */\n  cookies = null\n\n  sortedMap\n  headersMap\n\n  constructor (init) {\n    if (init instanceof HeadersList) {\n      this.headersMap = new Map(init.headersMap)\n      this.sortedMap = init.sortedMap\n      this.cookies = init.cookies === null ? null : [...init.cookies]\n    } else {\n      this.headersMap = new Map(init)\n      this.sortedMap = null\n    }\n  }\n\n  /**\n   * @see https://fetch.spec.whatwg.org/#header-list-contains\n   * @param {string} name\n   * @param {boolean} isLowerCase\n   */\n  contains (name, isLowerCase) {\n    // A header list list contains a header name name if list\n    // contains a header whose name is a byte-case-insensitive\n    // match for name.\n\n    return this.headersMap.has(isLowerCase ? name : name.toLowerCase())\n  }\n\n  clear () {\n    this.headersMap.clear()\n    this.sortedMap = null\n    this.cookies = null\n  }\n\n  /**\n   * @see https://fetch.spec.whatwg.org/#concept-header-list-append\n   * @param {string} name\n   * @param {string} value\n   * @param {boolean} isLowerCase\n   */\n  append (name, value, isLowerCase) {\n    this.sortedMap = null\n\n    // 1. If list contains name, then set name to the first such\n    //    header\u2019s name.\n    const lowercaseName = isLowerCase ? name : name.toLowerCase()\n    const exists = this.headersMap.get(lowercaseName)\n\n    // 2. Append (name, value) to list.\n    if (exists) {\n      const delimiter = lowercaseName === 'cookie' ? '; ' : ', '\n      this.headersMap.set(lowercaseName, {\n        name: exists.name,\n        value: `${exists.value}${delimiter}${value}`\n      })\n    } else {\n      this.headersMap.set(lowercaseName, { name, value })\n    }\n\n    if (lowercaseName === 'set-cookie') {\n      (this.cookies ??= []).push(value)\n    }\n  }\n\n  /**\n   * @see https://fetch.spec.whatwg.org/#concept-header-list-set\n   * @param {string} name\n   * @param {string} value\n   * @param {boolean} isLowerCase\n   */\n  set (name, value, isLowerCase) {\n    this.sortedMap = null\n    const lowercaseName = isLowerCase ? name : name.toLowerCase()\n\n    if (lowercaseName === 'set-cookie') {\n      this.cookies = [value]\n    }\n\n    // 1. If list contains name, then set the value of\n    //    the first such header to value and remove the\n    //    others.\n    // 2. Otherwise, append header (name, value) to list.\n    this.headersMap.set(lowercaseName, { name, value })\n  }\n\n  /**\n   * @see https://fetch.spec.whatwg.org/#concept-header-list-delete\n   * @param {string} name\n   * @param {boolean} isLowerCase\n   */\n  delete (name, isLowerCase) {\n    this.sortedMap = null\n    if (!isLowerCase) name = name.toLowerCase()\n\n    if (name === 'set-cookie') {\n      this.cookies = null\n    }\n\n    this.headersMap.delete(name)\n  }\n\n  /**\n   * @see https://fetch.spec.whatwg.org/#concept-header-list-get\n   * @param {string} name\n   * @param {boolean} isLowerCase\n   * @returns {string | null}\n   */\n  get (name, isLowerCase) {\n    // 1. If list does not contain name, then return null.\n    // 2. Return the values of all headers in list whose name\n    //    is a byte-case-insensitive match for name,\n    //    separated from each other by 0x2C 0x20, in order.\n    return this.headersMap.get(isLowerCase ? name : name.toLowerCase())?.value ?? null\n  }\n\n  * [Symbol.iterator] () {\n    // use the lowercased name\n    for (const { 0: name, 1: { value } } of this.headersMap) {\n      yield [name, value]\n    }\n  }\n\n  get entries () {\n    const headers = {}\n\n    if (this.headersMap.size !== 0) {\n      for (const { name, value } of this.headersMap.values()) {\n        headers[name] = value\n      }\n    }\n\n    return headers\n  }\n\n  rawValues () {\n    return this.headersMap.values()\n  }\n\n  get entriesList () {\n    const headers = []\n\n    if (this.headersMap.size !== 0) {\n      for (const { 0: lowerName, 1: { name, value } } of this.headersMap) {\n        if (lowerName === 'set-cookie') {\n          for (const cookie of this.cookies) {\n            headers.push([name, cookie])\n          }\n        } else {\n          headers.push([name, value])\n        }\n      }\n    }\n\n    return headers\n  }\n\n  // https://fetch.spec.whatwg.org/#convert-header-names-to-a-sorted-lowercase-set\n  toSortedArray () {\n    const size = this.headersMap.size\n    const array = new Array(size)\n    // In most cases, you will use the fast-path.\n    // fast-path: Use binary insertion sort for small arrays.\n    if (size <= 32) {\n      if (size === 0) {\n        // If empty, it is an empty array. To avoid the first index assignment.\n        return array\n      }\n      // Improve performance by unrolling loop and avoiding double-loop.\n      // Double-loop-less version of the binary insertion sort.\n      const iterator = this.headersMap[Symbol.iterator]()\n      const firstValue = iterator.next().value\n      // set [name, value] to first index.\n      array[0] = [firstValue[0], firstValue[1].value]\n      // https://fetch.spec.whatwg.org/#concept-header-list-sort-and-combine\n      // 3.2.2. Assert: value is non-null.\n      assert(firstValue[1].value !== null)\n      for (\n        let i = 1, j = 0, right = 0, left = 0, pivot = 0, x, value;\n        i < size;\n        ++i\n      ) {\n        // get next value\n        value = iterator.next().value\n        // set [name, value] to current index.\n        x = array[i] = [value[0], value[1].value]\n        // https://fetch.spec.whatwg.org/#concept-header-list-sort-and-combine\n        // 3.2.2. Assert: value is non-null.\n        assert(x[1] !== null)\n        left = 0\n        right = i\n        // binary search\n        while (left < right) {\n          // middle index\n          pivot = left + ((right - left) >> 1)\n          // compare header name\n          if (array[pivot][0] <= x[0]) {\n            left = pivot + 1\n          } else {\n            right = pivot\n          }\n        }\n        if (i !== pivot) {\n          j = i\n          while (j > left) {\n            array[j] = array[--j]\n          }\n          array[left] = x\n        }\n      }\n      /* c8 ignore next 4 */\n      if (!iterator.next().done) {\n        // This is for debugging and will never be called.\n        throw new TypeError('Unreachable')\n      }\n      return array\n    } else {\n      // This case would be a rare occurrence.\n      // slow-path: fallback\n      let i = 0\n      for (const { 0: name, 1: { value } } of this.headersMap) {\n        array[i++] = [name, value]\n        // https://fetch.spec.whatwg.org/#concept-header-list-sort-and-combine\n        // 3.2.2. Assert: value is non-null.\n        assert(value !== null)\n      }\n      return array.sort(compareHeaderName)\n    }\n  }\n}\n\n// https://fetch.spec.whatwg.org/#headers-class\nclass Headers {\n  #guard\n  /**\n   * @type {HeadersList}\n   */\n  #headersList\n\n  /**\n   * @param {HeadersInit|Symbol} [init]\n   * @returns\n   */\n  constructor (init = undefined) {\n    webidl.util.markAsUncloneable(this)\n\n    if (init === kConstruct) {\n      return\n    }\n\n    this.#headersList = new HeadersList()\n\n    // The new Headers(init) constructor steps are:\n\n    // 1. Set this\u2019s guard to \"none\".\n    this.#guard = 'none'\n\n    // 2. If init is given, then fill this with init.\n    if (init !== undefined) {\n      init = webidl.converters.HeadersInit(init, 'Headers constructor', 'init')\n      fill(this, init)\n    }\n  }\n\n  // https://fetch.spec.whatwg.org/#dom-headers-append\n  append (name, value) {\n    webidl.brandCheck(this, Headers)\n\n    webidl.argumentLengthCheck(arguments, 2, 'Headers.append')\n\n    const prefix = 'Headers.append'\n    name = webidl.converters.ByteString(name, prefix, 'name')\n    value = webidl.converters.ByteString(value, prefix, 'value')\n\n    return appendHeader(this, name, value)\n  }\n\n  // https://fetch.spec.whatwg.org/#dom-headers-delete\n  delete (name) {\n    webidl.brandCheck(this, Headers)\n\n    webidl.argumentLengthCheck(arguments, 1, 'Headers.delete')\n\n    const prefix = 'Headers.delete'\n    name = webidl.converters.ByteString(name, prefix, 'name')\n\n    // 1. If name is not a header name, then throw a TypeError.\n    if (!isValidHeaderName(name)) {\n      throw webidl.errors.invalidArgument({\n        prefix: 'Headers.delete',\n        value: name,\n        type: 'header name'\n      })\n    }\n\n    // 2. If this\u2019s guard is \"immutable\", then throw a TypeError.\n    // 3. Otherwise, if this\u2019s guard is \"request\" and name is a\n    //    forbidden header name, return.\n    // 4. Otherwise, if this\u2019s guard is \"request-no-cors\", name\n    //    is not a no-CORS-safelisted request-header name, and\n    //    name is not a privileged no-CORS request-header name,\n    //    return.\n    // 5. Otherwise, if this\u2019s guard is \"response\" and name is\n    //    a forbidden response-header name, return.\n    // Note: undici does not implement forbidden header names\n    if (this.#guard === 'immutable') {\n      throw new TypeError('immutable')\n    }\n\n    // 6. If this\u2019s header list does not contain name, then\n    //    return.\n    if (!this.#headersList.contains(name, false)) {\n      return\n    }\n\n    // 7. Delete name from this\u2019s header list.\n    // 8. If this\u2019s guard is \"request-no-cors\", then remove\n    //    privileged no-CORS request headers from this.\n    this.#headersList.delete(name, false)\n  }\n\n  // https://fetch.spec.whatwg.org/#dom-headers-get\n  get (name) {\n    webidl.brandCheck(this, Headers)\n\n    webidl.argumentLengthCheck(arguments, 1, 'Headers.get')\n\n    const prefix = 'Headers.get'\n    name = webidl.converters.ByteString(name, prefix, 'name')\n\n    // 1. If name is not a header name, then throw a TypeError.\n    if (!isValidHeaderName(name)) {\n      throw webidl.errors.invalidArgument({\n        prefix,\n        value: name,\n        type: 'header name'\n      })\n    }\n\n    // 2. Return the result of getting name from this\u2019s header\n    //    list.\n    return this.#headersList.get(name, false)\n  }\n\n  // https://fetch.spec.whatwg.org/#dom-headers-has\n  has (name) {\n    webidl.brandCheck(this, Headers)\n\n    webidl.argumentLengthCheck(arguments, 1, 'Headers.has')\n\n    const prefix = 'Headers.has'\n    name = webidl.converters.ByteString(name, prefix, 'name')\n\n    // 1. If name is not a header name, then throw a TypeError.\n    if (!isValidHeaderName(name)) {\n      throw webidl.errors.invalidArgument({\n        prefix,\n        value: name,\n        type: 'header name'\n      })\n    }\n\n    // 2. Return true if this\u2019s header list contains name;\n    //    otherwise false.\n    return this.#headersList.contains(name, false)\n  }\n\n  // https://fetch.spec.whatwg.org/#dom-headers-set\n  set (name, value) {\n    webidl.brandCheck(this, Headers)\n\n    webidl.argumentLengthCheck(arguments, 2, 'Headers.set')\n\n    const prefix = 'Headers.set'\n    name = webidl.converters.ByteString(name, prefix, 'name')\n    value = webidl.converters.ByteString(value, prefix, 'value')\n\n    // 1. Normalize value.\n    value = headerValueNormalize(value)\n\n    // 2. If name is not a header name or value is not a\n    //    header value, then throw a TypeError.\n    if (!isValidHeaderName(name)) {\n      throw webidl.errors.invalidArgument({\n        prefix,\n        value: name,\n        type: 'header name'\n      })\n    } else if (!isValidHeaderValue(value)) {\n      throw webidl.errors.invalidArgument({\n        prefix,\n        value,\n        type: 'header value'\n      })\n    }\n\n    // 3. If this\u2019s guard is \"immutable\", then throw a TypeError.\n    // 4. Otherwise, if this\u2019s guard is \"request\" and name is a\n    //    forbidden header name, return.\n    // 5. Otherwise, if this\u2019s guard is \"request-no-cors\" and\n    //    name/value is not a no-CORS-safelisted request-header,\n    //    return.\n    // 6. Otherwise, if this\u2019s guard is \"response\" and name is a\n    //    forbidden response-header name, return.\n    // Note: undici does not implement forbidden header names\n    if (this.#guard === 'immutable') {\n      throw new TypeError('immutable')\n    }\n\n    // 7. Set (name, value) in this\u2019s header list.\n    // 8. If this\u2019s guard is \"request-no-cors\", then remove\n    //    privileged no-CORS request headers from this\n    this.#headersList.set(name, value, false)\n  }\n\n  // https://fetch.spec.whatwg.org/#dom-headers-getsetcookie\n  getSetCookie () {\n    webidl.brandCheck(this, Headers)\n\n    // 1. If this\u2019s header list does not contain `Set-Cookie`, then return \u00AB \u00BB.\n    // 2. Return the values of all headers in this\u2019s header list whose name is\n    //    a byte-case-insensitive match for `Set-Cookie`, in order.\n\n    const list = this.#headersList.cookies\n\n    if (list) {\n      return [...list]\n    }\n\n    return []\n  }\n\n  [util.inspect.custom] (depth, options) {\n    options.depth ??= depth\n\n    return `Headers ${util.formatWithOptions(options, this.#headersList.entries)}`\n  }\n\n  static getHeadersGuard (o) {\n    return o.#guard\n  }\n\n  static setHeadersGuard (o, guard) {\n    o.#guard = guard\n  }\n\n  /**\n   * @param {Headers} o\n   */\n  static getHeadersList (o) {\n    return o.#headersList\n  }\n\n  /**\n   * @param {Headers} target\n   * @param {HeadersList} list\n   */\n  static setHeadersList (target, list) {\n    target.#headersList = list\n  }\n}\n\nconst { getHeadersGuard, setHeadersGuard, getHeadersList, setHeadersList } = Headers\nReflect.deleteProperty(Headers, 'getHeadersGuard')\nReflect.deleteProperty(Headers, 'setHeadersGuard')\nReflect.deleteProperty(Headers, 'getHeadersList')\nReflect.deleteProperty(Headers, 'setHeadersList')\n\niteratorMixin('Headers', Headers, headersListSortAndCombine, 0, 1)\n\nObject.defineProperties(Headers.prototype, {\n  append: kEnumerableProperty,\n  delete: kEnumerableProperty,\n  get: kEnumerableProperty,\n  has: kEnumerableProperty,\n  set: kEnumerableProperty,\n  getSetCookie: kEnumerableProperty,\n  [Symbol.toStringTag]: {\n    value: 'Headers',\n    configurable: true\n  },\n  [util.inspect.custom]: {\n    enumerable: false\n  }\n})\n\nwebidl.converters.HeadersInit = function (V, prefix, argument) {\n  if (webidl.util.Type(V) === webidl.util.Types.OBJECT) {\n    const iterator = Reflect.get(V, Symbol.iterator)\n\n    // A work-around to ensure we send the properly-cased Headers when V is a Headers object.\n    // Read https://github.com/nodejs/undici/pull/3159#issuecomment-2075537226 before touching, please.\n    if (!util.types.isProxy(V) && iterator === Headers.prototype.entries) { // Headers object\n      try {\n        return getHeadersList(V).entriesList\n      } catch {\n        // fall-through\n      }\n    }\n\n    if (typeof iterator === 'function') {\n      return webidl.converters['sequence<sequence<ByteString>>'](V, prefix, argument, iterator.bind(V))\n    }\n\n    return webidl.converters['record<ByteString, ByteString>'](V, prefix, argument)\n  }\n\n  throw webidl.errors.conversionFailed({\n    prefix: 'Headers constructor',\n    argument: 'Argument 1',\n    types: ['sequence<sequence<ByteString>>', 'record<ByteString, ByteString>']\n  })\n}\n\nmodule.exports = {\n  fill,\n  // for test.\n  compareHeaderName,\n  Headers,\n  HeadersList,\n  getHeadersGuard,\n  setHeadersGuard,\n  setHeadersList,\n  getHeadersList\n}\n", "'use strict'\n\nconst { Headers, HeadersList, fill, getHeadersGuard, setHeadersGuard, setHeadersList } = require('./headers')\nconst { extractBody, cloneBody, mixinBody, streamRegistry, bodyUnusable } = require('./body')\nconst util = require('../../core/util')\nconst nodeUtil = require('node:util')\nconst { kEnumerableProperty } = util\nconst {\n  isValidReasonPhrase,\n  isCancelled,\n  isAborted,\n  isErrorLike,\n  environmentSettingsObject: relevantRealm\n} = require('./util')\nconst {\n  redirectStatusSet,\n  nullBodyStatus\n} = require('./constants')\nconst { webidl } = require('../webidl')\nconst { URLSerializer } = require('./data-url')\nconst { kConstruct } = require('../../core/symbols')\nconst assert = require('node:assert')\nconst { isomorphicEncode, serializeJavascriptValueToJSONString } = require('../infra')\n\nconst textEncoder = new TextEncoder('utf-8')\n\n// https://fetch.spec.whatwg.org/#response-class\nclass Response {\n  /** @type {Headers} */\n  #headers\n\n  #state\n\n  // Creates network error Response.\n  static error () {\n    // The static error() method steps are to return the result of creating a\n    // Response object, given a new network error, \"immutable\", and this\u2019s\n    // relevant Realm.\n    const responseObject = fromInnerResponse(makeNetworkError(), 'immutable')\n\n    return responseObject\n  }\n\n  // https://fetch.spec.whatwg.org/#dom-response-json\n  static json (data, init = undefined) {\n    webidl.argumentLengthCheck(arguments, 1, 'Response.json')\n\n    if (init !== null) {\n      init = webidl.converters.ResponseInit(init)\n    }\n\n    // 1. Let bytes the result of running serialize a JavaScript value to JSON bytes on data.\n    const bytes = textEncoder.encode(\n      serializeJavascriptValueToJSONString(data)\n    )\n\n    // 2. Let body be the result of extracting bytes.\n    const body = extractBody(bytes)\n\n    // 3. Let responseObject be the result of creating a Response object, given a new response,\n    //    \"response\", and this\u2019s relevant Realm.\n    const responseObject = fromInnerResponse(makeResponse({}), 'response')\n\n    // 4. Perform initialize a response given responseObject, init, and (body, \"application/json\").\n    initializeResponse(responseObject, init, { body: body[0], type: 'application/json' })\n\n    // 5. Return responseObject.\n    return responseObject\n  }\n\n  // Creates a redirect Response that redirects to url with status status.\n  static redirect (url, status = 302) {\n    webidl.argumentLengthCheck(arguments, 1, 'Response.redirect')\n\n    url = webidl.converters.USVString(url)\n    status = webidl.converters['unsigned short'](status)\n\n    // 1. Let parsedURL be the result of parsing url with current settings\n    // object\u2019s API base URL.\n    // 2. If parsedURL is failure, then throw a TypeError.\n    // TODO: base-URL?\n    let parsedURL\n    try {\n      parsedURL = new URL(url, relevantRealm.settingsObject.baseUrl)\n    } catch (err) {\n      throw new TypeError(`Failed to parse URL from ${url}`, { cause: err })\n    }\n\n    // 3. If status is not a redirect status, then throw a RangeError.\n    if (!redirectStatusSet.has(status)) {\n      throw new RangeError(`Invalid status code ${status}`)\n    }\n\n    // 4. Let responseObject be the result of creating a Response object,\n    // given a new response, \"immutable\", and this\u2019s relevant Realm.\n    const responseObject = fromInnerResponse(makeResponse({}), 'immutable')\n\n    // 5. Set responseObject\u2019s response\u2019s status to status.\n    responseObject.#state.status = status\n\n    // 6. Let value be parsedURL, serialized and isomorphic encoded.\n    const value = isomorphicEncode(URLSerializer(parsedURL))\n\n    // 7. Append `Location`/value to responseObject\u2019s response\u2019s header list.\n    responseObject.#state.headersList.append('location', value, true)\n\n    // 8. Return responseObject.\n    return responseObject\n  }\n\n  // https://fetch.spec.whatwg.org/#dom-response\n  constructor (body = null, init = undefined) {\n    webidl.util.markAsUncloneable(this)\n\n    if (body === kConstruct) {\n      return\n    }\n\n    if (body !== null) {\n      body = webidl.converters.BodyInit(body, 'Response', 'body')\n    }\n\n    init = webidl.converters.ResponseInit(init)\n\n    // 1. Set this\u2019s response to a new response.\n    this.#state = makeResponse({})\n\n    // 2. Set this\u2019s headers to a new Headers object with this\u2019s relevant\n    // Realm, whose header list is this\u2019s response\u2019s header list and guard\n    // is \"response\".\n    this.#headers = new Headers(kConstruct)\n    setHeadersGuard(this.#headers, 'response')\n    setHeadersList(this.#headers, this.#state.headersList)\n\n    // 3. Let bodyWithType be null.\n    let bodyWithType = null\n\n    // 4. If body is non-null, then set bodyWithType to the result of extracting body.\n    if (body != null) {\n      const [extractedBody, type] = extractBody(body)\n      bodyWithType = { body: extractedBody, type }\n    }\n\n    // 5. Perform initialize a response given this, init, and bodyWithType.\n    initializeResponse(this, init, bodyWithType)\n  }\n\n  // Returns response\u2019s type, e.g., \"cors\".\n  get type () {\n    webidl.brandCheck(this, Response)\n\n    // The type getter steps are to return this\u2019s response\u2019s type.\n    return this.#state.type\n  }\n\n  // Returns response\u2019s URL, if it has one; otherwise the empty string.\n  get url () {\n    webidl.brandCheck(this, Response)\n\n    const urlList = this.#state.urlList\n\n    // The url getter steps are to return the empty string if this\u2019s\n    // response\u2019s URL is null; otherwise this\u2019s response\u2019s URL,\n    // serialized with exclude fragment set to true.\n    const url = urlList[urlList.length - 1] ?? null\n\n    if (url === null) {\n      return ''\n    }\n\n    return URLSerializer(url, true)\n  }\n\n  // Returns whether response was obtained through a redirect.\n  get redirected () {\n    webidl.brandCheck(this, Response)\n\n    // The redirected getter steps are to return true if this\u2019s response\u2019s URL\n    // list has more than one item; otherwise false.\n    return this.#state.urlList.length > 1\n  }\n\n  // Returns response\u2019s status.\n  get status () {\n    webidl.brandCheck(this, Response)\n\n    // The status getter steps are to return this\u2019s response\u2019s status.\n    return this.#state.status\n  }\n\n  // Returns whether response\u2019s status is an ok status.\n  get ok () {\n    webidl.brandCheck(this, Response)\n\n    // The ok getter steps are to return true if this\u2019s response\u2019s status is an\n    // ok status; otherwise false.\n    return this.#state.status >= 200 && this.#state.status <= 299\n  }\n\n  // Returns response\u2019s status message.\n  get statusText () {\n    webidl.brandCheck(this, Response)\n\n    // The statusText getter steps are to return this\u2019s response\u2019s status\n    // message.\n    return this.#state.statusText\n  }\n\n  // Returns response\u2019s headers as Headers.\n  get headers () {\n    webidl.brandCheck(this, Response)\n\n    // The headers getter steps are to return this\u2019s headers.\n    return this.#headers\n  }\n\n  get body () {\n    webidl.brandCheck(this, Response)\n\n    return this.#state.body ? this.#state.body.stream : null\n  }\n\n  get bodyUsed () {\n    webidl.brandCheck(this, Response)\n\n    return !!this.#state.body && util.isDisturbed(this.#state.body.stream)\n  }\n\n  // Returns a clone of response.\n  clone () {\n    webidl.brandCheck(this, Response)\n\n    // 1. If this is unusable, then throw a TypeError.\n    if (bodyUnusable(this.#state)) {\n      throw webidl.errors.exception({\n        header: 'Response.clone',\n        message: 'Body has already been consumed.'\n      })\n    }\n\n    // 2. Let clonedResponse be the result of cloning this\u2019s response.\n    const clonedResponse = cloneResponse(this.#state)\n\n    // Note: To re-register because of a new stream.\n    // Don't set finalizers other than for fetch responses.\n    if (this.#state.urlList.length !== 0 && this.#state.body?.stream) {\n      streamRegistry.register(this, new WeakRef(this.#state.body.stream))\n    }\n\n    // 3. Return the result of creating a Response object, given\n    // clonedResponse, this\u2019s headers\u2019s guard, and this\u2019s relevant Realm.\n    return fromInnerResponse(clonedResponse, getHeadersGuard(this.#headers))\n  }\n\n  [nodeUtil.inspect.custom] (depth, options) {\n    if (options.depth === null) {\n      options.depth = 2\n    }\n\n    options.colors ??= true\n\n    const properties = {\n      status: this.status,\n      statusText: this.statusText,\n      headers: this.headers,\n      body: this.body,\n      bodyUsed: this.bodyUsed,\n      ok: this.ok,\n      redirected: this.redirected,\n      type: this.type,\n      url: this.url\n    }\n\n    return `Response ${nodeUtil.formatWithOptions(options, properties)}`\n  }\n\n  /**\n   * @param {Response} response\n   */\n  static getResponseHeaders (response) {\n    return response.#headers\n  }\n\n  /**\n   * @param {Response} response\n   * @param {Headers} newHeaders\n   */\n  static setResponseHeaders (response, newHeaders) {\n    response.#headers = newHeaders\n  }\n\n  /**\n   * @param {Response} response\n   */\n  static getResponseState (response) {\n    return response.#state\n  }\n\n  /**\n   * @param {Response} response\n   * @param {any} newState\n   */\n  static setResponseState (response, newState) {\n    response.#state = newState\n  }\n}\n\nconst { getResponseHeaders, setResponseHeaders, getResponseState, setResponseState } = Response\nReflect.deleteProperty(Response, 'getResponseHeaders')\nReflect.deleteProperty(Response, 'setResponseHeaders')\nReflect.deleteProperty(Response, 'getResponseState')\nReflect.deleteProperty(Response, 'setResponseState')\n\nmixinBody(Response, getResponseState)\n\nObject.defineProperties(Response.prototype, {\n  type: kEnumerableProperty,\n  url: kEnumerableProperty,\n  status: kEnumerableProperty,\n  ok: kEnumerableProperty,\n  redirected: kEnumerableProperty,\n  statusText: kEnumerableProperty,\n  headers: kEnumerableProperty,\n  clone: kEnumerableProperty,\n  body: kEnumerableProperty,\n  bodyUsed: kEnumerableProperty,\n  [Symbol.toStringTag]: {\n    value: 'Response',\n    configurable: true\n  }\n})\n\nObject.defineProperties(Response, {\n  json: kEnumerableProperty,\n  redirect: kEnumerableProperty,\n  error: kEnumerableProperty\n})\n\n// https://fetch.spec.whatwg.org/#concept-response-clone\nfunction cloneResponse (response) {\n  // To clone a response response, run these steps:\n\n  // 1. If response is a filtered response, then return a new identical\n  // filtered response whose internal response is a clone of response\u2019s\n  // internal response.\n  if (response.internalResponse) {\n    return filterResponse(\n      cloneResponse(response.internalResponse),\n      response.type\n    )\n  }\n\n  // 2. Let newResponse be a copy of response, except for its body.\n  const newResponse = makeResponse({ ...response, body: null })\n\n  // 3. If response\u2019s body is non-null, then set newResponse\u2019s body to the\n  // result of cloning response\u2019s body.\n  if (response.body != null) {\n    newResponse.body = cloneBody(response.body)\n  }\n\n  // 4. Return newResponse.\n  return newResponse\n}\n\nfunction makeResponse (init) {\n  return {\n    aborted: false,\n    rangeRequested: false,\n    timingAllowPassed: false,\n    requestIncludesCredentials: false,\n    type: 'default',\n    status: 200,\n    timingInfo: null,\n    cacheState: '',\n    statusText: '',\n    ...init,\n    headersList: init?.headersList\n      ? new HeadersList(init?.headersList)\n      : new HeadersList(),\n    urlList: init?.urlList ? [...init.urlList] : []\n  }\n}\n\nfunction makeNetworkError (reason) {\n  const isError = isErrorLike(reason)\n  return makeResponse({\n    type: 'error',\n    status: 0,\n    error: isError\n      ? reason\n      : new Error(reason ? String(reason) : reason),\n    aborted: reason && reason.name === 'AbortError'\n  })\n}\n\n// @see https://fetch.spec.whatwg.org/#concept-network-error\nfunction isNetworkError (response) {\n  return (\n    // A network error is a response whose type is \"error\",\n    response.type === 'error' &&\n    // status is 0\n    response.status === 0\n  )\n}\n\nfunction makeFilteredResponse (response, state) {\n  state = {\n    internalResponse: response,\n    ...state\n  }\n\n  return new Proxy(response, {\n    get (target, p) {\n      return p in state ? state[p] : target[p]\n    },\n    set (target, p, value) {\n      assert(!(p in state))\n      target[p] = value\n      return true\n    }\n  })\n}\n\n// https://fetch.spec.whatwg.org/#concept-filtered-response\nfunction filterResponse (response, type) {\n  // Set response to the following filtered response with response as its\n  // internal response, depending on request\u2019s response tainting:\n  if (type === 'basic') {\n    // A basic filtered response is a filtered response whose type is \"basic\"\n    // and header list excludes any headers in internal response\u2019s header list\n    // whose name is a forbidden response-header name.\n\n    // Note: undici does not implement forbidden response-header names\n    return makeFilteredResponse(response, {\n      type: 'basic',\n      headersList: response.headersList\n    })\n  } else if (type === 'cors') {\n    // A CORS filtered response is a filtered response whose type is \"cors\"\n    // and header list excludes any headers in internal response\u2019s header\n    // list whose name is not a CORS-safelisted response-header name, given\n    // internal response\u2019s CORS-exposed header-name list.\n\n    // Note: undici does not implement CORS-safelisted response-header names\n    return makeFilteredResponse(response, {\n      type: 'cors',\n      headersList: response.headersList\n    })\n  } else if (type === 'opaque') {\n    // An opaque filtered response is a filtered response whose type is\n    // \"opaque\", URL list is the empty list, status is 0, status message\n    // is the empty byte sequence, header list is empty, and body is null.\n\n    return makeFilteredResponse(response, {\n      type: 'opaque',\n      urlList: [],\n      status: 0,\n      statusText: '',\n      body: null\n    })\n  } else if (type === 'opaqueredirect') {\n    // An opaque-redirect filtered response is a filtered response whose type\n    // is \"opaqueredirect\", status is 0, status message is the empty byte\n    // sequence, header list is empty, and body is null.\n\n    return makeFilteredResponse(response, {\n      type: 'opaqueredirect',\n      status: 0,\n      statusText: '',\n      headersList: [],\n      body: null\n    })\n  } else {\n    assert(false)\n  }\n}\n\n// https://fetch.spec.whatwg.org/#appropriate-network-error\nfunction makeAppropriateNetworkError (fetchParams, err = null) {\n  // 1. Assert: fetchParams is canceled.\n  assert(isCancelled(fetchParams))\n\n  // 2. Return an aborted network error if fetchParams is aborted;\n  // otherwise return a network error.\n  return isAborted(fetchParams)\n    ? makeNetworkError(Object.assign(new DOMException('The operation was aborted.', 'AbortError'), { cause: err }))\n    : makeNetworkError(Object.assign(new DOMException('Request was cancelled.'), { cause: err }))\n}\n\n// https://whatpr.org/fetch/1392.html#initialize-a-response\nfunction initializeResponse (response, init, body) {\n  // 1. If init[\"status\"] is not in the range 200 to 599, inclusive, then\n  //    throw a RangeError.\n  if (init.status !== null && (init.status < 200 || init.status > 599)) {\n    throw new RangeError('init[\"status\"] must be in the range of 200 to 599, inclusive.')\n  }\n\n  // 2. If init[\"statusText\"] does not match the reason-phrase token production,\n  //    then throw a TypeError.\n  if ('statusText' in init && init.statusText != null) {\n    // See, https://datatracker.ietf.org/doc/html/rfc7230#section-3.1.2:\n    //   reason-phrase  = *( HTAB / SP / VCHAR / obs-text )\n    if (!isValidReasonPhrase(String(init.statusText))) {\n      throw new TypeError('Invalid statusText')\n    }\n  }\n\n  // 3. Set response\u2019s response\u2019s status to init[\"status\"].\n  if ('status' in init && init.status != null) {\n    getResponseState(response).status = init.status\n  }\n\n  // 4. Set response\u2019s response\u2019s status message to init[\"statusText\"].\n  if ('statusText' in init && init.statusText != null) {\n    getResponseState(response).statusText = init.statusText\n  }\n\n  // 5. If init[\"headers\"] exists, then fill response\u2019s headers with init[\"headers\"].\n  if ('headers' in init && init.headers != null) {\n    fill(getResponseHeaders(response), init.headers)\n  }\n\n  // 6. If body was given, then:\n  if (body) {\n    // 1. If response's status is a null body status, then throw a TypeError.\n    if (nullBodyStatus.includes(response.status)) {\n      throw webidl.errors.exception({\n        header: 'Response constructor',\n        message: `Invalid response status code ${response.status}`\n      })\n    }\n\n    // 2. Set response's body to body's body.\n    getResponseState(response).body = body.body\n\n    // 3. If body's type is non-null and response's header list does not contain\n    //    `Content-Type`, then append (`Content-Type`, body's type) to response's header list.\n    if (body.type != null && !getResponseState(response).headersList.contains('content-type', true)) {\n      getResponseState(response).headersList.append('content-type', body.type, true)\n    }\n  }\n}\n\n/**\n * @see https://fetch.spec.whatwg.org/#response-create\n * @param {any} innerResponse\n * @param {'request' | 'immutable' | 'request-no-cors' | 'response' | 'none'} guard\n * @returns {Response}\n */\nfunction fromInnerResponse (innerResponse, guard) {\n  const response = new Response(kConstruct)\n  setResponseState(response, innerResponse)\n  const headers = new Headers(kConstruct)\n  setResponseHeaders(response, headers)\n  setHeadersList(headers, innerResponse.headersList)\n  setHeadersGuard(headers, guard)\n\n  // Note: If innerResponse's urlList contains a URL, it is a fetch response.\n  if (innerResponse.urlList.length !== 0 && innerResponse.body?.stream) {\n    // If the target (response) is reclaimed, the cleanup callback may be called at some point with\n    // the held value provided for it (innerResponse.body.stream). The held value can be any value:\n    // a primitive or an object, even undefined. If the held value is an object, the registry keeps\n    // a strong reference to it (so it can pass it to the cleanup callback later). Reworded from\n    // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/FinalizationRegistry\n    streamRegistry.register(response, new WeakRef(innerResponse.body.stream))\n  }\n\n  return response\n}\n\n// https://fetch.spec.whatwg.org/#typedefdef-xmlhttprequestbodyinit\nwebidl.converters.XMLHttpRequestBodyInit = function (V, prefix, name) {\n  if (typeof V === 'string') {\n    return webidl.converters.USVString(V, prefix, name)\n  }\n\n  if (webidl.is.Blob(V)) {\n    return V\n  }\n\n  if (webidl.is.BufferSource(V)) {\n    return V\n  }\n\n  if (webidl.is.FormData(V)) {\n    return V\n  }\n\n  if (webidl.is.URLSearchParams(V)) {\n    return V\n  }\n\n  return webidl.converters.DOMString(V, prefix, name)\n}\n\n// https://fetch.spec.whatwg.org/#bodyinit\nwebidl.converters.BodyInit = function (V, prefix, argument) {\n  if (webidl.is.ReadableStream(V)) {\n    return V\n  }\n\n  // Note: the spec doesn't include async iterables,\n  // this is an undici extension.\n  if (V?.[Symbol.asyncIterator]) {\n    return V\n  }\n\n  return webidl.converters.XMLHttpRequestBodyInit(V, prefix, argument)\n}\n\nwebidl.converters.ResponseInit = webidl.dictionaryConverter([\n  {\n    key: 'status',\n    converter: webidl.converters['unsigned short'],\n    defaultValue: () => 200\n  },\n  {\n    key: 'statusText',\n    converter: webidl.converters.ByteString,\n    defaultValue: () => ''\n  },\n  {\n    key: 'headers',\n    converter: webidl.converters.HeadersInit\n  }\n])\n\nwebidl.is.Response = webidl.util.MakeTypeAssertion(Response)\n\nmodule.exports = {\n  isNetworkError,\n  makeNetworkError,\n  makeResponse,\n  makeAppropriateNetworkError,\n  filterResponse,\n  Response,\n  cloneResponse,\n  fromInnerResponse,\n  getResponseState\n}\n", "/* globals AbortController */\n\n'use strict'\n\nconst { extractBody, mixinBody, cloneBody, bodyUnusable } = require('./body')\nconst { Headers, fill: fillHeaders, HeadersList, setHeadersGuard, getHeadersGuard, setHeadersList, getHeadersList } = require('./headers')\nconst util = require('../../core/util')\nconst nodeUtil = require('node:util')\nconst {\n  isValidHTTPToken,\n  sameOrigin,\n  environmentSettingsObject\n} = require('./util')\nconst {\n  forbiddenMethodsSet,\n  corsSafeListedMethodsSet,\n  referrerPolicy,\n  requestRedirect,\n  requestMode,\n  requestCredentials,\n  requestCache,\n  requestDuplex\n} = require('./constants')\nconst { kEnumerableProperty, normalizedMethodRecordsBase, normalizedMethodRecords } = util\nconst { webidl } = require('../webidl')\nconst { URLSerializer } = require('./data-url')\nconst { kConstruct } = require('../../core/symbols')\nconst assert = require('node:assert')\nconst { getMaxListeners, setMaxListeners, defaultMaxListeners } = require('node:events')\n\nconst kAbortController = Symbol('abortController')\n\nconst requestFinalizer = new FinalizationRegistry(({ signal, abort }) => {\n  signal.removeEventListener('abort', abort)\n})\n\nconst dependentControllerMap = new WeakMap()\n\nlet abortSignalHasEventHandlerLeakWarning\n\ntry {\n  abortSignalHasEventHandlerLeakWarning = getMaxListeners(new AbortController().signal) > 0\n} catch {\n  abortSignalHasEventHandlerLeakWarning = false\n}\n\nfunction buildAbort (acRef) {\n  return abort\n\n  function abort () {\n    const ac = acRef.deref()\n    if (ac !== undefined) {\n      // Currently, there is a problem with FinalizationRegistry.\n      // https://github.com/nodejs/node/issues/49344\n      // https://github.com/nodejs/node/issues/47748\n      // In the case of abort, the first step is to unregister from it.\n      // If the controller can refer to it, it is still registered.\n      // It will be removed in the future.\n      requestFinalizer.unregister(abort)\n\n      // Unsubscribe a listener.\n      // FinalizationRegistry will no longer be called, so this must be done.\n      this.removeEventListener('abort', abort)\n\n      ac.abort(this.reason)\n\n      const controllerList = dependentControllerMap.get(ac.signal)\n\n      if (controllerList !== undefined) {\n        if (controllerList.size !== 0) {\n          for (const ref of controllerList) {\n            const ctrl = ref.deref()\n            if (ctrl !== undefined) {\n              ctrl.abort(this.reason)\n            }\n          }\n          controllerList.clear()\n        }\n        dependentControllerMap.delete(ac.signal)\n      }\n    }\n  }\n}\n\nlet patchMethodWarning = false\n\n// https://fetch.spec.whatwg.org/#request-class\nclass Request {\n  /** @type {AbortSignal} */\n  #signal\n\n  /** @type {import('../../dispatcher/dispatcher')} */\n  #dispatcher\n\n  /** @type {Headers} */\n  #headers\n\n  #state\n\n  // https://fetch.spec.whatwg.org/#dom-request\n  constructor (input, init = undefined) {\n    webidl.util.markAsUncloneable(this)\n\n    if (input === kConstruct) {\n      return\n    }\n\n    const prefix = 'Request constructor'\n    webidl.argumentLengthCheck(arguments, 1, prefix)\n\n    input = webidl.converters.RequestInfo(input)\n    init = webidl.converters.RequestInit(init)\n\n    // 1. Let request be null.\n    let request = null\n\n    // 2. Let fallbackMode be null.\n    let fallbackMode = null\n\n    // 3. Let baseURL be this\u2019s relevant settings object\u2019s API base URL.\n    const baseUrl = environmentSettingsObject.settingsObject.baseUrl\n\n    // 4. Let signal be null.\n    let signal = null\n\n    // 5. If input is a string, then:\n    if (typeof input === 'string') {\n      this.#dispatcher = init.dispatcher\n\n      // 1. Let parsedURL be the result of parsing input with baseURL.\n      // 2. If parsedURL is failure, then throw a TypeError.\n      let parsedURL\n      try {\n        parsedURL = new URL(input, baseUrl)\n      } catch (err) {\n        throw new TypeError('Failed to parse URL from ' + input, { cause: err })\n      }\n\n      // 3. If parsedURL includes credentials, then throw a TypeError.\n      if (parsedURL.username || parsedURL.password) {\n        throw new TypeError(\n          'Request cannot be constructed from a URL that includes credentials: ' +\n            input\n        )\n      }\n\n      // 4. Set request to a new request whose URL is parsedURL.\n      request = makeRequest({ urlList: [parsedURL] })\n\n      // 5. Set fallbackMode to \"cors\".\n      fallbackMode = 'cors'\n    } else {\n      // 6. Otherwise:\n\n      // 7. Assert: input is a Request object.\n      assert(webidl.is.Request(input))\n\n      // 8. Set request to input\u2019s request.\n      request = input.#state\n\n      // 9. Set signal to input\u2019s signal.\n      signal = input.#signal\n\n      this.#dispatcher = init.dispatcher || input.#dispatcher\n    }\n\n    // 7. Let origin be this\u2019s relevant settings object\u2019s origin.\n    const origin = environmentSettingsObject.settingsObject.origin\n\n    // 8. Let window be \"client\".\n    let window = 'client'\n\n    // 9. If request\u2019s window is an environment settings object and its origin\n    // is same origin with origin, then set window to request\u2019s window.\n    if (\n      request.window?.constructor?.name === 'EnvironmentSettingsObject' &&\n      sameOrigin(request.window, origin)\n    ) {\n      window = request.window\n    }\n\n    // 10. If init[\"window\"] exists and is non-null, then throw a TypeError.\n    if (init.window != null) {\n      throw new TypeError(`'window' option '${window}' must be null`)\n    }\n\n    // 11. If init[\"window\"] exists, then set window to \"no-window\".\n    if ('window' in init) {\n      window = 'no-window'\n    }\n\n    // 12. Set request to a new request with the following properties:\n    request = makeRequest({\n      // URL request\u2019s URL.\n      // undici implementation note: this is set as the first item in request's urlList in makeRequest\n      // method request\u2019s method.\n      method: request.method,\n      // header list A copy of request\u2019s header list.\n      // undici implementation note: headersList is cloned in makeRequest\n      headersList: request.headersList,\n      // unsafe-request flag Set.\n      unsafeRequest: request.unsafeRequest,\n      // client This\u2019s relevant settings object.\n      client: environmentSettingsObject.settingsObject,\n      // window window.\n      window,\n      // priority request\u2019s priority.\n      priority: request.priority,\n      // origin request\u2019s origin. The propagation of the origin is only significant for navigation requests\n      // being handled by a service worker. In this scenario a request can have an origin that is different\n      // from the current client.\n      origin: request.origin,\n      // referrer request\u2019s referrer.\n      referrer: request.referrer,\n      // referrer policy request\u2019s referrer policy.\n      referrerPolicy: request.referrerPolicy,\n      // mode request\u2019s mode.\n      mode: request.mode,\n      // credentials mode request\u2019s credentials mode.\n      credentials: request.credentials,\n      // cache mode request\u2019s cache mode.\n      cache: request.cache,\n      // redirect mode request\u2019s redirect mode.\n      redirect: request.redirect,\n      // integrity metadata request\u2019s integrity metadata.\n      integrity: request.integrity,\n      // keepalive request\u2019s keepalive.\n      keepalive: request.keepalive,\n      // reload-navigation flag request\u2019s reload-navigation flag.\n      reloadNavigation: request.reloadNavigation,\n      // history-navigation flag request\u2019s history-navigation flag.\n      historyNavigation: request.historyNavigation,\n      // URL list A clone of request\u2019s URL list.\n      urlList: [...request.urlList]\n    })\n\n    const initHasKey = Object.keys(init).length !== 0\n\n    // 13. If init is not empty, then:\n    if (initHasKey) {\n      // 1. If request\u2019s mode is \"navigate\", then set it to \"same-origin\".\n      if (request.mode === 'navigate') {\n        request.mode = 'same-origin'\n      }\n\n      // 2. Unset request\u2019s reload-navigation flag.\n      request.reloadNavigation = false\n\n      // 3. Unset request\u2019s history-navigation flag.\n      request.historyNavigation = false\n\n      // 4. Set request\u2019s origin to \"client\".\n      request.origin = 'client'\n\n      // 5. Set request\u2019s referrer to \"client\"\n      request.referrer = 'client'\n\n      // 6. Set request\u2019s referrer policy to the empty string.\n      request.referrerPolicy = ''\n\n      // 7. Set request\u2019s URL to request\u2019s current URL.\n      request.url = request.urlList[request.urlList.length - 1]\n\n      // 8. Set request\u2019s URL list to \u00AB request\u2019s URL \u00BB.\n      request.urlList = [request.url]\n    }\n\n    // 14. If init[\"referrer\"] exists, then:\n    if (init.referrer !== undefined) {\n      // 1. Let referrer be init[\"referrer\"].\n      const referrer = init.referrer\n\n      // 2. If referrer is the empty string, then set request\u2019s referrer to \"no-referrer\".\n      if (referrer === '') {\n        request.referrer = 'no-referrer'\n      } else {\n        // 1. Let parsedReferrer be the result of parsing referrer with\n        // baseURL.\n        // 2. If parsedReferrer is failure, then throw a TypeError.\n        let parsedReferrer\n        try {\n          parsedReferrer = new URL(referrer, baseUrl)\n        } catch (err) {\n          throw new TypeError(`Referrer \"${referrer}\" is not a valid URL.`, { cause: err })\n        }\n\n        // 3. If one of the following is true\n        // - parsedReferrer\u2019s scheme is \"about\" and path is the string \"client\"\n        // - parsedReferrer\u2019s origin is not same origin with origin\n        // then set request\u2019s referrer to \"client\".\n        if (\n          (parsedReferrer.protocol === 'about:' && parsedReferrer.hostname === 'client') ||\n          (origin && !sameOrigin(parsedReferrer, environmentSettingsObject.settingsObject.baseUrl))\n        ) {\n          request.referrer = 'client'\n        } else {\n          // 4. Otherwise, set request\u2019s referrer to parsedReferrer.\n          request.referrer = parsedReferrer\n        }\n      }\n    }\n\n    // 15. If init[\"referrerPolicy\"] exists, then set request\u2019s referrer policy\n    // to it.\n    if (init.referrerPolicy !== undefined) {\n      request.referrerPolicy = init.referrerPolicy\n    }\n\n    // 16. Let mode be init[\"mode\"] if it exists, and fallbackMode otherwise.\n    let mode\n    if (init.mode !== undefined) {\n      mode = init.mode\n    } else {\n      mode = fallbackMode\n    }\n\n    // 17. If mode is \"navigate\", then throw a TypeError.\n    if (mode === 'navigate') {\n      throw webidl.errors.exception({\n        header: 'Request constructor',\n        message: 'invalid request mode navigate.'\n      })\n    }\n\n    // 18. If mode is non-null, set request\u2019s mode to mode.\n    if (mode != null) {\n      request.mode = mode\n    }\n\n    // 19. If init[\"credentials\"] exists, then set request\u2019s credentials mode\n    // to it.\n    if (init.credentials !== undefined) {\n      request.credentials = init.credentials\n    }\n\n    // 18. If init[\"cache\"] exists, then set request\u2019s cache mode to it.\n    if (init.cache !== undefined) {\n      request.cache = init.cache\n    }\n\n    // 21. If request\u2019s cache mode is \"only-if-cached\" and request\u2019s mode is\n    // not \"same-origin\", then throw a TypeError.\n    if (request.cache === 'only-if-cached' && request.mode !== 'same-origin') {\n      throw new TypeError(\n        \"'only-if-cached' can be set only with 'same-origin' mode\"\n      )\n    }\n\n    // 22. If init[\"redirect\"] exists, then set request\u2019s redirect mode to it.\n    if (init.redirect !== undefined) {\n      request.redirect = init.redirect\n    }\n\n    // 23. If init[\"integrity\"] exists, then set request\u2019s integrity metadata to it.\n    if (init.integrity != null) {\n      request.integrity = String(init.integrity)\n    }\n\n    // 24. If init[\"keepalive\"] exists, then set request\u2019s keepalive to it.\n    if (init.keepalive !== undefined) {\n      request.keepalive = Boolean(init.keepalive)\n    }\n\n    // 25. If init[\"method\"] exists, then:\n    if (init.method !== undefined) {\n      // 1. Let method be init[\"method\"].\n      let method = init.method\n\n      const mayBeNormalized = normalizedMethodRecords[method]\n\n      if (mayBeNormalized !== undefined) {\n        // Note: Bypass validation DELETE, GET, HEAD, OPTIONS, POST, PUT, PATCH and these lowercase ones\n        request.method = mayBeNormalized\n      } else {\n        // 2. If method is not a method or method is a forbidden method, then\n        // throw a TypeError.\n        if (!isValidHTTPToken(method)) {\n          throw new TypeError(`'${method}' is not a valid HTTP method.`)\n        }\n\n        const upperCase = method.toUpperCase()\n\n        if (forbiddenMethodsSet.has(upperCase)) {\n          throw new TypeError(`'${method}' HTTP method is unsupported.`)\n        }\n\n        // 3. Normalize method.\n        // https://fetch.spec.whatwg.org/#concept-method-normalize\n        // Note: must be in uppercase\n        method = normalizedMethodRecordsBase[upperCase] ?? method\n\n        // 4. Set request\u2019s method to method.\n        request.method = method\n      }\n\n      if (!patchMethodWarning && request.method === 'patch') {\n        process.emitWarning('Using `patch` is highly likely to result in a `405 Method Not Allowed`. `PATCH` is much more likely to succeed.', {\n          code: 'UNDICI-FETCH-patch'\n        })\n\n        patchMethodWarning = true\n      }\n    }\n\n    // 26. If init[\"signal\"] exists, then set signal to it.\n    if (init.signal !== undefined) {\n      signal = init.signal\n    }\n\n    // 27. Set this\u2019s request to request.\n    this.#state = request\n\n    // 28. Set this\u2019s signal to a new AbortSignal object with this\u2019s relevant\n    // Realm.\n    // TODO: could this be simplified with AbortSignal.any\n    // (https://dom.spec.whatwg.org/#dom-abortsignal-any)\n    const ac = new AbortController()\n    this.#signal = ac.signal\n\n    // 29. If signal is not null, then make this\u2019s signal follow signal.\n    if (signal != null) {\n      if (signal.aborted) {\n        ac.abort(signal.reason)\n      } else {\n        // Keep a strong ref to ac while request object\n        // is alive. This is needed to prevent AbortController\n        // from being prematurely garbage collected.\n        // See, https://github.com/nodejs/undici/issues/1926.\n        this[kAbortController] = ac\n\n        const acRef = new WeakRef(ac)\n        const abort = buildAbort(acRef)\n\n        // If the max amount of listeners is equal to the default, increase it\n        if (abortSignalHasEventHandlerLeakWarning && getMaxListeners(signal) === defaultMaxListeners) {\n          setMaxListeners(1500, signal)\n        }\n\n        util.addAbortListener(signal, abort)\n        // The third argument must be a registry key to be unregistered.\n        // Without it, you cannot unregister.\n        // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/FinalizationRegistry\n        // abort is used as the unregister key. (because it is unique)\n        requestFinalizer.register(ac, { signal, abort }, abort)\n      }\n    }\n\n    // 30. Set this\u2019s headers to a new Headers object with this\u2019s relevant\n    // Realm, whose header list is request\u2019s header list and guard is\n    // \"request\".\n    this.#headers = new Headers(kConstruct)\n    setHeadersList(this.#headers, request.headersList)\n    setHeadersGuard(this.#headers, 'request')\n\n    // 31. If this\u2019s request\u2019s mode is \"no-cors\", then:\n    if (mode === 'no-cors') {\n      // 1. If this\u2019s request\u2019s method is not a CORS-safelisted method,\n      // then throw a TypeError.\n      if (!corsSafeListedMethodsSet.has(request.method)) {\n        throw new TypeError(\n          `'${request.method} is unsupported in no-cors mode.`\n        )\n      }\n\n      // 2. Set this\u2019s headers\u2019s guard to \"request-no-cors\".\n      setHeadersGuard(this.#headers, 'request-no-cors')\n    }\n\n    // 32. If init is not empty, then:\n    if (initHasKey) {\n      /** @type {HeadersList} */\n      const headersList = getHeadersList(this.#headers)\n      // 1. Let headers be a copy of this\u2019s headers and its associated header\n      // list.\n      // 2. If init[\"headers\"] exists, then set headers to init[\"headers\"].\n      const headers = init.headers !== undefined ? init.headers : new HeadersList(headersList)\n\n      // 3. Empty this\u2019s headers\u2019s header list.\n      headersList.clear()\n\n      // 4. If headers is a Headers object, then for each header in its header\n      // list, append header\u2019s name/header\u2019s value to this\u2019s headers.\n      if (headers instanceof HeadersList) {\n        for (const { name, value } of headers.rawValues()) {\n          headersList.append(name, value, false)\n        }\n        // Note: Copy the `set-cookie` meta-data.\n        headersList.cookies = headers.cookies\n      } else {\n        // 5. Otherwise, fill this\u2019s headers with headers.\n        fillHeaders(this.#headers, headers)\n      }\n    }\n\n    // 33. Let inputBody be input\u2019s request\u2019s body if input is a Request\n    // object; otherwise null.\n    const inputBody = webidl.is.Request(input) ? input.#state.body : null\n\n    // 34. If either init[\"body\"] exists and is non-null or inputBody is\n    // non-null, and request\u2019s method is `GET` or `HEAD`, then throw a\n    // TypeError.\n    if (\n      (init.body != null || inputBody != null) &&\n      (request.method === 'GET' || request.method === 'HEAD')\n    ) {\n      throw new TypeError('Request with GET/HEAD method cannot have body.')\n    }\n\n    // 35. Let initBody be null.\n    let initBody = null\n\n    // 36. If init[\"body\"] exists and is non-null, then:\n    if (init.body != null) {\n      // 1. Let Content-Type be null.\n      // 2. Set initBody and Content-Type to the result of extracting\n      // init[\"body\"], with keepalive set to request\u2019s keepalive.\n      const [extractedBody, contentType] = extractBody(\n        init.body,\n        request.keepalive\n      )\n      initBody = extractedBody\n\n      // 3, If Content-Type is non-null and this\u2019s headers\u2019s header list does\n      // not contain `Content-Type`, then append `Content-Type`/Content-Type to\n      // this\u2019s headers.\n      if (contentType && !getHeadersList(this.#headers).contains('content-type', true)) {\n        this.#headers.append('content-type', contentType, true)\n      }\n    }\n\n    // 37. Let inputOrInitBody be initBody if it is non-null; otherwise\n    // inputBody.\n    const inputOrInitBody = initBody ?? inputBody\n\n    // 38. If inputOrInitBody is non-null and inputOrInitBody\u2019s source is\n    // null, then:\n    if (inputOrInitBody != null && inputOrInitBody.source == null) {\n      // 1. If initBody is non-null and init[\"duplex\"] does not exist,\n      //    then throw a TypeError.\n      if (initBody != null && init.duplex == null) {\n        throw new TypeError('RequestInit: duplex option is required when sending a body.')\n      }\n\n      // 2. If this\u2019s request\u2019s mode is neither \"same-origin\" nor \"cors\",\n      // then throw a TypeError.\n      if (request.mode !== 'same-origin' && request.mode !== 'cors') {\n        throw new TypeError(\n          'If request is made from ReadableStream, mode should be \"same-origin\" or \"cors\"'\n        )\n      }\n\n      // 3. Set this\u2019s request\u2019s use-CORS-preflight flag.\n      request.useCORSPreflightFlag = true\n    }\n\n    // 39. Let finalBody be inputOrInitBody.\n    let finalBody = inputOrInitBody\n\n    // 40. If initBody is null and inputBody is non-null, then:\n    if (initBody == null && inputBody != null) {\n      // 1. If input is unusable, then throw a TypeError.\n      if (bodyUnusable(input.#state)) {\n        throw new TypeError(\n          'Cannot construct a Request with a Request object that has already been used.'\n        )\n      }\n\n      // 2. Set finalBody to the result of creating a proxy for inputBody.\n      // https://streams.spec.whatwg.org/#readablestream-create-a-proxy\n      const identityTransform = new TransformStream()\n      inputBody.stream.pipeThrough(identityTransform)\n      finalBody = {\n        source: inputBody.source,\n        length: inputBody.length,\n        stream: identityTransform.readable\n      }\n    }\n\n    // 41. Set this\u2019s request\u2019s body to finalBody.\n    this.#state.body = finalBody\n  }\n\n  // Returns request\u2019s HTTP method, which is \"GET\" by default.\n  get method () {\n    webidl.brandCheck(this, Request)\n\n    // The method getter steps are to return this\u2019s request\u2019s method.\n    return this.#state.method\n  }\n\n  // Returns the URL of request as a string.\n  get url () {\n    webidl.brandCheck(this, Request)\n\n    // The url getter steps are to return this\u2019s request\u2019s URL, serialized.\n    return URLSerializer(this.#state.url)\n  }\n\n  // Returns a Headers object consisting of the headers associated with request.\n  // Note that headers added in the network layer by the user agent will not\n  // be accounted for in this object, e.g., the \"Host\" header.\n  get headers () {\n    webidl.brandCheck(this, Request)\n\n    // The headers getter steps are to return this\u2019s headers.\n    return this.#headers\n  }\n\n  // Returns the kind of resource requested by request, e.g., \"document\"\n  // or \"script\".\n  get destination () {\n    webidl.brandCheck(this, Request)\n\n    // The destination getter are to return this\u2019s request\u2019s destination.\n    return this.#state.destination\n  }\n\n  // Returns the referrer of request. Its value can be a same-origin URL if\n  // explicitly set in init, the empty string to indicate no referrer, and\n  // \"about:client\" when defaulting to the global\u2019s default. This is used\n  // during fetching to determine the value of the `Referer` header of the\n  // request being made.\n  get referrer () {\n    webidl.brandCheck(this, Request)\n\n    // 1. If this\u2019s request\u2019s referrer is \"no-referrer\", then return the\n    // empty string.\n    if (this.#state.referrer === 'no-referrer') {\n      return ''\n    }\n\n    // 2. If this\u2019s request\u2019s referrer is \"client\", then return\n    // \"about:client\".\n    if (this.#state.referrer === 'client') {\n      return 'about:client'\n    }\n\n    // Return this\u2019s request\u2019s referrer, serialized.\n    return this.#state.referrer.toString()\n  }\n\n  // Returns the referrer policy associated with request.\n  // This is used during fetching to compute the value of the request\u2019s\n  // referrer.\n  get referrerPolicy () {\n    webidl.brandCheck(this, Request)\n\n    // The referrerPolicy getter steps are to return this\u2019s request\u2019s referrer policy.\n    return this.#state.referrerPolicy\n  }\n\n  // Returns the mode associated with request, which is a string indicating\n  // whether the request will use CORS, or will be restricted to same-origin\n  // URLs.\n  get mode () {\n    webidl.brandCheck(this, Request)\n\n    // The mode getter steps are to return this\u2019s request\u2019s mode.\n    return this.#state.mode\n  }\n\n  // Returns the credentials mode associated with request,\n  // which is a string indicating whether credentials will be sent with the\n  // request always, never, or only when sent to a same-origin URL.\n  get credentials () {\n    webidl.brandCheck(this, Request)\n\n    // The credentials getter steps are to return this\u2019s request\u2019s credentials mode.\n    return this.#state.credentials\n  }\n\n  // Returns the cache mode associated with request,\n  // which is a string indicating how the request will\n  // interact with the browser\u2019s cache when fetching.\n  get cache () {\n    webidl.brandCheck(this, Request)\n\n    // The cache getter steps are to return this\u2019s request\u2019s cache mode.\n    return this.#state.cache\n  }\n\n  // Returns the redirect mode associated with request,\n  // which is a string indicating how redirects for the\n  // request will be handled during fetching. A request\n  // will follow redirects by default.\n  get redirect () {\n    webidl.brandCheck(this, Request)\n\n    // The redirect getter steps are to return this\u2019s request\u2019s redirect mode.\n    return this.#state.redirect\n  }\n\n  // Returns request\u2019s subresource integrity metadata, which is a\n  // cryptographic hash of the resource being fetched. Its value\n  // consists of multiple hashes separated by whitespace. [SRI]\n  get integrity () {\n    webidl.brandCheck(this, Request)\n\n    // The integrity getter steps are to return this\u2019s request\u2019s integrity\n    // metadata.\n    return this.#state.integrity\n  }\n\n  // Returns a boolean indicating whether or not request can outlive the\n  // global in which it was created.\n  get keepalive () {\n    webidl.brandCheck(this, Request)\n\n    // The keepalive getter steps are to return this\u2019s request\u2019s keepalive.\n    return this.#state.keepalive\n  }\n\n  // Returns a boolean indicating whether or not request is for a reload\n  // navigation.\n  get isReloadNavigation () {\n    webidl.brandCheck(this, Request)\n\n    // The isReloadNavigation getter steps are to return true if this\u2019s\n    // request\u2019s reload-navigation flag is set; otherwise false.\n    return this.#state.reloadNavigation\n  }\n\n  // Returns a boolean indicating whether or not request is for a history\n  // navigation (a.k.a. back-forward navigation).\n  get isHistoryNavigation () {\n    webidl.brandCheck(this, Request)\n\n    // The isHistoryNavigation getter steps are to return true if this\u2019s request\u2019s\n    // history-navigation flag is set; otherwise false.\n    return this.#state.historyNavigation\n  }\n\n  // Returns the signal associated with request, which is an AbortSignal\n  // object indicating whether or not request has been aborted, and its\n  // abort event handler.\n  get signal () {\n    webidl.brandCheck(this, Request)\n\n    // The signal getter steps are to return this\u2019s signal.\n    return this.#signal\n  }\n\n  get body () {\n    webidl.brandCheck(this, Request)\n\n    return this.#state.body ? this.#state.body.stream : null\n  }\n\n  get bodyUsed () {\n    webidl.brandCheck(this, Request)\n\n    return !!this.#state.body && util.isDisturbed(this.#state.body.stream)\n  }\n\n  get duplex () {\n    webidl.brandCheck(this, Request)\n\n    return 'half'\n  }\n\n  // Returns a clone of request.\n  clone () {\n    webidl.brandCheck(this, Request)\n\n    // 1. If this is unusable, then throw a TypeError.\n    if (bodyUnusable(this.#state)) {\n      throw new TypeError('unusable')\n    }\n\n    // 2. Let clonedRequest be the result of cloning this\u2019s request.\n    const clonedRequest = cloneRequest(this.#state)\n\n    // 3. Let clonedRequestObject be the result of creating a Request object,\n    // given clonedRequest, this\u2019s headers\u2019s guard, and this\u2019s relevant Realm.\n    // 4. Make clonedRequestObject\u2019s signal follow this\u2019s signal.\n    const ac = new AbortController()\n    if (this.signal.aborted) {\n      ac.abort(this.signal.reason)\n    } else {\n      let list = dependentControllerMap.get(this.signal)\n      if (list === undefined) {\n        list = new Set()\n        dependentControllerMap.set(this.signal, list)\n      }\n      const acRef = new WeakRef(ac)\n      list.add(acRef)\n      util.addAbortListener(\n        ac.signal,\n        buildAbort(acRef)\n      )\n    }\n\n    // 4. Return clonedRequestObject.\n    return fromInnerRequest(clonedRequest, this.#dispatcher, ac.signal, getHeadersGuard(this.#headers))\n  }\n\n  [nodeUtil.inspect.custom] (depth, options) {\n    if (options.depth === null) {\n      options.depth = 2\n    }\n\n    options.colors ??= true\n\n    const properties = {\n      method: this.method,\n      url: this.url,\n      headers: this.headers,\n      destination: this.destination,\n      referrer: this.referrer,\n      referrerPolicy: this.referrerPolicy,\n      mode: this.mode,\n      credentials: this.credentials,\n      cache: this.cache,\n      redirect: this.redirect,\n      integrity: this.integrity,\n      keepalive: this.keepalive,\n      isReloadNavigation: this.isReloadNavigation,\n      isHistoryNavigation: this.isHistoryNavigation,\n      signal: this.signal\n    }\n\n    return `Request ${nodeUtil.formatWithOptions(options, properties)}`\n  }\n\n  /**\n   * @param {Request} request\n   * @param {AbortSignal} newSignal\n   */\n  static setRequestSignal (request, newSignal) {\n    request.#signal = newSignal\n    return request\n  }\n\n  /**\n   * @param {Request} request\n   */\n  static getRequestDispatcher (request) {\n    return request.#dispatcher\n  }\n\n  /**\n   * @param {Request} request\n   * @param {import('../../dispatcher/dispatcher')} newDispatcher\n   */\n  static setRequestDispatcher (request, newDispatcher) {\n    request.#dispatcher = newDispatcher\n  }\n\n  /**\n   * @param {Request} request\n   * @param {Headers} newHeaders\n   */\n  static setRequestHeaders (request, newHeaders) {\n    request.#headers = newHeaders\n  }\n\n  /**\n   * @param {Request} request\n   */\n  static getRequestState (request) {\n    return request.#state\n  }\n\n  /**\n   * @param {Request} request\n   * @param {any} newState\n   */\n  static setRequestState (request, newState) {\n    request.#state = newState\n  }\n}\n\nconst { setRequestSignal, getRequestDispatcher, setRequestDispatcher, setRequestHeaders, getRequestState, setRequestState } = Request\nReflect.deleteProperty(Request, 'setRequestSignal')\nReflect.deleteProperty(Request, 'getRequestDispatcher')\nReflect.deleteProperty(Request, 'setRequestDispatcher')\nReflect.deleteProperty(Request, 'setRequestHeaders')\nReflect.deleteProperty(Request, 'getRequestState')\nReflect.deleteProperty(Request, 'setRequestState')\n\nmixinBody(Request, getRequestState)\n\n// https://fetch.spec.whatwg.org/#requests\nfunction makeRequest (init) {\n  return {\n    method: init.method ?? 'GET',\n    localURLsOnly: init.localURLsOnly ?? false,\n    unsafeRequest: init.unsafeRequest ?? false,\n    body: init.body ?? null,\n    client: init.client ?? null,\n    reservedClient: init.reservedClient ?? null,\n    replacesClientId: init.replacesClientId ?? '',\n    window: init.window ?? 'client',\n    keepalive: init.keepalive ?? false,\n    serviceWorkers: init.serviceWorkers ?? 'all',\n    initiator: init.initiator ?? '',\n    destination: init.destination ?? '',\n    priority: init.priority ?? null,\n    origin: init.origin ?? 'client',\n    policyContainer: init.policyContainer ?? 'client',\n    referrer: init.referrer ?? 'client',\n    referrerPolicy: init.referrerPolicy ?? '',\n    mode: init.mode ?? 'no-cors',\n    useCORSPreflightFlag: init.useCORSPreflightFlag ?? false,\n    credentials: init.credentials ?? 'same-origin',\n    useCredentials: init.useCredentials ?? false,\n    cache: init.cache ?? 'default',\n    redirect: init.redirect ?? 'follow',\n    integrity: init.integrity ?? '',\n    cryptoGraphicsNonceMetadata: init.cryptoGraphicsNonceMetadata ?? '',\n    parserMetadata: init.parserMetadata ?? '',\n    reloadNavigation: init.reloadNavigation ?? false,\n    historyNavigation: init.historyNavigation ?? false,\n    userActivation: init.userActivation ?? false,\n    taintedOrigin: init.taintedOrigin ?? false,\n    redirectCount: init.redirectCount ?? 0,\n    responseTainting: init.responseTainting ?? 'basic',\n    preventNoCacheCacheControlHeaderModification: init.preventNoCacheCacheControlHeaderModification ?? false,\n    done: init.done ?? false,\n    timingAllowFailed: init.timingAllowFailed ?? false,\n    useURLCredentials: init.useURLCredentials ?? undefined,\n    traversableForUserPrompts: init.traversableForUserPrompts ?? 'client',\n    urlList: init.urlList,\n    url: init.urlList[0],\n    headersList: init.headersList\n      ? new HeadersList(init.headersList)\n      : new HeadersList()\n  }\n}\n\n// https://fetch.spec.whatwg.org/#concept-request-clone\nfunction cloneRequest (request) {\n  // To clone a request request, run these steps:\n\n  // 1. Let newRequest be a copy of request, except for its body.\n  const newRequest = makeRequest({ ...request, body: null })\n\n  // 2. If request\u2019s body is non-null, set newRequest\u2019s body to the\n  // result of cloning request\u2019s body.\n  if (request.body != null) {\n    newRequest.body = cloneBody(request.body)\n  }\n\n  // 3. Return newRequest.\n  return newRequest\n}\n\n/**\n * @see https://fetch.spec.whatwg.org/#request-create\n * @param {any} innerRequest\n * @param {import('../../dispatcher/agent')} dispatcher\n * @param {AbortSignal} signal\n * @param {'request' | 'immutable' | 'request-no-cors' | 'response' | 'none'} guard\n * @returns {Request}\n */\nfunction fromInnerRequest (innerRequest, dispatcher, signal, guard) {\n  const request = new Request(kConstruct)\n  setRequestState(request, innerRequest)\n  setRequestDispatcher(request, dispatcher)\n  setRequestSignal(request, signal)\n  const headers = new Headers(kConstruct)\n  setRequestHeaders(request, headers)\n  setHeadersList(headers, innerRequest.headersList)\n  setHeadersGuard(headers, guard)\n  return request\n}\n\nObject.defineProperties(Request.prototype, {\n  method: kEnumerableProperty,\n  url: kEnumerableProperty,\n  headers: kEnumerableProperty,\n  redirect: kEnumerableProperty,\n  clone: kEnumerableProperty,\n  signal: kEnumerableProperty,\n  duplex: kEnumerableProperty,\n  destination: kEnumerableProperty,\n  body: kEnumerableProperty,\n  bodyUsed: kEnumerableProperty,\n  isHistoryNavigation: kEnumerableProperty,\n  isReloadNavigation: kEnumerableProperty,\n  keepalive: kEnumerableProperty,\n  integrity: kEnumerableProperty,\n  cache: kEnumerableProperty,\n  credentials: kEnumerableProperty,\n  attribute: kEnumerableProperty,\n  referrerPolicy: kEnumerableProperty,\n  referrer: kEnumerableProperty,\n  mode: kEnumerableProperty,\n  [Symbol.toStringTag]: {\n    value: 'Request',\n    configurable: true\n  }\n})\n\nwebidl.is.Request = webidl.util.MakeTypeAssertion(Request)\n\n/**\n * @param {*} V\n * @returns {import('../../../types/fetch').Request|string}\n *\n * @see https://fetch.spec.whatwg.org/#requestinfo\n */\nwebidl.converters.RequestInfo = function (V) {\n  if (typeof V === 'string') {\n    return webidl.converters.USVString(V)\n  }\n\n  if (webidl.is.Request(V)) {\n    return V\n  }\n\n  return webidl.converters.USVString(V)\n}\n\n/**\n * @param {*} V\n * @returns {import('../../../types/fetch').RequestInit}\n * @see https://fetch.spec.whatwg.org/#requestinit\n */\nwebidl.converters.RequestInit = webidl.dictionaryConverter([\n  {\n    key: 'method',\n    converter: webidl.converters.ByteString\n  },\n  {\n    key: 'headers',\n    converter: webidl.converters.HeadersInit\n  },\n  {\n    key: 'body',\n    converter: webidl.nullableConverter(\n      webidl.converters.BodyInit\n    )\n  },\n  {\n    key: 'referrer',\n    converter: webidl.converters.USVString\n  },\n  {\n    key: 'referrerPolicy',\n    converter: webidl.converters.DOMString,\n    // https://w3c.github.io/webappsec-referrer-policy/#referrer-policy\n    allowedValues: referrerPolicy\n  },\n  {\n    key: 'mode',\n    converter: webidl.converters.DOMString,\n    // https://fetch.spec.whatwg.org/#concept-request-mode\n    allowedValues: requestMode\n  },\n  {\n    key: 'credentials',\n    converter: webidl.converters.DOMString,\n    // https://fetch.spec.whatwg.org/#requestcredentials\n    allowedValues: requestCredentials\n  },\n  {\n    key: 'cache',\n    converter: webidl.converters.DOMString,\n    // https://fetch.spec.whatwg.org/#requestcache\n    allowedValues: requestCache\n  },\n  {\n    key: 'redirect',\n    converter: webidl.converters.DOMString,\n    // https://fetch.spec.whatwg.org/#requestredirect\n    allowedValues: requestRedirect\n  },\n  {\n    key: 'integrity',\n    converter: webidl.converters.DOMString\n  },\n  {\n    key: 'keepalive',\n    converter: webidl.converters.boolean\n  },\n  {\n    key: 'signal',\n    converter: webidl.nullableConverter(\n      (signal) => webidl.converters.AbortSignal(\n        signal,\n        'RequestInit',\n        'signal'\n      )\n    )\n  },\n  {\n    key: 'window',\n    converter: webidl.converters.any\n  },\n  {\n    key: 'duplex',\n    converter: webidl.converters.DOMString,\n    allowedValues: requestDuplex\n  },\n  {\n    key: 'dispatcher', // undici specific option\n    converter: webidl.converters.any\n  },\n  {\n    key: 'priority',\n    converter: webidl.converters.DOMString,\n    allowedValues: ['high', 'low', 'auto'],\n    defaultValue: () => 'auto'\n  }\n])\n\nmodule.exports = {\n  Request,\n  makeRequest,\n  fromInnerRequest,\n  cloneRequest,\n  getRequestDispatcher,\n  getRequestState\n}\n", "'use strict'\n\nconst assert = require('node:assert')\nconst { runtimeFeatures } = require('../../util/runtime-features.js')\n\n/**\n * @typedef {object} Metadata\n * @property {SRIHashAlgorithm} alg - The algorithm used for the hash.\n * @property {string} val - The base64-encoded hash value.\n */\n\n/**\n * @typedef {Metadata[]} MetadataList\n */\n\n/**\n * @typedef {('sha256' | 'sha384' | 'sha512')} SRIHashAlgorithm\n */\n\n/**\n * @type {Map<SRIHashAlgorithm, number>}\n *\n * The valid SRI hash algorithm token set is the ordered set \u00AB \"sha256\",\n * \"sha384\", \"sha512\" \u00BB (corresponding to SHA-256, SHA-384, and SHA-512\n * respectively). The ordering of this set is meaningful, with stronger\n * algorithms appearing later in the set.\n *\n * @see https://w3c.github.io/webappsec-subresource-integrity/#valid-sri-hash-algorithm-token-set\n */\nconst validSRIHashAlgorithmTokenSet = new Map([['sha256', 0], ['sha384', 1], ['sha512', 2]])\n\n// https://nodejs.org/api/crypto.html#determining-if-crypto-support-is-unavailable\n/** @type {import('node:crypto')} */\nlet crypto\n\nif (runtimeFeatures.has('crypto')) {\n  crypto = require('node:crypto')\n  const cryptoHashes = crypto.getHashes()\n\n  // If no hashes are available, we cannot support SRI.\n  if (cryptoHashes.length === 0) {\n    validSRIHashAlgorithmTokenSet.clear()\n  }\n\n  for (const algorithm of validSRIHashAlgorithmTokenSet.keys()) {\n    // If the algorithm is not supported, remove it from the list.\n    if (cryptoHashes.includes(algorithm) === false) {\n      validSRIHashAlgorithmTokenSet.delete(algorithm)\n    }\n  }\n} else {\n  // If crypto is not available, we cannot support SRI.\n  validSRIHashAlgorithmTokenSet.clear()\n}\n\n/**\n * @typedef GetSRIHashAlgorithmIndex\n * @type {(algorithm: SRIHashAlgorithm) => number}\n * @param {SRIHashAlgorithm} algorithm\n * @returns {number} The index of the algorithm in the valid SRI hash algorithm\n * token set.\n */\n\nconst getSRIHashAlgorithmIndex = /** @type {GetSRIHashAlgorithmIndex} */ (Map.prototype.get.bind(\n  validSRIHashAlgorithmTokenSet))\n\n/**\n * @typedef IsValidSRIHashAlgorithm\n * @type {(algorithm: string) => algorithm is SRIHashAlgorithm}\n * @param {*} algorithm\n * @returns {algorithm is SRIHashAlgorithm}\n */\n\nconst isValidSRIHashAlgorithm = /** @type {IsValidSRIHashAlgorithm} */ (\n  Map.prototype.has.bind(validSRIHashAlgorithmTokenSet)\n)\n\n/**\n * @param {Uint8Array} bytes\n * @param {string} metadataList\n * @returns {boolean}\n *\n * @see https://w3c.github.io/webappsec-subresource-integrity/#does-response-match-metadatalist\n */\nconst bytesMatch = runtimeFeatures.has('crypto') === false || validSRIHashAlgorithmTokenSet.size === 0\n  // If node is not built with OpenSSL support, we cannot check\n  // a request's integrity, so allow it by default (the spec will\n  // allow requests if an invalid hash is given, as precedence).\n  ? () => true\n  : (bytes, metadataList) => {\n    // 1. Let parsedMetadata be the result of parsing metadataList.\n      const parsedMetadata = parseMetadata(metadataList)\n\n      // 2. If parsedMetadata is empty set, return true.\n      if (parsedMetadata.length === 0) {\n        return true\n      }\n\n      // 3. Let metadata be the result of getting the strongest\n      //    metadata from parsedMetadata.\n      const metadata = getStrongestMetadata(parsedMetadata)\n\n      // 4. For each item in metadata:\n      for (const item of metadata) {\n      // 1. Let algorithm be the item[\"alg\"].\n        const algorithm = item.alg\n\n        // 2. Let expectedValue be the item[\"val\"].\n        const expectedValue = item.val\n\n        // See https://github.com/web-platform-tests/wpt/commit/e4c5cc7a5e48093220528dfdd1c4012dc3837a0e\n        // \"be liberal with padding\". This is annoying, and it's not even in the spec.\n\n        // 3. Let actualValue be the result of applying algorithm to bytes .\n        const actualValue = applyAlgorithmToBytes(algorithm, bytes)\n\n        // 4. If actualValue is a case-sensitive match for expectedValue,\n        //    return true.\n        if (caseSensitiveMatch(actualValue, expectedValue)) {\n          return true\n        }\n      }\n\n      // 5. Return false.\n      return false\n    }\n\n/**\n * @param {MetadataList} metadataList\n * @returns {MetadataList} The strongest hash algorithm from the metadata list.\n */\nfunction getStrongestMetadata (metadataList) {\n  // 1. Let result be the empty set and strongest be the empty string.\n  const result = []\n  /** @type {Metadata|null} */\n  let strongest = null\n\n  // 2. For each item in set:\n  for (const item of metadataList) {\n    // 1. Assert: item[\"alg\"] is a valid SRI hash algorithm token.\n    assert(isValidSRIHashAlgorithm(item.alg), 'Invalid SRI hash algorithm token')\n\n    // 2. If result is the empty set, then:\n    if (result.length === 0) {\n      // 1. Append item to result.\n      result.push(item)\n\n      // 2. Set strongest to item.\n      strongest = item\n\n      // 3. Continue.\n      continue\n    }\n\n    // 3. Let currentAlgorithm be strongest[\"alg\"], and currentAlgorithmIndex be\n    // the index of currentAlgorithm in the valid SRI hash algorithm token set.\n    const currentAlgorithm = /** @type {Metadata} */ (strongest).alg\n    const currentAlgorithmIndex = getSRIHashAlgorithmIndex(currentAlgorithm)\n\n    // 4. Let newAlgorithm be the item[\"alg\"], and newAlgorithmIndex be the\n    // index of newAlgorithm in the valid SRI hash algorithm token set.\n    const newAlgorithm = item.alg\n    const newAlgorithmIndex = getSRIHashAlgorithmIndex(newAlgorithm)\n\n    // 5. If newAlgorithmIndex is less than currentAlgorithmIndex, then continue.\n    if (newAlgorithmIndex < currentAlgorithmIndex) {\n      continue\n\n    // 6. Otherwise, if newAlgorithmIndex is greater than\n    // currentAlgorithmIndex:\n    } else if (newAlgorithmIndex > currentAlgorithmIndex) {\n      // 1. Set strongest to item.\n      strongest = item\n\n      // 2. Set result to \u00AB item \u00BB.\n      result[0] = item\n      result.length = 1\n\n    // 7. Otherwise, newAlgorithmIndex and currentAlgorithmIndex are the same\n    // value. Append item to result.\n    } else {\n      result.push(item)\n    }\n  }\n\n  // 3. Return result.\n  return result\n}\n\n/**\n * @param {string} metadata\n * @returns {MetadataList}\n *\n * @see https://w3c.github.io/webappsec-subresource-integrity/#parse-metadata\n */\nfunction parseMetadata (metadata) {\n  // 1. Let result be the empty set.\n  /** @type {MetadataList} */\n  const result = []\n\n  // 2. For each item returned by splitting metadata on spaces:\n  for (const item of metadata.split(' ')) {\n    // 1. Let expression-and-options be the result of splitting item on U+003F (?).\n    const expressionAndOptions = item.split('?', 1)\n\n    // 2. Let algorithm-expression be expression-and-options[0].\n    const algorithmExpression = expressionAndOptions[0]\n\n    // 3. Let base64-value be the empty string.\n    let base64Value = ''\n\n    // 4. Let algorithm-and-value be the result of splitting algorithm-expression on U+002D (-).\n    const algorithmAndValue = [algorithmExpression.slice(0, 6), algorithmExpression.slice(7)]\n\n    // 5. Let algorithm be algorithm-and-value[0].\n    const algorithm = algorithmAndValue[0]\n\n    // 6. If algorithm is not a valid SRI hash algorithm token, then continue.\n    if (!isValidSRIHashAlgorithm(algorithm)) {\n      continue\n    }\n\n    // 7. If algorithm-and-value[1] exists, set base64-value to\n    // algorithm-and-value[1].\n    if (algorithmAndValue[1]) {\n      base64Value = algorithmAndValue[1]\n    }\n\n    // 8. Let metadata be the ordered map\n    // \u00AB[\"alg\" \u2192 algorithm, \"val\" \u2192 base64-value]\u00BB.\n    const metadata = {\n      alg: algorithm,\n      val: base64Value\n    }\n\n    // 9. Append metadata to result.\n    result.push(metadata)\n  }\n\n  // 3. Return result.\n  return result\n}\n\n/**\n * Applies the specified hash algorithm to the given bytes\n *\n * @typedef {(algorithm: SRIHashAlgorithm, bytes: Uint8Array) => string} ApplyAlgorithmToBytes\n * @param {SRIHashAlgorithm} algorithm\n * @param {Uint8Array} bytes\n * @returns {string}\n */\nconst applyAlgorithmToBytes = (algorithm, bytes) => {\n  return crypto.hash(algorithm, bytes, 'base64')\n}\n\n/**\n * Compares two base64 strings, allowing for base64url\n * in the second string.\n *\n * @param {string} actualValue base64 encoded string\n * @param {string} expectedValue base64 or base64url encoded string\n * @returns {boolean}\n */\nfunction caseSensitiveMatch (actualValue, expectedValue) {\n  // Ignore padding characters from the end of the strings by\n  // decreasing the length by 1 or 2 if the last characters are `=`.\n  let actualValueLength = actualValue.length\n  if (actualValueLength !== 0 && actualValue[actualValueLength - 1] === '=') {\n    actualValueLength -= 1\n  }\n  if (actualValueLength !== 0 && actualValue[actualValueLength - 1] === '=') {\n    actualValueLength -= 1\n  }\n  let expectedValueLength = expectedValue.length\n  if (expectedValueLength !== 0 && expectedValue[expectedValueLength - 1] === '=') {\n    expectedValueLength -= 1\n  }\n  if (expectedValueLength !== 0 && expectedValue[expectedValueLength - 1] === '=') {\n    expectedValueLength -= 1\n  }\n\n  if (actualValueLength !== expectedValueLength) {\n    return false\n  }\n\n  for (let i = 0; i < actualValueLength; ++i) {\n    if (\n      actualValue[i] === expectedValue[i] ||\n      (actualValue[i] === '+' && expectedValue[i] === '-') ||\n      (actualValue[i] === '/' && expectedValue[i] === '_')\n    ) {\n      continue\n    }\n    return false\n  }\n\n  return true\n}\n\nmodule.exports = {\n  applyAlgorithmToBytes,\n  bytesMatch,\n  caseSensitiveMatch,\n  isValidSRIHashAlgorithm,\n  getStrongestMetadata,\n  parseMetadata\n}\n", "// https://github.com/Ethan-Arrowood/undici-fetch\n\n'use strict'\n\nconst {\n  makeNetworkError,\n  makeAppropriateNetworkError,\n  filterResponse,\n  makeResponse,\n  fromInnerResponse,\n  getResponseState\n} = require('./response')\nconst { HeadersList } = require('./headers')\nconst { Request, cloneRequest, getRequestDispatcher, getRequestState } = require('./request')\nconst zlib = require('node:zlib')\nconst {\n  makePolicyContainer,\n  clonePolicyContainer,\n  requestBadPort,\n  TAOCheck,\n  appendRequestOriginHeader,\n  responseLocationURL,\n  requestCurrentURL,\n  setRequestReferrerPolicyOnRedirect,\n  tryUpgradeRequestToAPotentiallyTrustworthyURL,\n  createOpaqueTimingInfo,\n  appendFetchMetadata,\n  corsCheck,\n  crossOriginResourcePolicyCheck,\n  determineRequestsReferrer,\n  coarsenedSharedCurrentTime,\n  sameOrigin,\n  isCancelled,\n  isAborted,\n  isErrorLike,\n  fullyReadBody,\n  readableStreamClose,\n  urlIsLocal,\n  urlIsHttpHttpsScheme,\n  urlHasHttpsScheme,\n  clampAndCoarsenConnectionTimingInfo,\n  simpleRangeHeaderValue,\n  buildContentRange,\n  createInflate,\n  extractMimeType,\n  hasAuthenticationEntry,\n  includesCredentials,\n  isTraversableNavigable\n} = require('./util')\nconst assert = require('node:assert')\nconst { safelyExtractBody, extractBody } = require('./body')\nconst {\n  redirectStatusSet,\n  nullBodyStatus,\n  safeMethodsSet,\n  requestBodyHeader,\n  subresourceSet\n} = require('./constants')\nconst EE = require('node:events')\nconst { Readable, pipeline, finished, isErrored, isReadable } = require('node:stream')\nconst { addAbortListener, bufferToLowerCasedHeaderName } = require('../../core/util')\nconst { dataURLProcessor, serializeAMimeType, minimizeSupportedMimeType } = require('./data-url')\nconst { getGlobalDispatcher } = require('../../global')\nconst { webidl } = require('../webidl')\nconst { STATUS_CODES } = require('node:http')\nconst { bytesMatch } = require('../subresource-integrity/subresource-integrity')\nconst { createDeferredPromise } = require('../../util/promise')\nconst { isomorphicEncode } = require('../infra')\nconst { runtimeFeatures } = require('../../util/runtime-features')\n\n// Node.js v23.8.0+ and v22.15.0+ supports Zstandard\nconst hasZstd = runtimeFeatures.has('zstd')\n\nconst GET_OR_HEAD = ['GET', 'HEAD']\n\nconst defaultUserAgent = typeof __UNDICI_IS_NODE__ !== 'undefined' || typeof esbuildDetection !== 'undefined'\n  ? 'node'\n  : 'undici'\n\n/** @type {import('buffer').resolveObjectURL} */\nlet resolveObjectURL\n\nclass Fetch extends EE {\n  constructor (dispatcher) {\n    super()\n\n    this.dispatcher = dispatcher\n    this.connection = null\n    this.dump = false\n    this.state = 'ongoing'\n  }\n\n  terminate (reason) {\n    if (this.state !== 'ongoing') {\n      return\n    }\n\n    this.state = 'terminated'\n    this.connection?.destroy(reason)\n    this.emit('terminated', reason)\n  }\n\n  // https://fetch.spec.whatwg.org/#fetch-controller-abort\n  abort (error) {\n    if (this.state !== 'ongoing') {\n      return\n    }\n\n    // 1. Set controller\u2019s state to \"aborted\".\n    this.state = 'aborted'\n\n    // 2. Let fallbackError be an \"AbortError\" DOMException.\n    // 3. Set error to fallbackError if it is not given.\n    if (!error) {\n      error = new DOMException('The operation was aborted.', 'AbortError')\n    }\n\n    // 4. Let serializedError be StructuredSerialize(error).\n    //    If that threw an exception, catch it, and let\n    //    serializedError be StructuredSerialize(fallbackError).\n\n    // 5. Set controller\u2019s serialized abort reason to serializedError.\n    this.serializedAbortReason = error\n\n    this.connection?.destroy(error)\n    this.emit('terminated', error)\n  }\n}\n\nfunction handleFetchDone (response) {\n  finalizeAndReportTiming(response, 'fetch')\n}\n\n// https://fetch.spec.whatwg.org/#fetch-method\nfunction fetch (input, init = undefined) {\n  webidl.argumentLengthCheck(arguments, 1, 'globalThis.fetch')\n\n  // 1. Let p be a new promise.\n  let p = createDeferredPromise()\n\n  // 2. Let requestObject be the result of invoking the initial value of\n  // Request as constructor with input and init as arguments. If this throws\n  // an exception, reject p with it and return p.\n  let requestObject\n\n  try {\n    requestObject = new Request(input, init)\n  } catch (e) {\n    p.reject(e)\n    return p.promise\n  }\n\n  // 3. Let request be requestObject\u2019s request.\n  const request = getRequestState(requestObject)\n\n  // 4. If requestObject\u2019s signal\u2019s aborted flag is set, then:\n  if (requestObject.signal.aborted) {\n    // 1. Abort the fetch() call with p, request, null, and\n    //    requestObject\u2019s signal\u2019s abort reason.\n    abortFetch(p, request, null, requestObject.signal.reason, null)\n\n    // 2. Return p.\n    return p.promise\n  }\n\n  // 5. Let globalObject be request\u2019s client\u2019s global object.\n  const globalObject = request.client.globalObject\n\n  // 6. If globalObject is a ServiceWorkerGlobalScope object, then set\n  // request\u2019s service-workers mode to \"none\".\n  if (globalObject?.constructor?.name === 'ServiceWorkerGlobalScope') {\n    request.serviceWorkers = 'none'\n  }\n\n  // 7. Let responseObject be null.\n  let responseObject = null\n\n  // 8. Let relevantRealm be this\u2019s relevant Realm.\n\n  // 9. Let locallyAborted be false.\n  let locallyAborted = false\n\n  // 10. Let controller be null.\n  let controller = null\n\n  // 11. Add the following abort steps to requestObject\u2019s signal:\n  addAbortListener(\n    requestObject.signal,\n    () => {\n      // 1. Set locallyAborted to true.\n      locallyAborted = true\n\n      // 2. Assert: controller is non-null.\n      assert(controller != null)\n\n      // 3. Abort controller with requestObject\u2019s signal\u2019s abort reason.\n      controller.abort(requestObject.signal.reason)\n\n      const realResponse = responseObject?.deref()\n\n      // 4. Abort the fetch() call with p, request, responseObject,\n      //    and requestObject\u2019s signal\u2019s abort reason.\n      abortFetch(p, request, realResponse, requestObject.signal.reason, controller.controller)\n    }\n  )\n\n  // 12. Let handleFetchDone given response response be to finalize and\n  // report timing with response, globalObject, and \"fetch\".\n  // see function handleFetchDone\n\n  // 13. Set controller to the result of calling fetch given request,\n  // with processResponseEndOfBody set to handleFetchDone, and processResponse\n  // given response being these substeps:\n\n  const processResponse = (response) => {\n    // 1. If locallyAborted is true, terminate these substeps.\n    if (locallyAborted) {\n      return\n    }\n\n    // 2. If response\u2019s aborted flag is set, then:\n    if (response.aborted) {\n      // 1. Let deserializedError be the result of deserialize a serialized\n      //    abort reason given controller\u2019s serialized abort reason and\n      //    relevantRealm.\n\n      // 2. Abort the fetch() call with p, request, responseObject, and\n      //    deserializedError.\n\n      abortFetch(p, request, responseObject, controller.serializedAbortReason, controller.controller)\n      return\n    }\n\n    // 3. If response is a network error, then reject p with a TypeError\n    // and terminate these substeps.\n    if (response.type === 'error') {\n      p.reject(new TypeError('fetch failed', { cause: response.error }))\n      return\n    }\n\n    // 4. Set responseObject to the result of creating a Response object,\n    // given response, \"immutable\", and relevantRealm.\n    responseObject = new WeakRef(fromInnerResponse(response, 'immutable'))\n\n    // 5. Resolve p with responseObject.\n    p.resolve(responseObject.deref())\n    p = null\n  }\n\n  controller = fetching({\n    request,\n    processResponseEndOfBody: handleFetchDone,\n    processResponse,\n    dispatcher: getRequestDispatcher(requestObject), // undici\n    // Keep requestObject alive to prevent its AbortController from being GC'd\n    // See https://github.com/nodejs/undici/issues/4627\n    requestObject\n  })\n\n  // 14. Return p.\n  return p.promise\n}\n\n// https://fetch.spec.whatwg.org/#finalize-and-report-timing\nfunction finalizeAndReportTiming (response, initiatorType = 'other') {\n  // 1. If response is an aborted network error, then return.\n  if (response.type === 'error' && response.aborted) {\n    return\n  }\n\n  // 2. If response\u2019s URL list is null or empty, then return.\n  if (!response.urlList?.length) {\n    return\n  }\n\n  // 3. Let originalURL be response\u2019s URL list[0].\n  const originalURL = response.urlList[0]\n\n  // 4. Let timingInfo be response\u2019s timing info.\n  let timingInfo = response.timingInfo\n\n  // 5. Let cacheState be response\u2019s cache state.\n  let cacheState = response.cacheState\n\n  // 6. If originalURL\u2019s scheme is not an HTTP(S) scheme, then return.\n  if (!urlIsHttpHttpsScheme(originalURL)) {\n    return\n  }\n\n  // 7. If timingInfo is null, then return.\n  if (timingInfo === null) {\n    return\n  }\n\n  // 8. If response\u2019s timing allow passed flag is not set, then:\n  if (!response.timingAllowPassed) {\n    //  1. Set timingInfo to a the result of creating an opaque timing info for timingInfo.\n    timingInfo = createOpaqueTimingInfo({\n      startTime: timingInfo.startTime\n    })\n\n    //  2. Set cacheState to the empty string.\n    cacheState = ''\n  }\n\n  // 9. Set timingInfo\u2019s end time to the coarsened shared current time\n  // given global\u2019s relevant settings object\u2019s cross-origin isolated\n  // capability.\n  // TODO: given global\u2019s relevant settings object\u2019s cross-origin isolated\n  // capability?\n  timingInfo.endTime = coarsenedSharedCurrentTime()\n\n  // 10. Set response\u2019s timing info to timingInfo.\n  response.timingInfo = timingInfo\n\n  // 11. Mark resource timing for timingInfo, originalURL, initiatorType,\n  // global, and cacheState.\n  markResourceTiming(\n    timingInfo,\n    originalURL.href,\n    initiatorType,\n    globalThis,\n    cacheState,\n    '', // bodyType\n    response.status\n  )\n}\n\n// https://w3c.github.io/resource-timing/#dfn-mark-resource-timing\nconst markResourceTiming = performance.markResourceTiming\n\n// https://fetch.spec.whatwg.org/#abort-fetch\nfunction abortFetch (p, request, responseObject, error, controller /* undici-specific */) {\n  // 1. Reject promise with error.\n  if (p) {\n    // We might have already resolved the promise at this stage\n    p.reject(error)\n  }\n\n  // 2. If request\u2019s body is not null and is readable, then cancel request\u2019s\n  // body with error.\n  if (request.body?.stream != null && isReadable(request.body.stream)) {\n    request.body.stream.cancel(error).catch((err) => {\n      if (err.code === 'ERR_INVALID_STATE') {\n        // Node bug?\n        return\n      }\n      throw err\n    })\n  }\n\n  // 3. If responseObject is null, then return.\n  if (responseObject == null) {\n    return\n  }\n\n  // 4. Let response be responseObject\u2019s response.\n  const response = getResponseState(responseObject)\n\n  // 5. If response\u2019s body is not null and is readable, then error response\u2019s\n  // body with error.\n  if (response.body?.stream != null && isReadable(response.body.stream)) {\n    controller.error(error)\n  }\n}\n\n// https://fetch.spec.whatwg.org/#fetching\nfunction fetching ({\n  request,\n  processRequestBodyChunkLength,\n  processRequestEndOfBody,\n  processResponse,\n  processResponseEndOfBody,\n  processResponseConsumeBody,\n  useParallelQueue = false,\n  dispatcher = getGlobalDispatcher(), // undici\n  requestObject = null // Keep alive to prevent AbortController GC, see #4627\n}) {\n  // Ensure that the dispatcher is set accordingly\n  assert(dispatcher)\n\n  // 1. Let taskDestination be null.\n  let taskDestination = null\n\n  // 2. Let crossOriginIsolatedCapability be false.\n  let crossOriginIsolatedCapability = false\n\n  // 3. If request\u2019s client is non-null, then:\n  if (request.client != null) {\n    // 1. Set taskDestination to request\u2019s client\u2019s global object.\n    taskDestination = request.client.globalObject\n\n    // 2. Set crossOriginIsolatedCapability to request\u2019s client\u2019s cross-origin\n    // isolated capability.\n    crossOriginIsolatedCapability =\n      request.client.crossOriginIsolatedCapability\n  }\n\n  // 4. If useParallelQueue is true, then set taskDestination to the result of\n  // starting a new parallel queue.\n  // TODO\n\n  // 5. Let timingInfo be a new fetch timing info whose start time and\n  // post-redirect start time are the coarsened shared current time given\n  // crossOriginIsolatedCapability.\n  const currentTime = coarsenedSharedCurrentTime(crossOriginIsolatedCapability)\n  const timingInfo = createOpaqueTimingInfo({\n    startTime: currentTime\n  })\n\n  // 6. Let fetchParams be a new fetch params whose\n  // request is request,\n  // timing info is timingInfo,\n  // process request body chunk length is processRequestBodyChunkLength,\n  // process request end-of-body is processRequestEndOfBody,\n  // process response is processResponse,\n  // process response consume body is processResponseConsumeBody,\n  // process response end-of-body is processResponseEndOfBody,\n  // task destination is taskDestination,\n  // and cross-origin isolated capability is crossOriginIsolatedCapability.\n  const fetchParams = {\n    controller: new Fetch(dispatcher),\n    request,\n    timingInfo,\n    processRequestBodyChunkLength,\n    processRequestEndOfBody,\n    processResponse,\n    processResponseConsumeBody,\n    processResponseEndOfBody,\n    taskDestination,\n    crossOriginIsolatedCapability,\n    // Keep requestObject alive to prevent its AbortController from being GC'd\n    requestObject\n  }\n\n  // 7. If request\u2019s body is a byte sequence, then set request\u2019s body to\n  //    request\u2019s body as a body.\n  // NOTE: Since fetching is only called from fetch, body should already be\n  // extracted.\n  assert(!request.body || request.body.stream)\n\n  // 8. If request\u2019s window is \"client\", then set request\u2019s window to request\u2019s\n  // client, if request\u2019s client\u2019s global object is a Window object; otherwise\n  // \"no-window\".\n  if (request.window === 'client') {\n    // TODO: What if request.client is null?\n    request.window =\n      request.client?.globalObject?.constructor?.name === 'Window'\n        ? request.client\n        : 'no-window'\n  }\n\n  // 9. If request\u2019s origin is \"client\", then set request\u2019s origin to request\u2019s\n  // client\u2019s origin.\n  if (request.origin === 'client') {\n    request.origin = request.client.origin\n  }\n\n  // 10. If all of the following conditions are true:\n  // TODO\n\n  // 11. If request\u2019s policy container is \"client\", then:\n  if (request.policyContainer === 'client') {\n    // 1. If request\u2019s client is non-null, then set request\u2019s policy\n    // container to a clone of request\u2019s client\u2019s policy container. [HTML]\n    if (request.client != null) {\n      request.policyContainer = clonePolicyContainer(\n        request.client.policyContainer\n      )\n    } else {\n      // 2. Otherwise, set request\u2019s policy container to a new policy\n      // container.\n      request.policyContainer = makePolicyContainer()\n    }\n  }\n\n  // 12. If request\u2019s header list does not contain `Accept`, then:\n  if (!request.headersList.contains('accept', true)) {\n    // 1. Let value be `*/*`.\n    const value = '*/*'\n\n    // 2. A user agent should set value to the first matching statement, if\n    // any, switching on request\u2019s destination:\n    // \"document\"\n    // \"frame\"\n    // \"iframe\"\n    // `text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8`\n    // \"image\"\n    // `image/png,image/svg+xml,image/*;q=0.8,*/*;q=0.5`\n    // \"style\"\n    // `text/css,*/*;q=0.1`\n    // TODO\n\n    // 3. Append `Accept`/value to request\u2019s header list.\n    request.headersList.append('accept', value, true)\n  }\n\n  // 13. If request\u2019s header list does not contain `Accept-Language`, then\n  // user agents should append `Accept-Language`/an appropriate value to\n  // request\u2019s header list.\n  if (!request.headersList.contains('accept-language', true)) {\n    request.headersList.append('accept-language', '*', true)\n  }\n\n  // 14. If request\u2019s priority is null, then use request\u2019s initiator and\n  // destination appropriately in setting request\u2019s priority to a\n  // user-agent-defined object.\n  if (request.priority === null) {\n    // TODO\n  }\n\n  // 15. If request is a subresource request, then:\n  if (subresourceSet.has(request.destination)) {\n    // TODO\n  }\n\n  // 16. Run main fetch given fetchParams.\n  mainFetch(fetchParams, false)\n\n  // 17. Return fetchParam's controller\n  return fetchParams.controller\n}\n\n// https://fetch.spec.whatwg.org/#concept-main-fetch\nasync function mainFetch (fetchParams, recursive) {\n  try {\n    // 1. Let request be fetchParams\u2019s request.\n    const request = fetchParams.request\n\n    // 2. Let response be null.\n    let response = null\n\n    // 3. If request\u2019s local-URLs-only flag is set and request\u2019s current URL is\n    // not local, then set response to a network error.\n    if (request.localURLsOnly && !urlIsLocal(requestCurrentURL(request))) {\n      response = makeNetworkError('local URLs only')\n    }\n\n    // 4. Run report Content Security Policy violations for request.\n    // TODO\n\n    // 5. Upgrade request to a potentially trustworthy URL, if appropriate.\n    tryUpgradeRequestToAPotentiallyTrustworthyURL(request)\n\n    // 6. If should request be blocked due to a bad port, should fetching request\n    // be blocked as mixed content, or should request be blocked by Content\n    // Security Policy returns blocked, then set response to a network error.\n    if (requestBadPort(request) === 'blocked') {\n      response = makeNetworkError('bad port')\n    }\n    // TODO: should fetching request be blocked as mixed content?\n    // TODO: should request be blocked by Content Security Policy?\n\n    // 7. If request\u2019s referrer policy is the empty string, then set request\u2019s\n    // referrer policy to request\u2019s policy container\u2019s referrer policy.\n    if (request.referrerPolicy === '') {\n      request.referrerPolicy = request.policyContainer.referrerPolicy\n    }\n\n    // 8. If request\u2019s referrer is not \"no-referrer\", then set request\u2019s\n    // referrer to the result of invoking determine request\u2019s referrer.\n    if (request.referrer !== 'no-referrer') {\n      request.referrer = determineRequestsReferrer(request)\n    }\n\n    // 9. Set request\u2019s current URL\u2019s scheme to \"https\" if all of the following\n    // conditions are true:\n    // - request\u2019s current URL\u2019s scheme is \"http\"\n    // - request\u2019s current URL\u2019s host is a domain\n    // - Matching request\u2019s current URL\u2019s host per Known HSTS Host Domain Name\n    //   Matching results in either a superdomain match with an asserted\n    //   includeSubDomains directive or a congruent match (with or without an\n    //   asserted includeSubDomains directive). [HSTS]\n    // TODO\n\n    // 10. If recursive is false, then run the remaining steps in parallel.\n    // TODO\n\n    // 11. If response is null, then set response to the result of running\n    // the steps corresponding to the first matching statement:\n    if (response === null) {\n      const currentURL = requestCurrentURL(request)\n      if (\n        // - request\u2019s current URL\u2019s origin is same origin with request\u2019s origin,\n        //   and request\u2019s response tainting is \"basic\"\n        (sameOrigin(currentURL, request.url) && request.responseTainting === 'basic') ||\n        // request\u2019s current URL\u2019s scheme is \"data\"\n        (currentURL.protocol === 'data:') ||\n        // - request\u2019s mode is \"navigate\" or \"websocket\"\n        (request.mode === 'navigate' || request.mode === 'websocket')\n      ) {\n        // 1. Set request\u2019s response tainting to \"basic\".\n        request.responseTainting = 'basic'\n\n        // 2. Return the result of running scheme fetch given fetchParams.\n        response = await schemeFetch(fetchParams)\n\n      // request\u2019s mode is \"same-origin\"\n      } else if (request.mode === 'same-origin') {\n        // 1. Return a network error.\n        response = makeNetworkError('request mode cannot be \"same-origin\"')\n\n      // request\u2019s mode is \"no-cors\"\n      } else if (request.mode === 'no-cors') {\n        // 1. If request\u2019s redirect mode is not \"follow\", then return a network\n        // error.\n        if (request.redirect !== 'follow') {\n          response = makeNetworkError(\n            'redirect mode cannot be \"follow\" for \"no-cors\" request'\n          )\n        } else {\n          // 2. Set request\u2019s response tainting to \"opaque\".\n          request.responseTainting = 'opaque'\n\n          // 3. Return the result of running scheme fetch given fetchParams.\n          response = await schemeFetch(fetchParams)\n        }\n      // request\u2019s current URL\u2019s scheme is not an HTTP(S) scheme\n      } else if (!urlIsHttpHttpsScheme(requestCurrentURL(request))) {\n        // Return a network error.\n        response = makeNetworkError('URL scheme must be a HTTP(S) scheme')\n\n        // - request\u2019s use-CORS-preflight flag is set\n        // - request\u2019s unsafe-request flag is set and either request\u2019s method is\n        //   not a CORS-safelisted method or CORS-unsafe request-header names with\n        //   request\u2019s header list is not empty\n        //    1. Set request\u2019s response tainting to \"cors\".\n        //    2. Let corsWithPreflightResponse be the result of running HTTP fetch\n        //    given fetchParams and true.\n        //    3. If corsWithPreflightResponse is a network error, then clear cache\n        //    entries using request.\n        //    4. Return corsWithPreflightResponse.\n        // TODO\n\n      // Otherwise\n      } else {\n        //    1. Set request\u2019s response tainting to \"cors\".\n        request.responseTainting = 'cors'\n\n        //    2. Return the result of running HTTP fetch given fetchParams.\n        response = await httpFetch(fetchParams)\n      }\n    }\n\n    // 12. If recursive is true, then return response.\n    if (recursive) {\n      return response\n    }\n\n    // 13. If response is not a network error and response is not a filtered\n    // response, then:\n    if (response.status !== 0 && !response.internalResponse) {\n      // If request\u2019s response tainting is \"cors\", then:\n      if (request.responseTainting === 'cors') {\n        // 1. Let headerNames be the result of extracting header list values\n        // given `Access-Control-Expose-Headers` and response\u2019s header list.\n        // TODO\n        // 2. If request\u2019s credentials mode is not \"include\" and headerNames\n        // contains `*`, then set response\u2019s CORS-exposed header-name list to\n        // all unique header names in response\u2019s header list.\n        // TODO\n        // 3. Otherwise, if headerNames is not null or failure, then set\n        // response\u2019s CORS-exposed header-name list to headerNames.\n        // TODO\n      }\n\n      // Set response to the following filtered response with response as its\n      // internal response, depending on request\u2019s response tainting:\n      if (request.responseTainting === 'basic') {\n        response = filterResponse(response, 'basic')\n      } else if (request.responseTainting === 'cors') {\n        response = filterResponse(response, 'cors')\n      } else if (request.responseTainting === 'opaque') {\n        response = filterResponse(response, 'opaque')\n      } else {\n        assert(false)\n      }\n    }\n\n    // 14. Let internalResponse be response, if response is a network error,\n    // and response\u2019s internal response otherwise.\n    let internalResponse =\n      response.status === 0 ? response : response.internalResponse\n\n    // 15. If internalResponse\u2019s URL list is empty, then set it to a clone of\n    // request\u2019s URL list.\n    if (internalResponse.urlList.length === 0) {\n      internalResponse.urlList.push(...request.urlList)\n    }\n\n    // 16. If request\u2019s timing allow failed flag is unset, then set\n    // internalResponse\u2019s timing allow passed flag.\n    if (!request.timingAllowFailed) {\n      response.timingAllowPassed = true\n    }\n\n    // 17. If response is not a network error and any of the following returns\n    // blocked\n    // - should internalResponse to request be blocked as mixed content\n    // - should internalResponse to request be blocked by Content Security Policy\n    // - should internalResponse to request be blocked due to its MIME type\n    // - should internalResponse to request be blocked due to nosniff\n    // TODO\n\n    // 18. If response\u2019s type is \"opaque\", internalResponse\u2019s status is 206,\n    // internalResponse\u2019s range-requested flag is set, and request\u2019s header\n    // list does not contain `Range`, then set response and internalResponse\n    // to a network error.\n    if (\n      response.type === 'opaque' &&\n      internalResponse.status === 206 &&\n      internalResponse.rangeRequested &&\n      !request.headers.contains('range', true)\n    ) {\n      response = internalResponse = makeNetworkError()\n    }\n\n    // 19. If response is not a network error and either request\u2019s method is\n    // `HEAD` or `CONNECT`, or internalResponse\u2019s status is a null body status,\n    // set internalResponse\u2019s body to null and disregard any enqueuing toward\n    // it (if any).\n    if (\n      response.status !== 0 &&\n      (request.method === 'HEAD' ||\n        request.method === 'CONNECT' ||\n        nullBodyStatus.includes(internalResponse.status))\n    ) {\n      internalResponse.body = null\n      fetchParams.controller.dump = true\n    }\n\n    // 20. If request\u2019s integrity metadata is not the empty string, then:\n    if (request.integrity) {\n      // 1. Let processBodyError be this step: run fetch finale given fetchParams\n      // and a network error.\n      const processBodyError = (reason) =>\n        fetchFinale(fetchParams, makeNetworkError(reason))\n\n      // 2. If request\u2019s response tainting is \"opaque\", or response\u2019s body is null,\n      // then run processBodyError and abort these steps.\n      if (request.responseTainting === 'opaque' || response.body == null) {\n        processBodyError(response.error)\n        return\n      }\n\n      // 3. Let processBody given bytes be these steps:\n      const processBody = (bytes) => {\n        // 1. If bytes do not match request\u2019s integrity metadata,\n        // then run processBodyError and abort these steps. [SRI]\n        if (!bytesMatch(bytes, request.integrity)) {\n          processBodyError('integrity mismatch')\n          return\n        }\n\n        // 2. Set response\u2019s body to bytes as a body.\n        response.body = safelyExtractBody(bytes)[0]\n\n        // 3. Run fetch finale given fetchParams and response.\n        fetchFinale(fetchParams, response)\n      }\n\n      // 4. Fully read response\u2019s body given processBody and processBodyError.\n      fullyReadBody(response.body, processBody, processBodyError)\n    } else {\n      // 21. Otherwise, run fetch finale given fetchParams and response.\n      fetchFinale(fetchParams, response)\n    }\n  } catch (err) {\n    fetchParams.controller.terminate(err)\n  }\n}\n\n// https://fetch.spec.whatwg.org/#concept-scheme-fetch\n// given a fetch params fetchParams\nfunction schemeFetch (fetchParams) {\n  // Note: since the connection is destroyed on redirect, which sets fetchParams to a\n  // cancelled state, we do not want this condition to trigger *unless* there have been\n  // no redirects. See https://github.com/nodejs/undici/issues/1776\n  // 1. If fetchParams is canceled, then return the appropriate network error for fetchParams.\n  if (isCancelled(fetchParams) && fetchParams.request.redirectCount === 0) {\n    return Promise.resolve(makeAppropriateNetworkError(fetchParams))\n  }\n\n  // 2. Let request be fetchParams\u2019s request.\n  const { request } = fetchParams\n\n  const { protocol: scheme } = requestCurrentURL(request)\n\n  // 3. Switch on request\u2019s current URL\u2019s scheme and run the associated steps:\n  switch (scheme) {\n    case 'about:': {\n      // If request\u2019s current URL\u2019s path is the string \"blank\", then return a new response\n      // whose status message is `OK`, header list is \u00AB (`Content-Type`, `text/html;charset=utf-8`) \u00BB,\n      // and body is the empty byte sequence as a body.\n\n      // Otherwise, return a network error.\n      return Promise.resolve(makeNetworkError('about scheme is not supported'))\n    }\n    case 'blob:': {\n      if (!resolveObjectURL) {\n        resolveObjectURL = require('node:buffer').resolveObjectURL\n      }\n\n      // 1. Let blobURLEntry be request\u2019s current URL\u2019s blob URL entry.\n      const blobURLEntry = requestCurrentURL(request)\n\n      // https://github.com/web-platform-tests/wpt/blob/7b0ebaccc62b566a1965396e5be7bb2bc06f841f/FileAPI/url/resources/fetch-tests.js#L52-L56\n      // Buffer.resolveObjectURL does not ignore URL queries.\n      if (blobURLEntry.search.length !== 0) {\n        return Promise.resolve(makeNetworkError('NetworkError when attempting to fetch resource.'))\n      }\n\n      const blob = resolveObjectURL(blobURLEntry.toString())\n\n      // 2. If request\u2019s method is not `GET`, blobURLEntry is null, or blobURLEntry\u2019s\n      //    object is not a Blob object, then return a network error.\n      if (request.method !== 'GET' || !webidl.is.Blob(blob)) {\n        return Promise.resolve(makeNetworkError('invalid method'))\n      }\n\n      // 3. Let blob be blobURLEntry\u2019s object.\n      // Note: done above\n\n      // 4. Let response be a new response.\n      const response = makeResponse()\n\n      // 5. Let fullLength be blob\u2019s size.\n      const fullLength = blob.size\n\n      // 6. Let serializedFullLength be fullLength, serialized and isomorphic encoded.\n      const serializedFullLength = isomorphicEncode(`${fullLength}`)\n\n      // 7. Let type be blob\u2019s type.\n      const type = blob.type\n\n      // 8. If request\u2019s header list does not contain `Range`:\n      // 9. Otherwise:\n      if (!request.headersList.contains('range', true)) {\n        // 1. Let bodyWithType be the result of safely extracting blob.\n        // Note: in the FileAPI a blob \"object\" is a Blob *or* a MediaSource.\n        // In node, this can only ever be a Blob. Therefore we can safely\n        // use extractBody directly.\n        const bodyWithType = extractBody(blob)\n\n        // 2. Set response\u2019s status message to `OK`.\n        response.statusText = 'OK'\n\n        // 3. Set response\u2019s body to bodyWithType\u2019s body.\n        response.body = bodyWithType[0]\n\n        // 4. Set response\u2019s header list to \u00AB (`Content-Length`, serializedFullLength), (`Content-Type`, type) \u00BB.\n        response.headersList.set('content-length', serializedFullLength, true)\n        response.headersList.set('content-type', type, true)\n      } else {\n        // 1. Set response\u2019s range-requested flag.\n        response.rangeRequested = true\n\n        // 2. Let rangeHeader be the result of getting `Range` from request\u2019s header list.\n        const rangeHeader = request.headersList.get('range', true)\n\n        // 3. Let rangeValue be the result of parsing a single range header value given rangeHeader and true.\n        const rangeValue = simpleRangeHeaderValue(rangeHeader, true)\n\n        // 4. If rangeValue is failure, then return a network error.\n        if (rangeValue === 'failure') {\n          return Promise.resolve(makeNetworkError('failed to fetch the data URL'))\n        }\n\n        // 5. Let (rangeStart, rangeEnd) be rangeValue.\n        let { rangeStartValue: rangeStart, rangeEndValue: rangeEnd } = rangeValue\n\n        // 6. If rangeStart is null:\n        // 7. Otherwise:\n        if (rangeStart === null) {\n          // 1. Set rangeStart to fullLength \u2212 rangeEnd.\n          rangeStart = fullLength - rangeEnd\n\n          // 2. Set rangeEnd to rangeStart + rangeEnd \u2212 1.\n          rangeEnd = rangeStart + rangeEnd - 1\n        } else {\n          // 1. If rangeStart is greater than or equal to fullLength, then return a network error.\n          if (rangeStart >= fullLength) {\n            return Promise.resolve(makeNetworkError('Range start is greater than the blob\\'s size.'))\n          }\n\n          // 2. If rangeEnd is null or rangeEnd is greater than or equal to fullLength, then set\n          //    rangeEnd to fullLength \u2212 1.\n          if (rangeEnd === null || rangeEnd >= fullLength) {\n            rangeEnd = fullLength - 1\n          }\n        }\n\n        // 8. Let slicedBlob be the result of invoking slice blob given blob, rangeStart,\n        //    rangeEnd + 1, and type.\n        const slicedBlob = blob.slice(rangeStart, rangeEnd + 1, type)\n\n        // 9. Let slicedBodyWithType be the result of safely extracting slicedBlob.\n        // Note: same reason as mentioned above as to why we use extractBody\n        const slicedBodyWithType = extractBody(slicedBlob)\n\n        // 10. Set response\u2019s body to slicedBodyWithType\u2019s body.\n        response.body = slicedBodyWithType[0]\n\n        // 11. Let serializedSlicedLength be slicedBlob\u2019s size, serialized and isomorphic encoded.\n        const serializedSlicedLength = isomorphicEncode(`${slicedBlob.size}`)\n\n        // 12. Let contentRange be the result of invoking build a content range given rangeStart,\n        //     rangeEnd, and fullLength.\n        const contentRange = buildContentRange(rangeStart, rangeEnd, fullLength)\n\n        // 13. Set response\u2019s status to 206.\n        response.status = 206\n\n        // 14. Set response\u2019s status message to `Partial Content`.\n        response.statusText = 'Partial Content'\n\n        // 15. Set response\u2019s header list to \u00AB (`Content-Length`, serializedSlicedLength),\n        //     (`Content-Type`, type), (`Content-Range`, contentRange) \u00BB.\n        response.headersList.set('content-length', serializedSlicedLength, true)\n        response.headersList.set('content-type', type, true)\n        response.headersList.set('content-range', contentRange, true)\n      }\n\n      // 10. Return response.\n      return Promise.resolve(response)\n    }\n    case 'data:': {\n      // 1. Let dataURLStruct be the result of running the\n      //    data: URL processor on request\u2019s current URL.\n      const currentURL = requestCurrentURL(request)\n      const dataURLStruct = dataURLProcessor(currentURL)\n\n      // 2. If dataURLStruct is failure, then return a\n      //    network error.\n      if (dataURLStruct === 'failure') {\n        return Promise.resolve(makeNetworkError('failed to fetch the data URL'))\n      }\n\n      // 3. Let mimeType be dataURLStruct\u2019s MIME type, serialized.\n      const mimeType = serializeAMimeType(dataURLStruct.mimeType)\n\n      // 4. Return a response whose status message is `OK`,\n      //    header list is \u00AB (`Content-Type`, mimeType) \u00BB,\n      //    and body is dataURLStruct\u2019s body as a body.\n      return Promise.resolve(makeResponse({\n        statusText: 'OK',\n        headersList: [\n          ['content-type', { name: 'Content-Type', value: mimeType }]\n        ],\n        body: safelyExtractBody(dataURLStruct.body)[0]\n      }))\n    }\n    case 'file:': {\n      // For now, unfortunate as it is, file URLs are left as an exercise for the reader.\n      // When in doubt, return a network error.\n      return Promise.resolve(makeNetworkError('not implemented... yet...'))\n    }\n    case 'http:':\n    case 'https:': {\n      // Return the result of running HTTP fetch given fetchParams.\n\n      return httpFetch(fetchParams)\n        .catch((err) => makeNetworkError(err))\n    }\n    default: {\n      return Promise.resolve(makeNetworkError('unknown scheme'))\n    }\n  }\n}\n\n// https://fetch.spec.whatwg.org/#finalize-response\nfunction finalizeResponse (fetchParams, response) {\n  // 1. Set fetchParams\u2019s request\u2019s done flag.\n  fetchParams.request.done = true\n\n  // 2, If fetchParams\u2019s process response done is not null, then queue a fetch\n  // task to run fetchParams\u2019s process response done given response, with\n  // fetchParams\u2019s task destination.\n  if (fetchParams.processResponseDone != null) {\n    queueMicrotask(() => fetchParams.processResponseDone(response))\n  }\n}\n\n// https://fetch.spec.whatwg.org/#fetch-finale\nfunction fetchFinale (fetchParams, response) {\n  // 1. Let timingInfo be fetchParams\u2019s timing info.\n  let timingInfo = fetchParams.timingInfo\n\n  // 2. If response is not a network error and fetchParams\u2019s request\u2019s client is a secure context,\n  //    then set timingInfo\u2019s server-timing headers to the result of getting, decoding, and splitting\n  //    `Server-Timing` from response\u2019s internal response\u2019s header list.\n  // TODO\n\n  // 3. Let processResponseEndOfBody be the following steps:\n  const processResponseEndOfBody = () => {\n    // 1. Let unsafeEndTime be the unsafe shared current time.\n    const unsafeEndTime = Date.now() // ?\n\n    // 2. If fetchParams\u2019s request\u2019s destination is \"document\", then set fetchParams\u2019s controller\u2019s\n    //    full timing info to fetchParams\u2019s timing info.\n    if (fetchParams.request.destination === 'document') {\n      fetchParams.controller.fullTimingInfo = timingInfo\n    }\n\n    // 3. Set fetchParams\u2019s controller\u2019s report timing steps to the following steps given a global object global:\n    fetchParams.controller.reportTimingSteps = () => {\n      // 1. If fetchParams\u2019s request\u2019s URL\u2019s scheme is not an HTTP(S) scheme, then return.\n      if (!urlIsHttpHttpsScheme(fetchParams.request.url)) {\n        return\n      }\n\n      // 2. Set timingInfo\u2019s end time to the relative high resolution time given unsafeEndTime and global.\n      timingInfo.endTime = unsafeEndTime\n\n      // 3. Let cacheState be response\u2019s cache state.\n      let cacheState = response.cacheState\n\n      // 4. Let bodyInfo be response\u2019s body info.\n      const bodyInfo = response.bodyInfo\n\n      // 5. If response\u2019s timing allow passed flag is not set, then set timingInfo to the result of creating an\n      //    opaque timing info for timingInfo and set cacheState to the empty string.\n      if (!response.timingAllowPassed) {\n        timingInfo = createOpaqueTimingInfo(timingInfo)\n\n        cacheState = ''\n      }\n\n      // 6. Let responseStatus be 0.\n      let responseStatus = 0\n\n      // 7. If fetchParams\u2019s request\u2019s mode is not \"navigate\" or response\u2019s has-cross-origin-redirects is false:\n      if (fetchParams.request.mode !== 'navigator' || !response.hasCrossOriginRedirects) {\n        // 1. Set responseStatus to response\u2019s status.\n        responseStatus = response.status\n\n        // 2. Let mimeType be the result of extracting a MIME type from response\u2019s header list.\n        const mimeType = extractMimeType(response.headersList)\n\n        // 3. If mimeType is not failure, then set bodyInfo\u2019s content type to the result of minimizing a supported MIME type given mimeType.\n        if (mimeType !== 'failure') {\n          bodyInfo.contentType = minimizeSupportedMimeType(mimeType)\n        }\n      }\n\n      // 8. If fetchParams\u2019s request\u2019s initiator type is non-null, then mark resource timing given timingInfo,\n      //    fetchParams\u2019s request\u2019s URL, fetchParams\u2019s request\u2019s initiator type, global, cacheState, bodyInfo,\n      //    and responseStatus.\n      if (fetchParams.request.initiatorType != null) {\n        markResourceTiming(timingInfo, fetchParams.request.url.href, fetchParams.request.initiatorType, globalThis, cacheState, bodyInfo, responseStatus)\n      }\n    }\n\n    // 4. Let processResponseEndOfBodyTask be the following steps:\n    const processResponseEndOfBodyTask = () => {\n      // 1. Set fetchParams\u2019s request\u2019s done flag.\n      fetchParams.request.done = true\n\n      // 2. If fetchParams\u2019s process response end-of-body is non-null, then run fetchParams\u2019s process\n      //    response end-of-body given response.\n      if (fetchParams.processResponseEndOfBody != null) {\n        queueMicrotask(() => fetchParams.processResponseEndOfBody(response))\n      }\n\n      // 3. If fetchParams\u2019s request\u2019s initiator type is non-null and fetchParams\u2019s request\u2019s client\u2019s\n      //    global object is fetchParams\u2019s task destination, then run fetchParams\u2019s controller\u2019s report\n      //    timing steps given fetchParams\u2019s request\u2019s client\u2019s global object.\n      if (fetchParams.request.initiatorType != null) {\n        fetchParams.controller.reportTimingSteps()\n      }\n    }\n\n    // 5. Queue a fetch task to run processResponseEndOfBodyTask with fetchParams\u2019s task destination\n    queueMicrotask(() => processResponseEndOfBodyTask())\n  }\n\n  // 4. If fetchParams\u2019s process response is non-null, then queue a fetch task to run fetchParams\u2019s\n  //    process response given response, with fetchParams\u2019s task destination.\n  if (fetchParams.processResponse != null) {\n    queueMicrotask(() => {\n      fetchParams.processResponse(response)\n      fetchParams.processResponse = null\n    })\n  }\n\n  // 5. Let internalResponse be response, if response is a network error; otherwise response\u2019s internal response.\n  const internalResponse = response.type === 'error' ? response : (response.internalResponse ?? response)\n\n  // 6. If internalResponse\u2019s body is null, then run processResponseEndOfBody.\n  // 7. Otherwise:\n  if (internalResponse.body == null) {\n    processResponseEndOfBody()\n  } else {\n    // mcollina: all the following steps of the specs are skipped.\n    // The internal transform stream is not needed.\n    // See https://github.com/nodejs/undici/pull/3093#issuecomment-2050198541\n\n    // 1. Let transformStream be a new TransformStream.\n    // 2. Let identityTransformAlgorithm be an algorithm which, given chunk, enqueues chunk in transformStream.\n    // 3. Set up transformStream with transformAlgorithm set to identityTransformAlgorithm and flushAlgorithm\n    //    set to processResponseEndOfBody.\n    // 4. Set internalResponse\u2019s body\u2019s stream to the result of internalResponse\u2019s body\u2019s stream piped through transformStream.\n\n    finished(internalResponse.body.stream, () => {\n      processResponseEndOfBody()\n    })\n  }\n}\n\n// https://fetch.spec.whatwg.org/#http-fetch\nasync function httpFetch (fetchParams) {\n  // 1. Let request be fetchParams\u2019s request.\n  const request = fetchParams.request\n\n  // 2. Let response be null.\n  let response = null\n\n  // 3. Let actualResponse be null.\n  let actualResponse = null\n\n  // 4. Let timingInfo be fetchParams\u2019s timing info.\n  const timingInfo = fetchParams.timingInfo\n\n  // 5. If request\u2019s service-workers mode is \"all\", then:\n  if (request.serviceWorkers === 'all') {\n    // TODO\n  }\n\n  // 6. If response is null, then:\n  if (response === null) {\n    // 1. If makeCORSPreflight is true and one of these conditions is true:\n    // TODO\n\n    // 2. If request\u2019s redirect mode is \"follow\", then set request\u2019s\n    // service-workers mode to \"none\".\n    if (request.redirect === 'follow') {\n      request.serviceWorkers = 'none'\n    }\n\n    // 3. Set response and actualResponse to the result of running\n    // HTTP-network-or-cache fetch given fetchParams.\n    actualResponse = response = await httpNetworkOrCacheFetch(fetchParams)\n\n    // 4. If request\u2019s response tainting is \"cors\" and a CORS check\n    // for request and response returns failure, then return a network error.\n    if (\n      request.responseTainting === 'cors' &&\n      corsCheck(request, response) === 'failure'\n    ) {\n      return makeNetworkError('cors failure')\n    }\n\n    // 5. If the TAO check for request and response returns failure, then set\n    // request\u2019s timing allow failed flag.\n    if (TAOCheck(request, response) === 'failure') {\n      request.timingAllowFailed = true\n    }\n  }\n\n  // 7. If either request\u2019s response tainting or response\u2019s type\n  // is \"opaque\", and the cross-origin resource policy check with\n  // request\u2019s origin, request\u2019s client, request\u2019s destination,\n  // and actualResponse returns blocked, then return a network error.\n  if (\n    (request.responseTainting === 'opaque' || response.type === 'opaque') &&\n    crossOriginResourcePolicyCheck(\n      request.origin,\n      request.client,\n      request.destination,\n      actualResponse\n    ) === 'blocked'\n  ) {\n    return makeNetworkError('blocked')\n  }\n\n  // 8. If actualResponse\u2019s status is a redirect status, then:\n  if (redirectStatusSet.has(actualResponse.status)) {\n    // 1. If actualResponse\u2019s status is not 303, request\u2019s body is not null,\n    // and the connection uses HTTP/2, then user agents may, and are even\n    // encouraged to, transmit an RST_STREAM frame.\n    // See, https://github.com/whatwg/fetch/issues/1288\n    if (request.redirect !== 'manual') {\n      fetchParams.controller.connection.destroy(undefined, false)\n    }\n\n    // 2. Switch on request\u2019s redirect mode:\n    if (request.redirect === 'error') {\n      // Set response to a network error.\n      response = makeNetworkError('unexpected redirect')\n    } else if (request.redirect === 'manual') {\n      // Set response to an opaque-redirect filtered response whose internal\n      // response is actualResponse.\n      // NOTE(spec): On the web this would return an `opaqueredirect` response,\n      // but that doesn't make sense server side.\n      // See https://github.com/nodejs/undici/issues/1193.\n      response = actualResponse\n    } else if (request.redirect === 'follow') {\n      // Set response to the result of running HTTP-redirect fetch given\n      // fetchParams and response.\n      response = await httpRedirectFetch(fetchParams, response)\n    } else {\n      assert(false)\n    }\n  }\n\n  // 9. Set response\u2019s timing info to timingInfo.\n  response.timingInfo = timingInfo\n\n  // 10. Return response.\n  return response\n}\n\n// https://fetch.spec.whatwg.org/#http-redirect-fetch\nfunction httpRedirectFetch (fetchParams, response) {\n  // 1. Let request be fetchParams\u2019s request.\n  const request = fetchParams.request\n\n  // 2. Let actualResponse be response, if response is not a filtered response,\n  // and response\u2019s internal response otherwise.\n  const actualResponse = response.internalResponse\n    ? response.internalResponse\n    : response\n\n  // 3. Let locationURL be actualResponse\u2019s location URL given request\u2019s current\n  // URL\u2019s fragment.\n  let locationURL\n\n  try {\n    locationURL = responseLocationURL(\n      actualResponse,\n      requestCurrentURL(request).hash\n    )\n\n    // 4. If locationURL is null, then return response.\n    if (locationURL == null) {\n      return response\n    }\n  } catch (err) {\n    // 5. If locationURL is failure, then return a network error.\n    return Promise.resolve(makeNetworkError(err))\n  }\n\n  // 6. If locationURL\u2019s scheme is not an HTTP(S) scheme, then return a network\n  // error.\n  if (!urlIsHttpHttpsScheme(locationURL)) {\n    return Promise.resolve(makeNetworkError('URL scheme must be a HTTP(S) scheme'))\n  }\n\n  // 7. If request\u2019s redirect count is 20, then return a network error.\n  if (request.redirectCount === 20) {\n    return Promise.resolve(makeNetworkError('redirect count exceeded'))\n  }\n\n  // 8. Increase request\u2019s redirect count by 1.\n  request.redirectCount += 1\n\n  // 9. If request\u2019s mode is \"cors\", locationURL includes credentials, and\n  // request\u2019s origin is not same origin with locationURL\u2019s origin, then return\n  //  a network error.\n  if (\n    request.mode === 'cors' &&\n    (locationURL.username || locationURL.password) &&\n    !sameOrigin(request, locationURL)\n  ) {\n    return Promise.resolve(makeNetworkError('cross origin not allowed for request mode \"cors\"'))\n  }\n\n  // 10. If request\u2019s response tainting is \"cors\" and locationURL includes\n  // credentials, then return a network error.\n  if (\n    request.responseTainting === 'cors' &&\n    (locationURL.username || locationURL.password)\n  ) {\n    return Promise.resolve(makeNetworkError(\n      'URL cannot contain credentials for request mode \"cors\"'\n    ))\n  }\n\n  // 11. If actualResponse\u2019s status is not 303, request\u2019s body is non-null,\n  // and request\u2019s body\u2019s source is null, then return a network error.\n  if (\n    actualResponse.status !== 303 &&\n    request.body != null &&\n    request.body.source == null\n  ) {\n    return Promise.resolve(makeNetworkError())\n  }\n\n  // 12. If one of the following is true\n  // - actualResponse\u2019s status is 301 or 302 and request\u2019s method is `POST`\n  // - actualResponse\u2019s status is 303 and request\u2019s method is not `GET` or `HEAD`\n  if (\n    ([301, 302].includes(actualResponse.status) && request.method === 'POST') ||\n    (actualResponse.status === 303 &&\n      !GET_OR_HEAD.includes(request.method))\n  ) {\n    // then:\n    // 1. Set request\u2019s method to `GET` and request\u2019s body to null.\n    request.method = 'GET'\n    request.body = null\n\n    // 2. For each headerName of request-body-header name, delete headerName from\n    // request\u2019s header list.\n    for (const headerName of requestBodyHeader) {\n      request.headersList.delete(headerName)\n    }\n  }\n\n  // 13. If request\u2019s current URL\u2019s origin is not same origin with locationURL\u2019s\n  //     origin, then for each headerName of CORS non-wildcard request-header name,\n  //     delete headerName from request\u2019s header list.\n  if (!sameOrigin(requestCurrentURL(request), locationURL)) {\n    // https://fetch.spec.whatwg.org/#cors-non-wildcard-request-header-name\n    request.headersList.delete('authorization', true)\n\n    // https://fetch.spec.whatwg.org/#authentication-entries\n    request.headersList.delete('proxy-authorization', true)\n\n    // \"Cookie\" and \"Host\" are forbidden request-headers, which undici doesn't implement.\n    request.headersList.delete('cookie', true)\n    request.headersList.delete('host', true)\n  }\n\n  // 14. If request's body is non-null, then set request's body to the first return\n  // value of safely extracting request's body's source.\n  if (request.body != null) {\n    assert(request.body.source != null)\n    request.body = safelyExtractBody(request.body.source)[0]\n  }\n\n  // 15. Let timingInfo be fetchParams\u2019s timing info.\n  const timingInfo = fetchParams.timingInfo\n\n  // 16. Set timingInfo\u2019s redirect end time and post-redirect start time to the\n  // coarsened shared current time given fetchParams\u2019s cross-origin isolated\n  // capability.\n  timingInfo.redirectEndTime = timingInfo.postRedirectStartTime =\n    coarsenedSharedCurrentTime(fetchParams.crossOriginIsolatedCapability)\n\n  // 17. If timingInfo\u2019s redirect start time is 0, then set timingInfo\u2019s\n  //  redirect start time to timingInfo\u2019s start time.\n  if (timingInfo.redirectStartTime === 0) {\n    timingInfo.redirectStartTime = timingInfo.startTime\n  }\n\n  // 18. Append locationURL to request\u2019s URL list.\n  request.urlList.push(locationURL)\n\n  // 19. Invoke set request\u2019s referrer policy on redirect on request and\n  // actualResponse.\n  setRequestReferrerPolicyOnRedirect(request, actualResponse)\n\n  // 20. Return the result of running main fetch given fetchParams and true.\n  return mainFetch(fetchParams, true)\n}\n\n// https://fetch.spec.whatwg.org/#http-network-or-cache-fetch\nasync function httpNetworkOrCacheFetch (\n  fetchParams,\n  isAuthenticationFetch = false,\n  isNewConnectionFetch = false\n) {\n  // 1. Let request be fetchParams\u2019s request.\n  const request = fetchParams.request\n\n  // 2. Let httpFetchParams be null.\n  let httpFetchParams = null\n\n  // 3. Let httpRequest be null.\n  let httpRequest = null\n\n  // 4. Let response be null.\n  let response = null\n\n  // 5. Let storedResponse be null.\n  // TODO: cache\n\n  // 6. Let httpCache be null.\n  const httpCache = null\n\n  // 7. Let the revalidatingFlag be unset.\n  const revalidatingFlag = false\n\n  // 8. Run these steps, but abort when the ongoing fetch is terminated:\n\n  //    1. If request\u2019s window is \"no-window\" and request\u2019s redirect mode is\n  //    \"error\", then set httpFetchParams to fetchParams and httpRequest to\n  //    request.\n  if (request.window === 'no-window' && request.redirect === 'error') {\n    httpFetchParams = fetchParams\n    httpRequest = request\n  } else {\n    // Otherwise:\n\n    // 1. Set httpRequest to a clone of request.\n    httpRequest = cloneRequest(request)\n\n    // 2. Set httpFetchParams to a copy of fetchParams.\n    httpFetchParams = { ...fetchParams }\n\n    // 3. Set httpFetchParams\u2019s request to httpRequest.\n    httpFetchParams.request = httpRequest\n  }\n\n  //    3. Let includeCredentials be true if one of\n  const includeCredentials =\n    request.credentials === 'include' ||\n    (request.credentials === 'same-origin' &&\n      request.responseTainting === 'basic')\n\n  //    4. Let contentLength be httpRequest\u2019s body\u2019s length, if httpRequest\u2019s\n  //    body is non-null; otherwise null.\n  const contentLength = httpRequest.body ? httpRequest.body.length : null\n\n  //    5. Let contentLengthHeaderValue be null.\n  let contentLengthHeaderValue = null\n\n  //    6. If httpRequest\u2019s body is null and httpRequest\u2019s method is `POST` or\n  //    `PUT`, then set contentLengthHeaderValue to `0`.\n  if (\n    httpRequest.body == null &&\n    ['POST', 'PUT'].includes(httpRequest.method)\n  ) {\n    contentLengthHeaderValue = '0'\n  }\n\n  //    7. If contentLength is non-null, then set contentLengthHeaderValue to\n  //    contentLength, serialized and isomorphic encoded.\n  if (contentLength != null) {\n    contentLengthHeaderValue = isomorphicEncode(`${contentLength}`)\n  }\n\n  //    8. If contentLengthHeaderValue is non-null, then append\n  //    `Content-Length`/contentLengthHeaderValue to httpRequest\u2019s header\n  //    list.\n  if (contentLengthHeaderValue != null) {\n    httpRequest.headersList.append('content-length', contentLengthHeaderValue, true)\n  }\n\n  //    9. If contentLengthHeaderValue is non-null, then append (`Content-Length`,\n  //    contentLengthHeaderValue) to httpRequest\u2019s header list.\n\n  //    10. If contentLength is non-null and httpRequest\u2019s keepalive is true,\n  //    then:\n  if (contentLength != null && httpRequest.keepalive) {\n    // NOTE: keepalive is a noop outside of browser context.\n  }\n\n  //    11. If httpRequest\u2019s referrer is a URL, then append\n  //    `Referer`/httpRequest\u2019s referrer, serialized and isomorphic encoded,\n  //     to httpRequest\u2019s header list.\n  if (webidl.is.URL(httpRequest.referrer)) {\n    httpRequest.headersList.append('referer', isomorphicEncode(httpRequest.referrer.href), true)\n  }\n\n  //    12. Append a request `Origin` header for httpRequest.\n  appendRequestOriginHeader(httpRequest)\n\n  //    13. Append the Fetch metadata headers for httpRequest. [FETCH-METADATA]\n  appendFetchMetadata(httpRequest)\n\n  //    14. If httpRequest\u2019s header list does not contain `User-Agent`, then\n  //    user agents should append `User-Agent`/default `User-Agent` value to\n  //    httpRequest\u2019s header list.\n  if (!httpRequest.headersList.contains('user-agent', true)) {\n    httpRequest.headersList.append('user-agent', defaultUserAgent, true)\n  }\n\n  //    15. If httpRequest\u2019s cache mode is \"default\" and httpRequest\u2019s header\n  //    list contains `If-Modified-Since`, `If-None-Match`,\n  //    `If-Unmodified-Since`, `If-Match`, or `If-Range`, then set\n  //    httpRequest\u2019s cache mode to \"no-store\".\n  if (\n    httpRequest.cache === 'default' &&\n    (httpRequest.headersList.contains('if-modified-since', true) ||\n      httpRequest.headersList.contains('if-none-match', true) ||\n      httpRequest.headersList.contains('if-unmodified-since', true) ||\n      httpRequest.headersList.contains('if-match', true) ||\n      httpRequest.headersList.contains('if-range', true))\n  ) {\n    httpRequest.cache = 'no-store'\n  }\n\n  //    16. If httpRequest\u2019s cache mode is \"no-cache\", httpRequest\u2019s prevent\n  //    no-cache cache-control header modification flag is unset, and\n  //    httpRequest\u2019s header list does not contain `Cache-Control`, then append\n  //    `Cache-Control`/`max-age=0` to httpRequest\u2019s header list.\n  if (\n    httpRequest.cache === 'no-cache' &&\n    !httpRequest.preventNoCacheCacheControlHeaderModification &&\n    !httpRequest.headersList.contains('cache-control', true)\n  ) {\n    httpRequest.headersList.append('cache-control', 'max-age=0', true)\n  }\n\n  //    17. If httpRequest\u2019s cache mode is \"no-store\" or \"reload\", then:\n  if (httpRequest.cache === 'no-store' || httpRequest.cache === 'reload') {\n    // 1. If httpRequest\u2019s header list does not contain `Pragma`, then append\n    // `Pragma`/`no-cache` to httpRequest\u2019s header list.\n    if (!httpRequest.headersList.contains('pragma', true)) {\n      httpRequest.headersList.append('pragma', 'no-cache', true)\n    }\n\n    // 2. If httpRequest\u2019s header list does not contain `Cache-Control`,\n    // then append `Cache-Control`/`no-cache` to httpRequest\u2019s header list.\n    if (!httpRequest.headersList.contains('cache-control', true)) {\n      httpRequest.headersList.append('cache-control', 'no-cache', true)\n    }\n  }\n\n  //    18. If httpRequest\u2019s header list contains `Range`, then append\n  //    `Accept-Encoding`/`identity` to httpRequest\u2019s header list.\n  if (httpRequest.headersList.contains('range', true)) {\n    httpRequest.headersList.append('accept-encoding', 'identity', true)\n  }\n\n  //    19. Modify httpRequest\u2019s header list per HTTP. Do not append a given\n  //    header if httpRequest\u2019s header list contains that header\u2019s name.\n  //    TODO: https://github.com/whatwg/fetch/issues/1285#issuecomment-896560129\n  if (!httpRequest.headersList.contains('accept-encoding', true)) {\n    if (urlHasHttpsScheme(requestCurrentURL(httpRequest))) {\n      httpRequest.headersList.append('accept-encoding', 'br, gzip, deflate', true)\n    } else {\n      httpRequest.headersList.append('accept-encoding', 'gzip, deflate', true)\n    }\n  }\n\n  httpRequest.headersList.delete('host', true)\n\n  //    21. If includeCredentials is true, then:\n  if (includeCredentials) {\n    // 1. If the user agent is not configured to block cookies for httpRequest\n    // (see section 7 of [COOKIES]), then:\n    // TODO: credentials\n\n    // 2. If httpRequest\u2019s header list does not contain `Authorization`, then:\n    if (!httpRequest.headersList.contains('authorization', true)) {\n      // 1. Let authorizationValue be null.\n      let authorizationValue = null\n\n      // 2. If there\u2019s an authentication entry for httpRequest and either\n      //    httpRequest\u2019s use-URL-credentials flag is unset or httpRequest\u2019s\n      //    current URL does not include credentials, then set\n      //    authorizationValue to authentication entry.\n      if (hasAuthenticationEntry(httpRequest) && (\n        httpRequest.useURLCredentials === undefined || !includesCredentials(requestCurrentURL(httpRequest))\n      )) {\n        // TODO\n      } else if (includesCredentials(requestCurrentURL(httpRequest)) && isAuthenticationFetch) {\n        // 3. Otherwise, if httpRequest\u2019s current URL does include credentials\n        //    and isAuthenticationFetch is true, set authorizationValue to\n        //    httpRequest\u2019s current URL, converted to an `Authorization` value\n        const { username, password } = requestCurrentURL(httpRequest)\n        authorizationValue = `Basic ${Buffer.from(`${username}:${password}`).toString('base64')}`\n      }\n\n      // 4. If authorizationValue is non-null, then append (`Authorization`,\n      //    authorizationValue) to httpRequest\u2019s header list.\n      if (authorizationValue !== null) {\n        httpRequest.headersList.append('Authorization', authorizationValue, false)\n      }\n    }\n  }\n\n  //    21. If there\u2019s a proxy-authentication entry, use it as appropriate.\n  //    TODO: proxy-authentication\n\n  //    22. Set httpCache to the result of determining the HTTP cache\n  //    partition, given httpRequest.\n  //    TODO: cache\n\n  //    23. If httpCache is null, then set httpRequest\u2019s cache mode to\n  //    \"no-store\".\n  if (httpCache == null) {\n    httpRequest.cache = 'no-store'\n  }\n\n  //    24. If httpRequest\u2019s cache mode is neither \"no-store\" nor \"reload\",\n  //    then:\n  if (httpRequest.cache !== 'no-store' && httpRequest.cache !== 'reload') {\n    // TODO: cache\n  }\n\n  // 9. If aborted, then return the appropriate network error for fetchParams.\n  // TODO\n\n  // 10. If response is null, then:\n  if (response == null) {\n    // 1. If httpRequest\u2019s cache mode is \"only-if-cached\", then return a\n    // network error.\n    if (httpRequest.cache === 'only-if-cached') {\n      return makeNetworkError('only if cached')\n    }\n\n    // 2. Let forwardResponse be the result of running HTTP-network fetch\n    // given httpFetchParams, includeCredentials, and isNewConnectionFetch.\n    const forwardResponse = await httpNetworkFetch(\n      httpFetchParams,\n      includeCredentials,\n      isNewConnectionFetch\n    )\n\n    // 3. If httpRequest\u2019s method is unsafe and forwardResponse\u2019s status is\n    // in the range 200 to 399, inclusive, invalidate appropriate stored\n    // responses in httpCache, as per the \"Invalidation\" chapter of HTTP\n    // Caching, and set storedResponse to null. [HTTP-CACHING]\n    if (\n      !safeMethodsSet.has(httpRequest.method) &&\n      forwardResponse.status >= 200 &&\n      forwardResponse.status <= 399\n    ) {\n      // TODO: cache\n    }\n\n    // 4. If the revalidatingFlag is set and forwardResponse\u2019s status is 304,\n    // then:\n    if (revalidatingFlag && forwardResponse.status === 304) {\n      // TODO: cache\n    }\n\n    // 5. If response is null, then:\n    if (response == null) {\n      // 1. Set response to forwardResponse.\n      response = forwardResponse\n\n      // 2. Store httpRequest and forwardResponse in httpCache, as per the\n      // \"Storing Responses in Caches\" chapter of HTTP Caching. [HTTP-CACHING]\n      // TODO: cache\n    }\n  }\n\n  // 11. Set response\u2019s URL list to a clone of httpRequest\u2019s URL list.\n  response.urlList = [...httpRequest.urlList]\n\n  // 12. If httpRequest\u2019s header list contains `Range`, then set response\u2019s\n  // range-requested flag.\n  if (httpRequest.headersList.contains('range', true)) {\n    response.rangeRequested = true\n  }\n\n  // 13. Set response\u2019s request-includes-credentials to includeCredentials.\n  response.requestIncludesCredentials = includeCredentials\n\n  // 14. If response\u2019s status is 401, httpRequest\u2019s response tainting is not \"cors\",\n  //     includeCredentials is true, and request\u2019s traversable for user prompts is\n  //     a traversable navigable:\n  if (response.status === 401 && httpRequest.responseTainting !== 'cors' && includeCredentials && isTraversableNavigable(request.traversableForUserPrompts)) {\n    // 2. If request\u2019s body is non-null, then:\n    if (request.body != null) {\n      // 1. If request\u2019s body\u2019s source is null, then return a network error.\n      if (request.body.source == null) {\n        return makeNetworkError('expected non-null body source')\n      }\n\n      // 2. Set request\u2019s body to the body of the result of safely extracting\n      //    request\u2019s body\u2019s source.\n      request.body = safelyExtractBody(request.body.source)[0]\n    }\n\n    // 3. If request\u2019s use-URL-credentials flag is unset or isAuthenticationFetch is\n    //    true, then:\n    if (request.useURLCredentials === undefined || isAuthenticationFetch) {\n      // 1. If fetchParams is canceled, then return the appropriate network error\n      //    for fetchParams.\n      if (isCancelled(fetchParams)) {\n        return makeAppropriateNetworkError(fetchParams)\n      }\n\n      // 2. Let username and password be the result of prompting the end user for a\n      //    username and password, respectively, in request\u2019s traversable for user prompts.\n      // TODO\n\n      // 3. Set the username given request\u2019s current URL and username.\n      // requestCurrentURL(request).username = TODO\n\n      // 4. Set the password given request\u2019s current URL and password.\n      // requestCurrentURL(request).password = TODO\n\n      // In browsers, the user will be prompted to enter a username/password before the request\n      // is re-sent. To prevent an infinite 401 loop, return the response for now.\n      // https://github.com/nodejs/undici/pull/4756\n      return response\n    }\n\n    // 4. Set response to the result of running HTTP-network-or-cache fetch given\n    //    fetchParams and true.\n    fetchParams.controller.connection.destroy()\n\n    response = await httpNetworkOrCacheFetch(fetchParams, true)\n  }\n\n  // 15. If response\u2019s status is 407, then:\n  if (response.status === 407) {\n    // 1. If request\u2019s window is \"no-window\", then return a network error.\n    if (request.window === 'no-window') {\n      return makeNetworkError()\n    }\n\n    // 2. ???\n\n    // 3. If fetchParams is canceled, then return the appropriate network error for fetchParams.\n    if (isCancelled(fetchParams)) {\n      return makeAppropriateNetworkError(fetchParams)\n    }\n\n    // 4. Prompt the end user as appropriate in request\u2019s window and store\n    // the result as a proxy-authentication entry. [HTTP-AUTH]\n    // TODO: Invoke some kind of callback?\n\n    // 5. Set response to the result of running HTTP-network-or-cache fetch given\n    // fetchParams.\n    // TODO\n    return makeNetworkError('proxy authentication required')\n  }\n\n  // 16. If all of the following are true\n  if (\n    // response\u2019s status is 421\n    response.status === 421 &&\n    // isNewConnectionFetch is false\n    !isNewConnectionFetch &&\n    // request\u2019s body is null, or request\u2019s body is non-null and request\u2019s body\u2019s source is non-null\n    (request.body == null || request.body.source != null)\n  ) {\n    // then:\n\n    // 1. If fetchParams is canceled, then return the appropriate network error for fetchParams.\n    if (isCancelled(fetchParams)) {\n      return makeAppropriateNetworkError(fetchParams)\n    }\n\n    // 2. Set response to the result of running HTTP-network-or-cache\n    // fetch given fetchParams, isAuthenticationFetch, and true.\n\n    // TODO (spec): The spec doesn't specify this but we need to cancel\n    // the active response before we can start a new one.\n    // https://github.com/whatwg/fetch/issues/1293\n    fetchParams.controller.connection.destroy()\n\n    response = await httpNetworkOrCacheFetch(\n      fetchParams,\n      isAuthenticationFetch,\n      true\n    )\n  }\n\n  // 17. If isAuthenticationFetch is true, then create an authentication entry\n  if (isAuthenticationFetch) {\n    // TODO\n  }\n\n  // 18. Return response.\n  return response\n}\n\n// https://fetch.spec.whatwg.org/#http-network-fetch\nasync function httpNetworkFetch (\n  fetchParams,\n  includeCredentials = false,\n  forceNewConnection = false\n) {\n  assert(!fetchParams.controller.connection || fetchParams.controller.connection.destroyed)\n\n  fetchParams.controller.connection = {\n    abort: null,\n    destroyed: false,\n    destroy (err, abort = true) {\n      if (!this.destroyed) {\n        this.destroyed = true\n        if (abort) {\n          this.abort?.(err ?? new DOMException('The operation was aborted.', 'AbortError'))\n        }\n      }\n    }\n  }\n\n  // 1. Let request be fetchParams\u2019s request.\n  const request = fetchParams.request\n\n  // 2. Let response be null.\n  let response = null\n\n  // 3. Let timingInfo be fetchParams\u2019s timing info.\n  const timingInfo = fetchParams.timingInfo\n\n  // 4. Let httpCache be the result of determining the HTTP cache partition,\n  // given request.\n  // TODO: cache\n  const httpCache = null\n\n  // 5. If httpCache is null, then set request\u2019s cache mode to \"no-store\".\n  if (httpCache == null) {\n    request.cache = 'no-store'\n  }\n\n  // 6. Let networkPartitionKey be the result of determining the network\n  // partition key given request.\n  // TODO\n\n  // 7. Let newConnection be \"yes\" if forceNewConnection is true; otherwise\n  // \"no\".\n  const newConnection = forceNewConnection ? 'yes' : 'no' // eslint-disable-line no-unused-vars\n\n  // 8. Switch on request\u2019s mode:\n  if (request.mode === 'websocket') {\n    // Let connection be the result of obtaining a WebSocket connection,\n    // given request\u2019s current URL.\n    // TODO\n  } else {\n    // Let connection be the result of obtaining a connection, given\n    // networkPartitionKey, request\u2019s current URL\u2019s origin,\n    // includeCredentials, and forceNewConnection.\n    // TODO\n  }\n\n  // 9. Run these steps, but abort when the ongoing fetch is terminated:\n\n  //    1. If connection is failure, then return a network error.\n\n  //    2. Set timingInfo\u2019s final connection timing info to the result of\n  //    calling clamp and coarsen connection timing info with connection\u2019s\n  //    timing info, timingInfo\u2019s post-redirect start time, and fetchParams\u2019s\n  //    cross-origin isolated capability.\n\n  //    3. If connection is not an HTTP/2 connection, request\u2019s body is non-null,\n  //    and request\u2019s body\u2019s source is null, then append (`Transfer-Encoding`,\n  //    `chunked`) to request\u2019s header list.\n\n  //    4. Set timingInfo\u2019s final network-request start time to the coarsened\n  //    shared current time given fetchParams\u2019s cross-origin isolated\n  //    capability.\n\n  //    5. Set response to the result of making an HTTP request over connection\n  //    using request with the following caveats:\n\n  //        - Follow the relevant requirements from HTTP. [HTTP] [HTTP-SEMANTICS]\n  //        [HTTP-COND] [HTTP-CACHING] [HTTP-AUTH]\n\n  //        - If request\u2019s body is non-null, and request\u2019s body\u2019s source is null,\n  //        then the user agent may have a buffer of up to 64 kibibytes and store\n  //        a part of request\u2019s body in that buffer. If the user agent reads from\n  //        request\u2019s body beyond that buffer\u2019s size and the user agent needs to\n  //        resend request, then instead return a network error.\n\n  //        - Set timingInfo\u2019s final network-response start time to the coarsened\n  //        shared current time given fetchParams\u2019s cross-origin isolated capability,\n  //        immediately after the user agent\u2019s HTTP parser receives the first byte\n  //        of the response (e.g., frame header bytes for HTTP/2 or response status\n  //        line for HTTP/1.x).\n\n  //        - Wait until all the headers are transmitted.\n\n  //        - Any responses whose status is in the range 100 to 199, inclusive,\n  //        and is not 101, are to be ignored, except for the purposes of setting\n  //        timingInfo\u2019s final network-response start time above.\n\n  //    - If request\u2019s header list contains `Transfer-Encoding`/`chunked` and\n  //    response is transferred via HTTP/1.0 or older, then return a network\n  //    error.\n\n  //    - If the HTTP request results in a TLS client certificate dialog, then:\n\n  //        1. If request\u2019s window is an environment settings object, make the\n  //        dialog available in request\u2019s window.\n\n  //        2. Otherwise, return a network error.\n\n  // To transmit request\u2019s body body, run these steps:\n  let requestBody = null\n  // 1. If body is null and fetchParams\u2019s process request end-of-body is\n  // non-null, then queue a fetch task given fetchParams\u2019s process request\n  // end-of-body and fetchParams\u2019s task destination.\n  if (request.body == null && fetchParams.processRequestEndOfBody) {\n    queueMicrotask(() => fetchParams.processRequestEndOfBody())\n  } else if (request.body != null) {\n    // 2. Otherwise, if body is non-null:\n\n    //    1. Let processBodyChunk given bytes be these steps:\n    const processBodyChunk = async function * (bytes) {\n      // 1. If the ongoing fetch is terminated, then abort these steps.\n      if (isCancelled(fetchParams)) {\n        return\n      }\n\n      // 2. Run this step in parallel: transmit bytes.\n      yield bytes\n\n      // 3. If fetchParams\u2019s process request body is non-null, then run\n      // fetchParams\u2019s process request body given bytes\u2019s length.\n      fetchParams.processRequestBodyChunkLength?.(bytes.byteLength)\n    }\n\n    // 2. Let processEndOfBody be these steps:\n    const processEndOfBody = () => {\n      // 1. If fetchParams is canceled, then abort these steps.\n      if (isCancelled(fetchParams)) {\n        return\n      }\n\n      // 2. If fetchParams\u2019s process request end-of-body is non-null,\n      // then run fetchParams\u2019s process request end-of-body.\n      if (fetchParams.processRequestEndOfBody) {\n        fetchParams.processRequestEndOfBody()\n      }\n    }\n\n    // 3. Let processBodyError given e be these steps:\n    const processBodyError = (e) => {\n      // 1. If fetchParams is canceled, then abort these steps.\n      if (isCancelled(fetchParams)) {\n        return\n      }\n\n      // 2. If e is an \"AbortError\" DOMException, then abort fetchParams\u2019s controller.\n      if (e.name === 'AbortError') {\n        fetchParams.controller.abort()\n      } else {\n        fetchParams.controller.terminate(e)\n      }\n    }\n\n    // 4. Incrementally read request\u2019s body given processBodyChunk, processEndOfBody,\n    // processBodyError, and fetchParams\u2019s task destination.\n    requestBody = (async function * () {\n      try {\n        for await (const bytes of request.body.stream) {\n          yield * processBodyChunk(bytes)\n        }\n        processEndOfBody()\n      } catch (err) {\n        processBodyError(err)\n      }\n    })()\n  }\n\n  try {\n    // socket is only provided for websockets\n    const { body, status, statusText, headersList, socket } = await dispatch({ body: requestBody })\n\n    if (socket) {\n      response = makeResponse({ status, statusText, headersList, socket })\n    } else {\n      const iterator = body[Symbol.asyncIterator]()\n      fetchParams.controller.next = () => iterator.next()\n\n      response = makeResponse({ status, statusText, headersList })\n    }\n  } catch (err) {\n    // 10. If aborted, then:\n    if (err.name === 'AbortError') {\n      // 1. If connection uses HTTP/2, then transmit an RST_STREAM frame.\n      fetchParams.controller.connection.destroy()\n\n      // 2. Return the appropriate network error for fetchParams.\n      return makeAppropriateNetworkError(fetchParams, err)\n    }\n\n    return makeNetworkError(err)\n  }\n\n  // 11. Let pullAlgorithm be an action that resumes the ongoing fetch\n  // if it is suspended.\n  const pullAlgorithm = () => {\n    return fetchParams.controller.resume()\n  }\n\n  // 12. Let cancelAlgorithm be an algorithm that aborts fetchParams\u2019s\n  // controller with reason, given reason.\n  const cancelAlgorithm = (reason) => {\n    // If the aborted fetch was already terminated, then we do not\n    // need to do anything.\n    if (!isCancelled(fetchParams)) {\n      fetchParams.controller.abort(reason)\n    }\n  }\n\n  // 13. Let highWaterMark be a non-negative, non-NaN number, chosen by\n  // the user agent.\n  // TODO\n\n  // 14. Let sizeAlgorithm be an algorithm that accepts a chunk object\n  // and returns a non-negative, non-NaN, non-infinite number, chosen by the user agent.\n  // TODO\n\n  // 15. Let stream be a new ReadableStream.\n  // 16. Set up stream with byte reading support with pullAlgorithm set to pullAlgorithm,\n  //     cancelAlgorithm set to cancelAlgorithm.\n  const stream = new ReadableStream(\n    {\n      start (controller) {\n        fetchParams.controller.controller = controller\n      },\n      pull: pullAlgorithm,\n      cancel: cancelAlgorithm,\n      type: 'bytes'\n    }\n  )\n\n  // 17. Run these steps, but abort when the ongoing fetch is terminated:\n\n  //    1. Set response\u2019s body to a new body whose stream is stream.\n  response.body = { stream, source: null, length: null }\n\n  //    2. If response is not a network error and request\u2019s cache mode is\n  //    not \"no-store\", then update response in httpCache for request.\n  //    TODO\n\n  //    3. If includeCredentials is true and the user agent is not configured\n  //    to block cookies for request (see section 7 of [COOKIES]), then run the\n  //    \"set-cookie-string\" parsing algorithm (see section 5.2 of [COOKIES]) on\n  //    the value of each header whose name is a byte-case-insensitive match for\n  //    `Set-Cookie` in response\u2019s header list, if any, and request\u2019s current URL.\n  //    TODO\n\n  // 18. If aborted, then:\n  // TODO\n\n  // 19. Run these steps in parallel:\n\n  //    1. Run these steps, but abort when fetchParams is canceled:\n  if (!fetchParams.controller.resume) {\n    fetchParams.controller.on('terminated', onAborted)\n  }\n\n  fetchParams.controller.resume = async () => {\n    // 1. While true\n    while (true) {\n      // 1-3. See onData...\n\n      // 4. Set bytes to the result of handling content codings given\n      // codings and bytes.\n      let bytes\n      let isFailure\n      try {\n        const { done, value } = await fetchParams.controller.next()\n\n        if (isAborted(fetchParams)) {\n          break\n        }\n\n        bytes = done ? undefined : value\n      } catch (err) {\n        if (fetchParams.controller.ended && !timingInfo.encodedBodySize) {\n          // zlib doesn't like empty streams.\n          bytes = undefined\n        } else {\n          bytes = err\n\n          // err may be propagated from the result of calling readablestream.cancel,\n          // which might not be an error. https://github.com/nodejs/undici/issues/2009\n          isFailure = true\n        }\n      }\n\n      if (bytes === undefined) {\n        // 2. Otherwise, if the bytes transmission for response\u2019s message\n        // body is done normally and stream is readable, then close\n        // stream, finalize response for fetchParams and response, and\n        // abort these in-parallel steps.\n        readableStreamClose(fetchParams.controller.controller)\n\n        finalizeResponse(fetchParams, response)\n\n        return\n      }\n\n      // 5. Increase timingInfo\u2019s decoded body size by bytes\u2019s length.\n      timingInfo.decodedBodySize += bytes?.byteLength ?? 0\n\n      // 6. If bytes is failure, then terminate fetchParams\u2019s controller.\n      if (isFailure) {\n        fetchParams.controller.terminate(bytes)\n        return\n      }\n\n      // 7. Enqueue a Uint8Array wrapping an ArrayBuffer containing bytes\n      // into stream.\n      const buffer = new Uint8Array(bytes)\n      if (buffer.byteLength) {\n        fetchParams.controller.controller.enqueue(buffer)\n      }\n\n      // 8. If stream is errored, then terminate the ongoing fetch.\n      if (isErrored(stream)) {\n        fetchParams.controller.terminate()\n        return\n      }\n\n      // 9. If stream doesn\u2019t need more data ask the user agent to suspend\n      // the ongoing fetch.\n      if (fetchParams.controller.controller.desiredSize <= 0) {\n        return\n      }\n    }\n  }\n\n  //    2. If aborted, then:\n  function onAborted (reason) {\n    // 2. If fetchParams is aborted, then:\n    if (isAborted(fetchParams)) {\n      // 1. Set response\u2019s aborted flag.\n      response.aborted = true\n\n      // 2. If stream is readable, then error stream with the result of\n      //    deserialize a serialized abort reason given fetchParams\u2019s\n      //    controller\u2019s serialized abort reason and an\n      //    implementation-defined realm.\n      if (isReadable(stream)) {\n        fetchParams.controller.controller.error(\n          fetchParams.controller.serializedAbortReason\n        )\n      }\n    } else {\n      // 3. Otherwise, if stream is readable, error stream with a TypeError.\n      if (isReadable(stream)) {\n        fetchParams.controller.controller.error(new TypeError('terminated', {\n          cause: isErrorLike(reason) ? reason : undefined\n        }))\n      }\n    }\n\n    // 4. If connection uses HTTP/2, then transmit an RST_STREAM frame.\n    // 5. Otherwise, the user agent should close connection unless it would be bad for performance to do so.\n    fetchParams.controller.connection.destroy()\n  }\n\n  // 20. Return response.\n  return response\n\n  function dispatch ({ body }) {\n    const url = requestCurrentURL(request)\n    /** @type {import('../../..').Agent} */\n    const agent = fetchParams.controller.dispatcher\n\n    return new Promise((resolve, reject) => agent.dispatch(\n      {\n        path: url.href.slice(url.origin.length, url.hash.length ? -url.hash.length : undefined),\n        origin: url.origin,\n        method: request.method,\n        body: agent.isMockActive ? request.body && (request.body.source || request.body.stream) : body,\n        headers: request.headersList.entries,\n        maxRedirections: 0,\n        upgrade: request.mode === 'websocket' ? 'websocket' : undefined\n      },\n      {\n        body: null,\n        abort: null,\n\n        onConnect (abort) {\n          // TODO (fix): Do we need connection here?\n          const { connection } = fetchParams.controller\n\n          // Set timingInfo\u2019s final connection timing info to the result of calling clamp and coarsen\n          // connection timing info with connection\u2019s timing info, timingInfo\u2019s post-redirect start\n          // time, and fetchParams\u2019s cross-origin isolated capability.\n          // TODO: implement connection timing\n          timingInfo.finalConnectionTimingInfo = clampAndCoarsenConnectionTimingInfo(undefined, timingInfo.postRedirectStartTime, fetchParams.crossOriginIsolatedCapability)\n\n          if (connection.destroyed) {\n            abort(new DOMException('The operation was aborted.', 'AbortError'))\n          } else {\n            fetchParams.controller.on('terminated', abort)\n            this.abort = connection.abort = abort\n          }\n\n          // Set timingInfo\u2019s final network-request start time to the coarsened shared current time given\n          // fetchParams\u2019s cross-origin isolated capability.\n          timingInfo.finalNetworkRequestStartTime = coarsenedSharedCurrentTime(fetchParams.crossOriginIsolatedCapability)\n        },\n\n        onResponseStarted () {\n          // Set timingInfo\u2019s final network-response start time to the coarsened shared current\n          // time given fetchParams\u2019s cross-origin isolated capability, immediately after the\n          // user agent\u2019s HTTP parser receives the first byte of the response (e.g., frame header\n          // bytes for HTTP/2 or response status line for HTTP/1.x).\n          timingInfo.finalNetworkResponseStartTime = coarsenedSharedCurrentTime(fetchParams.crossOriginIsolatedCapability)\n        },\n\n        onHeaders (status, rawHeaders, resume, statusText) {\n          if (status < 200) {\n            return false\n          }\n\n          const headersList = new HeadersList()\n\n          for (let i = 0; i < rawHeaders.length; i += 2) {\n            headersList.append(bufferToLowerCasedHeaderName(rawHeaders[i]), rawHeaders[i + 1].toString('latin1'), true)\n          }\n          const location = headersList.get('location', true)\n\n          this.body = new Readable({ read: resume })\n\n          const willFollow = location && request.redirect === 'follow' &&\n            redirectStatusSet.has(status)\n\n          const decoders = []\n\n          // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Encoding\n          if (request.method !== 'HEAD' && request.method !== 'CONNECT' && !nullBodyStatus.includes(status) && !willFollow) {\n            // https://www.rfc-editor.org/rfc/rfc7231#section-3.1.2.1\n            const contentEncoding = headersList.get('content-encoding', true)\n            // \"All content-coding values are case-insensitive...\"\n            /** @type {string[]} */\n            const codings = contentEncoding ? contentEncoding.toLowerCase().split(',') : []\n\n            // Limit the number of content-encodings to prevent resource exhaustion.\n            // CVE fix similar to urllib3 (GHSA-gm62-xv2j-4w53) and curl (CVE-2022-32206).\n            const maxContentEncodings = 5\n            if (codings.length > maxContentEncodings) {\n              reject(new Error(`too many content-encodings in response: ${codings.length}, maximum allowed is ${maxContentEncodings}`))\n              return true\n            }\n\n            for (let i = codings.length - 1; i >= 0; --i) {\n              const coding = codings[i].trim()\n              // https://www.rfc-editor.org/rfc/rfc9112.html#section-7.2\n              if (coding === 'x-gzip' || coding === 'gzip') {\n                decoders.push(zlib.createGunzip({\n                  // Be less strict when decoding compressed responses, since sometimes\n                  // servers send slightly invalid responses that are still accepted\n                  // by common browsers.\n                  // Always using Z_SYNC_FLUSH is what cURL does.\n                  flush: zlib.constants.Z_SYNC_FLUSH,\n                  finishFlush: zlib.constants.Z_SYNC_FLUSH\n                }))\n              } else if (coding === 'deflate') {\n                decoders.push(createInflate({\n                  flush: zlib.constants.Z_SYNC_FLUSH,\n                  finishFlush: zlib.constants.Z_SYNC_FLUSH\n                }))\n              } else if (coding === 'br') {\n                decoders.push(zlib.createBrotliDecompress({\n                  flush: zlib.constants.BROTLI_OPERATION_FLUSH,\n                  finishFlush: zlib.constants.BROTLI_OPERATION_FLUSH\n                }))\n              } else if (coding === 'zstd' && hasZstd) {\n                decoders.push(zlib.createZstdDecompress({\n                  flush: zlib.constants.ZSTD_e_continue,\n                  finishFlush: zlib.constants.ZSTD_e_end\n                }))\n              } else {\n                decoders.length = 0\n                break\n              }\n            }\n          }\n\n          const onError = this.onError.bind(this)\n\n          resolve({\n            status,\n            statusText,\n            headersList,\n            body: decoders.length\n              ? pipeline(this.body, ...decoders, (err) => {\n                if (err) {\n                  this.onError(err)\n                }\n              }).on('error', onError)\n              : this.body.on('error', onError)\n          })\n\n          return true\n        },\n\n        onData (chunk) {\n          if (fetchParams.controller.dump) {\n            return\n          }\n\n          // 1. If one or more bytes have been transmitted from response\u2019s\n          // message body, then:\n\n          //  1. Let bytes be the transmitted bytes.\n          const bytes = chunk\n\n          //  2. Let codings be the result of extracting header list values\n          //  given `Content-Encoding` and response\u2019s header list.\n          //  See pullAlgorithm.\n\n          //  3. Increase timingInfo\u2019s encoded body size by bytes\u2019s length.\n          timingInfo.encodedBodySize += bytes.byteLength\n\n          //  4. See pullAlgorithm...\n\n          return this.body.push(bytes)\n        },\n\n        onComplete () {\n          if (this.abort) {\n            fetchParams.controller.off('terminated', this.abort)\n          }\n\n          fetchParams.controller.ended = true\n\n          this.body.push(null)\n        },\n\n        onError (error) {\n          if (this.abort) {\n            fetchParams.controller.off('terminated', this.abort)\n          }\n\n          this.body?.destroy(error)\n\n          fetchParams.controller.terminate(error)\n\n          reject(error)\n        },\n\n        onRequestUpgrade (_controller, status, headers, socket) {\n          // We need to support 200 for websocket over h2 as per RFC-8441\n          // Absence of session means H1\n          if ((socket.session != null && status !== 200) || (socket.session == null && status !== 101)) {\n            return false\n          }\n\n          const headersList = new HeadersList()\n\n          for (const [name, value] of Object.entries(headers)) {\n            if (value == null) {\n              continue\n            }\n\n            const headerName = name.toLowerCase()\n\n            if (Array.isArray(value)) {\n              for (const entry of value) {\n                headersList.append(headerName, String(entry), true)\n              }\n            } else {\n              headersList.append(headerName, String(value), true)\n            }\n          }\n\n          resolve({\n            status,\n            statusText: STATUS_CODES[status],\n            headersList,\n            socket\n          })\n\n          return true\n        },\n\n        onUpgrade (status, rawHeaders, socket) {\n          // We need to support 200 for websocket over h2 as per RFC-8441\n          // Absence of session means H1\n          if ((socket.session != null && status !== 200) || (socket.session == null && status !== 101)) {\n            return false\n          }\n\n          const headersList = new HeadersList()\n\n          for (let i = 0; i < rawHeaders.length; i += 2) {\n            headersList.append(bufferToLowerCasedHeaderName(rawHeaders[i]), rawHeaders[i + 1].toString('latin1'), true)\n          }\n\n          resolve({\n            status,\n            statusText: STATUS_CODES[status],\n            headersList,\n            socket\n          })\n\n          return true\n        }\n      }\n    ))\n  }\n}\n\nmodule.exports = {\n  fetch,\n  Fetch,\n  fetching,\n  finalizeAndReportTiming\n}\n", "'use strict'\n\nconst assert = require('node:assert')\nconst { URLSerializer } = require('../fetch/data-url')\nconst { isValidHeaderName } = require('../fetch/util')\n\n/**\n * @see https://url.spec.whatwg.org/#concept-url-equals\n * @param {URL} A\n * @param {URL} B\n * @param {boolean | undefined} excludeFragment\n * @returns {boolean}\n */\nfunction urlEquals (A, B, excludeFragment = false) {\n  const serializedA = URLSerializer(A, excludeFragment)\n\n  const serializedB = URLSerializer(B, excludeFragment)\n\n  return serializedA === serializedB\n}\n\n/**\n * @see https://github.com/chromium/chromium/blob/694d20d134cb553d8d89e5500b9148012b1ba299/content/browser/cache_storage/cache_storage_cache.cc#L260-L262\n * @param {string} header\n */\nfunction getFieldValues (header) {\n  assert(header !== null)\n\n  const values = []\n\n  for (let value of header.split(',')) {\n    value = value.trim()\n\n    if (isValidHeaderName(value)) {\n      values.push(value)\n    }\n  }\n\n  return values\n}\n\nmodule.exports = {\n  urlEquals,\n  getFieldValues\n}\n", "'use strict'\n\nconst assert = require('node:assert')\n\nconst { kConstruct } = require('../../core/symbols')\nconst { urlEquals, getFieldValues } = require('./util')\nconst { kEnumerableProperty, isDisturbed } = require('../../core/util')\nconst { webidl } = require('../webidl')\nconst { cloneResponse, fromInnerResponse, getResponseState } = require('../fetch/response')\nconst { Request, fromInnerRequest, getRequestState } = require('../fetch/request')\nconst { fetching } = require('../fetch/index')\nconst { urlIsHttpHttpsScheme, readAllBytes } = require('../fetch/util')\nconst { createDeferredPromise } = require('../../util/promise')\n\n/**\n * @see https://w3c.github.io/ServiceWorker/#dfn-cache-batch-operation\n * @typedef {Object} CacheBatchOperation\n * @property {'delete' | 'put'} type\n * @property {any} request\n * @property {any} response\n * @property {import('../../../types/cache').CacheQueryOptions} options\n */\n\n/**\n * @see https://w3c.github.io/ServiceWorker/#dfn-request-response-list\n * @typedef {[any, any][]} requestResponseList\n */\n\nclass Cache {\n  /**\n   * @see https://w3c.github.io/ServiceWorker/#dfn-relevant-request-response-list\n   * @type {requestResponseList}\n   */\n  #relevantRequestResponseList\n\n  constructor () {\n    if (arguments[0] !== kConstruct) {\n      webidl.illegalConstructor()\n    }\n\n    webidl.util.markAsUncloneable(this)\n    this.#relevantRequestResponseList = arguments[1]\n  }\n\n  async match (request, options = {}) {\n    webidl.brandCheck(this, Cache)\n\n    const prefix = 'Cache.match'\n    webidl.argumentLengthCheck(arguments, 1, prefix)\n\n    request = webidl.converters.RequestInfo(request)\n    options = webidl.converters.CacheQueryOptions(options, prefix, 'options')\n\n    const p = this.#internalMatchAll(request, options, 1)\n\n    if (p.length === 0) {\n      return\n    }\n\n    return p[0]\n  }\n\n  async matchAll (request = undefined, options = {}) {\n    webidl.brandCheck(this, Cache)\n\n    const prefix = 'Cache.matchAll'\n    if (request !== undefined) request = webidl.converters.RequestInfo(request)\n    options = webidl.converters.CacheQueryOptions(options, prefix, 'options')\n\n    return this.#internalMatchAll(request, options)\n  }\n\n  async add (request) {\n    webidl.brandCheck(this, Cache)\n\n    const prefix = 'Cache.add'\n    webidl.argumentLengthCheck(arguments, 1, prefix)\n\n    request = webidl.converters.RequestInfo(request)\n\n    // 1.\n    const requests = [request]\n\n    // 2.\n    const responseArrayPromise = this.addAll(requests)\n\n    // 3.\n    return await responseArrayPromise\n  }\n\n  async addAll (requests) {\n    webidl.brandCheck(this, Cache)\n\n    const prefix = 'Cache.addAll'\n    webidl.argumentLengthCheck(arguments, 1, prefix)\n\n    // 1.\n    const responsePromises = []\n\n    // 2.\n    const requestList = []\n\n    // 3.\n    for (let request of requests) {\n      if (request === undefined) {\n        throw webidl.errors.conversionFailed({\n          prefix,\n          argument: 'Argument 1',\n          types: ['undefined is not allowed']\n        })\n      }\n\n      request = webidl.converters.RequestInfo(request)\n\n      if (typeof request === 'string') {\n        continue\n      }\n\n      // 3.1\n      const r = getRequestState(request)\n\n      // 3.2\n      if (!urlIsHttpHttpsScheme(r.url) || r.method !== 'GET') {\n        throw webidl.errors.exception({\n          header: prefix,\n          message: 'Expected http/s scheme when method is not GET.'\n        })\n      }\n    }\n\n    // 4.\n    /** @type {ReturnType<typeof fetching>[]} */\n    const fetchControllers = []\n\n    // 5.\n    for (const request of requests) {\n      // 5.1\n      const r = getRequestState(new Request(request))\n\n      // 5.2\n      if (!urlIsHttpHttpsScheme(r.url)) {\n        throw webidl.errors.exception({\n          header: prefix,\n          message: 'Expected http/s scheme.'\n        })\n      }\n\n      // 5.4\n      r.initiator = 'fetch'\n      r.destination = 'subresource'\n\n      // 5.5\n      requestList.push(r)\n\n      // 5.6\n      const responsePromise = createDeferredPromise()\n\n      // 5.7\n      fetchControllers.push(fetching({\n        request: r,\n        processResponse (response) {\n          // 1.\n          if (response.type === 'error' || response.status === 206 || response.status < 200 || response.status > 299) {\n            responsePromise.reject(webidl.errors.exception({\n              header: 'Cache.addAll',\n              message: 'Received an invalid status code or the request failed.'\n            }))\n          } else if (response.headersList.contains('vary')) { // 2.\n            // 2.1\n            const fieldValues = getFieldValues(response.headersList.get('vary'))\n\n            // 2.2\n            for (const fieldValue of fieldValues) {\n              // 2.2.1\n              if (fieldValue === '*') {\n                responsePromise.reject(webidl.errors.exception({\n                  header: 'Cache.addAll',\n                  message: 'invalid vary field value'\n                }))\n\n                for (const controller of fetchControllers) {\n                  controller.abort()\n                }\n\n                return\n              }\n            }\n          }\n        },\n        processResponseEndOfBody (response) {\n          // 1.\n          if (response.aborted) {\n            responsePromise.reject(new DOMException('aborted', 'AbortError'))\n            return\n          }\n\n          // 2.\n          responsePromise.resolve(response)\n        }\n      }))\n\n      // 5.8\n      responsePromises.push(responsePromise.promise)\n    }\n\n    // 6.\n    const p = Promise.all(responsePromises)\n\n    // 7.\n    const responses = await p\n\n    // 7.1\n    const operations = []\n\n    // 7.2\n    let index = 0\n\n    // 7.3\n    for (const response of responses) {\n      // 7.3.1\n      /** @type {CacheBatchOperation} */\n      const operation = {\n        type: 'put', // 7.3.2\n        request: requestList[index], // 7.3.3\n        response // 7.3.4\n      }\n\n      operations.push(operation) // 7.3.5\n\n      index++ // 7.3.6\n    }\n\n    // 7.5\n    const cacheJobPromise = createDeferredPromise()\n\n    // 7.6.1\n    let errorData = null\n\n    // 7.6.2\n    try {\n      this.#batchCacheOperations(operations)\n    } catch (e) {\n      errorData = e\n    }\n\n    // 7.6.3\n    queueMicrotask(() => {\n      // 7.6.3.1\n      if (errorData === null) {\n        cacheJobPromise.resolve(undefined)\n      } else {\n        // 7.6.3.2\n        cacheJobPromise.reject(errorData)\n      }\n    })\n\n    // 7.7\n    return cacheJobPromise.promise\n  }\n\n  async put (request, response) {\n    webidl.brandCheck(this, Cache)\n\n    const prefix = 'Cache.put'\n    webidl.argumentLengthCheck(arguments, 2, prefix)\n\n    request = webidl.converters.RequestInfo(request)\n    response = webidl.converters.Response(response, prefix, 'response')\n\n    // 1.\n    let innerRequest = null\n\n    // 2.\n    if (webidl.is.Request(request)) {\n      innerRequest = getRequestState(request)\n    } else { // 3.\n      innerRequest = getRequestState(new Request(request))\n    }\n\n    // 4.\n    if (!urlIsHttpHttpsScheme(innerRequest.url) || innerRequest.method !== 'GET') {\n      throw webidl.errors.exception({\n        header: prefix,\n        message: 'Expected an http/s scheme when method is not GET'\n      })\n    }\n\n    // 5.\n    const innerResponse = getResponseState(response)\n\n    // 6.\n    if (innerResponse.status === 206) {\n      throw webidl.errors.exception({\n        header: prefix,\n        message: 'Got 206 status'\n      })\n    }\n\n    // 7.\n    if (innerResponse.headersList.contains('vary')) {\n      // 7.1.\n      const fieldValues = getFieldValues(innerResponse.headersList.get('vary'))\n\n      // 7.2.\n      for (const fieldValue of fieldValues) {\n        // 7.2.1\n        if (fieldValue === '*') {\n          throw webidl.errors.exception({\n            header: prefix,\n            message: 'Got * vary field value'\n          })\n        }\n      }\n    }\n\n    // 8.\n    if (innerResponse.body && (isDisturbed(innerResponse.body.stream) || innerResponse.body.stream.locked)) {\n      throw webidl.errors.exception({\n        header: prefix,\n        message: 'Response body is locked or disturbed'\n      })\n    }\n\n    // 9.\n    const clonedResponse = cloneResponse(innerResponse)\n\n    // 10.\n    const bodyReadPromise = createDeferredPromise()\n\n    // 11.\n    if (innerResponse.body != null) {\n      // 11.1\n      const stream = innerResponse.body.stream\n\n      // 11.2\n      const reader = stream.getReader()\n\n      // 11.3\n      readAllBytes(reader, bodyReadPromise.resolve, bodyReadPromise.reject)\n    } else {\n      bodyReadPromise.resolve(undefined)\n    }\n\n    // 12.\n    /** @type {CacheBatchOperation[]} */\n    const operations = []\n\n    // 13.\n    /** @type {CacheBatchOperation} */\n    const operation = {\n      type: 'put', // 14.\n      request: innerRequest, // 15.\n      response: clonedResponse // 16.\n    }\n\n    // 17.\n    operations.push(operation)\n\n    // 19.\n    const bytes = await bodyReadPromise.promise\n\n    if (clonedResponse.body != null) {\n      clonedResponse.body.source = bytes\n    }\n\n    // 19.1\n    const cacheJobPromise = createDeferredPromise()\n\n    // 19.2.1\n    let errorData = null\n\n    // 19.2.2\n    try {\n      this.#batchCacheOperations(operations)\n    } catch (e) {\n      errorData = e\n    }\n\n    // 19.2.3\n    queueMicrotask(() => {\n      // 19.2.3.1\n      if (errorData === null) {\n        cacheJobPromise.resolve()\n      } else { // 19.2.3.2\n        cacheJobPromise.reject(errorData)\n      }\n    })\n\n    return cacheJobPromise.promise\n  }\n\n  async delete (request, options = {}) {\n    webidl.brandCheck(this, Cache)\n\n    const prefix = 'Cache.delete'\n    webidl.argumentLengthCheck(arguments, 1, prefix)\n\n    request = webidl.converters.RequestInfo(request)\n    options = webidl.converters.CacheQueryOptions(options, prefix, 'options')\n\n    /**\n     * @type {Request}\n     */\n    let r = null\n\n    if (webidl.is.Request(request)) {\n      r = getRequestState(request)\n\n      if (r.method !== 'GET' && !options.ignoreMethod) {\n        return false\n      }\n    } else {\n      assert(typeof request === 'string')\n\n      r = getRequestState(new Request(request))\n    }\n\n    /** @type {CacheBatchOperation[]} */\n    const operations = []\n\n    /** @type {CacheBatchOperation} */\n    const operation = {\n      type: 'delete',\n      request: r,\n      options\n    }\n\n    operations.push(operation)\n\n    const cacheJobPromise = createDeferredPromise()\n\n    let errorData = null\n    let requestResponses\n\n    try {\n      requestResponses = this.#batchCacheOperations(operations)\n    } catch (e) {\n      errorData = e\n    }\n\n    queueMicrotask(() => {\n      if (errorData === null) {\n        cacheJobPromise.resolve(!!requestResponses?.length)\n      } else {\n        cacheJobPromise.reject(errorData)\n      }\n    })\n\n    return cacheJobPromise.promise\n  }\n\n  /**\n   * @see https://w3c.github.io/ServiceWorker/#dom-cache-keys\n   * @param {any} request\n   * @param {import('../../../types/cache').CacheQueryOptions} options\n   * @returns {Promise<readonly Request[]>}\n   */\n  async keys (request = undefined, options = {}) {\n    webidl.brandCheck(this, Cache)\n\n    const prefix = 'Cache.keys'\n\n    if (request !== undefined) request = webidl.converters.RequestInfo(request)\n    options = webidl.converters.CacheQueryOptions(options, prefix, 'options')\n\n    // 1.\n    let r = null\n\n    // 2.\n    if (request !== undefined) {\n      // 2.1\n      if (webidl.is.Request(request)) {\n        // 2.1.1\n        r = getRequestState(request)\n\n        // 2.1.2\n        if (r.method !== 'GET' && !options.ignoreMethod) {\n          return []\n        }\n      } else if (typeof request === 'string') { // 2.2\n        r = getRequestState(new Request(request))\n      }\n    }\n\n    // 4.\n    const promise = createDeferredPromise()\n\n    // 5.\n    // 5.1\n    const requests = []\n\n    // 5.2\n    if (request === undefined) {\n      // 5.2.1\n      for (const requestResponse of this.#relevantRequestResponseList) {\n        // 5.2.1.1\n        requests.push(requestResponse[0])\n      }\n    } else { // 5.3\n      // 5.3.1\n      const requestResponses = this.#queryCache(r, options)\n\n      // 5.3.2\n      for (const requestResponse of requestResponses) {\n        // 5.3.2.1\n        requests.push(requestResponse[0])\n      }\n    }\n\n    // 5.4\n    queueMicrotask(() => {\n      // 5.4.1\n      const requestList = []\n\n      // 5.4.2\n      for (const request of requests) {\n        const requestObject = fromInnerRequest(\n          request,\n          undefined,\n          new AbortController().signal,\n          'immutable'\n        )\n        // 5.4.2.1\n        requestList.push(requestObject)\n      }\n\n      // 5.4.3\n      promise.resolve(Object.freeze(requestList))\n    })\n\n    return promise.promise\n  }\n\n  /**\n   * @see https://w3c.github.io/ServiceWorker/#batch-cache-operations-algorithm\n   * @param {CacheBatchOperation[]} operations\n   * @returns {requestResponseList}\n   */\n  #batchCacheOperations (operations) {\n    // 1.\n    const cache = this.#relevantRequestResponseList\n\n    // 2.\n    const backupCache = [...cache]\n\n    // 3.\n    const addedItems = []\n\n    // 4.1\n    const resultList = []\n\n    try {\n      // 4.2\n      for (const operation of operations) {\n        // 4.2.1\n        if (operation.type !== 'delete' && operation.type !== 'put') {\n          throw webidl.errors.exception({\n            header: 'Cache.#batchCacheOperations',\n            message: 'operation type does not match \"delete\" or \"put\"'\n          })\n        }\n\n        // 4.2.2\n        if (operation.type === 'delete' && operation.response != null) {\n          throw webidl.errors.exception({\n            header: 'Cache.#batchCacheOperations',\n            message: 'delete operation should not have an associated response'\n          })\n        }\n\n        // 4.2.3\n        if (this.#queryCache(operation.request, operation.options, addedItems).length) {\n          throw new DOMException('???', 'InvalidStateError')\n        }\n\n        // 4.2.4\n        let requestResponses\n\n        // 4.2.5\n        if (operation.type === 'delete') {\n          // 4.2.5.1\n          requestResponses = this.#queryCache(operation.request, operation.options)\n\n          // TODO: the spec is wrong, this is needed to pass WPTs\n          if (requestResponses.length === 0) {\n            return []\n          }\n\n          // 4.2.5.2\n          for (const requestResponse of requestResponses) {\n            const idx = cache.indexOf(requestResponse)\n            assert(idx !== -1)\n\n            // 4.2.5.2.1\n            cache.splice(idx, 1)\n          }\n        } else if (operation.type === 'put') { // 4.2.6\n          // 4.2.6.1\n          if (operation.response == null) {\n            throw webidl.errors.exception({\n              header: 'Cache.#batchCacheOperations',\n              message: 'put operation should have an associated response'\n            })\n          }\n\n          // 4.2.6.2\n          const r = operation.request\n\n          // 4.2.6.3\n          if (!urlIsHttpHttpsScheme(r.url)) {\n            throw webidl.errors.exception({\n              header: 'Cache.#batchCacheOperations',\n              message: 'expected http or https scheme'\n            })\n          }\n\n          // 4.2.6.4\n          if (r.method !== 'GET') {\n            throw webidl.errors.exception({\n              header: 'Cache.#batchCacheOperations',\n              message: 'not get method'\n            })\n          }\n\n          // 4.2.6.5\n          if (operation.options != null) {\n            throw webidl.errors.exception({\n              header: 'Cache.#batchCacheOperations',\n              message: 'options must not be defined'\n            })\n          }\n\n          // 4.2.6.6\n          requestResponses = this.#queryCache(operation.request)\n\n          // 4.2.6.7\n          for (const requestResponse of requestResponses) {\n            const idx = cache.indexOf(requestResponse)\n            assert(idx !== -1)\n\n            // 4.2.6.7.1\n            cache.splice(idx, 1)\n          }\n\n          // 4.2.6.8\n          cache.push([operation.request, operation.response])\n\n          // 4.2.6.10\n          addedItems.push([operation.request, operation.response])\n        }\n\n        // 4.2.7\n        resultList.push([operation.request, operation.response])\n      }\n\n      // 4.3\n      return resultList\n    } catch (e) { // 5.\n      // 5.1\n      this.#relevantRequestResponseList.length = 0\n\n      // 5.2\n      this.#relevantRequestResponseList = backupCache\n\n      // 5.3\n      throw e\n    }\n  }\n\n  /**\n   * @see https://w3c.github.io/ServiceWorker/#query-cache\n   * @param {any} requestQuery\n   * @param {import('../../../types/cache').CacheQueryOptions} options\n   * @param {requestResponseList} targetStorage\n   * @returns {requestResponseList}\n   */\n  #queryCache (requestQuery, options, targetStorage) {\n    /** @type {requestResponseList} */\n    const resultList = []\n\n    const storage = targetStorage ?? this.#relevantRequestResponseList\n\n    for (const requestResponse of storage) {\n      const [cachedRequest, cachedResponse] = requestResponse\n      if (this.#requestMatchesCachedItem(requestQuery, cachedRequest, cachedResponse, options)) {\n        resultList.push(requestResponse)\n      }\n    }\n\n    return resultList\n  }\n\n  /**\n   * @see https://w3c.github.io/ServiceWorker/#request-matches-cached-item-algorithm\n   * @param {any} requestQuery\n   * @param {any} request\n   * @param {any | null} response\n   * @param {import('../../../types/cache').CacheQueryOptions | undefined} options\n   * @returns {boolean}\n   */\n  #requestMatchesCachedItem (requestQuery, request, response = null, options) {\n    // if (options?.ignoreMethod === false && request.method === 'GET') {\n    //   return false\n    // }\n\n    const queryURL = new URL(requestQuery.url)\n\n    const cachedURL = new URL(request.url)\n\n    if (options?.ignoreSearch) {\n      cachedURL.search = ''\n\n      queryURL.search = ''\n    }\n\n    if (!urlEquals(queryURL, cachedURL, true)) {\n      return false\n    }\n\n    if (\n      response == null ||\n      options?.ignoreVary ||\n      !response.headersList.contains('vary')\n    ) {\n      return true\n    }\n\n    const fieldValues = getFieldValues(response.headersList.get('vary'))\n\n    for (const fieldValue of fieldValues) {\n      if (fieldValue === '*') {\n        return false\n      }\n\n      const requestValue = request.headersList.get(fieldValue)\n      const queryValue = requestQuery.headersList.get(fieldValue)\n\n      // If one has the header and the other doesn't, or one has\n      // a different value than the other, return false\n      if (requestValue !== queryValue) {\n        return false\n      }\n    }\n\n    return true\n  }\n\n  #internalMatchAll (request, options, maxResponses = Infinity) {\n    // 1.\n    let r = null\n\n    // 2.\n    if (request !== undefined) {\n      if (webidl.is.Request(request)) {\n        // 2.1.1\n        r = getRequestState(request)\n\n        // 2.1.2\n        if (r.method !== 'GET' && !options.ignoreMethod) {\n          return []\n        }\n      } else if (typeof request === 'string') {\n        // 2.2.1\n        r = getRequestState(new Request(request))\n      }\n    }\n\n    // 5.\n    // 5.1\n    const responses = []\n\n    // 5.2\n    if (request === undefined) {\n      // 5.2.1\n      for (const requestResponse of this.#relevantRequestResponseList) {\n        responses.push(requestResponse[1])\n      }\n    } else { // 5.3\n      // 5.3.1\n      const requestResponses = this.#queryCache(r, options)\n\n      // 5.3.2\n      for (const requestResponse of requestResponses) {\n        responses.push(requestResponse[1])\n      }\n    }\n\n    // 5.4\n    // We don't implement CORs so we don't need to loop over the responses, yay!\n\n    // 5.5.1\n    const responseList = []\n\n    // 5.5.2\n    for (const response of responses) {\n      // 5.5.2.1\n      const responseObject = fromInnerResponse(cloneResponse(response), 'immutable')\n\n      responseList.push(responseObject)\n\n      if (responseList.length >= maxResponses) {\n        break\n      }\n    }\n\n    // 6.\n    return Object.freeze(responseList)\n  }\n}\n\nObject.defineProperties(Cache.prototype, {\n  [Symbol.toStringTag]: {\n    value: 'Cache',\n    configurable: true\n  },\n  match: kEnumerableProperty,\n  matchAll: kEnumerableProperty,\n  add: kEnumerableProperty,\n  addAll: kEnumerableProperty,\n  put: kEnumerableProperty,\n  delete: kEnumerableProperty,\n  keys: kEnumerableProperty\n})\n\nconst cacheQueryOptionConverters = [\n  {\n    key: 'ignoreSearch',\n    converter: webidl.converters.boolean,\n    defaultValue: () => false\n  },\n  {\n    key: 'ignoreMethod',\n    converter: webidl.converters.boolean,\n    defaultValue: () => false\n  },\n  {\n    key: 'ignoreVary',\n    converter: webidl.converters.boolean,\n    defaultValue: () => false\n  }\n]\n\nwebidl.converters.CacheQueryOptions = webidl.dictionaryConverter(cacheQueryOptionConverters)\n\nwebidl.converters.MultiCacheQueryOptions = webidl.dictionaryConverter([\n  ...cacheQueryOptionConverters,\n  {\n    key: 'cacheName',\n    converter: webidl.converters.DOMString\n  }\n])\n\nwebidl.converters.Response = webidl.interfaceConverter(\n  webidl.is.Response,\n  'Response'\n)\n\nwebidl.converters['sequence<RequestInfo>'] = webidl.sequenceConverter(\n  webidl.converters.RequestInfo\n)\n\nmodule.exports = {\n  Cache\n}\n", "'use strict'\n\nconst { Cache } = require('./cache')\nconst { webidl } = require('../webidl')\nconst { kEnumerableProperty } = require('../../core/util')\nconst { kConstruct } = require('../../core/symbols')\n\nclass CacheStorage {\n  /**\n   * @see https://w3c.github.io/ServiceWorker/#dfn-relevant-name-to-cache-map\n   * @type {Map<string, import('./cache').requestResponseList}\n   */\n  #caches = new Map()\n\n  constructor () {\n    if (arguments[0] !== kConstruct) {\n      webidl.illegalConstructor()\n    }\n\n    webidl.util.markAsUncloneable(this)\n  }\n\n  async match (request, options = {}) {\n    webidl.brandCheck(this, CacheStorage)\n    webidl.argumentLengthCheck(arguments, 1, 'CacheStorage.match')\n\n    request = webidl.converters.RequestInfo(request)\n    options = webidl.converters.MultiCacheQueryOptions(options)\n\n    // 1.\n    if (options.cacheName != null) {\n      // 1.1.1.1\n      if (this.#caches.has(options.cacheName)) {\n        // 1.1.1.1.1\n        const cacheList = this.#caches.get(options.cacheName)\n        const cache = new Cache(kConstruct, cacheList)\n\n        return await cache.match(request, options)\n      }\n    } else { // 2.\n      // 2.2\n      for (const cacheList of this.#caches.values()) {\n        const cache = new Cache(kConstruct, cacheList)\n\n        // 2.2.1.2\n        const response = await cache.match(request, options)\n\n        if (response !== undefined) {\n          return response\n        }\n      }\n    }\n  }\n\n  /**\n   * @see https://w3c.github.io/ServiceWorker/#cache-storage-has\n   * @param {string} cacheName\n   * @returns {Promise<boolean>}\n   */\n  async has (cacheName) {\n    webidl.brandCheck(this, CacheStorage)\n\n    const prefix = 'CacheStorage.has'\n    webidl.argumentLengthCheck(arguments, 1, prefix)\n\n    cacheName = webidl.converters.DOMString(cacheName, prefix, 'cacheName')\n\n    // 2.1.1\n    // 2.2\n    return this.#caches.has(cacheName)\n  }\n\n  /**\n   * @see https://w3c.github.io/ServiceWorker/#dom-cachestorage-open\n   * @param {string} cacheName\n   * @returns {Promise<Cache>}\n   */\n  async open (cacheName) {\n    webidl.brandCheck(this, CacheStorage)\n\n    const prefix = 'CacheStorage.open'\n    webidl.argumentLengthCheck(arguments, 1, prefix)\n\n    cacheName = webidl.converters.DOMString(cacheName, prefix, 'cacheName')\n\n    // 2.1\n    if (this.#caches.has(cacheName)) {\n      // await caches.open('v1') !== await caches.open('v1')\n\n      // 2.1.1\n      const cache = this.#caches.get(cacheName)\n\n      // 2.1.1.1\n      return new Cache(kConstruct, cache)\n    }\n\n    // 2.2\n    const cache = []\n\n    // 2.3\n    this.#caches.set(cacheName, cache)\n\n    // 2.4\n    return new Cache(kConstruct, cache)\n  }\n\n  /**\n   * @see https://w3c.github.io/ServiceWorker/#cache-storage-delete\n   * @param {string} cacheName\n   * @returns {Promise<boolean>}\n   */\n  async delete (cacheName) {\n    webidl.brandCheck(this, CacheStorage)\n\n    const prefix = 'CacheStorage.delete'\n    webidl.argumentLengthCheck(arguments, 1, prefix)\n\n    cacheName = webidl.converters.DOMString(cacheName, prefix, 'cacheName')\n\n    return this.#caches.delete(cacheName)\n  }\n\n  /**\n   * @see https://w3c.github.io/ServiceWorker/#cache-storage-keys\n   * @returns {Promise<string[]>}\n   */\n  async keys () {\n    webidl.brandCheck(this, CacheStorage)\n\n    // 2.1\n    const keys = this.#caches.keys()\n\n    // 2.2\n    return [...keys]\n  }\n}\n\nObject.defineProperties(CacheStorage.prototype, {\n  [Symbol.toStringTag]: {\n    value: 'CacheStorage',\n    configurable: true\n  },\n  match: kEnumerableProperty,\n  has: kEnumerableProperty,\n  open: kEnumerableProperty,\n  delete: kEnumerableProperty,\n  keys: kEnumerableProperty\n})\n\nmodule.exports = {\n  CacheStorage\n}\n", "'use strict'\n\n// https://wicg.github.io/cookie-store/#cookie-maximum-attribute-value-size\nconst maxAttributeValueSize = 1024\n\n// https://wicg.github.io/cookie-store/#cookie-maximum-name-value-pair-size\nconst maxNameValuePairSize = 4096\n\nmodule.exports = {\n  maxAttributeValueSize,\n  maxNameValuePairSize\n}\n", "'use strict'\n\n/**\n * @param {string} value\n * @returns {boolean}\n */\nfunction isCTLExcludingHtab (value) {\n  for (let i = 0; i < value.length; ++i) {\n    const code = value.charCodeAt(i)\n\n    if (\n      (code >= 0x00 && code <= 0x08) ||\n      (code >= 0x0A && code <= 0x1F) ||\n      code === 0x7F\n    ) {\n      return true\n    }\n  }\n  return false\n}\n\n/**\n CHAR           = <any US-ASCII character (octets 0 - 127)>\n token          = 1*<any CHAR except CTLs or separators>\n separators     = \"(\" | \")\" | \"<\" | \">\" | \"@\"\n                | \",\" | \";\" | \":\" | \"\\\" | <\">\n                | \"/\" | \"[\" | \"]\" | \"?\" | \"=\"\n                | \"{\" | \"}\" | SP | HT\n * @param {string} name\n */\nfunction validateCookieName (name) {\n  for (let i = 0; i < name.length; ++i) {\n    const code = name.charCodeAt(i)\n\n    if (\n      code < 0x21 || // exclude CTLs (0-31), SP and HT\n      code > 0x7E || // exclude non-ascii and DEL\n      code === 0x22 || // \"\n      code === 0x28 || // (\n      code === 0x29 || // )\n      code === 0x3C || // <\n      code === 0x3E || // >\n      code === 0x40 || // @\n      code === 0x2C || // ,\n      code === 0x3B || // ;\n      code === 0x3A || // :\n      code === 0x5C || // \\\n      code === 0x2F || // /\n      code === 0x5B || // [\n      code === 0x5D || // ]\n      code === 0x3F || // ?\n      code === 0x3D || // =\n      code === 0x7B || // {\n      code === 0x7D // }\n    ) {\n      throw new Error('Invalid cookie name')\n    }\n  }\n}\n\n/**\n cookie-value      = *cookie-octet / ( DQUOTE *cookie-octet DQUOTE )\n cookie-octet      = %x21 / %x23-2B / %x2D-3A / %x3C-5B / %x5D-7E\n                       ; US-ASCII characters excluding CTLs,\n                       ; whitespace DQUOTE, comma, semicolon,\n                       ; and backslash\n * @param {string} value\n */\nfunction validateCookieValue (value) {\n  let len = value.length\n  let i = 0\n\n  // if the value is wrapped in DQUOTE\n  if (value[0] === '\"') {\n    if (len === 1 || value[len - 1] !== '\"') {\n      throw new Error('Invalid cookie value')\n    }\n    --len\n    ++i\n  }\n\n  while (i < len) {\n    const code = value.charCodeAt(i++)\n\n    if (\n      code < 0x21 || // exclude CTLs (0-31)\n      code > 0x7E || // non-ascii and DEL (127)\n      code === 0x22 || // \"\n      code === 0x2C || // ,\n      code === 0x3B || // ;\n      code === 0x5C // \\\n    ) {\n      throw new Error('Invalid cookie value')\n    }\n  }\n}\n\n/**\n * path-value        = <any CHAR except CTLs or \";\">\n * @param {string} path\n */\nfunction validateCookiePath (path) {\n  for (let i = 0; i < path.length; ++i) {\n    const code = path.charCodeAt(i)\n\n    if (\n      code < 0x20 || // exclude CTLs (0-31)\n      code === 0x7F || // DEL\n      code === 0x3B // ;\n    ) {\n      throw new Error('Invalid cookie path')\n    }\n  }\n}\n\n/**\n * I have no idea why these values aren't allowed to be honest,\n * but Deno tests these. - Khafra\n * @param {string} domain\n */\nfunction validateCookieDomain (domain) {\n  if (\n    domain.startsWith('-') ||\n    domain.endsWith('.') ||\n    domain.endsWith('-')\n  ) {\n    throw new Error('Invalid cookie domain')\n  }\n}\n\nconst IMFDays = [\n  'Sun', 'Mon', 'Tue', 'Wed',\n  'Thu', 'Fri', 'Sat'\n]\n\nconst IMFMonths = [\n  'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',\n  'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'\n]\n\nconst IMFPaddedNumbers = Array(61).fill(0).map((_, i) => i.toString().padStart(2, '0'))\n\n/**\n * @see https://www.rfc-editor.org/rfc/rfc7231#section-7.1.1.1\n * @param {number|Date} date\n  IMF-fixdate  = day-name \",\" SP date1 SP time-of-day SP GMT\n  ; fixed length/zone/capitalization subset of the format\n  ; see Section 3.3 of [RFC5322]\n\n  day-name     = %x4D.6F.6E ; \"Mon\", case-sensitive\n              / %x54.75.65 ; \"Tue\", case-sensitive\n              / %x57.65.64 ; \"Wed\", case-sensitive\n              / %x54.68.75 ; \"Thu\", case-sensitive\n              / %x46.72.69 ; \"Fri\", case-sensitive\n              / %x53.61.74 ; \"Sat\", case-sensitive\n              / %x53.75.6E ; \"Sun\", case-sensitive\n  date1        = day SP month SP year\n                  ; e.g., 02 Jun 1982\n\n  day          = 2DIGIT\n  month        = %x4A.61.6E ; \"Jan\", case-sensitive\n              / %x46.65.62 ; \"Feb\", case-sensitive\n              / %x4D.61.72 ; \"Mar\", case-sensitive\n              / %x41.70.72 ; \"Apr\", case-sensitive\n              / %x4D.61.79 ; \"May\", case-sensitive\n              / %x4A.75.6E ; \"Jun\", case-sensitive\n              / %x4A.75.6C ; \"Jul\", case-sensitive\n              / %x41.75.67 ; \"Aug\", case-sensitive\n              / %x53.65.70 ; \"Sep\", case-sensitive\n              / %x4F.63.74 ; \"Oct\", case-sensitive\n              / %x4E.6F.76 ; \"Nov\", case-sensitive\n              / %x44.65.63 ; \"Dec\", case-sensitive\n  year         = 4DIGIT\n\n  GMT          = %x47.4D.54 ; \"GMT\", case-sensitive\n\n  time-of-day  = hour \":\" minute \":\" second\n              ; 00:00:00 - 23:59:60 (leap second)\n\n  hour         = 2DIGIT\n  minute       = 2DIGIT\n  second       = 2DIGIT\n */\nfunction toIMFDate (date) {\n  if (typeof date === 'number') {\n    date = new Date(date)\n  }\n\n  return `${IMFDays[date.getUTCDay()]}, ${IMFPaddedNumbers[date.getUTCDate()]} ${IMFMonths[date.getUTCMonth()]} ${date.getUTCFullYear()} ${IMFPaddedNumbers[date.getUTCHours()]}:${IMFPaddedNumbers[date.getUTCMinutes()]}:${IMFPaddedNumbers[date.getUTCSeconds()]} GMT`\n}\n\n/**\n max-age-av        = \"Max-Age=\" non-zero-digit *DIGIT\n                       ; In practice, both expires-av and max-age-av\n                       ; are limited to dates representable by the\n                       ; user agent.\n * @param {number} maxAge\n */\nfunction validateCookieMaxAge (maxAge) {\n  if (maxAge < 0) {\n    throw new Error('Invalid cookie max-age')\n  }\n}\n\n/**\n * @see https://www.rfc-editor.org/rfc/rfc6265#section-4.1.1\n * @param {import('./index').Cookie} cookie\n */\nfunction stringify (cookie) {\n  if (cookie.name.length === 0) {\n    return null\n  }\n\n  validateCookieName(cookie.name)\n  validateCookieValue(cookie.value)\n\n  const out = [`${cookie.name}=${cookie.value}`]\n\n  // https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-cookie-prefixes-00#section-3.1\n  // https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-cookie-prefixes-00#section-3.2\n  if (cookie.name.startsWith('__Secure-')) {\n    cookie.secure = true\n  }\n\n  if (cookie.name.startsWith('__Host-')) {\n    cookie.secure = true\n    cookie.domain = null\n    cookie.path = '/'\n  }\n\n  if (cookie.secure) {\n    out.push('Secure')\n  }\n\n  if (cookie.httpOnly) {\n    out.push('HttpOnly')\n  }\n\n  if (typeof cookie.maxAge === 'number') {\n    validateCookieMaxAge(cookie.maxAge)\n    out.push(`Max-Age=${cookie.maxAge}`)\n  }\n\n  if (cookie.domain) {\n    validateCookieDomain(cookie.domain)\n    out.push(`Domain=${cookie.domain}`)\n  }\n\n  if (cookie.path) {\n    validateCookiePath(cookie.path)\n    out.push(`Path=${cookie.path}`)\n  }\n\n  if (cookie.expires && cookie.expires.toString() !== 'Invalid Date') {\n    out.push(`Expires=${toIMFDate(cookie.expires)}`)\n  }\n\n  if (cookie.sameSite) {\n    out.push(`SameSite=${cookie.sameSite}`)\n  }\n\n  for (const part of cookie.unparsed) {\n    if (!part.includes('=')) {\n      throw new Error('Invalid unparsed')\n    }\n\n    const [key, ...value] = part.split('=')\n\n    out.push(`${key.trim()}=${value.join('=')}`)\n  }\n\n  return out.join('; ')\n}\n\nmodule.exports = {\n  isCTLExcludingHtab,\n  validateCookieName,\n  validateCookiePath,\n  validateCookieValue,\n  toIMFDate,\n  stringify\n}\n", "'use strict'\n\nconst { collectASequenceOfCodePointsFast } = require('../infra')\nconst { maxNameValuePairSize, maxAttributeValueSize } = require('./constants')\nconst { isCTLExcludingHtab } = require('./util')\nconst assert = require('node:assert')\nconst { unescape: qsUnescape } = require('node:querystring')\n\n/**\n * @description Parses the field-value attributes of a set-cookie header string.\n * @see https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis#section-5.4\n * @param {string} header\n * @returns {import('./index').Cookie|null} if the header is invalid, null will be returned\n */\nfunction parseSetCookie (header) {\n  // 1. If the set-cookie-string contains a %x00-08 / %x0A-1F / %x7F\n  //    character (CTL characters excluding HTAB): Abort these steps and\n  //    ignore the set-cookie-string entirely.\n  if (isCTLExcludingHtab(header)) {\n    return null\n  }\n\n  let nameValuePair = ''\n  let unparsedAttributes = ''\n  let name = ''\n  let value = ''\n\n  // 2. If the set-cookie-string contains a %x3B (\";\") character:\n  if (header.includes(';')) {\n    // 1. The name-value-pair string consists of the characters up to,\n    //    but not including, the first %x3B (\";\"), and the unparsed-\n    //    attributes consist of the remainder of the set-cookie-string\n    //    (including the %x3B (\";\") in question).\n    const position = { position: 0 }\n\n    nameValuePair = collectASequenceOfCodePointsFast(';', header, position)\n    unparsedAttributes = header.slice(position.position)\n  } else {\n    // Otherwise:\n\n    // 1. The name-value-pair string consists of all the characters\n    //    contained in the set-cookie-string, and the unparsed-\n    //    attributes is the empty string.\n    nameValuePair = header\n  }\n\n  // 3. If the name-value-pair string lacks a %x3D (\"=\") character, then\n  //    the name string is empty, and the value string is the value of\n  //    name-value-pair.\n  if (!nameValuePair.includes('=')) {\n    value = nameValuePair\n  } else {\n    //    Otherwise, the name string consists of the characters up to, but\n    //    not including, the first %x3D (\"=\") character, and the (possibly\n    //    empty) value string consists of the characters after the first\n    //    %x3D (\"=\") character.\n    const position = { position: 0 }\n    name = collectASequenceOfCodePointsFast(\n      '=',\n      nameValuePair,\n      position\n    )\n    value = nameValuePair.slice(position.position + 1)\n  }\n\n  // 4. Remove any leading or trailing WSP characters from the name\n  //    string and the value string.\n  name = name.trim()\n  value = value.trim()\n\n  // 5. If the sum of the lengths of the name string and the value string\n  //    is more than 4096 octets, abort these steps and ignore the set-\n  //    cookie-string entirely.\n  if (name.length + value.length > maxNameValuePairSize) {\n    return null\n  }\n\n  // 6. The cookie-name is the name string, and the cookie-value is the\n  //    value string.\n  // https://datatracker.ietf.org/doc/html/rfc6265\n  // To maximize compatibility with user agents, servers that wish to\n  // store arbitrary data in a cookie-value SHOULD encode that data, for\n  // example, using Base64 [RFC4648].\n  return {\n    name, value: qsUnescape(value), ...parseUnparsedAttributes(unparsedAttributes)\n  }\n}\n\n/**\n * Parses the remaining attributes of a set-cookie header\n * @see https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis#section-5.4\n * @param {string} unparsedAttributes\n * @param {Object.<string, unknown>} [cookieAttributeList={}]\n */\nfunction parseUnparsedAttributes (unparsedAttributes, cookieAttributeList = {}) {\n  // 1. If the unparsed-attributes string is empty, skip the rest of\n  //    these steps.\n  if (unparsedAttributes.length === 0) {\n    return cookieAttributeList\n  }\n\n  // 2. Discard the first character of the unparsed-attributes (which\n  //    will be a %x3B (\";\") character).\n  assert(unparsedAttributes[0] === ';')\n  unparsedAttributes = unparsedAttributes.slice(1)\n\n  let cookieAv = ''\n\n  // 3. If the remaining unparsed-attributes contains a %x3B (\";\")\n  //    character:\n  if (unparsedAttributes.includes(';')) {\n    // 1. Consume the characters of the unparsed-attributes up to, but\n    //    not including, the first %x3B (\";\") character.\n    cookieAv = collectASequenceOfCodePointsFast(\n      ';',\n      unparsedAttributes,\n      { position: 0 }\n    )\n    unparsedAttributes = unparsedAttributes.slice(cookieAv.length)\n  } else {\n    // Otherwise:\n\n    // 1. Consume the remainder of the unparsed-attributes.\n    cookieAv = unparsedAttributes\n    unparsedAttributes = ''\n  }\n\n  // Let the cookie-av string be the characters consumed in this step.\n\n  let attributeName = ''\n  let attributeValue = ''\n\n  // 4. If the cookie-av string contains a %x3D (\"=\") character:\n  if (cookieAv.includes('=')) {\n    // 1. The (possibly empty) attribute-name string consists of the\n    //    characters up to, but not including, the first %x3D (\"=\")\n    //    character, and the (possibly empty) attribute-value string\n    //    consists of the characters after the first %x3D (\"=\")\n    //    character.\n    const position = { position: 0 }\n\n    attributeName = collectASequenceOfCodePointsFast(\n      '=',\n      cookieAv,\n      position\n    )\n    attributeValue = cookieAv.slice(position.position + 1)\n  } else {\n    // Otherwise:\n\n    // 1. The attribute-name string consists of the entire cookie-av\n    //    string, and the attribute-value string is empty.\n    attributeName = cookieAv\n  }\n\n  // 5. Remove any leading or trailing WSP characters from the attribute-\n  //    name string and the attribute-value string.\n  attributeName = attributeName.trim()\n  attributeValue = attributeValue.trim()\n\n  // 6. If the attribute-value is longer than 1024 octets, ignore the\n  //    cookie-av string and return to Step 1 of this algorithm.\n  if (attributeValue.length > maxAttributeValueSize) {\n    return parseUnparsedAttributes(unparsedAttributes, cookieAttributeList)\n  }\n\n  // 7. Process the attribute-name and attribute-value according to the\n  //    requirements in the following subsections.  (Notice that\n  //    attributes with unrecognized attribute-names are ignored.)\n  const attributeNameLowercase = attributeName.toLowerCase()\n\n  // https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis#section-5.4.1\n  // If the attribute-name case-insensitively matches the string\n  // \"Expires\", the user agent MUST process the cookie-av as follows.\n  if (attributeNameLowercase === 'expires') {\n    // 1. Let the expiry-time be the result of parsing the attribute-value\n    //    as cookie-date (see Section 5.1.1).\n    const expiryTime = new Date(attributeValue)\n\n    // 2. If the attribute-value failed to parse as a cookie date, ignore\n    //    the cookie-av.\n\n    cookieAttributeList.expires = expiryTime\n  } else if (attributeNameLowercase === 'max-age') {\n    // https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis#section-5.4.2\n    // If the attribute-name case-insensitively matches the string \"Max-\n    // Age\", the user agent MUST process the cookie-av as follows.\n\n    // 1. If the first character of the attribute-value is not a DIGIT or a\n    //    \"-\" character, ignore the cookie-av.\n    const charCode = attributeValue.charCodeAt(0)\n\n    if ((charCode < 48 || charCode > 57) && attributeValue[0] !== '-') {\n      return parseUnparsedAttributes(unparsedAttributes, cookieAttributeList)\n    }\n\n    // 2. If the remainder of attribute-value contains a non-DIGIT\n    //    character, ignore the cookie-av.\n    if (!/^\\d+$/.test(attributeValue)) {\n      return parseUnparsedAttributes(unparsedAttributes, cookieAttributeList)\n    }\n\n    // 3. Let delta-seconds be the attribute-value converted to an integer.\n    const deltaSeconds = Number(attributeValue)\n\n    // 4. Let cookie-age-limit be the maximum age of the cookie (which\n    //    SHOULD be 400 days or less, see Section 4.1.2.2).\n\n    // 5. Set delta-seconds to the smaller of its present value and cookie-\n    //    age-limit.\n    // deltaSeconds = Math.min(deltaSeconds * 1000, maxExpiresMs)\n\n    // 6. If delta-seconds is less than or equal to zero (0), let expiry-\n    //    time be the earliest representable date and time.  Otherwise, let\n    //    the expiry-time be the current date and time plus delta-seconds\n    //    seconds.\n    // const expiryTime = deltaSeconds <= 0 ? Date.now() : Date.now() + deltaSeconds\n\n    // 7. Append an attribute to the cookie-attribute-list with an\n    //    attribute-name of Max-Age and an attribute-value of expiry-time.\n    cookieAttributeList.maxAge = deltaSeconds\n  } else if (attributeNameLowercase === 'domain') {\n    // https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis#section-5.4.3\n    // If the attribute-name case-insensitively matches the string \"Domain\",\n    // the user agent MUST process the cookie-av as follows.\n\n    // 1. Let cookie-domain be the attribute-value.\n    let cookieDomain = attributeValue\n\n    // 2. If cookie-domain starts with %x2E (\".\"), let cookie-domain be\n    //    cookie-domain without its leading %x2E (\".\").\n    if (cookieDomain[0] === '.') {\n      cookieDomain = cookieDomain.slice(1)\n    }\n\n    // 3. Convert the cookie-domain to lower case.\n    cookieDomain = cookieDomain.toLowerCase()\n\n    // 4. Append an attribute to the cookie-attribute-list with an\n    //    attribute-name of Domain and an attribute-value of cookie-domain.\n    cookieAttributeList.domain = cookieDomain\n  } else if (attributeNameLowercase === 'path') {\n    // https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis#section-5.4.4\n    // If the attribute-name case-insensitively matches the string \"Path\",\n    // the user agent MUST process the cookie-av as follows.\n\n    // 1. If the attribute-value is empty or if the first character of the\n    //    attribute-value is not %x2F (\"/\"):\n    let cookiePath = ''\n    if (attributeValue.length === 0 || attributeValue[0] !== '/') {\n      // 1. Let cookie-path be the default-path.\n      cookiePath = '/'\n    } else {\n      // Otherwise:\n\n      // 1. Let cookie-path be the attribute-value.\n      cookiePath = attributeValue\n    }\n\n    // 2. Append an attribute to the cookie-attribute-list with an\n    //    attribute-name of Path and an attribute-value of cookie-path.\n    cookieAttributeList.path = cookiePath\n  } else if (attributeNameLowercase === 'secure') {\n    // https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis#section-5.4.5\n    // If the attribute-name case-insensitively matches the string \"Secure\",\n    // the user agent MUST append an attribute to the cookie-attribute-list\n    // with an attribute-name of Secure and an empty attribute-value.\n\n    cookieAttributeList.secure = true\n  } else if (attributeNameLowercase === 'httponly') {\n    // https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis#section-5.4.6\n    // If the attribute-name case-insensitively matches the string\n    // \"HttpOnly\", the user agent MUST append an attribute to the cookie-\n    // attribute-list with an attribute-name of HttpOnly and an empty\n    // attribute-value.\n\n    cookieAttributeList.httpOnly = true\n  } else if (attributeNameLowercase === 'samesite') {\n    // https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis#section-5.4.7\n    // If the attribute-name case-insensitively matches the string\n    // \"SameSite\", the user agent MUST process the cookie-av as follows:\n\n    // 1. Let enforcement be \"Default\".\n    let enforcement = 'Default'\n\n    const attributeValueLowercase = attributeValue.toLowerCase()\n    // 2. If cookie-av's attribute-value is a case-insensitive match for\n    //    \"None\", set enforcement to \"None\".\n    if (attributeValueLowercase.includes('none')) {\n      enforcement = 'None'\n    }\n\n    // 3. If cookie-av's attribute-value is a case-insensitive match for\n    //    \"Strict\", set enforcement to \"Strict\".\n    if (attributeValueLowercase.includes('strict')) {\n      enforcement = 'Strict'\n    }\n\n    // 4. If cookie-av's attribute-value is a case-insensitive match for\n    //    \"Lax\", set enforcement to \"Lax\".\n    if (attributeValueLowercase.includes('lax')) {\n      enforcement = 'Lax'\n    }\n\n    // 5. Append an attribute to the cookie-attribute-list with an\n    //    attribute-name of \"SameSite\" and an attribute-value of\n    //    enforcement.\n    cookieAttributeList.sameSite = enforcement\n  } else {\n    cookieAttributeList.unparsed ??= []\n\n    cookieAttributeList.unparsed.push(`${attributeName}=${attributeValue}`)\n  }\n\n  // 8. Return to Step 1 of this algorithm.\n  return parseUnparsedAttributes(unparsedAttributes, cookieAttributeList)\n}\n\nmodule.exports = {\n  parseSetCookie,\n  parseUnparsedAttributes\n}\n", "'use strict'\n\nconst { parseSetCookie } = require('./parse')\nconst { stringify } = require('./util')\nconst { webidl } = require('../webidl')\nconst { Headers } = require('../fetch/headers')\n\nconst brandChecks = webidl.brandCheckMultiple([Headers, globalThis.Headers].filter(Boolean))\n\n/**\n * @typedef {Object} Cookie\n * @property {string} name\n * @property {string} value\n * @property {Date|number} [expires]\n * @property {number} [maxAge]\n * @property {string} [domain]\n * @property {string} [path]\n * @property {boolean} [secure]\n * @property {boolean} [httpOnly]\n * @property {'Strict'|'Lax'|'None'} [sameSite]\n * @property {string[]} [unparsed]\n */\n\n/**\n * @param {Headers} headers\n * @returns {Record<string, string>}\n */\nfunction getCookies (headers) {\n  webidl.argumentLengthCheck(arguments, 1, 'getCookies')\n\n  brandChecks(headers)\n\n  const cookie = headers.get('cookie')\n\n  /** @type {Record<string, string>} */\n  const out = {}\n\n  if (!cookie) {\n    return out\n  }\n\n  for (const piece of cookie.split(';')) {\n    const [name, ...value] = piece.split('=')\n\n    out[name.trim()] = value.join('=')\n  }\n\n  return out\n}\n\n/**\n * @param {Headers} headers\n * @param {string} name\n * @param {{ path?: string, domain?: string }|undefined} attributes\n * @returns {void}\n */\nfunction deleteCookie (headers, name, attributes) {\n  brandChecks(headers)\n\n  const prefix = 'deleteCookie'\n  webidl.argumentLengthCheck(arguments, 2, prefix)\n\n  name = webidl.converters.DOMString(name, prefix, 'name')\n  attributes = webidl.converters.DeleteCookieAttributes(attributes)\n\n  // Matches behavior of\n  // https://github.com/denoland/deno_std/blob/63827b16330b82489a04614027c33b7904e08be5/http/cookie.ts#L278\n  setCookie(headers, {\n    name,\n    value: '',\n    expires: new Date(0),\n    ...attributes\n  })\n}\n\n/**\n * @param {Headers} headers\n * @returns {Cookie[]}\n */\nfunction getSetCookies (headers) {\n  webidl.argumentLengthCheck(arguments, 1, 'getSetCookies')\n\n  brandChecks(headers)\n\n  const cookies = headers.getSetCookie()\n\n  if (!cookies) {\n    return []\n  }\n\n  return cookies.map((pair) => parseSetCookie(pair))\n}\n\n/**\n * Parses a cookie string\n * @param {string} cookie\n */\nfunction parseCookie (cookie) {\n  cookie = webidl.converters.DOMString(cookie)\n\n  return parseSetCookie(cookie)\n}\n\n/**\n * @param {Headers} headers\n * @param {Cookie} cookie\n * @returns {void}\n */\nfunction setCookie (headers, cookie) {\n  webidl.argumentLengthCheck(arguments, 2, 'setCookie')\n\n  brandChecks(headers)\n\n  cookie = webidl.converters.Cookie(cookie)\n\n  const str = stringify(cookie)\n\n  if (str) {\n    headers.append('set-cookie', str, true)\n  }\n}\n\nwebidl.converters.DeleteCookieAttributes = webidl.dictionaryConverter([\n  {\n    converter: webidl.nullableConverter(webidl.converters.DOMString),\n    key: 'path',\n    defaultValue: () => null\n  },\n  {\n    converter: webidl.nullableConverter(webidl.converters.DOMString),\n    key: 'domain',\n    defaultValue: () => null\n  }\n])\n\nwebidl.converters.Cookie = webidl.dictionaryConverter([\n  {\n    converter: webidl.converters.DOMString,\n    key: 'name'\n  },\n  {\n    converter: webidl.converters.DOMString,\n    key: 'value'\n  },\n  {\n    converter: webidl.nullableConverter((value) => {\n      if (typeof value === 'number') {\n        return webidl.converters['unsigned long long'](value)\n      }\n\n      return new Date(value)\n    }),\n    key: 'expires',\n    defaultValue: () => null\n  },\n  {\n    converter: webidl.nullableConverter(webidl.converters['long long']),\n    key: 'maxAge',\n    defaultValue: () => null\n  },\n  {\n    converter: webidl.nullableConverter(webidl.converters.DOMString),\n    key: 'domain',\n    defaultValue: () => null\n  },\n  {\n    converter: webidl.nullableConverter(webidl.converters.DOMString),\n    key: 'path',\n    defaultValue: () => null\n  },\n  {\n    converter: webidl.nullableConverter(webidl.converters.boolean),\n    key: 'secure',\n    defaultValue: () => null\n  },\n  {\n    converter: webidl.nullableConverter(webidl.converters.boolean),\n    key: 'httpOnly',\n    defaultValue: () => null\n  },\n  {\n    converter: webidl.converters.USVString,\n    key: 'sameSite',\n    allowedValues: ['Strict', 'Lax', 'None']\n  },\n  {\n    converter: webidl.sequenceConverter(webidl.converters.DOMString),\n    key: 'unparsed',\n    defaultValue: () => []\n  }\n])\n\nmodule.exports = {\n  getCookies,\n  deleteCookie,\n  getSetCookies,\n  setCookie,\n  parseCookie\n}\n", "'use strict'\n\nconst { webidl } = require('../webidl')\nconst { kEnumerableProperty } = require('../../core/util')\nconst { kConstruct } = require('../../core/symbols')\n\n/**\n * @see https://html.spec.whatwg.org/multipage/comms.html#messageevent\n */\nclass MessageEvent extends Event {\n  #eventInit\n\n  constructor (type, eventInitDict = {}) {\n    if (type === kConstruct) {\n      super(arguments[1], arguments[2])\n      webidl.util.markAsUncloneable(this)\n      return\n    }\n\n    const prefix = 'MessageEvent constructor'\n    webidl.argumentLengthCheck(arguments, 1, prefix)\n\n    type = webidl.converters.DOMString(type, prefix, 'type')\n    eventInitDict = webidl.converters.MessageEventInit(eventInitDict, prefix, 'eventInitDict')\n\n    super(type, eventInitDict)\n\n    this.#eventInit = eventInitDict\n    webidl.util.markAsUncloneable(this)\n  }\n\n  get data () {\n    webidl.brandCheck(this, MessageEvent)\n\n    return this.#eventInit.data\n  }\n\n  get origin () {\n    webidl.brandCheck(this, MessageEvent)\n\n    return this.#eventInit.origin\n  }\n\n  get lastEventId () {\n    webidl.brandCheck(this, MessageEvent)\n\n    return this.#eventInit.lastEventId\n  }\n\n  get source () {\n    webidl.brandCheck(this, MessageEvent)\n\n    return this.#eventInit.source\n  }\n\n  get ports () {\n    webidl.brandCheck(this, MessageEvent)\n\n    if (!Object.isFrozen(this.#eventInit.ports)) {\n      Object.freeze(this.#eventInit.ports)\n    }\n\n    return this.#eventInit.ports\n  }\n\n  initMessageEvent (\n    type,\n    bubbles = false,\n    cancelable = false,\n    data = null,\n    origin = '',\n    lastEventId = '',\n    source = null,\n    ports = []\n  ) {\n    webidl.brandCheck(this, MessageEvent)\n\n    webidl.argumentLengthCheck(arguments, 1, 'MessageEvent.initMessageEvent')\n\n    return new MessageEvent(type, {\n      bubbles, cancelable, data, origin, lastEventId, source, ports\n    })\n  }\n\n  static createFastMessageEvent (type, init) {\n    const messageEvent = new MessageEvent(kConstruct, type, init)\n    messageEvent.#eventInit = init\n    messageEvent.#eventInit.data ??= null\n    messageEvent.#eventInit.origin ??= ''\n    messageEvent.#eventInit.lastEventId ??= ''\n    messageEvent.#eventInit.source ??= null\n    messageEvent.#eventInit.ports ??= []\n    return messageEvent\n  }\n}\n\nconst { createFastMessageEvent } = MessageEvent\ndelete MessageEvent.createFastMessageEvent\n\n/**\n * @see https://websockets.spec.whatwg.org/#the-closeevent-interface\n */\nclass CloseEvent extends Event {\n  #eventInit\n\n  constructor (type, eventInitDict = {}) {\n    const prefix = 'CloseEvent constructor'\n    webidl.argumentLengthCheck(arguments, 1, prefix)\n\n    type = webidl.converters.DOMString(type, prefix, 'type')\n    eventInitDict = webidl.converters.CloseEventInit(eventInitDict)\n\n    super(type, eventInitDict)\n\n    this.#eventInit = eventInitDict\n    webidl.util.markAsUncloneable(this)\n  }\n\n  get wasClean () {\n    webidl.brandCheck(this, CloseEvent)\n\n    return this.#eventInit.wasClean\n  }\n\n  get code () {\n    webidl.brandCheck(this, CloseEvent)\n\n    return this.#eventInit.code\n  }\n\n  get reason () {\n    webidl.brandCheck(this, CloseEvent)\n\n    return this.#eventInit.reason\n  }\n}\n\n// https://html.spec.whatwg.org/multipage/webappapis.html#the-errorevent-interface\nclass ErrorEvent extends Event {\n  #eventInit\n\n  constructor (type, eventInitDict) {\n    const prefix = 'ErrorEvent constructor'\n    webidl.argumentLengthCheck(arguments, 1, prefix)\n\n    super(type, eventInitDict)\n    webidl.util.markAsUncloneable(this)\n\n    type = webidl.converters.DOMString(type, prefix, 'type')\n    eventInitDict = webidl.converters.ErrorEventInit(eventInitDict ?? {})\n\n    this.#eventInit = eventInitDict\n  }\n\n  get message () {\n    webidl.brandCheck(this, ErrorEvent)\n\n    return this.#eventInit.message\n  }\n\n  get filename () {\n    webidl.brandCheck(this, ErrorEvent)\n\n    return this.#eventInit.filename\n  }\n\n  get lineno () {\n    webidl.brandCheck(this, ErrorEvent)\n\n    return this.#eventInit.lineno\n  }\n\n  get colno () {\n    webidl.brandCheck(this, ErrorEvent)\n\n    return this.#eventInit.colno\n  }\n\n  get error () {\n    webidl.brandCheck(this, ErrorEvent)\n\n    return this.#eventInit.error\n  }\n}\n\nObject.defineProperties(MessageEvent.prototype, {\n  [Symbol.toStringTag]: {\n    value: 'MessageEvent',\n    configurable: true\n  },\n  data: kEnumerableProperty,\n  origin: kEnumerableProperty,\n  lastEventId: kEnumerableProperty,\n  source: kEnumerableProperty,\n  ports: kEnumerableProperty,\n  initMessageEvent: kEnumerableProperty\n})\n\nObject.defineProperties(CloseEvent.prototype, {\n  [Symbol.toStringTag]: {\n    value: 'CloseEvent',\n    configurable: true\n  },\n  reason: kEnumerableProperty,\n  code: kEnumerableProperty,\n  wasClean: kEnumerableProperty\n})\n\nObject.defineProperties(ErrorEvent.prototype, {\n  [Symbol.toStringTag]: {\n    value: 'ErrorEvent',\n    configurable: true\n  },\n  message: kEnumerableProperty,\n  filename: kEnumerableProperty,\n  lineno: kEnumerableProperty,\n  colno: kEnumerableProperty,\n  error: kEnumerableProperty\n})\n\nwebidl.converters.MessagePort = webidl.interfaceConverter(\n  webidl.is.MessagePort,\n  'MessagePort'\n)\n\nwebidl.converters['sequence<MessagePort>'] = webidl.sequenceConverter(\n  webidl.converters.MessagePort\n)\n\nconst eventInit = [\n  {\n    key: 'bubbles',\n    converter: webidl.converters.boolean,\n    defaultValue: () => false\n  },\n  {\n    key: 'cancelable',\n    converter: webidl.converters.boolean,\n    defaultValue: () => false\n  },\n  {\n    key: 'composed',\n    converter: webidl.converters.boolean,\n    defaultValue: () => false\n  }\n]\n\nwebidl.converters.MessageEventInit = webidl.dictionaryConverter([\n  ...eventInit,\n  {\n    key: 'data',\n    converter: webidl.converters.any,\n    defaultValue: () => null\n  },\n  {\n    key: 'origin',\n    converter: webidl.converters.USVString,\n    defaultValue: () => ''\n  },\n  {\n    key: 'lastEventId',\n    converter: webidl.converters.DOMString,\n    defaultValue: () => ''\n  },\n  {\n    key: 'source',\n    // Node doesn't implement WindowProxy or ServiceWorker, so the only\n    // valid value for source is a MessagePort.\n    converter: webidl.nullableConverter(webidl.converters.MessagePort),\n    defaultValue: () => null\n  },\n  {\n    key: 'ports',\n    converter: webidl.converters['sequence<MessagePort>'],\n    defaultValue: () => []\n  }\n])\n\nwebidl.converters.CloseEventInit = webidl.dictionaryConverter([\n  ...eventInit,\n  {\n    key: 'wasClean',\n    converter: webidl.converters.boolean,\n    defaultValue: () => false\n  },\n  {\n    key: 'code',\n    converter: webidl.converters['unsigned short'],\n    defaultValue: () => 0\n  },\n  {\n    key: 'reason',\n    converter: webidl.converters.USVString,\n    defaultValue: () => ''\n  }\n])\n\nwebidl.converters.ErrorEventInit = webidl.dictionaryConverter([\n  ...eventInit,\n  {\n    key: 'message',\n    converter: webidl.converters.DOMString,\n    defaultValue: () => ''\n  },\n  {\n    key: 'filename',\n    converter: webidl.converters.USVString,\n    defaultValue: () => ''\n  },\n  {\n    key: 'lineno',\n    converter: webidl.converters['unsigned long'],\n    defaultValue: () => 0\n  },\n  {\n    key: 'colno',\n    converter: webidl.converters['unsigned long'],\n    defaultValue: () => 0\n  },\n  {\n    key: 'error',\n    converter: webidl.converters.any\n  }\n])\n\nmodule.exports = {\n  MessageEvent,\n  CloseEvent,\n  ErrorEvent,\n  createFastMessageEvent\n}\n", "'use strict'\n\n/**\n * This is a Globally Unique Identifier unique used to validate that the\n * endpoint accepts websocket connections.\n * @see https://www.rfc-editor.org/rfc/rfc6455.html#section-1.3\n * @type {'258EAFA5-E914-47DA-95CA-C5AB0DC85B11'}\n */\nconst uid = '258EAFA5-E914-47DA-95CA-C5AB0DC85B11'\n\n/**\n * @type {PropertyDescriptor}\n */\nconst staticPropertyDescriptors = {\n  enumerable: true,\n  writable: false,\n  configurable: false\n}\n\n/**\n * The states of the WebSocket connection.\n *\n * @readonly\n * @enum\n * @property {0} CONNECTING\n * @property {1} OPEN\n * @property {2} CLOSING\n * @property {3} CLOSED\n */\nconst states = {\n  CONNECTING: 0,\n  OPEN: 1,\n  CLOSING: 2,\n  CLOSED: 3\n}\n\n/**\n * @readonly\n * @enum\n * @property {0} NOT_SENT\n * @property {1} PROCESSING\n * @property {2} SENT\n */\nconst sentCloseFrameState = {\n  SENT: 1,\n  RECEIVED: 2\n}\n\n/**\n * The WebSocket opcodes.\n *\n * @readonly\n * @enum\n * @property {0x0} CONTINUATION\n * @property {0x1} TEXT\n * @property {0x2} BINARY\n * @property {0x8} CLOSE\n * @property {0x9} PING\n * @property {0xA} PONG\n * @see https://datatracker.ietf.org/doc/html/rfc6455#section-5.2\n */\nconst opcodes = {\n  CONTINUATION: 0x0,\n  TEXT: 0x1,\n  BINARY: 0x2,\n  CLOSE: 0x8,\n  PING: 0x9,\n  PONG: 0xA\n}\n\n/**\n * The maximum value for an unsigned 16-bit integer.\n *\n * @type {65535} 2 ** 16 - 1\n */\nconst maxUnsigned16Bit = 65535\n\n/**\n * The states of the parser.\n *\n * @readonly\n * @enum\n * @property {0} INFO\n * @property {2} PAYLOADLENGTH_16\n * @property {3} PAYLOADLENGTH_64\n * @property {4} READ_DATA\n */\nconst parserStates = {\n  INFO: 0,\n  PAYLOADLENGTH_16: 2,\n  PAYLOADLENGTH_64: 3,\n  READ_DATA: 4\n}\n\n/**\n * An empty buffer.\n *\n * @type {Buffer}\n */\nconst emptyBuffer = Buffer.allocUnsafe(0)\n\n/**\n * @readonly\n * @property {1} text\n * @property {2} typedArray\n * @property {3} arrayBuffer\n * @property {4} blob\n */\nconst sendHints = {\n  text: 1,\n  typedArray: 2,\n  arrayBuffer: 3,\n  blob: 4\n}\n\nmodule.exports = {\n  uid,\n  sentCloseFrameState,\n  staticPropertyDescriptors,\n  states,\n  opcodes,\n  maxUnsigned16Bit,\n  parserStates,\n  emptyBuffer,\n  sendHints\n}\n", "'use strict'\n\nconst { states, opcodes } = require('./constants')\nconst { isUtf8 } = require('node:buffer')\nconst { removeHTTPWhitespace } = require('../fetch/data-url')\nconst { collectASequenceOfCodePointsFast } = require('../infra')\n\n/**\n * @param {number} readyState\n * @returns {boolean}\n */\nfunction isConnecting (readyState) {\n  // If the WebSocket connection is not yet established, and the connection\n  // is not yet closed, then the WebSocket connection is in the CONNECTING state.\n  return readyState === states.CONNECTING\n}\n\n/**\n * @param {number} readyState\n * @returns {boolean}\n */\nfunction isEstablished (readyState) {\n  // If the server's response is validated as provided for above, it is\n  // said that _The WebSocket Connection is Established_ and that the\n  // WebSocket Connection is in the OPEN state.\n  return readyState === states.OPEN\n}\n\n/**\n * @param {number} readyState\n * @returns {boolean}\n */\nfunction isClosing (readyState) {\n  // Upon either sending or receiving a Close control frame, it is said\n  // that _The WebSocket Closing Handshake is Started_ and that the\n  // WebSocket connection is in the CLOSING state.\n  return readyState === states.CLOSING\n}\n\n/**\n * @param {number} readyState\n * @returns {boolean}\n */\nfunction isClosed (readyState) {\n  return readyState === states.CLOSED\n}\n\n/**\n * @see https://dom.spec.whatwg.org/#concept-event-fire\n * @param {string} e\n * @param {EventTarget} target\n * @param {(...args: ConstructorParameters<typeof Event>) => Event} eventFactory\n * @param {EventInit | undefined} eventInitDict\n * @returns {void}\n */\nfunction fireEvent (e, target, eventFactory = (type, init) => new Event(type, init), eventInitDict = {}) {\n  // 1. If eventConstructor is not given, then let eventConstructor be Event.\n\n  // 2. Let event be the result of creating an event given eventConstructor,\n  //    in the relevant realm of target.\n  // 3. Initialize event\u2019s type attribute to e.\n  const event = eventFactory(e, eventInitDict)\n\n  // 4. Initialize any other IDL attributes of event as described in the\n  //    invocation of this algorithm.\n\n  // 5. Return the result of dispatching event at target, with legacy target\n  //    override flag set if set.\n  target.dispatchEvent(event)\n}\n\n/**\n * @see https://websockets.spec.whatwg.org/#feedback-from-the-protocol\n * @param {import('./websocket').Handler} handler\n * @param {number} type Opcode\n * @param {Buffer} data application data\n * @returns {void}\n */\nfunction websocketMessageReceived (handler, type, data) {\n  handler.onMessage(type, data)\n}\n\n/**\n * @param {Buffer} buffer\n * @returns {ArrayBuffer}\n */\nfunction toArrayBuffer (buffer) {\n  if (buffer.byteLength === buffer.buffer.byteLength) {\n    return buffer.buffer\n  }\n  return new Uint8Array(buffer).buffer\n}\n\n/**\n * @see https://datatracker.ietf.org/doc/html/rfc6455\n * @see https://datatracker.ietf.org/doc/html/rfc2616\n * @see https://bugs.chromium.org/p/chromium/issues/detail?id=398407\n * @param {string} protocol\n * @returns {boolean}\n */\nfunction isValidSubprotocol (protocol) {\n  // If present, this value indicates one\n  // or more comma-separated subprotocol the client wishes to speak,\n  // ordered by preference.  The elements that comprise this value\n  // MUST be non-empty strings with characters in the range U+0021 to\n  // U+007E not including separator characters as defined in\n  // [RFC2616] and MUST all be unique strings.\n  if (protocol.length === 0) {\n    return false\n  }\n\n  for (let i = 0; i < protocol.length; ++i) {\n    const code = protocol.charCodeAt(i)\n\n    if (\n      code < 0x21 || // CTL, contains SP (0x20) and HT (0x09)\n      code > 0x7E ||\n      code === 0x22 || // \"\n      code === 0x28 || // (\n      code === 0x29 || // )\n      code === 0x2C || // ,\n      code === 0x2F || // /\n      code === 0x3A || // :\n      code === 0x3B || // ;\n      code === 0x3C || // <\n      code === 0x3D || // =\n      code === 0x3E || // >\n      code === 0x3F || // ?\n      code === 0x40 || // @\n      code === 0x5B || // [\n      code === 0x5C || // \\\n      code === 0x5D || // ]\n      code === 0x7B || // {\n      code === 0x7D // }\n    ) {\n      return false\n    }\n  }\n\n  return true\n}\n\n/**\n * @see https://datatracker.ietf.org/doc/html/rfc6455#section-7-4\n * @param {number} code\n * @returns {boolean}\n */\nfunction isValidStatusCode (code) {\n  if (code >= 1000 && code < 1015) {\n    return (\n      code !== 1004 && // reserved\n      code !== 1005 && // \"MUST NOT be set as a status code\"\n      code !== 1006 // \"MUST NOT be set as a status code\"\n    )\n  }\n\n  return code >= 3000 && code <= 4999\n}\n\n/**\n * @see https://datatracker.ietf.org/doc/html/rfc6455#section-5.5\n * @param {number} opcode\n * @returns {boolean}\n */\nfunction isControlFrame (opcode) {\n  return (\n    opcode === opcodes.CLOSE ||\n    opcode === opcodes.PING ||\n    opcode === opcodes.PONG\n  )\n}\n\n/**\n * @param {number} opcode\n * @returns {boolean}\n */\nfunction isContinuationFrame (opcode) {\n  return opcode === opcodes.CONTINUATION\n}\n\n/**\n * @param {number} opcode\n * @returns {boolean}\n */\nfunction isTextBinaryFrame (opcode) {\n  return opcode === opcodes.TEXT || opcode === opcodes.BINARY\n}\n\n/**\n *\n * @param {number} opcode\n * @returns {boolean}\n */\nfunction isValidOpcode (opcode) {\n  return isTextBinaryFrame(opcode) || isContinuationFrame(opcode) || isControlFrame(opcode)\n}\n\n/**\n * Parses a Sec-WebSocket-Extensions header value.\n * @param {string} extensions\n * @returns {Map<string, string>}\n */\n// TODO(@Uzlopak, @KhafraDev): make compliant https://datatracker.ietf.org/doc/html/rfc6455#section-9.1\nfunction parseExtensions (extensions) {\n  const position = { position: 0 }\n  const extensionList = new Map()\n\n  while (position.position < extensions.length) {\n    const pair = collectASequenceOfCodePointsFast(';', extensions, position)\n    const [name, value = ''] = pair.split('=', 2)\n\n    extensionList.set(\n      removeHTTPWhitespace(name, true, false),\n      removeHTTPWhitespace(value, false, true)\n    )\n\n    position.position++\n  }\n\n  return extensionList\n}\n\n/**\n * @see https://www.rfc-editor.org/rfc/rfc7692#section-7.1.2.2\n * @description \"client-max-window-bits = 1*DIGIT\"\n * @param {string} value\n * @returns {boolean}\n */\nfunction isValidClientWindowBits (value) {\n  // Must have at least one character\n  if (value.length === 0) {\n    return false\n  }\n\n  // Check all characters are ASCII digits\n  for (let i = 0; i < value.length; i++) {\n    const byte = value.charCodeAt(i)\n\n    if (byte < 0x30 || byte > 0x39) {\n      return false\n    }\n  }\n\n  // Check numeric range: zlib requires windowBits in range 8-15\n  const num = Number.parseInt(value, 10)\n  return num >= 8 && num <= 15\n}\n\n/**\n * @see https://whatpr.org/websockets/48/7b748d3...d5570f3.html#get-a-url-record\n * @param {string} url\n * @param {string} [baseURL]\n */\nfunction getURLRecord (url, baseURL) {\n  // 1. Let urlRecord be the result of applying the URL parser to url with baseURL .\n  // 2. If urlRecord is failure, then throw a \" SyntaxError \" DOMException .\n  let urlRecord\n\n  try {\n    urlRecord = new URL(url, baseURL)\n  } catch (e) {\n    throw new DOMException(e, 'SyntaxError')\n  }\n\n  // 3. If urlRecord \u2019s scheme is \" http \", then set urlRecord \u2019s scheme to \" ws \".\n  // 4. Otherwise, if urlRecord \u2019s scheme is \" https \", set urlRecord \u2019s scheme to \" wss \".\n  if (urlRecord.protocol === 'http:') {\n    urlRecord.protocol = 'ws:'\n  } else if (urlRecord.protocol === 'https:') {\n    urlRecord.protocol = 'wss:'\n  }\n\n  // 5. If urlRecord \u2019s scheme is not \" ws \" or \" wss \", then throw a \" SyntaxError \" DOMException .\n  if (urlRecord.protocol !== 'ws:' && urlRecord.protocol !== 'wss:') {\n    throw new DOMException('expected a ws: or wss: url', 'SyntaxError')\n  }\n\n  // If urlRecord \u2019s fragment is non-null, then throw a \" SyntaxError \" DOMException .\n  if (urlRecord.hash.length || urlRecord.href.endsWith('#')) {\n    throw new DOMException('hash', 'SyntaxError')\n  }\n\n  // Return urlRecord .\n  return urlRecord\n}\n\n// https://whatpr.org/websockets/48.html#validate-close-code-and-reason\nfunction validateCloseCodeAndReason (code, reason) {\n  // 1. If code is not null, but is neither an integer equal to\n  //    1000 nor an integer in the range 3000 to 4999, inclusive,\n  //    throw an \"InvalidAccessError\" DOMException.\n  if (code !== null) {\n    if (code !== 1000 && (code < 3000 || code > 4999)) {\n      throw new DOMException('invalid code', 'InvalidAccessError')\n    }\n  }\n\n  // 2. If reason is not null, then:\n  if (reason !== null) {\n    // 2.1. Let reasonBytes be the result of UTF-8 encoding reason.\n    // 2.2. If reasonBytes is longer than 123 bytes, then throw a\n    //      \"SyntaxError\" DOMException.\n    const reasonBytesLength = Buffer.byteLength(reason)\n\n    if (reasonBytesLength > 123) {\n      throw new DOMException(`Reason must be less than 123 bytes; received ${reasonBytesLength}`, 'SyntaxError')\n    }\n  }\n}\n\n/**\n * Converts a Buffer to utf-8, even on platforms without icu.\n * @type {(buffer: Buffer) => string}\n */\nconst utf8Decode = (() => {\n  if (typeof process.versions.icu === 'string') {\n    const fatalDecoder = new TextDecoder('utf-8', { fatal: true })\n    return fatalDecoder.decode.bind(fatalDecoder)\n  }\n  return function (buffer) {\n    if (isUtf8(buffer)) {\n      return buffer.toString('utf-8')\n    }\n    throw new TypeError('Invalid utf-8 received.')\n  }\n})()\n\nmodule.exports = {\n  isConnecting,\n  isEstablished,\n  isClosing,\n  isClosed,\n  fireEvent,\n  isValidSubprotocol,\n  isValidStatusCode,\n  websocketMessageReceived,\n  utf8Decode,\n  isControlFrame,\n  isContinuationFrame,\n  isTextBinaryFrame,\n  isValidOpcode,\n  parseExtensions,\n  isValidClientWindowBits,\n  toArrayBuffer,\n  getURLRecord,\n  validateCloseCodeAndReason\n}\n", "'use strict'\n\nconst { runtimeFeatures } = require('../../util/runtime-features')\nconst { maxUnsigned16Bit, opcodes } = require('./constants')\n\nconst BUFFER_SIZE = 8 * 1024\n\nlet buffer = null\nlet bufIdx = BUFFER_SIZE\n\nconst randomFillSync = runtimeFeatures.has('crypto')\n  ? require('node:crypto').randomFillSync\n  // not full compatibility, but minimum.\n  : function randomFillSync (buffer, _offset, _size) {\n    for (let i = 0; i < buffer.length; ++i) {\n      buffer[i] = Math.random() * 255 | 0\n    }\n    return buffer\n  }\n\nfunction generateMask () {\n  if (bufIdx === BUFFER_SIZE) {\n    bufIdx = 0\n    randomFillSync((buffer ??= Buffer.allocUnsafeSlow(BUFFER_SIZE)), 0, BUFFER_SIZE)\n  }\n  return [buffer[bufIdx++], buffer[bufIdx++], buffer[bufIdx++], buffer[bufIdx++]]\n}\n\nclass WebsocketFrameSend {\n  /**\n   * @param {Buffer|undefined} data\n   */\n  constructor (data) {\n    this.frameData = data\n  }\n\n  createFrame (opcode) {\n    const frameData = this.frameData\n    const maskKey = generateMask()\n    const bodyLength = frameData?.byteLength ?? 0\n\n    /** @type {number} */\n    let payloadLength = bodyLength // 0-125\n    let offset = 6\n\n    if (bodyLength > maxUnsigned16Bit) {\n      offset += 8 // payload length is next 8 bytes\n      payloadLength = 127\n    } else if (bodyLength > 125) {\n      offset += 2 // payload length is next 2 bytes\n      payloadLength = 126\n    }\n\n    const buffer = Buffer.allocUnsafe(bodyLength + offset)\n\n    // Clear first 2 bytes, everything else is overwritten\n    buffer[0] = buffer[1] = 0\n    buffer[0] |= 0x80 // FIN\n    buffer[0] = (buffer[0] & 0xF0) + opcode // opcode\n\n    /*! ws. MIT License. Einar Otto Stangvik <einaros@gmail.com> */\n    buffer[offset - 4] = maskKey[0]\n    buffer[offset - 3] = maskKey[1]\n    buffer[offset - 2] = maskKey[2]\n    buffer[offset - 1] = maskKey[3]\n\n    buffer[1] = payloadLength\n\n    if (payloadLength === 126) {\n      buffer.writeUInt16BE(bodyLength, 2)\n    } else if (payloadLength === 127) {\n      // Clear extended payload length\n      buffer[2] = buffer[3] = 0\n      buffer.writeUIntBE(bodyLength, 4, 6)\n    }\n\n    buffer[1] |= 0x80 // MASK\n\n    // mask body\n    for (let i = 0; i < bodyLength; ++i) {\n      buffer[offset + i] = frameData[i] ^ maskKey[i & 3]\n    }\n\n    return buffer\n  }\n\n  /**\n   * @param {Uint8Array} buffer\n   */\n  static createFastTextFrame (buffer) {\n    const maskKey = generateMask()\n\n    const bodyLength = buffer.length\n\n    // mask body\n    for (let i = 0; i < bodyLength; ++i) {\n      buffer[i] ^= maskKey[i & 3]\n    }\n\n    let payloadLength = bodyLength\n    let offset = 6\n\n    if (bodyLength > maxUnsigned16Bit) {\n      offset += 8 // payload length is next 8 bytes\n      payloadLength = 127\n    } else if (bodyLength > 125) {\n      offset += 2 // payload length is next 2 bytes\n      payloadLength = 126\n    }\n    const head = Buffer.allocUnsafeSlow(offset)\n\n    head[0] = 0x80 /* FIN */ | opcodes.TEXT /* opcode TEXT */\n    head[1] = payloadLength | 0x80 /* MASK */\n    head[offset - 4] = maskKey[0]\n    head[offset - 3] = maskKey[1]\n    head[offset - 2] = maskKey[2]\n    head[offset - 1] = maskKey[3]\n\n    if (payloadLength === 126) {\n      head.writeUInt16BE(bodyLength, 2)\n    } else if (payloadLength === 127) {\n      head[2] = head[3] = 0\n      head.writeUIntBE(bodyLength, 4, 6)\n    }\n\n    return [head, buffer]\n  }\n}\n\nmodule.exports = {\n  WebsocketFrameSend,\n  generateMask // for benchmark\n}\n", "'use strict'\n\nconst { uid, states, sentCloseFrameState, emptyBuffer, opcodes } = require('./constants')\nconst { parseExtensions, isClosed, isClosing, isEstablished, isConnecting, validateCloseCodeAndReason } = require('./util')\nconst { makeRequest } = require('../fetch/request')\nconst { fetching } = require('../fetch/index')\nconst { Headers, getHeadersList } = require('../fetch/headers')\nconst { getDecodeSplit } = require('../fetch/util')\nconst { WebsocketFrameSend } = require('./frame')\nconst assert = require('node:assert')\nconst { runtimeFeatures } = require('../../util/runtime-features')\n\nconst crypto = runtimeFeatures.has('crypto')\n  ? require('node:crypto')\n  : null\n\nlet warningEmitted = false\n\n/**\n * @see https://websockets.spec.whatwg.org/#concept-websocket-establish\n * @param {URL} url\n * @param {string|string[]} protocols\n * @param {import('./websocket').Handler} handler\n * @param {Partial<import('../../../types/websocket').WebSocketInit>} options\n */\nfunction establishWebSocketConnection (url, protocols, client, handler, options) {\n  // 1. Let requestURL be a copy of url, with its scheme set to \"http\", if url\u2019s\n  //    scheme is \"ws\", and to \"https\" otherwise.\n  const requestURL = url\n\n  requestURL.protocol = url.protocol === 'ws:' ? 'http:' : 'https:'\n\n  // 2. Let request be a new request, whose URL is requestURL, client is client,\n  //    service-workers mode is \"none\", referrer is \"no-referrer\", mode is\n  //    \"websocket\", credentials mode is \"include\", cache mode is \"no-store\" ,\n  //    redirect mode is \"error\", and use-URL-credentials flag is set.\n  const request = makeRequest({\n    urlList: [requestURL],\n    client,\n    serviceWorkers: 'none',\n    referrer: 'no-referrer',\n    mode: 'websocket',\n    credentials: 'include',\n    cache: 'no-store',\n    redirect: 'error',\n    useURLCredentials: true\n  })\n\n  // Note: undici extension, allow setting custom headers.\n  if (options.headers) {\n    const headersList = getHeadersList(new Headers(options.headers))\n\n    request.headersList = headersList\n  }\n\n  // 3. Append (`Upgrade`, `websocket`) to request\u2019s header list.\n  // 4. Append (`Connection`, `Upgrade`) to request\u2019s header list.\n  // Note: both of these are handled by undici currently.\n  // https://github.com/nodejs/undici/blob/68c269c4144c446f3f1220951338daef4a6b5ec4/lib/client.js#L1397\n\n  // 5. Let keyValue be a nonce consisting of a randomly selected\n  //    16-byte value that has been forgiving-base64-encoded and\n  //    isomorphic encoded.\n  const keyValue = crypto.randomBytes(16).toString('base64')\n\n  // 6. Append (`Sec-WebSocket-Key`, keyValue) to request\u2019s\n  //    header list.\n  request.headersList.append('sec-websocket-key', keyValue, true)\n\n  // 7. Append (`Sec-WebSocket-Version`, `13`) to request\u2019s\n  //    header list.\n  request.headersList.append('sec-websocket-version', '13', true)\n\n  // 8. For each protocol in protocols, combine\n  //    (`Sec-WebSocket-Protocol`, protocol) in request\u2019s header\n  //    list.\n  for (const protocol of protocols) {\n    request.headersList.append('sec-websocket-protocol', protocol, true)\n  }\n\n  // 9. Let permessageDeflate be a user-agent defined\n  //    \"permessage-deflate\" extension header value.\n  // https://github.com/mozilla/gecko-dev/blob/ce78234f5e653a5d3916813ff990f053510227bc/netwerk/protocol/websocket/WebSocketChannel.cpp#L2673\n  const permessageDeflate = 'permessage-deflate; client_max_window_bits'\n\n  // 10. Append (`Sec-WebSocket-Extensions`, permessageDeflate) to\n  //     request\u2019s header list.\n  request.headersList.append('sec-websocket-extensions', permessageDeflate, true)\n\n  // 11. Fetch request with useParallelQueue set to true, and\n  //     processResponse given response being these steps:\n  const controller = fetching({\n    request,\n    useParallelQueue: true,\n    dispatcher: options.dispatcher,\n    processResponse (response) {\n      // 1. If response is a network error or its status is not 101,\n      //    fail the WebSocket connection.\n      // if (response.type === 'error' || ((response.socket?.session != null && response.status !== 200) && response.status !== 101)) {\n      if (response.type === 'error' || response.status !== 101) {\n        // The presence of a session property on the socket indicates HTTP2\n        // HTTP1\n        if (response.socket?.session == null) {\n          failWebsocketConnection(handler, 1002, 'Received network error or non-101 status code.', response.error)\n          return\n        }\n\n        // HTTP2\n        if (response.status !== 200) {\n          failWebsocketConnection(handler, 1002, 'Received network error or non-200 status code.', response.error)\n          return\n        }\n      }\n\n      if (warningEmitted === false && response.socket?.session != null) {\n        process.emitWarning('WebSocket over HTTP2 is experimental, and subject to change.', 'ExperimentalWarning')\n        warningEmitted = true\n      }\n\n      // 2. If protocols is not the empty list and extracting header\n      //    list values given `Sec-WebSocket-Protocol` and response\u2019s\n      //    header list results in null, failure, or the empty byte\n      //    sequence, then fail the WebSocket connection.\n      if (protocols.length !== 0 && !response.headersList.get('Sec-WebSocket-Protocol')) {\n        failWebsocketConnection(handler, 1002, 'Server did not respond with sent protocols.')\n        return\n      }\n\n      // 3. Follow the requirements stated step 2 to step 6, inclusive,\n      //    of the last set of steps in section 4.1 of The WebSocket\n      //    Protocol to validate response. This either results in fail\n      //    the WebSocket connection or the WebSocket connection is\n      //    established.\n\n      // 2. If the response lacks an |Upgrade| header field or the |Upgrade|\n      //    header field contains a value that is not an ASCII case-\n      //    insensitive match for the value \"websocket\", the client MUST\n      //    _Fail the WebSocket Connection_.\n      //    For H2, no upgrade header is expected.\n      if (response.socket.session == null && response.headersList.get('Upgrade')?.toLowerCase() !== 'websocket') {\n        failWebsocketConnection(handler, 1002, 'Server did not set Upgrade header to \"websocket\".')\n        return\n      }\n\n      // 3. If the response lacks a |Connection| header field or the\n      //    |Connection| header field doesn't contain a token that is an\n      //    ASCII case-insensitive match for the value \"Upgrade\", the client\n      //    MUST _Fail the WebSocket Connection_.\n      //    For H2, no connection header is expected.\n      if (response.socket.session == null && response.headersList.get('Connection')?.toLowerCase() !== 'upgrade') {\n        failWebsocketConnection(handler, 1002, 'Server did not set Connection header to \"upgrade\".')\n        return\n      }\n\n      // 4. If the response lacks a |Sec-WebSocket-Accept| header field or\n      //    the |Sec-WebSocket-Accept| contains a value other than the\n      //    base64-encoded SHA-1 of the concatenation of the |Sec-WebSocket-\n      //    Key| (as a string, not base64-decoded) with the string \"258EAFA5-\n      //    E914-47DA-95CA-C5AB0DC85B11\" but ignoring any leading and\n      //    trailing whitespace, the client MUST _Fail the WebSocket\n      //    Connection_.\n      const secWSAccept = response.headersList.get('Sec-WebSocket-Accept')\n      const digest = crypto.hash('sha1', keyValue + uid, 'base64')\n      if (secWSAccept !== digest) {\n        failWebsocketConnection(handler, 1002, 'Incorrect hash received in Sec-WebSocket-Accept header.')\n        return\n      }\n\n      // 5. If the response includes a |Sec-WebSocket-Extensions| header\n      //    field and this header field indicates the use of an extension\n      //    that was not present in the client's handshake (the server has\n      //    indicated an extension not requested by the client), the client\n      //    MUST _Fail the WebSocket Connection_.  (The parsing of this\n      //    header field to determine which extensions are requested is\n      //    discussed in Section 9.1.)\n      const secExtension = response.headersList.get('Sec-WebSocket-Extensions')\n      let extensions\n\n      if (secExtension !== null) {\n        extensions = parseExtensions(secExtension)\n\n        if (!extensions.has('permessage-deflate')) {\n          failWebsocketConnection(handler, 1002, 'Sec-WebSocket-Extensions header does not match.')\n          return\n        }\n      }\n\n      // 6. If the response includes a |Sec-WebSocket-Protocol| header field\n      //    and this header field indicates the use of a subprotocol that was\n      //    not present in the client's handshake (the server has indicated a\n      //    subprotocol not requested by the client), the client MUST _Fail\n      //    the WebSocket Connection_.\n      const secProtocol = response.headersList.get('Sec-WebSocket-Protocol')\n\n      if (secProtocol !== null) {\n        const requestProtocols = getDecodeSplit('sec-websocket-protocol', request.headersList)\n\n        // The client can request that the server use a specific subprotocol by\n        // including the |Sec-WebSocket-Protocol| field in its handshake.  If it\n        // is specified, the server needs to include the same field and one of\n        // the selected subprotocol values in its response for the connection to\n        // be established.\n        if (!requestProtocols.includes(secProtocol)) {\n          failWebsocketConnection(handler, 1002, 'Protocol was not set in the opening handshake.')\n          return\n        }\n      }\n\n      response.socket.on('data', handler.onSocketData)\n      response.socket.on('close', handler.onSocketClose)\n      response.socket.on('error', handler.onSocketError)\n\n      handler.wasEverConnected = true\n      handler.onConnectionEstablished(response, extensions)\n    }\n  })\n\n  return controller\n}\n\n/**\n * @see https://whatpr.org/websockets/48.html#close-the-websocket\n * @param {import('./websocket').Handler} object\n * @param {number} [code=null]\n * @param {string} [reason='']\n */\nfunction closeWebSocketConnection (object, code, reason, validate = false) {\n  // 1. If code was not supplied, let code be null.\n  code ??= null\n\n  // 2. If reason was not supplied, let reason be the empty string.\n  reason ??= ''\n\n  // 3. Validate close code and reason with code and reason.\n  if (validate) validateCloseCodeAndReason(code, reason)\n\n  // 4. Run the first matching steps from the following list:\n  //     - If object\u2019s ready state is CLOSING (2) or CLOSED (3)\n  //     - If the WebSocket connection is not yet established [WSP]\n  //     - If the WebSocket closing handshake has not yet been started [WSP]\n  //     - Otherwise\n  if (isClosed(object.readyState) || isClosing(object.readyState)) {\n    // Do nothing.\n  } else if (!isEstablished(object.readyState)) {\n    // Fail the WebSocket connection and set object\u2019s ready state to CLOSING (2). [WSP]\n    failWebsocketConnection(object)\n    object.readyState = states.CLOSING\n  } else if (!object.closeState.has(sentCloseFrameState.SENT) && !object.closeState.has(sentCloseFrameState.RECEIVED)) {\n    // Upon either sending or receiving a Close control frame, it is said\n    // that _The WebSocket Closing Handshake is Started_ and that the\n    // WebSocket connection is in the CLOSING state.\n\n    const frame = new WebsocketFrameSend()\n\n    // If neither code nor reason is present, the WebSocket Close\n    // message must not have a body.\n\n    // If code is present, then the status code to use in the\n    // WebSocket Close message must be the integer given by code.\n    // If code is null and reason is the empty string, the WebSocket Close frame must not have a body.\n    // If reason is non-empty but code is null, then set code to 1000 (\"Normal Closure\").\n    if (reason.length !== 0 && code === null) {\n      code = 1000\n    }\n\n    // If code is set, then the status code to use in the WebSocket Close frame must be the integer given by code.\n    assert(code === null || Number.isInteger(code))\n\n    if (code === null && reason.length === 0) {\n      frame.frameData = emptyBuffer\n    } else if (code !== null && reason === null) {\n      frame.frameData = Buffer.allocUnsafe(2)\n      frame.frameData.writeUInt16BE(code, 0)\n    } else if (code !== null && reason !== null) {\n      // If reason is also present, then reasonBytes must be\n      // provided in the Close message after the status code.\n      frame.frameData = Buffer.allocUnsafe(2 + Buffer.byteLength(reason))\n      frame.frameData.writeUInt16BE(code, 0)\n      // the body MAY contain UTF-8-encoded data with value /reason/\n      frame.frameData.write(reason, 2, 'utf-8')\n    } else {\n      frame.frameData = emptyBuffer\n    }\n\n    object.socket.write(frame.createFrame(opcodes.CLOSE))\n\n    object.closeState.add(sentCloseFrameState.SENT)\n\n    // Upon either sending or receiving a Close control frame, it is said\n    // that _The WebSocket Closing Handshake is Started_ and that the\n    // WebSocket connection is in the CLOSING state.\n    object.readyState = states.CLOSING\n  } else {\n    // Set object\u2019s ready state to CLOSING (2).\n    object.readyState = states.CLOSING\n  }\n}\n\n/**\n * @param {import('./websocket').Handler} handler\n * @param {number} code\n * @param {string|undefined} reason\n * @param {unknown} cause\n * @returns {void}\n */\nfunction failWebsocketConnection (handler, code, reason, cause) {\n  // If _The WebSocket Connection is Established_ prior to the point where\n  // the endpoint is required to _Fail the WebSocket Connection_, the\n  // endpoint SHOULD send a Close frame with an appropriate status code\n  // (Section 7.4) before proceeding to _Close the WebSocket Connection_.\n  if (isEstablished(handler.readyState)) {\n    closeWebSocketConnection(handler, code, reason, false)\n  }\n\n  handler.controller.abort()\n\n  if (isConnecting(handler.readyState)) {\n    // If the connection was not established, we must still emit an 'error' and 'close' events\n    handler.onSocketClose()\n  } else if (handler.socket?.destroyed === false) {\n    handler.socket.destroy()\n  }\n}\n\nmodule.exports = {\n  establishWebSocketConnection,\n  failWebsocketConnection,\n  closeWebSocketConnection\n}\n", "'use strict'\n\nconst { createInflateRaw, Z_DEFAULT_WINDOWBITS } = require('node:zlib')\nconst { isValidClientWindowBits } = require('./util')\nconst { MessageSizeExceededError } = require('../../core/errors')\n\nconst tail = Buffer.from([0x00, 0x00, 0xff, 0xff])\nconst kBuffer = Symbol('kBuffer')\nconst kLength = Symbol('kLength')\n\n// Default maximum decompressed message size: 4 MB\nconst kDefaultMaxDecompressedSize = 4 * 1024 * 1024\n\nclass PerMessageDeflate {\n  /** @type {import('node:zlib').InflateRaw} */\n  #inflate\n\n  #options = {}\n\n  /** @type {number} */\n  #maxDecompressedSize\n\n  /** @type {boolean} */\n  #aborted = false\n\n  /** @type {Function|null} */\n  #currentCallback = null\n\n  /**\n   * @param {Map<string, string>} extensions\n   * @param {{ maxDecompressedMessageSize?: number }} [options]\n   */\n  constructor (extensions, options = {}) {\n    this.#options.serverNoContextTakeover = extensions.has('server_no_context_takeover')\n    this.#options.serverMaxWindowBits = extensions.get('server_max_window_bits')\n    this.#maxDecompressedSize = options.maxDecompressedMessageSize ?? kDefaultMaxDecompressedSize\n  }\n\n  decompress (chunk, fin, callback) {\n    // An endpoint uses the following algorithm to decompress a message.\n    // 1.  Append 4 octets of 0x00 0x00 0xff 0xff to the tail end of the\n    //     payload of the message.\n    // 2.  Decompress the resulting data using DEFLATE.\n\n    if (this.#aborted) {\n      callback(new MessageSizeExceededError())\n      return\n    }\n\n    if (!this.#inflate) {\n      let windowBits = Z_DEFAULT_WINDOWBITS\n\n      if (this.#options.serverMaxWindowBits) { // empty values default to Z_DEFAULT_WINDOWBITS\n        if (!isValidClientWindowBits(this.#options.serverMaxWindowBits)) {\n          callback(new Error('Invalid server_max_window_bits'))\n          return\n        }\n\n        windowBits = Number.parseInt(this.#options.serverMaxWindowBits)\n      }\n\n      try {\n        this.#inflate = createInflateRaw({ windowBits })\n      } catch (err) {\n        callback(err)\n        return\n      }\n      this.#inflate[kBuffer] = []\n      this.#inflate[kLength] = 0\n\n      this.#inflate.on('data', (data) => {\n        if (this.#aborted) {\n          return\n        }\n\n        this.#inflate[kLength] += data.length\n\n        if (this.#inflate[kLength] > this.#maxDecompressedSize) {\n          this.#aborted = true\n          this.#inflate.removeAllListeners()\n          this.#inflate.destroy()\n          this.#inflate = null\n\n          if (this.#currentCallback) {\n            const cb = this.#currentCallback\n            this.#currentCallback = null\n            cb(new MessageSizeExceededError())\n          }\n          return\n        }\n\n        this.#inflate[kBuffer].push(data)\n      })\n\n      this.#inflate.on('error', (err) => {\n        this.#inflate = null\n        callback(err)\n      })\n    }\n\n    this.#currentCallback = callback\n    this.#inflate.write(chunk)\n    if (fin) {\n      this.#inflate.write(tail)\n    }\n\n    this.#inflate.flush(() => {\n      if (this.#aborted || !this.#inflate) {\n        return\n      }\n\n      const full = Buffer.concat(this.#inflate[kBuffer], this.#inflate[kLength])\n\n      this.#inflate[kBuffer].length = 0\n      this.#inflate[kLength] = 0\n      this.#currentCallback = null\n\n      callback(null, full)\n    })\n  }\n}\n\nmodule.exports = { PerMessageDeflate }\n", "'use strict'\n\nconst { Writable } = require('node:stream')\nconst assert = require('node:assert')\nconst { parserStates, opcodes, states, emptyBuffer, sentCloseFrameState } = require('./constants')\nconst {\n  isValidStatusCode,\n  isValidOpcode,\n  websocketMessageReceived,\n  utf8Decode,\n  isControlFrame,\n  isTextBinaryFrame,\n  isContinuationFrame\n} = require('./util')\nconst { failWebsocketConnection } = require('./connection')\nconst { WebsocketFrameSend } = require('./frame')\nconst { PerMessageDeflate } = require('./permessage-deflate')\nconst { MessageSizeExceededError } = require('../../core/errors')\n\n// This code was influenced by ws released under the MIT license.\n// Copyright (c) 2011 Einar Otto Stangvik <einaros@gmail.com>\n// Copyright (c) 2013 Arnout Kazemier and contributors\n// Copyright (c) 2016 Luigi Pinca and contributors\n\nclass ByteParser extends Writable {\n  #buffers = []\n  #fragmentsBytes = 0\n  #byteOffset = 0\n  #loop = false\n\n  #state = parserStates.INFO\n\n  #info = {}\n  #fragments = []\n\n  /** @type {Map<string, PerMessageDeflate>} */\n  #extensions\n\n  /** @type {import('./websocket').Handler} */\n  #handler\n\n  /** @type {{ maxDecompressedMessageSize?: number }} */\n  #options\n\n  /**\n   * @param {import('./websocket').Handler} handler\n   * @param {Map<string, string>|null} extensions\n   * @param {{ maxDecompressedMessageSize?: number }} [options]\n   */\n  constructor (handler, extensions, options = {}) {\n    super()\n\n    this.#handler = handler\n    this.#extensions = extensions == null ? new Map() : extensions\n    this.#options = options\n\n    if (this.#extensions.has('permessage-deflate')) {\n      this.#extensions.set('permessage-deflate', new PerMessageDeflate(extensions, options))\n    }\n  }\n\n  /**\n   * @param {Buffer} chunk\n   * @param {() => void} callback\n   */\n  _write (chunk, _, callback) {\n    this.#buffers.push(chunk)\n    this.#byteOffset += chunk.length\n    this.#loop = true\n\n    this.run(callback)\n  }\n\n  /**\n   * Runs whenever a new chunk is received.\n   * Callback is called whenever there are no more chunks buffering,\n   * or not enough bytes are buffered to parse.\n   */\n  run (callback) {\n    while (this.#loop) {\n      if (this.#state === parserStates.INFO) {\n        // If there aren't enough bytes to parse the payload length, etc.\n        if (this.#byteOffset < 2) {\n          return callback()\n        }\n\n        const buffer = this.consume(2)\n        const fin = (buffer[0] & 0x80) !== 0\n        const opcode = buffer[0] & 0x0F\n        const masked = (buffer[1] & 0x80) === 0x80\n\n        const fragmented = !fin && opcode !== opcodes.CONTINUATION\n        const payloadLength = buffer[1] & 0x7F\n\n        const rsv1 = buffer[0] & 0x40\n        const rsv2 = buffer[0] & 0x20\n        const rsv3 = buffer[0] & 0x10\n\n        if (!isValidOpcode(opcode)) {\n          failWebsocketConnection(this.#handler, 1002, 'Invalid opcode received')\n          return callback()\n        }\n\n        if (masked) {\n          failWebsocketConnection(this.#handler, 1002, 'Frame cannot be masked')\n          return callback()\n        }\n\n        // MUST be 0 unless an extension is negotiated that defines meanings\n        // for non-zero values.  If a nonzero value is received and none of\n        // the negotiated extensions defines the meaning of such a nonzero\n        // value, the receiving endpoint MUST _Fail the WebSocket\n        // Connection_.\n        // This document allocates the RSV1 bit of the WebSocket header for\n        // PMCEs and calls the bit the \"Per-Message Compressed\" bit.  On a\n        // WebSocket connection where a PMCE is in use, this bit indicates\n        // whether a message is compressed or not.\n        if (rsv1 !== 0 && !this.#extensions.has('permessage-deflate')) {\n          failWebsocketConnection(this.#handler, 1002, 'Expected RSV1 to be clear.')\n          return\n        }\n\n        if (rsv2 !== 0 || rsv3 !== 0) {\n          failWebsocketConnection(this.#handler, 1002, 'RSV1, RSV2, RSV3 must be clear')\n          return\n        }\n\n        if (fragmented && !isTextBinaryFrame(opcode)) {\n          // Only text and binary frames can be fragmented\n          failWebsocketConnection(this.#handler, 1002, 'Invalid frame type was fragmented.')\n          return\n        }\n\n        // If we are already parsing a text/binary frame and do not receive either\n        // a continuation frame or close frame, fail the connection.\n        if (isTextBinaryFrame(opcode) && this.#fragments.length > 0) {\n          failWebsocketConnection(this.#handler, 1002, 'Expected continuation frame')\n          return\n        }\n\n        if (this.#info.fragmented && fragmented) {\n          // A fragmented frame can't be fragmented itself\n          failWebsocketConnection(this.#handler, 1002, 'Fragmented frame exceeded 125 bytes.')\n          return\n        }\n\n        // \"All control frames MUST have a payload length of 125 bytes or less\n        // and MUST NOT be fragmented.\"\n        if ((payloadLength > 125 || fragmented) && isControlFrame(opcode)) {\n          failWebsocketConnection(this.#handler, 1002, 'Control frame either too large or fragmented')\n          return\n        }\n\n        if (isContinuationFrame(opcode) && this.#fragments.length === 0 && !this.#info.compressed) {\n          failWebsocketConnection(this.#handler, 1002, 'Unexpected continuation frame')\n          return\n        }\n\n        if (payloadLength <= 125) {\n          this.#info.payloadLength = payloadLength\n          this.#state = parserStates.READ_DATA\n        } else if (payloadLength === 126) {\n          this.#state = parserStates.PAYLOADLENGTH_16\n        } else if (payloadLength === 127) {\n          this.#state = parserStates.PAYLOADLENGTH_64\n        }\n\n        if (isTextBinaryFrame(opcode)) {\n          this.#info.binaryType = opcode\n          this.#info.compressed = rsv1 !== 0\n        }\n\n        this.#info.opcode = opcode\n        this.#info.masked = masked\n        this.#info.fin = fin\n        this.#info.fragmented = fragmented\n      } else if (this.#state === parserStates.PAYLOADLENGTH_16) {\n        if (this.#byteOffset < 2) {\n          return callback()\n        }\n\n        const buffer = this.consume(2)\n\n        this.#info.payloadLength = buffer.readUInt16BE(0)\n        this.#state = parserStates.READ_DATA\n      } else if (this.#state === parserStates.PAYLOADLENGTH_64) {\n        if (this.#byteOffset < 8) {\n          return callback()\n        }\n\n        const buffer = this.consume(8)\n        const upper = buffer.readUInt32BE(0)\n        const lower = buffer.readUInt32BE(4)\n\n        // 2^31 is the maximum bytes an arraybuffer can contain\n        // on 32-bit systems. Although, on 64-bit systems, this is\n        // 2^53-1 bytes.\n        // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Invalid_array_length\n        // https://source.chromium.org/chromium/chromium/src/+/main:v8/src/common/globals.h;drc=1946212ac0100668f14eb9e2843bdd846e510a1e;bpv=1;bpt=1;l=1275\n        // https://source.chromium.org/chromium/chromium/src/+/main:v8/src/objects/js-array-buffer.h;l=34;drc=1946212ac0100668f14eb9e2843bdd846e510a1e\n        if (upper !== 0 || lower > 2 ** 31 - 1) {\n          failWebsocketConnection(this.#handler, 1009, 'Received payload length > 2^31 bytes.')\n          return\n        }\n\n        this.#info.payloadLength = lower\n        this.#state = parserStates.READ_DATA\n      } else if (this.#state === parserStates.READ_DATA) {\n        if (this.#byteOffset < this.#info.payloadLength) {\n          return callback()\n        }\n\n        const body = this.consume(this.#info.payloadLength)\n\n        if (isControlFrame(this.#info.opcode)) {\n          this.#loop = this.parseControlFrame(body)\n          this.#state = parserStates.INFO\n        } else {\n          if (!this.#info.compressed) {\n            this.writeFragments(body)\n\n            // If the frame is not fragmented, a message has been received.\n            // If the frame is fragmented, it will terminate with a fin bit set\n            // and an opcode of 0 (continuation), therefore we handle that when\n            // parsing continuation frames, not here.\n            if (!this.#info.fragmented && this.#info.fin) {\n              websocketMessageReceived(this.#handler, this.#info.binaryType, this.consumeFragments())\n            }\n\n            this.#state = parserStates.INFO\n          } else {\n            this.#extensions.get('permessage-deflate').decompress(body, this.#info.fin, (error, data) => {\n              if (error) {\n                // Use 1009 (Message Too Big) for decompression size limit errors\n                const code = error instanceof MessageSizeExceededError ? 1009 : 1007\n                failWebsocketConnection(this.#handler, code, error.message)\n                return\n              }\n\n              this.writeFragments(data)\n\n              if (!this.#info.fin) {\n                this.#state = parserStates.INFO\n                this.#loop = true\n                this.run(callback)\n                return\n              }\n\n              websocketMessageReceived(this.#handler, this.#info.binaryType, this.consumeFragments())\n\n              this.#loop = true\n              this.#state = parserStates.INFO\n              this.run(callback)\n            })\n\n            this.#loop = false\n            break\n          }\n        }\n      }\n    }\n  }\n\n  /**\n   * Take n bytes from the buffered Buffers\n   * @param {number} n\n   * @returns {Buffer}\n   */\n  consume (n) {\n    if (n > this.#byteOffset) {\n      throw new Error('Called consume() before buffers satiated.')\n    } else if (n === 0) {\n      return emptyBuffer\n    }\n\n    this.#byteOffset -= n\n\n    const first = this.#buffers[0]\n\n    if (first.length > n) {\n      // replace with remaining buffer\n      this.#buffers[0] = first.subarray(n, first.length)\n      return first.subarray(0, n)\n    } else if (first.length === n) {\n      // prefect match\n      return this.#buffers.shift()\n    } else {\n      let offset = 0\n      // If Buffer.allocUnsafe is used, extra copies will be made because the offset is non-zero.\n      const buffer = Buffer.allocUnsafeSlow(n)\n      while (offset !== n) {\n        const next = this.#buffers[0]\n        const length = next.length\n\n        if (length + offset === n) {\n          buffer.set(this.#buffers.shift(), offset)\n          break\n        } else if (length + offset > n) {\n          buffer.set(next.subarray(0, n - offset), offset)\n          this.#buffers[0] = next.subarray(n - offset)\n          break\n        } else {\n          buffer.set(this.#buffers.shift(), offset)\n          offset += length\n        }\n      }\n\n      return buffer\n    }\n  }\n\n  writeFragments (fragment) {\n    this.#fragmentsBytes += fragment.length\n    this.#fragments.push(fragment)\n  }\n\n  consumeFragments () {\n    const fragments = this.#fragments\n\n    if (fragments.length === 1) {\n      // single fragment\n      this.#fragmentsBytes = 0\n      return fragments.shift()\n    }\n\n    let offset = 0\n    // If Buffer.allocUnsafe is used, extra copies will be made because the offset is non-zero.\n    const output = Buffer.allocUnsafeSlow(this.#fragmentsBytes)\n\n    for (let i = 0; i < fragments.length; ++i) {\n      const buffer = fragments[i]\n      output.set(buffer, offset)\n      offset += buffer.length\n    }\n\n    this.#fragments = []\n    this.#fragmentsBytes = 0\n\n    return output\n  }\n\n  parseCloseBody (data) {\n    assert(data.length !== 1)\n\n    // https://datatracker.ietf.org/doc/html/rfc6455#section-7.1.5\n    /** @type {number|undefined} */\n    let code\n\n    if (data.length >= 2) {\n      // _The WebSocket Connection Close Code_ is\n      // defined as the status code (Section 7.4) contained in the first Close\n      // control frame received by the application\n      code = data.readUInt16BE(0)\n    }\n\n    if (code !== undefined && !isValidStatusCode(code)) {\n      return { code: 1002, reason: 'Invalid status code', error: true }\n    }\n\n    // https://datatracker.ietf.org/doc/html/rfc6455#section-7.1.6\n    /** @type {Buffer} */\n    let reason = data.subarray(2)\n\n    // Remove BOM\n    if (reason[0] === 0xEF && reason[1] === 0xBB && reason[2] === 0xBF) {\n      reason = reason.subarray(3)\n    }\n\n    try {\n      reason = utf8Decode(reason)\n    } catch {\n      return { code: 1007, reason: 'Invalid UTF-8', error: true }\n    }\n\n    return { code, reason, error: false }\n  }\n\n  /**\n   * Parses control frames.\n   * @param {Buffer} body\n   */\n  parseControlFrame (body) {\n    const { opcode, payloadLength } = this.#info\n\n    if (opcode === opcodes.CLOSE) {\n      if (payloadLength === 1) {\n        failWebsocketConnection(this.#handler, 1002, 'Received close frame with a 1-byte body.')\n        return false\n      }\n\n      this.#info.closeInfo = this.parseCloseBody(body)\n\n      if (this.#info.closeInfo.error) {\n        const { code, reason } = this.#info.closeInfo\n\n        failWebsocketConnection(this.#handler, code, reason)\n        return false\n      }\n\n      // Upon receiving such a frame, the other peer sends a\n      // Close frame in response, if it hasn't already sent one.\n      if (!this.#handler.closeState.has(sentCloseFrameState.SENT) && !this.#handler.closeState.has(sentCloseFrameState.RECEIVED)) {\n        // If an endpoint receives a Close frame and did not previously send a\n        // Close frame, the endpoint MUST send a Close frame in response.  (When\n        // sending a Close frame in response, the endpoint typically echos the\n        // status code it received.)\n        let body = emptyBuffer\n        if (this.#info.closeInfo.code) {\n          body = Buffer.allocUnsafe(2)\n          body.writeUInt16BE(this.#info.closeInfo.code, 0)\n        }\n        const closeFrame = new WebsocketFrameSend(body)\n\n        this.#handler.socket.write(closeFrame.createFrame(opcodes.CLOSE))\n        this.#handler.closeState.add(sentCloseFrameState.SENT)\n      }\n\n      // Upon either sending or receiving a Close control frame, it is said\n      // that _The WebSocket Closing Handshake is Started_ and that the\n      // WebSocket connection is in the CLOSING state.\n      this.#handler.readyState = states.CLOSING\n      this.#handler.closeState.add(sentCloseFrameState.RECEIVED)\n\n      return false\n    } else if (opcode === opcodes.PING) {\n      // Upon receipt of a Ping frame, an endpoint MUST send a Pong frame in\n      // response, unless it already received a Close frame.\n      // A Pong frame sent in response to a Ping frame must have identical\n      // \"Application data\"\n\n      if (!this.#handler.closeState.has(sentCloseFrameState.RECEIVED)) {\n        const frame = new WebsocketFrameSend(body)\n\n        this.#handler.socket.write(frame.createFrame(opcodes.PONG))\n\n        this.#handler.onPing(body)\n      }\n    } else if (opcode === opcodes.PONG) {\n      // A Pong frame MAY be sent unsolicited.  This serves as a\n      // unidirectional heartbeat.  A response to an unsolicited Pong frame is\n      // not expected.\n      this.#handler.onPong(body)\n    }\n\n    return true\n  }\n\n  get closingInfo () {\n    return this.#info.closeInfo\n  }\n}\n\nmodule.exports = {\n  ByteParser\n}\n", "'use strict'\n\nconst { WebsocketFrameSend } = require('./frame')\nconst { opcodes, sendHints } = require('./constants')\nconst FixedQueue = require('../../dispatcher/fixed-queue')\n\n/**\n * @typedef {object} SendQueueNode\n * @property {Promise<void> | null} promise\n * @property {((...args: any[]) => any)} callback\n * @property {Buffer | null} frame\n */\n\nclass SendQueue {\n  /**\n   * @type {FixedQueue}\n   */\n  #queue = new FixedQueue()\n\n  /**\n   * @type {boolean}\n   */\n  #running = false\n\n  /** @type {import('node:net').Socket} */\n  #socket\n\n  constructor (socket) {\n    this.#socket = socket\n  }\n\n  add (item, cb, hint) {\n    if (hint !== sendHints.blob) {\n      if (!this.#running) {\n        // TODO(@tsctx): support fast-path for string on running\n        if (hint === sendHints.text) {\n          // special fast-path for string\n          const { 0: head, 1: body } = WebsocketFrameSend.createFastTextFrame(item)\n          this.#socket.cork()\n          this.#socket.write(head)\n          this.#socket.write(body, cb)\n          this.#socket.uncork()\n        } else {\n          // direct writing\n          this.#socket.write(createFrame(item, hint), cb)\n        }\n      } else {\n        /** @type {SendQueueNode} */\n        const node = {\n          promise: null,\n          callback: cb,\n          frame: createFrame(item, hint)\n        }\n        this.#queue.push(node)\n      }\n      return\n    }\n\n    /** @type {SendQueueNode} */\n    const node = {\n      promise: item.arrayBuffer().then((ab) => {\n        node.promise = null\n        node.frame = createFrame(ab, hint)\n      }),\n      callback: cb,\n      frame: null\n    }\n\n    this.#queue.push(node)\n\n    if (!this.#running) {\n      this.#run()\n    }\n  }\n\n  async #run () {\n    this.#running = true\n    const queue = this.#queue\n    while (!queue.isEmpty()) {\n      const node = queue.shift()\n      // wait pending promise\n      if (node.promise !== null) {\n        await node.promise\n      }\n      // write\n      this.#socket.write(node.frame, node.callback)\n      // cleanup\n      node.callback = node.frame = null\n    }\n    this.#running = false\n  }\n}\n\nfunction createFrame (data, hint) {\n  return new WebsocketFrameSend(toBuffer(data, hint)).createFrame(hint === sendHints.text ? opcodes.TEXT : opcodes.BINARY)\n}\n\nfunction toBuffer (data, hint) {\n  switch (hint) {\n    case sendHints.text:\n    case sendHints.typedArray:\n      return new Uint8Array(data.buffer, data.byteOffset, data.byteLength)\n    case sendHints.arrayBuffer:\n    case sendHints.blob:\n      return new Uint8Array(data)\n  }\n}\n\nmodule.exports = { SendQueue }\n", "'use strict'\n\nconst { isArrayBuffer } = require('node:util/types')\nconst { webidl } = require('../webidl')\nconst { URLSerializer } = require('../fetch/data-url')\nconst { environmentSettingsObject } = require('../fetch/util')\nconst { staticPropertyDescriptors, states, sentCloseFrameState, sendHints, opcodes } = require('./constants')\nconst {\n  isConnecting,\n  isEstablished,\n  isClosing,\n  isClosed,\n  isValidSubprotocol,\n  fireEvent,\n  utf8Decode,\n  toArrayBuffer,\n  getURLRecord\n} = require('./util')\nconst { establishWebSocketConnection, closeWebSocketConnection, failWebsocketConnection } = require('./connection')\nconst { ByteParser } = require('./receiver')\nconst { kEnumerableProperty } = require('../../core/util')\nconst { getGlobalDispatcher } = require('../../global')\nconst { ErrorEvent, CloseEvent, createFastMessageEvent } = require('./events')\nconst { SendQueue } = require('./sender')\nconst { WebsocketFrameSend } = require('./frame')\nconst { channels } = require('../../core/diagnostics')\n\n/**\n * @typedef {object} Handler\n * @property {(response: any, extensions?: string[]) => void} onConnectionEstablished\n * @property {(opcode: number, data: Buffer) => void} onMessage\n * @property {(error: Error) => void} onParserError\n * @property {() => void} onParserDrain\n * @property {(chunk: Buffer) => void} onSocketData\n * @property {(err: Error) => void} onSocketError\n * @property {() => void} onSocketClose\n * @property {(body: Buffer) => void} onPing\n * @property {(body: Buffer) => void} onPong\n *\n * @property {number} readyState\n * @property {import('stream').Duplex} socket\n * @property {Set<number>} closeState\n * @property {import('../fetch/index').Fetch} controller\n * @property {boolean} [wasEverConnected=false]\n */\n\n// https://websockets.spec.whatwg.org/#interface-definition\nclass WebSocket extends EventTarget {\n  #events = {\n    open: null,\n    error: null,\n    close: null,\n    message: null\n  }\n\n  #bufferedAmount = 0\n  #protocol = ''\n  #extensions = ''\n\n  /** @type {SendQueue} */\n  #sendQueue\n\n  /** @type {Handler} */\n  #handler = {\n    onConnectionEstablished: (response, extensions) => this.#onConnectionEstablished(response, extensions),\n    onMessage: (opcode, data) => this.#onMessage(opcode, data),\n    onParserError: (err) => failWebsocketConnection(this.#handler, null, err.message),\n    onParserDrain: () => this.#onParserDrain(),\n    onSocketData: (chunk) => {\n      if (!this.#parser.write(chunk)) {\n        this.#handler.socket.pause()\n      }\n    },\n    onSocketError: (err) => {\n      this.#handler.readyState = states.CLOSING\n\n      if (channels.socketError.hasSubscribers) {\n        channels.socketError.publish(err)\n      }\n\n      this.#handler.socket.destroy()\n    },\n    onSocketClose: () => this.#onSocketClose(),\n    onPing: (body) => {\n      if (channels.ping.hasSubscribers) {\n        channels.ping.publish({\n          payload: body,\n          websocket: this\n        })\n      }\n    },\n    onPong: (body) => {\n      if (channels.pong.hasSubscribers) {\n        channels.pong.publish({\n          payload: body,\n          websocket: this\n        })\n      }\n    },\n\n    readyState: states.CONNECTING,\n    socket: null,\n    closeState: new Set(),\n    controller: null,\n    wasEverConnected: false\n  }\n\n  #url\n  #binaryType\n  /** @type {import('./receiver').ByteParser} */\n  #parser\n  /** @type {{ maxDecompressedMessageSize?: number }} */\n  #options\n\n  /**\n   * @param {string} url\n   * @param {string|string[]} protocols\n   */\n  constructor (url, protocols = []) {\n    super()\n\n    webidl.util.markAsUncloneable(this)\n\n    const prefix = 'WebSocket constructor'\n    webidl.argumentLengthCheck(arguments, 1, prefix)\n\n    const options = webidl.converters['DOMString or sequence<DOMString> or WebSocketInit'](protocols, prefix, 'options')\n\n    url = webidl.converters.USVString(url)\n    protocols = options.protocols\n\n    // 1. Let baseURL be this's relevant settings object's API base URL.\n    const baseURL = environmentSettingsObject.settingsObject.baseUrl\n\n    // 2. Let urlRecord be the result of getting a URL record given url and baseURL.\n    const urlRecord = getURLRecord(url, baseURL)\n\n    // 3. If protocols is a string, set protocols to a sequence consisting\n    //    of just that string.\n    if (typeof protocols === 'string') {\n      protocols = [protocols]\n    }\n\n    // 4. If any of the values in protocols occur more than once or otherwise\n    //    fail to match the requirements for elements that comprise the value\n    //    of `Sec-WebSocket-Protocol` fields as defined by The WebSocket\n    //    protocol, then throw a \"SyntaxError\" DOMException.\n    if (protocols.length !== new Set(protocols.map(p => p.toLowerCase())).size) {\n      throw new DOMException('Invalid Sec-WebSocket-Protocol value', 'SyntaxError')\n    }\n\n    if (protocols.length > 0 && !protocols.every(p => isValidSubprotocol(p))) {\n      throw new DOMException('Invalid Sec-WebSocket-Protocol value', 'SyntaxError')\n    }\n\n    // 5. Set this's url to urlRecord.\n    this.#url = new URL(urlRecord.href)\n\n    // Store options for later use (e.g., maxDecompressedMessageSize)\n    this.#options = {\n      maxDecompressedMessageSize: options.maxDecompressedMessageSize\n    }\n\n    // 6. Let client be this's relevant settings object.\n    const client = environmentSettingsObject.settingsObject\n\n    // 7. Run this step in parallel:\n    // 7.1. Establish a WebSocket connection given urlRecord, protocols,\n    //      and client.\n    this.#handler.controller = establishWebSocketConnection(\n      urlRecord,\n      protocols,\n      client,\n      this.#handler,\n      options\n    )\n\n    // Each WebSocket object has an associated ready state, which is a\n    // number representing the state of the connection. Initially it must\n    // be CONNECTING (0).\n    this.#handler.readyState = WebSocket.CONNECTING\n\n    // The extensions attribute must initially return the empty string.\n\n    // The protocol attribute must initially return the empty string.\n\n    // Each WebSocket object has an associated binary type, which is a\n    // BinaryType. Initially it must be \"blob\".\n    this.#binaryType = 'blob'\n  }\n\n  /**\n   * @see https://websockets.spec.whatwg.org/#dom-websocket-close\n   * @param {number|undefined} code\n   * @param {string|undefined} reason\n   */\n  close (code = undefined, reason = undefined) {\n    webidl.brandCheck(this, WebSocket)\n\n    const prefix = 'WebSocket.close'\n\n    if (code !== undefined) {\n      code = webidl.converters['unsigned short'](code, prefix, 'code', webidl.attributes.Clamp)\n    }\n\n    if (reason !== undefined) {\n      reason = webidl.converters.USVString(reason)\n    }\n\n    // 1. If code is the special value \"missing\", then set code to null.\n    code ??= null\n\n    // 2. If reason is the special value \"missing\", then set reason to the empty string.\n    reason ??= ''\n\n    // 3. Close the WebSocket with this, code, and reason.\n    closeWebSocketConnection(this.#handler, code, reason, true)\n  }\n\n  /**\n   * @see https://websockets.spec.whatwg.org/#dom-websocket-send\n   * @param {NodeJS.TypedArray|ArrayBuffer|Blob|string} data\n   */\n  send (data) {\n    webidl.brandCheck(this, WebSocket)\n\n    const prefix = 'WebSocket.send'\n    webidl.argumentLengthCheck(arguments, 1, prefix)\n\n    data = webidl.converters.WebSocketSendData(data, prefix, 'data')\n\n    // 1. If this's ready state is CONNECTING, then throw an\n    //    \"InvalidStateError\" DOMException.\n    if (isConnecting(this.#handler.readyState)) {\n      throw new DOMException('Sent before connected.', 'InvalidStateError')\n    }\n\n    // 2. Run the appropriate set of steps from the following list:\n    // https://datatracker.ietf.org/doc/html/rfc6455#section-6.1\n    // https://datatracker.ietf.org/doc/html/rfc6455#section-5.2\n\n    if (!isEstablished(this.#handler.readyState) || isClosing(this.#handler.readyState)) {\n      return\n    }\n\n    // If data is a string\n    if (typeof data === 'string') {\n      // If the WebSocket connection is established and the WebSocket\n      // closing handshake has not yet started, then the user agent\n      // must send a WebSocket Message comprised of the data argument\n      // using a text frame opcode; if the data cannot be sent, e.g.\n      // because it would need to be buffered but the buffer is full,\n      // the user agent must flag the WebSocket as full and then close\n      // the WebSocket connection. Any invocation of this method with a\n      // string argument that does not throw an exception must increase\n      // the bufferedAmount attribute by the number of bytes needed to\n      // express the argument as UTF-8.\n\n      const buffer = Buffer.from(data)\n\n      this.#bufferedAmount += buffer.byteLength\n      this.#sendQueue.add(buffer, () => {\n        this.#bufferedAmount -= buffer.byteLength\n      }, sendHints.text)\n    } else if (isArrayBuffer(data)) {\n      // If the WebSocket connection is established, and the WebSocket\n      // closing handshake has not yet started, then the user agent must\n      // send a WebSocket Message comprised of data using a binary frame\n      // opcode; if the data cannot be sent, e.g. because it would need\n      // to be buffered but the buffer is full, the user agent must flag\n      // the WebSocket as full and then close the WebSocket connection.\n      // The data to be sent is the data stored in the buffer described\n      // by the ArrayBuffer object. Any invocation of this method with an\n      // ArrayBuffer argument that does not throw an exception must\n      // increase the bufferedAmount attribute by the length of the\n      // ArrayBuffer in bytes.\n\n      this.#bufferedAmount += data.byteLength\n      this.#sendQueue.add(data, () => {\n        this.#bufferedAmount -= data.byteLength\n      }, sendHints.arrayBuffer)\n    } else if (ArrayBuffer.isView(data)) {\n      // If the WebSocket connection is established, and the WebSocket\n      // closing handshake has not yet started, then the user agent must\n      // send a WebSocket Message comprised of data using a binary frame\n      // opcode; if the data cannot be sent, e.g. because it would need to\n      // be buffered but the buffer is full, the user agent must flag the\n      // WebSocket as full and then close the WebSocket connection. The\n      // data to be sent is the data stored in the section of the buffer\n      // described by the ArrayBuffer object that data references. Any\n      // invocation of this method with this kind of argument that does\n      // not throw an exception must increase the bufferedAmount attribute\n      // by the length of data\u2019s buffer in bytes.\n\n      this.#bufferedAmount += data.byteLength\n      this.#sendQueue.add(data, () => {\n        this.#bufferedAmount -= data.byteLength\n      }, sendHints.typedArray)\n    } else if (webidl.is.Blob(data)) {\n      // If the WebSocket connection is established, and the WebSocket\n      // closing handshake has not yet started, then the user agent must\n      // send a WebSocket Message comprised of data using a binary frame\n      // opcode; if the data cannot be sent, e.g. because it would need to\n      // be buffered but the buffer is full, the user agent must flag the\n      // WebSocket as full and then close the WebSocket connection. The data\n      // to be sent is the raw data represented by the Blob object. Any\n      // invocation of this method with a Blob argument that does not throw\n      // an exception must increase the bufferedAmount attribute by the size\n      // of the Blob object\u2019s raw data, in bytes.\n\n      this.#bufferedAmount += data.size\n      this.#sendQueue.add(data, () => {\n        this.#bufferedAmount -= data.size\n      }, sendHints.blob)\n    }\n  }\n\n  get readyState () {\n    webidl.brandCheck(this, WebSocket)\n\n    // The readyState getter steps are to return this's ready state.\n    return this.#handler.readyState\n  }\n\n  get bufferedAmount () {\n    webidl.brandCheck(this, WebSocket)\n\n    return this.#bufferedAmount\n  }\n\n  get url () {\n    webidl.brandCheck(this, WebSocket)\n\n    // The url getter steps are to return this's url, serialized.\n    return URLSerializer(this.#url)\n  }\n\n  get extensions () {\n    webidl.brandCheck(this, WebSocket)\n\n    return this.#extensions\n  }\n\n  get protocol () {\n    webidl.brandCheck(this, WebSocket)\n\n    return this.#protocol\n  }\n\n  get onopen () {\n    webidl.brandCheck(this, WebSocket)\n\n    return this.#events.open\n  }\n\n  set onopen (fn) {\n    webidl.brandCheck(this, WebSocket)\n\n    if (this.#events.open) {\n      this.removeEventListener('open', this.#events.open)\n    }\n\n    const listener = webidl.converters.EventHandlerNonNull(fn)\n\n    if (listener !== null) {\n      this.addEventListener('open', listener)\n      this.#events.open = fn\n    } else {\n      this.#events.open = null\n    }\n  }\n\n  get onerror () {\n    webidl.brandCheck(this, WebSocket)\n\n    return this.#events.error\n  }\n\n  set onerror (fn) {\n    webidl.brandCheck(this, WebSocket)\n\n    if (this.#events.error) {\n      this.removeEventListener('error', this.#events.error)\n    }\n\n    const listener = webidl.converters.EventHandlerNonNull(fn)\n\n    if (listener !== null) {\n      this.addEventListener('error', listener)\n      this.#events.error = fn\n    } else {\n      this.#events.error = null\n    }\n  }\n\n  get onclose () {\n    webidl.brandCheck(this, WebSocket)\n\n    return this.#events.close\n  }\n\n  set onclose (fn) {\n    webidl.brandCheck(this, WebSocket)\n\n    if (this.#events.close) {\n      this.removeEventListener('close', this.#events.close)\n    }\n\n    const listener = webidl.converters.EventHandlerNonNull(fn)\n\n    if (listener !== null) {\n      this.addEventListener('close', listener)\n      this.#events.close = fn\n    } else {\n      this.#events.close = null\n    }\n  }\n\n  get onmessage () {\n    webidl.brandCheck(this, WebSocket)\n\n    return this.#events.message\n  }\n\n  set onmessage (fn) {\n    webidl.brandCheck(this, WebSocket)\n\n    if (this.#events.message) {\n      this.removeEventListener('message', this.#events.message)\n    }\n\n    const listener = webidl.converters.EventHandlerNonNull(fn)\n\n    if (listener !== null) {\n      this.addEventListener('message', listener)\n      this.#events.message = fn\n    } else {\n      this.#events.message = null\n    }\n  }\n\n  get binaryType () {\n    webidl.brandCheck(this, WebSocket)\n\n    return this.#binaryType\n  }\n\n  set binaryType (type) {\n    webidl.brandCheck(this, WebSocket)\n\n    if (type !== 'blob' && type !== 'arraybuffer') {\n      this.#binaryType = 'blob'\n    } else {\n      this.#binaryType = type\n    }\n  }\n\n  /**\n   * @see https://websockets.spec.whatwg.org/#feedback-from-the-protocol\n   */\n  #onConnectionEstablished (response, parsedExtensions) {\n    // processResponse is called when the \"response's header list has been received and initialized.\"\n    // once this happens, the connection is open\n    this.#handler.socket = response.socket\n\n    const parser = new ByteParser(this.#handler, parsedExtensions, this.#options)\n    parser.on('drain', () => this.#handler.onParserDrain())\n    parser.on('error', (err) => this.#handler.onParserError(err))\n\n    this.#parser = parser\n    this.#sendQueue = new SendQueue(response.socket)\n\n    // 1. Change the ready state to OPEN (1).\n    this.#handler.readyState = states.OPEN\n\n    // 2. Change the extensions attribute\u2019s value to the extensions in use, if\n    //    it is not the null value.\n    // https://datatracker.ietf.org/doc/html/rfc6455#section-9.1\n    const extensions = response.headersList.get('sec-websocket-extensions')\n\n    if (extensions !== null) {\n      this.#extensions = extensions\n    }\n\n    // 3. Change the protocol attribute\u2019s value to the subprotocol in use, if\n    //    it is not the null value.\n    // https://datatracker.ietf.org/doc/html/rfc6455#section-1.9\n    const protocol = response.headersList.get('sec-websocket-protocol')\n\n    if (protocol !== null) {\n      this.#protocol = protocol\n    }\n\n    // 4. Fire an event named open at the WebSocket object.\n    fireEvent('open', this)\n\n    if (channels.open.hasSubscribers) {\n      // Convert headers to a plain object for the event\n      const headers = response.headersList.entries\n      channels.open.publish({\n        address: response.socket.address(),\n        protocol: this.#protocol,\n        extensions: this.#extensions,\n        websocket: this,\n        handshakeResponse: {\n          status: response.status,\n          statusText: response.statusText,\n          headers\n        }\n      })\n    }\n  }\n\n  #onMessage (type, data) {\n    // 1. If ready state is not OPEN (1), then return.\n    if (this.#handler.readyState !== states.OPEN) {\n      return\n    }\n\n    // 2. Let dataForEvent be determined by switching on type and binary type:\n    let dataForEvent\n\n    if (type === opcodes.TEXT) {\n      // -> type indicates that the data is Text\n      //      a new DOMString containing data\n      try {\n        dataForEvent = utf8Decode(data)\n      } catch {\n        failWebsocketConnection(this.#handler, 1007, 'Received invalid UTF-8 in text frame.')\n        return\n      }\n    } else if (type === opcodes.BINARY) {\n      if (this.#binaryType === 'blob') {\n        // -> type indicates that the data is Binary and binary type is \"blob\"\n        //      a new Blob object, created in the relevant Realm of the WebSocket\n        //      object, that represents data as its raw data\n        dataForEvent = new Blob([data])\n      } else {\n        // -> type indicates that the data is Binary and binary type is \"arraybuffer\"\n        //      a new ArrayBuffer object, created in the relevant Realm of the\n        //      WebSocket object, whose contents are data\n        dataForEvent = toArrayBuffer(data)\n      }\n    }\n\n    // 3. Fire an event named message at the WebSocket object, using MessageEvent,\n    //    with the origin attribute initialized to the serialization of the WebSocket\n    //    object\u2019s url's origin, and the data attribute initialized to dataForEvent.\n    fireEvent('message', this, createFastMessageEvent, {\n      origin: this.#url.origin,\n      data: dataForEvent\n    })\n  }\n\n  #onParserDrain () {\n    this.#handler.socket.resume()\n  }\n\n  /**\n   * @see https://websockets.spec.whatwg.org/#feedback-from-the-protocol\n   * @see https://datatracker.ietf.org/doc/html/rfc6455#section-7.1.4\n   */\n  #onSocketClose () {\n    // If the TCP connection was closed after the\n    // WebSocket closing handshake was completed, the WebSocket connection\n    // is said to have been closed _cleanly_.\n    const wasClean =\n      this.#handler.closeState.has(sentCloseFrameState.SENT) &&\n      this.#handler.closeState.has(sentCloseFrameState.RECEIVED)\n\n    let code = 1005\n    let reason = ''\n\n    const result = this.#parser?.closingInfo\n\n    if (result && !result.error) {\n      code = result.code ?? 1005\n      reason = result.reason\n    }\n\n    // 1. Change the ready state to CLOSED (3).\n    this.#handler.readyState = states.CLOSED\n\n    // 2. If the user agent was required to fail the WebSocket\n    //    connection, or if the WebSocket connection was closed\n    //    after being flagged as full, fire an event named error\n    //    at the WebSocket object.\n    if (!this.#handler.closeState.has(sentCloseFrameState.RECEIVED)) {\n      // If _The WebSocket\n      // Connection is Closed_ and no Close control frame was received by the\n      // endpoint (such as could occur if the underlying transport connection\n      // is lost), _The WebSocket Connection Close Code_ is considered to be\n      // 1006.\n      code = 1006\n\n      fireEvent('error', this, (type, init) => new ErrorEvent(type, init), {\n        error: new TypeError(reason)\n      })\n    }\n\n    // 3. Fire an event named close at the WebSocket object,\n    //    using CloseEvent, with the wasClean attribute\n    //    initialized to true if the connection closed cleanly\n    //    and false otherwise, the code attribute initialized to\n    //    the WebSocket connection close code, and the reason\n    //    attribute initialized to the result of applying UTF-8\n    //    decode without BOM to the WebSocket connection close\n    //    reason.\n    // TODO: process.nextTick\n    fireEvent('close', this, (type, init) => new CloseEvent(type, init), {\n      wasClean, code, reason\n    })\n\n    if (channels.close.hasSubscribers) {\n      channels.close.publish({\n        websocket: this,\n        code,\n        reason\n      })\n    }\n  }\n\n  /**\n   * @param {WebSocket} ws\n   * @param {Buffer|undefined} buffer\n   */\n  static ping (ws, buffer) {\n    if (Buffer.isBuffer(buffer)) {\n      if (buffer.length > 125) {\n        throw new TypeError('A PING frame cannot have a body larger than 125 bytes.')\n      }\n    } else if (buffer !== undefined) {\n      throw new TypeError('Expected buffer payload')\n    }\n\n    // An endpoint MAY send a Ping frame any time after the connection is\n    // established and before the connection is closed.\n    const readyState = ws.#handler.readyState\n\n    if (isEstablished(readyState) && !isClosing(readyState) && !isClosed(readyState)) {\n      const frame = new WebsocketFrameSend(buffer)\n      ws.#handler.socket.write(frame.createFrame(opcodes.PING))\n    }\n  }\n}\n\nconst { ping } = WebSocket\nReflect.deleteProperty(WebSocket, 'ping')\n\n// https://websockets.spec.whatwg.org/#dom-websocket-connecting\nWebSocket.CONNECTING = WebSocket.prototype.CONNECTING = states.CONNECTING\n// https://websockets.spec.whatwg.org/#dom-websocket-open\nWebSocket.OPEN = WebSocket.prototype.OPEN = states.OPEN\n// https://websockets.spec.whatwg.org/#dom-websocket-closing\nWebSocket.CLOSING = WebSocket.prototype.CLOSING = states.CLOSING\n// https://websockets.spec.whatwg.org/#dom-websocket-closed\nWebSocket.CLOSED = WebSocket.prototype.CLOSED = states.CLOSED\n\nObject.defineProperties(WebSocket.prototype, {\n  CONNECTING: staticPropertyDescriptors,\n  OPEN: staticPropertyDescriptors,\n  CLOSING: staticPropertyDescriptors,\n  CLOSED: staticPropertyDescriptors,\n  url: kEnumerableProperty,\n  readyState: kEnumerableProperty,\n  bufferedAmount: kEnumerableProperty,\n  onopen: kEnumerableProperty,\n  onerror: kEnumerableProperty,\n  onclose: kEnumerableProperty,\n  close: kEnumerableProperty,\n  onmessage: kEnumerableProperty,\n  binaryType: kEnumerableProperty,\n  send: kEnumerableProperty,\n  extensions: kEnumerableProperty,\n  protocol: kEnumerableProperty,\n  [Symbol.toStringTag]: {\n    value: 'WebSocket',\n    writable: false,\n    enumerable: false,\n    configurable: true\n  }\n})\n\nObject.defineProperties(WebSocket, {\n  CONNECTING: staticPropertyDescriptors,\n  OPEN: staticPropertyDescriptors,\n  CLOSING: staticPropertyDescriptors,\n  CLOSED: staticPropertyDescriptors\n})\n\nwebidl.converters['sequence<DOMString>'] = webidl.sequenceConverter(\n  webidl.converters.DOMString\n)\n\nwebidl.converters['DOMString or sequence<DOMString>'] = function (V, prefix, argument) {\n  if (webidl.util.Type(V) === webidl.util.Types.OBJECT && Symbol.iterator in V) {\n    return webidl.converters['sequence<DOMString>'](V)\n  }\n\n  return webidl.converters.DOMString(V, prefix, argument)\n}\n\n// This implements the proposal made in https://github.com/whatwg/websockets/issues/42\nwebidl.converters.WebSocketInit = webidl.dictionaryConverter([\n  {\n    key: 'protocols',\n    converter: webidl.converters['DOMString or sequence<DOMString>'],\n    defaultValue: () => []\n  },\n  {\n    key: 'dispatcher',\n    converter: webidl.converters.any,\n    defaultValue: () => getGlobalDispatcher()\n  },\n  {\n    key: 'headers',\n    converter: webidl.nullableConverter(webidl.converters.HeadersInit)\n  },\n  {\n    key: 'maxDecompressedMessageSize',\n    converter: webidl.nullableConverter((V) => {\n      V = webidl.converters['unsigned long long'](V)\n      if (V <= 0) {\n        throw webidl.errors.exception({\n          header: 'WebSocket constructor',\n          message: 'maxDecompressedMessageSize must be greater than 0'\n        })\n      }\n      return V\n    })\n  }\n])\n\nwebidl.converters['DOMString or sequence<DOMString> or WebSocketInit'] = function (V) {\n  if (webidl.util.Type(V) === webidl.util.Types.OBJECT && !(Symbol.iterator in V)) {\n    return webidl.converters.WebSocketInit(V)\n  }\n\n  return { protocols: webidl.converters['DOMString or sequence<DOMString>'](V) }\n}\n\nwebidl.converters.WebSocketSendData = function (V) {\n  if (webidl.util.Type(V) === webidl.util.Types.OBJECT) {\n    if (webidl.is.Blob(V)) {\n      return V\n    }\n\n    if (webidl.is.BufferSource(V)) {\n      return V\n    }\n  }\n\n  return webidl.converters.USVString(V)\n}\n\nmodule.exports = {\n  WebSocket,\n  ping\n}\n", "'use strict'\n\nconst { webidl } = require('../../webidl')\nconst { validateCloseCodeAndReason } = require('../util')\nconst { kConstruct } = require('../../../core/symbols')\nconst { kEnumerableProperty } = require('../../../core/util')\n\nfunction createInheritableDOMException () {\n  // https://github.com/nodejs/node/issues/59677\n  class Test extends DOMException {\n    get reason () {\n      return ''\n    }\n  }\n\n  if (new Test().reason !== undefined) {\n    return DOMException\n  }\n\n  return new Proxy(DOMException, {\n    construct (target, args, newTarget) {\n      const instance = Reflect.construct(target, args, target)\n      Object.setPrototypeOf(instance, newTarget.prototype)\n      return instance\n    }\n  })\n}\n\nclass WebSocketError extends createInheritableDOMException() {\n  #closeCode\n  #reason\n\n  constructor (message = '', init = undefined) {\n    message = webidl.converters.DOMString(message, 'WebSocketError', 'message')\n\n    // 1. Set this 's name to \" WebSocketError \".\n    // 2. Set this 's message to message .\n    super(message, 'WebSocketError')\n\n    if (init === kConstruct) {\n      return\n    } else if (init !== null) {\n      init = webidl.converters.WebSocketCloseInfo(init)\n    }\n\n    // 3. Let code be init [\" closeCode \"] if it exists , or null otherwise.\n    let code = init.closeCode ?? null\n\n    // 4. Let reason be init [\" reason \"] if it exists , or the empty string otherwise.\n    const reason = init.reason ?? ''\n\n    // 5. Validate close code and reason with code and reason .\n    validateCloseCodeAndReason(code, reason)\n\n    // 6. If reason is non-empty, but code is not set, then set code to 1000 (\"Normal Closure\").\n    if (reason.length !== 0 && code === null) {\n      code = 1000\n    }\n\n    // 7. Set this 's closeCode to code .\n    this.#closeCode = code\n\n    // 8. Set this 's reason to reason .\n    this.#reason = reason\n  }\n\n  get closeCode () {\n    return this.#closeCode\n  }\n\n  get reason () {\n    return this.#reason\n  }\n\n  /**\n   * @param {string} message\n   * @param {number|null} code\n   * @param {string} reason\n   */\n  static createUnvalidatedWebSocketError (message, code, reason) {\n    const error = new WebSocketError(message, kConstruct)\n    error.#closeCode = code\n    error.#reason = reason\n    return error\n  }\n}\n\nconst { createUnvalidatedWebSocketError } = WebSocketError\ndelete WebSocketError.createUnvalidatedWebSocketError\n\nObject.defineProperties(WebSocketError.prototype, {\n  closeCode: kEnumerableProperty,\n  reason: kEnumerableProperty,\n  [Symbol.toStringTag]: {\n    value: 'WebSocketError',\n    writable: false,\n    enumerable: false,\n    configurable: true\n  }\n})\n\nwebidl.is.WebSocketError = webidl.util.MakeTypeAssertion(WebSocketError)\n\nmodule.exports = { WebSocketError, createUnvalidatedWebSocketError }\n", "'use strict'\n\nconst { createDeferredPromise } = require('../../../util/promise')\nconst { environmentSettingsObject } = require('../../fetch/util')\nconst { states, opcodes, sentCloseFrameState } = require('../constants')\nconst { webidl } = require('../../webidl')\nconst { getURLRecord, isValidSubprotocol, isEstablished, utf8Decode } = require('../util')\nconst { establishWebSocketConnection, failWebsocketConnection, closeWebSocketConnection } = require('../connection')\nconst { channels } = require('../../../core/diagnostics')\nconst { WebsocketFrameSend } = require('../frame')\nconst { ByteParser } = require('../receiver')\nconst { WebSocketError, createUnvalidatedWebSocketError } = require('./websocketerror')\nconst { kEnumerableProperty } = require('../../../core/util')\nconst { utf8DecodeBytes } = require('../../../encoding')\n\nlet emittedExperimentalWarning = false\n\nclass WebSocketStream {\n  // Each WebSocketStream object has an associated url , which is a URL record .\n  /** @type {URL} */\n  #url\n\n  // Each WebSocketStream object has an associated opened promise , which is a promise.\n  /** @type {import('../../../util/promise').DeferredPromise} */\n  #openedPromise\n\n  // Each WebSocketStream object has an associated closed promise , which is a promise.\n  /** @type {import('../../../util/promise').DeferredPromise} */\n  #closedPromise\n\n  // Each WebSocketStream object has an associated readable stream , which is a ReadableStream .\n  /** @type {ReadableStream} */\n  #readableStream\n  /** @type {ReadableStreamDefaultController} */\n  #readableStreamController\n\n  // Each WebSocketStream object has an associated writable stream , which is a WritableStream .\n  /** @type {WritableStream} */\n  #writableStream\n\n  // Each WebSocketStream object has an associated boolean handshake aborted , which is initially false.\n  #handshakeAborted = false\n\n  /** @type {import('../websocket').Handler} */\n  #handler = {\n    // https://whatpr.org/websockets/48/7b748d3...d5570f3.html#feedback-to-websocket-stream-from-the-protocol\n    onConnectionEstablished: (response, extensions) => this.#onConnectionEstablished(response, extensions),\n    onMessage: (opcode, data) => this.#onMessage(opcode, data),\n    onParserError: (err) => failWebsocketConnection(this.#handler, null, err.message),\n    onParserDrain: () => this.#handler.socket.resume(),\n    onSocketData: (chunk) => {\n      if (!this.#parser.write(chunk)) {\n        this.#handler.socket.pause()\n      }\n    },\n    onSocketError: (err) => {\n      this.#handler.readyState = states.CLOSING\n\n      if (channels.socketError.hasSubscribers) {\n        channels.socketError.publish(err)\n      }\n\n      this.#handler.socket.destroy()\n    },\n    onSocketClose: () => this.#onSocketClose(),\n    onPing: () => {},\n    onPong: () => {},\n\n    readyState: states.CONNECTING,\n    socket: null,\n    closeState: new Set(),\n    controller: null,\n    wasEverConnected: false\n  }\n\n  /** @type {import('../receiver').ByteParser} */\n  #parser\n\n  constructor (url, options = undefined) {\n    if (!emittedExperimentalWarning) {\n      process.emitWarning('WebSocketStream is experimental! Expect it to change at any time.', {\n        code: 'UNDICI-WSS'\n      })\n      emittedExperimentalWarning = true\n    }\n\n    webidl.argumentLengthCheck(arguments, 1, 'WebSocket')\n\n    url = webidl.converters.USVString(url)\n    if (options !== null) {\n      options = webidl.converters.WebSocketStreamOptions(options)\n    }\n\n    // 1. Let baseURL be this 's relevant settings object 's API base URL .\n    const baseURL = environmentSettingsObject.settingsObject.baseUrl\n\n    // 2. Let urlRecord be the result of getting a URL record given url and baseURL .\n    const urlRecord = getURLRecord(url, baseURL)\n\n    // 3. Let protocols be options [\" protocols \"] if it exists , otherwise an empty sequence.\n    const protocols = options.protocols\n\n    // 4. If any of the values in protocols occur more than once or otherwise fail to match the requirements for elements that comprise the value of ` Sec-WebSocket-Protocol ` fields as defined by The WebSocket Protocol , then throw a \" SyntaxError \" DOMException . [WSP]\n    if (protocols.length !== new Set(protocols.map(p => p.toLowerCase())).size) {\n      throw new DOMException('Invalid Sec-WebSocket-Protocol value', 'SyntaxError')\n    }\n\n    if (protocols.length > 0 && !protocols.every(p => isValidSubprotocol(p))) {\n      throw new DOMException('Invalid Sec-WebSocket-Protocol value', 'SyntaxError')\n    }\n\n    // 5. Set this 's url to urlRecord .\n    this.#url = urlRecord.toString()\n\n    // 6. Set this 's opened promise and closed promise to new promises.\n    this.#openedPromise = createDeferredPromise()\n    this.#closedPromise = createDeferredPromise()\n\n    // 7. Apply backpressure to the WebSocket.\n    // TODO\n\n    // 8.  If options [\" signal \"] exists ,\n    if (options.signal != null) {\n      // 8.1. Let signal be options [\" signal \"].\n      const signal = options.signal\n\n      // 8.2. If signal is aborted , then reject this 's opened promise and closed promise with signal \u2019s abort reason\n      //      and return.\n      if (signal.aborted) {\n        this.#openedPromise.reject(signal.reason)\n        this.#closedPromise.reject(signal.reason)\n        return\n      }\n\n      // 8.3. Add the following abort steps to signal :\n      signal.addEventListener('abort', () => {\n        // 8.3.1. If the WebSocket connection is not yet established : [WSP]\n        if (!isEstablished(this.#handler.readyState)) {\n          // 8.3.1.1. Fail the WebSocket connection .\n          failWebsocketConnection(this.#handler)\n\n          // Set this 's ready state to CLOSING .\n          this.#handler.readyState = states.CLOSING\n\n          // Reject this 's opened promise and closed promise with signal \u2019s abort reason .\n          this.#openedPromise.reject(signal.reason)\n          this.#closedPromise.reject(signal.reason)\n\n          // Set this 's handshake aborted to true.\n          this.#handshakeAborted = true\n        }\n      }, { once: true })\n    }\n\n    // 9.  Let client be this 's relevant settings object .\n    const client = environmentSettingsObject.settingsObject\n\n    // 10. Run this step in parallel :\n    // 10.1. Establish a WebSocket connection given urlRecord , protocols , and client . [FETCH]\n    this.#handler.controller = establishWebSocketConnection(\n      urlRecord,\n      protocols,\n      client,\n      this.#handler,\n      options\n    )\n  }\n\n  // The url getter steps are to return this 's url , serialized .\n  get url () {\n    return this.#url.toString()\n  }\n\n  // The opened getter steps are to return this 's opened promise .\n  get opened () {\n    return this.#openedPromise.promise\n  }\n\n  // The closed getter steps are to return this 's closed promise .\n  get closed () {\n    return this.#closedPromise.promise\n  }\n\n  // The close( closeInfo ) method steps are:\n  close (closeInfo = undefined) {\n    if (closeInfo !== null) {\n      closeInfo = webidl.converters.WebSocketCloseInfo(closeInfo)\n    }\n\n    // 1. Let code be closeInfo [\" closeCode \"] if present, or null otherwise.\n    const code = closeInfo.closeCode ?? null\n\n    // 2. Let reason be closeInfo [\" reason \"].\n    const reason = closeInfo.reason\n\n    // 3. Close the WebSocket with this , code , and reason .\n    closeWebSocketConnection(this.#handler, code, reason, true)\n  }\n\n  #write (chunk) {\n    // See /websockets/stream/tentative/write.any.html\n    chunk = webidl.converters.WebSocketStreamWrite(chunk)\n\n    // 1. Let promise be a new promise created in stream \u2019s relevant realm .\n    const promise = createDeferredPromise()\n\n    // 2. Let data be null.\n    let data = null\n\n    // 3. Let opcode be null.\n    let opcode = null\n\n    // 4. If chunk is a BufferSource ,\n    if (webidl.is.BufferSource(chunk)) {\n      // 4.1. Set data to a copy of the bytes given chunk .\n      data = new Uint8Array(ArrayBuffer.isView(chunk) ? new Uint8Array(chunk.buffer, chunk.byteOffset, chunk.byteLength) : chunk.slice())\n\n      // 4.2. Set opcode to a binary frame opcode.\n      opcode = opcodes.BINARY\n    } else {\n      // 5. Otherwise,\n\n      // 5.1. Let string be the result of converting chunk to an IDL USVString .\n      //    If this throws an exception, return a promise rejected with the exception.\n      let string\n\n      try {\n        string = webidl.converters.DOMString(chunk)\n      } catch (e) {\n        promise.reject(e)\n        return promise.promise\n      }\n\n      // 5.2. Set data to the result of UTF-8 encoding string .\n      data = new TextEncoder().encode(string)\n\n      // 5.3. Set opcode to a text frame opcode.\n      opcode = opcodes.TEXT\n    }\n\n    // 6. In parallel,\n    // 6.1. Wait until there is sufficient buffer space in stream to send the message.\n\n    // 6.2. If the closing handshake has not yet started , Send a WebSocket Message to stream comprised of data using opcode .\n    if (!this.#handler.closeState.has(sentCloseFrameState.SENT) && !this.#handler.closeState.has(sentCloseFrameState.RECEIVED)) {\n      const frame = new WebsocketFrameSend(data)\n\n      this.#handler.socket.write(frame.createFrame(opcode), () => {\n        promise.resolve(undefined)\n      })\n    }\n\n    // 6.3. Queue a global task on the WebSocket task source given stream \u2019s relevant global object to resolve promise with undefined.\n    return promise.promise\n  }\n\n  /** @type {import('../websocket').Handler['onConnectionEstablished']} */\n  #onConnectionEstablished (response, parsedExtensions) {\n    this.#handler.socket = response.socket\n\n    const parser = new ByteParser(this.#handler, parsedExtensions)\n    parser.on('drain', () => this.#handler.onParserDrain())\n    parser.on('error', (err) => this.#handler.onParserError(err))\n\n    this.#parser = parser\n\n    // 1. Change stream \u2019s ready state to OPEN (1).\n    this.#handler.readyState = states.OPEN\n\n    // 2. Set stream \u2019s was ever connected to true.\n    // This is done in the opening handshake.\n\n    // 3. Let extensions be the extensions in use .\n    const extensions = parsedExtensions ?? ''\n\n    // 4. Let protocol be the subprotocol in use .\n    const protocol = response.headersList.get('sec-websocket-protocol') ?? ''\n\n    // 5. Let pullAlgorithm be an action that pulls bytes from stream .\n    // 6. Let cancelAlgorithm be an action that cancels stream with reason , given reason .\n    // 7. Let readable be a new ReadableStream .\n    // 8. Set up readable with pullAlgorithm and cancelAlgorithm .\n    const readable = new ReadableStream({\n      start: (controller) => {\n        this.#readableStreamController = controller\n      },\n      pull (controller) {\n        let chunk\n        while (controller.desiredSize > 0 && (chunk = response.socket.read()) !== null) {\n          controller.enqueue(chunk)\n        }\n      },\n      cancel: (reason) => this.#cancel(reason)\n    })\n\n    // 9. Let writeAlgorithm be an action that writes chunk to stream , given chunk .\n    // 10. Let closeAlgorithm be an action that closes stream .\n    // 11. Let abortAlgorithm be an action that aborts stream with reason , given reason .\n    // 12. Let writable be a new WritableStream .\n    // 13. Set up writable with writeAlgorithm , closeAlgorithm , and abortAlgorithm .\n    const writable = new WritableStream({\n      write: (chunk) => this.#write(chunk),\n      close: () => closeWebSocketConnection(this.#handler, null, null),\n      abort: (reason) => this.#closeUsingReason(reason)\n    })\n\n    // Set stream \u2019s readable stream to readable .\n    this.#readableStream = readable\n\n    // Set stream \u2019s writable stream to writable .\n    this.#writableStream = writable\n\n    // Resolve stream \u2019s opened promise with WebSocketOpenInfo \u00AB[ \" extensions \" \u2192 extensions , \" protocol \" \u2192 protocol , \" readable \" \u2192 readable , \" writable \" \u2192 writable ]\u00BB.\n    this.#openedPromise.resolve({\n      extensions,\n      protocol,\n      readable,\n      writable\n    })\n  }\n\n  /** @type {import('../websocket').Handler['onMessage']} */\n  #onMessage (type, data) {\n    // 1. If stream\u2019s ready state is not OPEN (1), then return.\n    if (this.#handler.readyState !== states.OPEN) {\n      return\n    }\n\n    // 2. Let chunk be determined by switching on type:\n    //      - type indicates that the data is Text\n    //          a new DOMString containing data\n    //      - type indicates that the data is Binary\n    //          a new Uint8Array object, created in the relevant Realm of the\n    //          WebSocketStream object, whose contents are data\n    let chunk\n\n    if (type === opcodes.TEXT) {\n      try {\n        chunk = utf8Decode(data)\n      } catch {\n        failWebsocketConnection(this.#handler, 'Received invalid UTF-8 in text frame.')\n        return\n      }\n    } else if (type === opcodes.BINARY) {\n      chunk = new Uint8Array(data.buffer, data.byteOffset, data.byteLength)\n    }\n\n    // 3. Enqueue chunk into stream\u2019s readable stream.\n    this.#readableStreamController.enqueue(chunk)\n\n    // 4. Apply backpressure to the WebSocket.\n  }\n\n  /** @type {import('../websocket').Handler['onSocketClose']} */\n  #onSocketClose () {\n    const wasClean =\n      this.#handler.closeState.has(sentCloseFrameState.SENT) &&\n      this.#handler.closeState.has(sentCloseFrameState.RECEIVED)\n\n    // 1. Change the ready state to CLOSED (3).\n    this.#handler.readyState = states.CLOSED\n\n    // 2. If stream \u2019s handshake aborted is true, then return.\n    if (this.#handshakeAborted) {\n      return\n    }\n\n    // 3. If stream \u2019s was ever connected is false, then reject stream \u2019s opened promise with a new WebSocketError.\n    if (!this.#handler.wasEverConnected) {\n      this.#openedPromise.reject(new WebSocketError('Socket never opened'))\n    }\n\n    const result = this.#parser?.closingInfo\n\n    // 4. Let code be the WebSocket connection close code .\n    // https://datatracker.ietf.org/doc/html/rfc6455#section-7.1.5\n    // If this Close control frame contains no status code, _The WebSocket\n    // Connection Close Code_ is considered to be 1005. If _The WebSocket\n    // Connection is Closed_ and no Close control frame was received by the\n    // endpoint (such as could occur if the underlying transport connection\n    // is lost), _The WebSocket Connection Close Code_ is considered to be\n    // 1006.\n    let code = result?.code ?? 1005\n\n    if (!this.#handler.closeState.has(sentCloseFrameState.SENT) && !this.#handler.closeState.has(sentCloseFrameState.RECEIVED)) {\n      code = 1006\n    }\n\n    // 5. Let reason be the result of applying UTF-8 decode without BOM to the WebSocket connection close reason .\n    const reason = result?.reason == null ? '' : utf8DecodeBytes(Buffer.from(result.reason))\n\n    // 6. If the connection was closed cleanly ,\n    if (wasClean) {\n      // 6.1. Close stream \u2019s readable stream .\n      this.#readableStreamController.close()\n\n      // 6.2. Error stream \u2019s writable stream with an \" InvalidStateError \" DOMException indicating that a closed WebSocketStream cannot be written to.\n      if (!this.#writableStream.locked) {\n        this.#writableStream.abort(new DOMException('A closed WebSocketStream cannot be written to', 'InvalidStateError'))\n      }\n\n      // 6.3. Resolve stream \u2019s closed promise with WebSocketCloseInfo \u00AB[ \" closeCode \" \u2192 code , \" reason \" \u2192 reason ]\u00BB.\n      this.#closedPromise.resolve({\n        closeCode: code,\n        reason\n      })\n    } else {\n      // 7. Otherwise,\n\n      // 7.1. Let error be a new WebSocketError whose closeCode is code and reason is reason .\n      const error = createUnvalidatedWebSocketError('unclean close', code, reason)\n\n      // 7.2. Error stream \u2019s readable stream with error .\n      this.#readableStreamController?.error(error)\n\n      // 7.3. Error stream \u2019s writable stream with error .\n      this.#writableStream?.abort(error)\n\n      // 7.4. Reject stream \u2019s closed promise with error .\n      this.#closedPromise.reject(error)\n    }\n  }\n\n  #closeUsingReason (reason) {\n    // 1. Let code be null.\n    let code = null\n\n    // 2. Let reasonString be the empty string.\n    let reasonString = ''\n\n    // 3. If reason implements WebSocketError ,\n    if (webidl.is.WebSocketError(reason)) {\n      // 3.1. Set code to reason \u2019s closeCode .\n      code = reason.closeCode\n\n      // 3.2. Set reasonString to reason \u2019s reason .\n      reasonString = reason.reason\n    }\n\n    // 4. Close the WebSocket with stream , code , and reasonString . If this throws an exception,\n    //    discard code and reasonString and close the WebSocket with stream .\n    closeWebSocketConnection(this.#handler, code, reasonString)\n  }\n\n  //  To cancel a WebSocketStream stream given reason , close using reason giving stream and reason .\n  #cancel (reason) {\n    this.#closeUsingReason(reason)\n  }\n}\n\nObject.defineProperties(WebSocketStream.prototype, {\n  url: kEnumerableProperty,\n  opened: kEnumerableProperty,\n  closed: kEnumerableProperty,\n  close: kEnumerableProperty,\n  [Symbol.toStringTag]: {\n    value: 'WebSocketStream',\n    writable: false,\n    enumerable: false,\n    configurable: true\n  }\n})\n\nwebidl.converters.WebSocketStreamOptions = webidl.dictionaryConverter([\n  {\n    key: 'protocols',\n    converter: webidl.sequenceConverter(webidl.converters.USVString),\n    defaultValue: () => []\n  },\n  {\n    key: 'signal',\n    converter: webidl.nullableConverter(webidl.converters.AbortSignal),\n    defaultValue: () => null\n  }\n])\n\nwebidl.converters.WebSocketCloseInfo = webidl.dictionaryConverter([\n  {\n    key: 'closeCode',\n    converter: (V) => webidl.converters['unsigned short'](V, webidl.attributes.EnforceRange)\n  },\n  {\n    key: 'reason',\n    converter: webidl.converters.USVString,\n    defaultValue: () => ''\n  }\n])\n\nwebidl.converters.WebSocketStreamWrite = function (V) {\n  if (typeof V === 'string') {\n    return webidl.converters.USVString(V)\n  }\n\n  return webidl.converters.BufferSource(V)\n}\n\nmodule.exports = { WebSocketStream }\n", "'use strict'\n\n/**\n * Checks if the given value is a valid LastEventId.\n * @param {string} value\n * @returns {boolean}\n */\nfunction isValidLastEventId (value) {\n  // LastEventId should not contain U+0000 NULL\n  return value.indexOf('\\u0000') === -1\n}\n\n/**\n * Checks if the given value is a base 10 digit.\n * @param {string} value\n * @returns {boolean}\n */\nfunction isASCIINumber (value) {\n  if (value.length === 0) return false\n  for (let i = 0; i < value.length; i++) {\n    if (value.charCodeAt(i) < 0x30 || value.charCodeAt(i) > 0x39) return false\n  }\n  return true\n}\n\nmodule.exports = {\n  isValidLastEventId,\n  isASCIINumber\n}\n", "'use strict'\nconst { Transform } = require('node:stream')\nconst { isASCIINumber, isValidLastEventId } = require('./util')\n\n/**\n * @type {number[]} BOM\n */\nconst BOM = [0xEF, 0xBB, 0xBF]\n/**\n * @type {10} LF\n */\nconst LF = 0x0A\n/**\n * @type {13} CR\n */\nconst CR = 0x0D\n/**\n * @type {58} COLON\n */\nconst COLON = 0x3A\n/**\n * @type {32} SPACE\n */\nconst SPACE = 0x20\n\n/**\n * @typedef {object} EventSourceStreamEvent\n * @type {object}\n * @property {string} [event] The event type.\n * @property {string} [data] The data of the message.\n * @property {string} [id] A unique ID for the event.\n * @property {string} [retry] The reconnection time, in milliseconds.\n */\n\n/**\n * @typedef eventSourceSettings\n * @type {object}\n * @property {string} [lastEventId] The last event ID received from the server.\n * @property {string} [origin] The origin of the event source.\n * @property {number} [reconnectionTime] The reconnection time, in milliseconds.\n */\n\nclass EventSourceStream extends Transform {\n  /**\n   * @type {eventSourceSettings}\n   */\n  state\n\n  /**\n   * Leading byte-order-mark check.\n   * @type {boolean}\n   */\n  checkBOM = true\n\n  /**\n   * @type {boolean}\n   */\n  crlfCheck = false\n\n  /**\n   * @type {boolean}\n   */\n  eventEndCheck = false\n\n  /**\n   * @type {Buffer|null}\n   */\n  buffer = null\n\n  pos = 0\n\n  event = {\n    data: undefined,\n    event: undefined,\n    id: undefined,\n    retry: undefined\n  }\n\n  /**\n   * @param {object} options\n   * @param {boolean} [options.readableObjectMode]\n   * @param {eventSourceSettings} [options.eventSourceSettings]\n   * @param {(chunk: any, encoding?: BufferEncoding | undefined) => boolean} [options.push]\n   */\n  constructor (options = {}) {\n    // Enable object mode as EventSourceStream emits objects of shape\n    // EventSourceStreamEvent\n    options.readableObjectMode = true\n\n    super(options)\n\n    this.state = options.eventSourceSettings || {}\n    if (options.push) {\n      this.push = options.push\n    }\n  }\n\n  /**\n   * @param {Buffer} chunk\n   * @param {string} _encoding\n   * @param {Function} callback\n   * @returns {void}\n   */\n  _transform (chunk, _encoding, callback) {\n    if (chunk.length === 0) {\n      callback()\n      return\n    }\n\n    // Cache the chunk in the buffer, as the data might not be complete while\n    // processing it\n    // TODO: Investigate if there is a more performant way to handle\n    // incoming chunks\n    // see: https://github.com/nodejs/undici/issues/2630\n    if (this.buffer) {\n      this.buffer = Buffer.concat([this.buffer, chunk])\n    } else {\n      this.buffer = chunk\n    }\n\n    // Strip leading byte-order-mark if we opened the stream and started\n    // the processing of the incoming data\n    if (this.checkBOM) {\n      switch (this.buffer.length) {\n        case 1:\n          // Check if the first byte is the same as the first byte of the BOM\n          if (this.buffer[0] === BOM[0]) {\n            // If it is, we need to wait for more data\n            callback()\n            return\n          }\n          // Set the checkBOM flag to false as we don't need to check for the\n          // BOM anymore\n          this.checkBOM = false\n\n          // The buffer only contains one byte so we need to wait for more data\n          callback()\n          return\n        case 2:\n          // Check if the first two bytes are the same as the first two bytes\n          // of the BOM\n          if (\n            this.buffer[0] === BOM[0] &&\n            this.buffer[1] === BOM[1]\n          ) {\n            // If it is, we need to wait for more data, because the third byte\n            // is needed to determine if it is the BOM or not\n            callback()\n            return\n          }\n\n          // Set the checkBOM flag to false as we don't need to check for the\n          // BOM anymore\n          this.checkBOM = false\n          break\n        case 3:\n          // Check if the first three bytes are the same as the first three\n          // bytes of the BOM\n          if (\n            this.buffer[0] === BOM[0] &&\n            this.buffer[1] === BOM[1] &&\n            this.buffer[2] === BOM[2]\n          ) {\n            // If it is, we can drop the buffered data, as it is only the BOM\n            this.buffer = Buffer.alloc(0)\n            // Set the checkBOM flag to false as we don't need to check for the\n            // BOM anymore\n            this.checkBOM = false\n\n            // Await more data\n            callback()\n            return\n          }\n          // If it is not the BOM, we can start processing the data\n          this.checkBOM = false\n          break\n        default:\n          // The buffer is longer than 3 bytes, so we can drop the BOM if it is\n          // present\n          if (\n            this.buffer[0] === BOM[0] &&\n            this.buffer[1] === BOM[1] &&\n            this.buffer[2] === BOM[2]\n          ) {\n            // Remove the BOM from the buffer\n            this.buffer = this.buffer.subarray(3)\n          }\n\n          // Set the checkBOM flag to false as we don't need to check for the\n          this.checkBOM = false\n          break\n      }\n    }\n\n    while (this.pos < this.buffer.length) {\n      // If the previous line ended with an end-of-line, we need to check\n      // if the next character is also an end-of-line.\n      if (this.eventEndCheck) {\n        // If the the current character is an end-of-line, then the event\n        // is finished and we can process it\n\n        // If the previous line ended with a carriage return, we need to\n        // check if the current character is a line feed and remove it\n        // from the buffer.\n        if (this.crlfCheck) {\n          // If the current character is a line feed, we can remove it\n          // from the buffer and reset the crlfCheck flag\n          if (this.buffer[this.pos] === LF) {\n            this.buffer = this.buffer.subarray(this.pos + 1)\n            this.pos = 0\n            this.crlfCheck = false\n\n            // It is possible that the line feed is not the end of the\n            // event. We need to check if the next character is an\n            // end-of-line character to determine if the event is\n            // finished. We simply continue the loop to check the next\n            // character.\n\n            // As we removed the line feed from the buffer and set the\n            // crlfCheck flag to false, we basically don't make any\n            // distinction between a line feed and a carriage return.\n            continue\n          }\n          this.crlfCheck = false\n        }\n\n        if (this.buffer[this.pos] === LF || this.buffer[this.pos] === CR) {\n          // If the current character is a carriage return, we need to\n          // set the crlfCheck flag to true, as we need to check if the\n          // next character is a line feed so we can remove it from the\n          // buffer\n          if (this.buffer[this.pos] === CR) {\n            this.crlfCheck = true\n          }\n\n          this.buffer = this.buffer.subarray(this.pos + 1)\n          this.pos = 0\n          if (\n            this.event.data !== undefined || this.event.event || this.event.id !== undefined || this.event.retry) {\n            this.processEvent(this.event)\n          }\n          this.clearEvent()\n          continue\n        }\n        // If the current character is not an end-of-line, then the event\n        // is not finished and we have to reset the eventEndCheck flag\n        this.eventEndCheck = false\n        continue\n      }\n\n      // If the current character is an end-of-line, we can process the\n      // line\n      if (this.buffer[this.pos] === LF || this.buffer[this.pos] === CR) {\n        // If the current character is a carriage return, we need to\n        // set the crlfCheck flag to true, as we need to check if the\n        // next character is a line feed\n        if (this.buffer[this.pos] === CR) {\n          this.crlfCheck = true\n        }\n\n        // In any case, we can process the line as we reached an\n        // end-of-line character\n        this.parseLine(this.buffer.subarray(0, this.pos), this.event)\n\n        // Remove the processed line from the buffer\n        this.buffer = this.buffer.subarray(this.pos + 1)\n        // Reset the position as we removed the processed line from the buffer\n        this.pos = 0\n        // A line was processed and this could be the end of the event. We need\n        // to check if the next line is empty to determine if the event is\n        // finished.\n        this.eventEndCheck = true\n        continue\n      }\n\n      this.pos++\n    }\n\n    callback()\n  }\n\n  /**\n   * @param {Buffer} line\n   * @param {EventSourceStreamEvent} event\n   */\n  parseLine (line, event) {\n    // If the line is empty (a blank line)\n    // Dispatch the event, as defined below.\n    // This will be handled in the _transform method\n    if (line.length === 0) {\n      return\n    }\n\n    // If the line starts with a U+003A COLON character (:)\n    // Ignore the line.\n    const colonPosition = line.indexOf(COLON)\n    if (colonPosition === 0) {\n      return\n    }\n\n    let field = ''\n    let value = ''\n\n    // If the line contains a U+003A COLON character (:)\n    if (colonPosition !== -1) {\n      // Collect the characters on the line before the first U+003A COLON\n      // character (:), and let field be that string.\n      // TODO: Investigate if there is a more performant way to extract the\n      // field\n      // see: https://github.com/nodejs/undici/issues/2630\n      field = line.subarray(0, colonPosition).toString('utf8')\n\n      // Collect the characters on the line after the first U+003A COLON\n      // character (:), and let value be that string.\n      // If value starts with a U+0020 SPACE character, remove it from value.\n      let valueStart = colonPosition + 1\n      if (line[valueStart] === SPACE) {\n        ++valueStart\n      }\n      // TODO: Investigate if there is a more performant way to extract the\n      // value\n      // see: https://github.com/nodejs/undici/issues/2630\n      value = line.subarray(valueStart).toString('utf8')\n\n      // Otherwise, the string is not empty but does not contain a U+003A COLON\n      // character (:)\n    } else {\n      // Process the field using the steps described below, using the whole\n      // line as the field name, and the empty string as the field value.\n      field = line.toString('utf8')\n      value = ''\n    }\n\n    // Modify the event with the field name and value. The value is also\n    // decoded as UTF-8\n    switch (field) {\n      case 'data':\n        if (event[field] === undefined) {\n          event[field] = value\n        } else {\n          event[field] += `\\n${value}`\n        }\n        break\n      case 'retry':\n        if (isASCIINumber(value)) {\n          event[field] = value\n        }\n        break\n      case 'id':\n        if (isValidLastEventId(value)) {\n          event[field] = value\n        }\n        break\n      case 'event':\n        if (value.length > 0) {\n          event[field] = value\n        }\n        break\n    }\n  }\n\n  /**\n   * @param {EventSourceStreamEvent} event\n   */\n  processEvent (event) {\n    if (event.retry && isASCIINumber(event.retry)) {\n      this.state.reconnectionTime = parseInt(event.retry, 10)\n    }\n\n    if (event.id !== undefined && isValidLastEventId(event.id)) {\n      this.state.lastEventId = event.id\n    }\n\n    // only dispatch event, when data is provided\n    if (event.data !== undefined) {\n      this.push({\n        type: event.event || 'message',\n        options: {\n          data: event.data,\n          lastEventId: this.state.lastEventId,\n          origin: this.state.origin\n        }\n      })\n    }\n  }\n\n  clearEvent () {\n    this.event = {\n      data: undefined,\n      event: undefined,\n      id: undefined,\n      retry: undefined\n    }\n  }\n}\n\nmodule.exports = {\n  EventSourceStream\n}\n", "'use strict'\n\nconst { pipeline } = require('node:stream')\nconst { fetching } = require('../fetch')\nconst { makeRequest } = require('../fetch/request')\nconst { webidl } = require('../webidl')\nconst { EventSourceStream } = require('./eventsource-stream')\nconst { parseMIMEType } = require('../fetch/data-url')\nconst { createFastMessageEvent } = require('../websocket/events')\nconst { isNetworkError } = require('../fetch/response')\nconst { kEnumerableProperty } = require('../../core/util')\nconst { environmentSettingsObject } = require('../fetch/util')\n\nlet experimentalWarned = false\n\n/**\n * A reconnection time, in milliseconds. This must initially be an implementation-defined value,\n * probably in the region of a few seconds.\n *\n * In Comparison:\n * - Chrome uses 3000ms.\n * - Deno uses 5000ms.\n *\n * @type {3000}\n */\nconst defaultReconnectionTime = 3000\n\n/**\n * The readyState attribute represents the state of the connection.\n * @typedef ReadyState\n * @type {0|1|2}\n * @readonly\n * @see https://html.spec.whatwg.org/multipage/server-sent-events.html#dom-eventsource-readystate-dev\n */\n\n/**\n * The connection has not yet been established, or it was closed and the user\n * agent is reconnecting.\n * @type {0}\n */\nconst CONNECTING = 0\n\n/**\n * The user agent has an open connection and is dispatching events as it\n * receives them.\n * @type {1}\n */\nconst OPEN = 1\n\n/**\n * The connection is not open, and the user agent is not trying to reconnect.\n * @type {2}\n */\nconst CLOSED = 2\n\n/**\n * Requests for the element will have their mode set to \"cors\" and their credentials mode set to \"same-origin\".\n * @type {'anonymous'}\n */\nconst ANONYMOUS = 'anonymous'\n\n/**\n * Requests for the element will have their mode set to \"cors\" and their credentials mode set to \"include\".\n * @type {'use-credentials'}\n */\nconst USE_CREDENTIALS = 'use-credentials'\n\n/**\n * The EventSource interface is used to receive server-sent events. It\n * connects to a server over HTTP and receives events in text/event-stream\n * format without closing the connection.\n * @extends {EventTarget}\n * @see https://html.spec.whatwg.org/multipage/server-sent-events.html#server-sent-events\n * @api public\n */\nclass EventSource extends EventTarget {\n  #events = {\n    open: null,\n    error: null,\n    message: null\n  }\n\n  #url\n  #withCredentials = false\n\n  /**\n   * @type {ReadyState}\n   */\n  #readyState = CONNECTING\n\n  #request = null\n  #controller = null\n\n  #dispatcher\n\n  /**\n   * @type {import('./eventsource-stream').eventSourceSettings}\n   */\n  #state\n\n  /**\n   * Creates a new EventSource object.\n   * @param {string} url\n   * @param {EventSourceInit} [eventSourceInitDict={}]\n   * @see https://html.spec.whatwg.org/multipage/server-sent-events.html#the-eventsource-interface\n   */\n  constructor (url, eventSourceInitDict = {}) {\n    // 1. Let ev be a new EventSource object.\n    super()\n\n    webidl.util.markAsUncloneable(this)\n\n    const prefix = 'EventSource constructor'\n    webidl.argumentLengthCheck(arguments, 1, prefix)\n\n    if (!experimentalWarned) {\n      experimentalWarned = true\n      process.emitWarning('EventSource is experimental, expect them to change at any time.', {\n        code: 'UNDICI-ES'\n      })\n    }\n\n    url = webidl.converters.USVString(url)\n    eventSourceInitDict = webidl.converters.EventSourceInitDict(eventSourceInitDict, prefix, 'eventSourceInitDict')\n\n    this.#dispatcher = eventSourceInitDict.node.dispatcher || eventSourceInitDict.dispatcher\n    this.#state = {\n      lastEventId: '',\n      reconnectionTime: eventSourceInitDict.node.reconnectionTime\n    }\n\n    // 2. Let settings be ev's relevant settings object.\n    // https://html.spec.whatwg.org/multipage/webappapis.html#environment-settings-object\n    const settings = environmentSettingsObject\n\n    let urlRecord\n\n    try {\n      // 3. Let urlRecord be the result of encoding-parsing a URL given url, relative to settings.\n      urlRecord = new URL(url, settings.settingsObject.baseUrl)\n      this.#state.origin = urlRecord.origin\n    } catch (e) {\n      // 4. If urlRecord is failure, then throw a \"SyntaxError\" DOMException.\n      throw new DOMException(e, 'SyntaxError')\n    }\n\n    // 5. Set ev's url to urlRecord.\n    this.#url = urlRecord.href\n\n    // 6. Let corsAttributeState be Anonymous.\n    let corsAttributeState = ANONYMOUS\n\n    // 7. If the value of eventSourceInitDict's withCredentials member is true,\n    // then set corsAttributeState to Use Credentials and set ev's\n    // withCredentials attribute to true.\n    if (eventSourceInitDict.withCredentials === true) {\n      corsAttributeState = USE_CREDENTIALS\n      this.#withCredentials = true\n    }\n\n    // 8. Let request be the result of creating a potential-CORS request given\n    // urlRecord, the empty string, and corsAttributeState.\n    const initRequest = {\n      redirect: 'follow',\n      keepalive: true,\n      // @see https://html.spec.whatwg.org/multipage/urls-and-fetching.html#cors-settings-attributes\n      mode: 'cors',\n      credentials: corsAttributeState === 'anonymous'\n        ? 'same-origin'\n        : 'omit',\n      referrer: 'no-referrer'\n    }\n\n    // 9. Set request's client to settings.\n    initRequest.client = environmentSettingsObject.settingsObject\n\n    // 10. User agents may set (`Accept`, `text/event-stream`) in request's header list.\n    initRequest.headersList = [['accept', { name: 'accept', value: 'text/event-stream' }]]\n\n    // 11. Set request's cache mode to \"no-store\".\n    initRequest.cache = 'no-store'\n\n    // 12. Set request's initiator type to \"other\".\n    initRequest.initiator = 'other'\n\n    initRequest.urlList = [new URL(this.#url)]\n\n    // 13. Set ev's request to request.\n    this.#request = makeRequest(initRequest)\n\n    this.#connect()\n  }\n\n  /**\n   * Returns the state of this EventSource object's connection. It can have the\n   * values described below.\n   * @returns {ReadyState}\n   * @readonly\n   */\n  get readyState () {\n    return this.#readyState\n  }\n\n  /**\n   * Returns the URL providing the event stream.\n   * @readonly\n   * @returns {string}\n   */\n  get url () {\n    return this.#url\n  }\n\n  /**\n   * Returns a boolean indicating whether the EventSource object was\n   * instantiated with CORS credentials set (true), or not (false, the default).\n   */\n  get withCredentials () {\n    return this.#withCredentials\n  }\n\n  #connect () {\n    if (this.#readyState === CLOSED) return\n\n    this.#readyState = CONNECTING\n\n    const fetchParams = {\n      request: this.#request,\n      dispatcher: this.#dispatcher\n    }\n\n    // 14. Let processEventSourceEndOfBody given response res be the following step: if res is not a network error, then reestablish the connection.\n    const processEventSourceEndOfBody = (response) => {\n      if (!isNetworkError(response)) {\n        return this.#reconnect()\n      }\n    }\n\n    // 15. Fetch request, with processResponseEndOfBody set to processEventSourceEndOfBody...\n    fetchParams.processResponseEndOfBody = processEventSourceEndOfBody\n\n    // and processResponse set to the following steps given response res:\n    fetchParams.processResponse = (response) => {\n      // 1. If res is an aborted network error, then fail the connection.\n\n      if (isNetworkError(response)) {\n        // 1. When a user agent is to fail the connection, the user agent\n        // must queue a task which, if the readyState attribute is set to a\n        // value other than CLOSED, sets the readyState attribute to CLOSED\n        // and fires an event named error at the EventSource object. Once the\n        // user agent has failed the connection, it does not attempt to\n        // reconnect.\n        if (response.aborted) {\n          this.close()\n          this.dispatchEvent(new Event('error'))\n          return\n          // 2. Otherwise, if res is a network error, then reestablish the\n          // connection, unless the user agent knows that to be futile, in\n          // which case the user agent may fail the connection.\n        } else {\n          this.#reconnect()\n          return\n        }\n      }\n\n      // 3. Otherwise, if res's status is not 200, or if res's `Content-Type`\n      // is not `text/event-stream`, then fail the connection.\n      const contentType = response.headersList.get('content-type', true)\n      const mimeType = contentType !== null ? parseMIMEType(contentType) : 'failure'\n      const contentTypeValid = mimeType !== 'failure' && mimeType.essence === 'text/event-stream'\n      if (\n        response.status !== 200 ||\n        contentTypeValid === false\n      ) {\n        this.close()\n        this.dispatchEvent(new Event('error'))\n        return\n      }\n\n      // 4. Otherwise, announce the connection and interpret res's body\n      // line by line.\n\n      // When a user agent is to announce the connection, the user agent\n      // must queue a task which, if the readyState attribute is set to a\n      // value other than CLOSED, sets the readyState attribute to OPEN\n      // and fires an event named open at the EventSource object.\n      // @see https://html.spec.whatwg.org/multipage/server-sent-events.html#sse-processing-model\n      this.#readyState = OPEN\n      this.dispatchEvent(new Event('open'))\n\n      // If redirected to a different origin, set the origin to the new origin.\n      this.#state.origin = response.urlList[response.urlList.length - 1].origin\n\n      const eventSourceStream = new EventSourceStream({\n        eventSourceSettings: this.#state,\n        push: (event) => {\n          this.dispatchEvent(createFastMessageEvent(\n            event.type,\n            event.options\n          ))\n        }\n      })\n\n      pipeline(response.body.stream,\n        eventSourceStream,\n        (error) => {\n          if (\n            error?.aborted === false\n          ) {\n            this.close()\n            this.dispatchEvent(new Event('error'))\n          }\n        })\n    }\n\n    this.#controller = fetching(fetchParams)\n  }\n\n  /**\n   * @see https://html.spec.whatwg.org/multipage/server-sent-events.html#sse-processing-model\n   * @returns {void}\n   */\n  #reconnect () {\n    // When a user agent is to reestablish the connection, the user agent must\n    // run the following steps. These steps are run in parallel, not as part of\n    // a task. (The tasks that it queues, of course, are run like normal tasks\n    // and not themselves in parallel.)\n\n    // 1. Queue a task to run the following steps:\n\n    //   1. If the readyState attribute is set to CLOSED, abort the task.\n    if (this.#readyState === CLOSED) return\n\n    //   2. Set the readyState attribute to CONNECTING.\n    this.#readyState = CONNECTING\n\n    //   3. Fire an event named error at the EventSource object.\n    this.dispatchEvent(new Event('error'))\n\n    // 2. Wait a delay equal to the reconnection time of the event source.\n    setTimeout(() => {\n      // 5. Queue a task to run the following steps:\n\n      //   1. If the EventSource object's readyState attribute is not set to\n      //      CONNECTING, then return.\n      if (this.#readyState !== CONNECTING) return\n\n      //   2. Let request be the EventSource object's request.\n      //   3. If the EventSource object's last event ID string is not the empty\n      //      string, then:\n      //      1. Let lastEventIDValue be the EventSource object's last event ID\n      //         string, encoded as UTF-8.\n      //      2. Set (`Last-Event-ID`, lastEventIDValue) in request's header\n      //         list.\n      if (this.#state.lastEventId.length) {\n        this.#request.headersList.set('last-event-id', this.#state.lastEventId, true)\n      }\n\n      //   4. Fetch request and process the response obtained in this fashion, if any, as described earlier in this section.\n      this.#connect()\n    }, this.#state.reconnectionTime)?.unref()\n  }\n\n  /**\n   * Closes the connection, if any, and sets the readyState attribute to\n   * CLOSED.\n   */\n  close () {\n    webidl.brandCheck(this, EventSource)\n\n    if (this.#readyState === CLOSED) return\n    this.#readyState = CLOSED\n    this.#controller.abort()\n    this.#request = null\n  }\n\n  get onopen () {\n    return this.#events.open\n  }\n\n  set onopen (fn) {\n    if (this.#events.open) {\n      this.removeEventListener('open', this.#events.open)\n    }\n\n    const listener = webidl.converters.EventHandlerNonNull(fn)\n\n    if (listener !== null) {\n      this.addEventListener('open', listener)\n      this.#events.open = fn\n    } else {\n      this.#events.open = null\n    }\n  }\n\n  get onmessage () {\n    return this.#events.message\n  }\n\n  set onmessage (fn) {\n    if (this.#events.message) {\n      this.removeEventListener('message', this.#events.message)\n    }\n\n    const listener = webidl.converters.EventHandlerNonNull(fn)\n\n    if (listener !== null) {\n      this.addEventListener('message', listener)\n      this.#events.message = fn\n    } else {\n      this.#events.message = null\n    }\n  }\n\n  get onerror () {\n    return this.#events.error\n  }\n\n  set onerror (fn) {\n    if (this.#events.error) {\n      this.removeEventListener('error', this.#events.error)\n    }\n\n    const listener = webidl.converters.EventHandlerNonNull(fn)\n\n    if (listener !== null) {\n      this.addEventListener('error', listener)\n      this.#events.error = fn\n    } else {\n      this.#events.error = null\n    }\n  }\n}\n\nconst constantsPropertyDescriptors = {\n  CONNECTING: {\n    __proto__: null,\n    configurable: false,\n    enumerable: true,\n    value: CONNECTING,\n    writable: false\n  },\n  OPEN: {\n    __proto__: null,\n    configurable: false,\n    enumerable: true,\n    value: OPEN,\n    writable: false\n  },\n  CLOSED: {\n    __proto__: null,\n    configurable: false,\n    enumerable: true,\n    value: CLOSED,\n    writable: false\n  }\n}\n\nObject.defineProperties(EventSource, constantsPropertyDescriptors)\nObject.defineProperties(EventSource.prototype, constantsPropertyDescriptors)\n\nObject.defineProperties(EventSource.prototype, {\n  close: kEnumerableProperty,\n  onerror: kEnumerableProperty,\n  onmessage: kEnumerableProperty,\n  onopen: kEnumerableProperty,\n  readyState: kEnumerableProperty,\n  url: kEnumerableProperty,\n  withCredentials: kEnumerableProperty\n})\n\nwebidl.converters.EventSourceInitDict = webidl.dictionaryConverter([\n  {\n    key: 'withCredentials',\n    converter: webidl.converters.boolean,\n    defaultValue: () => false\n  },\n  {\n    key: 'dispatcher', // undici only\n    converter: webidl.converters.any\n  },\n  {\n    key: 'node', // undici only\n    converter: webidl.dictionaryConverter([\n      {\n        key: 'reconnectionTime',\n        converter: webidl.converters['unsigned long'],\n        defaultValue: () => defaultReconnectionTime\n      },\n      {\n        key: 'dispatcher',\n        converter: webidl.converters.any\n      }\n    ]),\n    defaultValue: () => ({})\n  }\n])\n\nmodule.exports = {\n  EventSource,\n  defaultReconnectionTime\n}\n", "'use strict'\n\nconst Client = require('./lib/dispatcher/client')\nconst Dispatcher = require('./lib/dispatcher/dispatcher')\nconst Pool = require('./lib/dispatcher/pool')\nconst BalancedPool = require('./lib/dispatcher/balanced-pool')\nconst RoundRobinPool = require('./lib/dispatcher/round-robin-pool')\nconst Agent = require('./lib/dispatcher/agent')\nconst ProxyAgent = require('./lib/dispatcher/proxy-agent')\nconst Socks5ProxyAgent = require('./lib/dispatcher/socks5-proxy-agent')\nconst EnvHttpProxyAgent = require('./lib/dispatcher/env-http-proxy-agent')\nconst RetryAgent = require('./lib/dispatcher/retry-agent')\nconst H2CClient = require('./lib/dispatcher/h2c-client')\nconst errors = require('./lib/core/errors')\nconst util = require('./lib/core/util')\nconst { InvalidArgumentError } = errors\nconst api = require('./lib/api')\nconst buildConnector = require('./lib/core/connect')\nconst MockClient = require('./lib/mock/mock-client')\nconst { MockCallHistory, MockCallHistoryLog } = require('./lib/mock/mock-call-history')\nconst MockAgent = require('./lib/mock/mock-agent')\nconst MockPool = require('./lib/mock/mock-pool')\nconst SnapshotAgent = require('./lib/mock/snapshot-agent')\nconst mockErrors = require('./lib/mock/mock-errors')\nconst RetryHandler = require('./lib/handler/retry-handler')\nconst { getGlobalDispatcher, setGlobalDispatcher } = require('./lib/global')\nconst DecoratorHandler = require('./lib/handler/decorator-handler')\nconst RedirectHandler = require('./lib/handler/redirect-handler')\n\nObject.assign(Dispatcher.prototype, api)\n\nmodule.exports.Dispatcher = Dispatcher\nmodule.exports.Client = Client\nmodule.exports.Pool = Pool\nmodule.exports.BalancedPool = BalancedPool\nmodule.exports.RoundRobinPool = RoundRobinPool\nmodule.exports.Agent = Agent\nmodule.exports.ProxyAgent = ProxyAgent\nmodule.exports.Socks5ProxyAgent = Socks5ProxyAgent\nmodule.exports.EnvHttpProxyAgent = EnvHttpProxyAgent\nmodule.exports.RetryAgent = RetryAgent\nmodule.exports.H2CClient = H2CClient\nmodule.exports.RetryHandler = RetryHandler\n\nmodule.exports.DecoratorHandler = DecoratorHandler\nmodule.exports.RedirectHandler = RedirectHandler\nmodule.exports.interceptors = {\n  redirect: require('./lib/interceptor/redirect'),\n  responseError: require('./lib/interceptor/response-error'),\n  retry: require('./lib/interceptor/retry'),\n  dump: require('./lib/interceptor/dump'),\n  dns: require('./lib/interceptor/dns'),\n  cache: require('./lib/interceptor/cache'),\n  decompress: require('./lib/interceptor/decompress'),\n  deduplicate: require('./lib/interceptor/deduplicate')\n}\n\nmodule.exports.cacheStores = {\n  MemoryCacheStore: require('./lib/cache/memory-cache-store')\n}\n\nconst SqliteCacheStore = require('./lib/cache/sqlite-cache-store')\nmodule.exports.cacheStores.SqliteCacheStore = SqliteCacheStore\n\nmodule.exports.buildConnector = buildConnector\nmodule.exports.errors = errors\nmodule.exports.util = {\n  parseHeaders: util.parseHeaders,\n  headerNameToString: util.headerNameToString\n}\n\nfunction makeDispatcher (fn) {\n  return (url, opts, handler) => {\n    if (typeof opts === 'function') {\n      handler = opts\n      opts = null\n    }\n\n    if (!url || (typeof url !== 'string' && typeof url !== 'object' && !(url instanceof URL))) {\n      throw new InvalidArgumentError('invalid url')\n    }\n\n    if (opts != null && typeof opts !== 'object') {\n      throw new InvalidArgumentError('invalid opts')\n    }\n\n    if (opts && opts.path != null) {\n      if (typeof opts.path !== 'string') {\n        throw new InvalidArgumentError('invalid opts.path')\n      }\n\n      let path = opts.path\n      if (!opts.path.startsWith('/')) {\n        path = `/${path}`\n      }\n\n      url = new URL(util.parseOrigin(url).origin + path)\n    } else {\n      if (!opts) {\n        opts = typeof url === 'object' ? url : {}\n      }\n\n      url = util.parseURL(url)\n    }\n\n    const { agent, dispatcher = getGlobalDispatcher() } = opts\n\n    if (agent) {\n      throw new InvalidArgumentError('unsupported opts.agent. Did you mean opts.client?')\n    }\n\n    return fn.call(dispatcher, {\n      ...opts,\n      origin: url.origin,\n      path: url.search ? `${url.pathname}${url.search}` : url.pathname,\n      method: opts.method || (opts.body ? 'PUT' : 'GET')\n    }, handler)\n  }\n}\n\nmodule.exports.setGlobalDispatcher = setGlobalDispatcher\nmodule.exports.getGlobalDispatcher = getGlobalDispatcher\n\nconst fetchImpl = require('./lib/web/fetch').fetch\n\n// Capture __filename at module load time for stack trace augmentation.\n// This may be undefined when bundled in environments like Node.js internals.\nconst currentFilename = typeof __filename !== 'undefined' ? __filename : undefined\n\nfunction appendFetchStackTrace (err, filename) {\n  if (!err || typeof err !== 'object') {\n    return\n  }\n\n  const stack = typeof err.stack === 'string' ? err.stack : ''\n  const normalizedFilename = filename.replace(/\\\\/g, '/')\n\n  if (stack && (stack.includes(filename) || stack.includes(normalizedFilename))) {\n    return\n  }\n\n  const capture = {}\n  Error.captureStackTrace(capture, appendFetchStackTrace)\n\n  if (!capture.stack) {\n    return\n  }\n\n  const captureLines = capture.stack.split('\\n').slice(1).join('\\n')\n\n  err.stack = stack ? `${stack}\\n${captureLines}` : capture.stack\n}\n\nmodule.exports.fetch = function fetch (init, options = undefined) {\n  return fetchImpl(init, options).catch(err => {\n    if (currentFilename) {\n      appendFetchStackTrace(err, currentFilename)\n    } else if (err && typeof err === 'object') {\n      Error.captureStackTrace(err, module.exports.fetch)\n    }\n    throw err\n  })\n}\nmodule.exports.Headers = require('./lib/web/fetch/headers').Headers\nmodule.exports.Response = require('./lib/web/fetch/response').Response\nmodule.exports.Request = require('./lib/web/fetch/request').Request\nmodule.exports.FormData = require('./lib/web/fetch/formdata').FormData\n\nconst { setGlobalOrigin, getGlobalOrigin } = require('./lib/web/fetch/global')\n\nmodule.exports.setGlobalOrigin = setGlobalOrigin\nmodule.exports.getGlobalOrigin = getGlobalOrigin\n\nconst { CacheStorage } = require('./lib/web/cache/cachestorage')\nconst { kConstruct } = require('./lib/core/symbols')\n\nmodule.exports.caches = new CacheStorage(kConstruct)\n\nconst { deleteCookie, getCookies, getSetCookies, setCookie, parseCookie } = require('./lib/web/cookies')\n\nmodule.exports.deleteCookie = deleteCookie\nmodule.exports.getCookies = getCookies\nmodule.exports.getSetCookies = getSetCookies\nmodule.exports.setCookie = setCookie\nmodule.exports.parseCookie = parseCookie\n\nconst { parseMIMEType, serializeAMimeType } = require('./lib/web/fetch/data-url')\n\nmodule.exports.parseMIMEType = parseMIMEType\nmodule.exports.serializeAMimeType = serializeAMimeType\n\nconst { CloseEvent, ErrorEvent, MessageEvent } = require('./lib/web/websocket/events')\nconst { WebSocket, ping } = require('./lib/web/websocket/websocket')\nmodule.exports.WebSocket = WebSocket\nmodule.exports.CloseEvent = CloseEvent\nmodule.exports.ErrorEvent = ErrorEvent\nmodule.exports.MessageEvent = MessageEvent\nmodule.exports.ping = ping\n\nmodule.exports.WebSocketStream = require('./lib/web/websocket/stream/websocketstream').WebSocketStream\nmodule.exports.WebSocketError = require('./lib/web/websocket/stream/websocketerror').WebSocketError\n\nmodule.exports.request = makeDispatcher(api.request)\nmodule.exports.stream = makeDispatcher(api.stream)\nmodule.exports.pipeline = makeDispatcher(api.pipeline)\nmodule.exports.connect = makeDispatcher(api.connect)\nmodule.exports.upgrade = makeDispatcher(api.upgrade)\n\nmodule.exports.MockClient = MockClient\nmodule.exports.MockCallHistory = MockCallHistory\nmodule.exports.MockCallHistoryLog = MockCallHistoryLog\nmodule.exports.MockPool = MockPool\nmodule.exports.MockAgent = MockAgent\nmodule.exports.SnapshotAgent = SnapshotAgent\nmodule.exports.mockErrors = mockErrors\n\nconst { EventSource } = require('./lib/web/eventsource/eventsource')\n\nmodule.exports.EventSource = EventSource\n\nfunction install () {\n  globalThis.fetch = module.exports.fetch\n  globalThis.Headers = module.exports.Headers\n  globalThis.Response = module.exports.Response\n  globalThis.Request = module.exports.Request\n  globalThis.FormData = module.exports.FormData\n  globalThis.WebSocket = module.exports.WebSocket\n  globalThis.CloseEvent = module.exports.CloseEvent\n  globalThis.ErrorEvent = module.exports.ErrorEvent\n  globalThis.MessageEvent = module.exports.MessageEvent\n  globalThis.EventSource = module.exports.EventSource\n}\n\nmodule.exports.install = install\n", "import extraTypingsCommander from './index.js';\n\n// wrapper to provide named exports for ESM.\nexport const {\n  program,\n  createCommand,\n  createArgument,\n  createOption,\n  CommanderError,\n  InvalidArgumentError,\n  InvalidOptionArgumentError, // deprecated old name\n  Command,\n  Argument,\n  Option,\n  Help,\n} = extraTypingsCommander;\n", "import * as Sentry from \"@sentry/node\";\nimport { Ora } from \"ora\";\nimport { Filesystem, nodeFs } from \"./fs.js\";\nimport { initializeBigBrainAuth } from \"../cli/lib/deploymentSelection.js\";\nimport { detectSuspiciousEnvironmentVariables } from \"../cli/lib/envvars.js\";\nimport { logFailure, logVerbose } from \"./log.js\";\n// How the error should be handled when running `npx convex dev`.\nexport type ErrorType =\n  // The error was likely caused by the state of the developer's local\n  // file system (e.g. `tsc` fails due to a syntax error). The `convex dev`\n  // command will then print out the error and wait for the file to change before\n  // retrying.\n  | \"invalid filesystem data\"\n  // The error was caused by either the local state (ie schema.ts content)\n  // or the state of the db (ie documents not matching the new schema).\n  // The `convex dev` command will wait for either file OR table data change\n  // to retry (if a table name is specified as the value in this Object).\n  | {\n      \"invalid filesystem or db data\": {\n        tableName: string;\n        componentPath?: string;\n      } | null;\n    }\n  // The error was caused by either the local state (ie schema.ts content)\n  // or the state of the deployment environment variables.\n  // The `convex dev` command will wait for either file OR env var change\n  // before retrying.\n  | \"invalid filesystem or env vars\"\n  // The error was some transient issue (e.g. a network\n  // error). This will then cause a retry after an exponential backoff.\n  | \"transient\"\n  // This error was caught, handled, and now all that needs to happen\n  // is for the proces to restart. No error is logged or reported.\n  | \"already handled\"\n  // This error is truly permanent. Exit `npx convex dev` because the\n  // developer will need to take a manual commandline action.\n  | \"fatal\";\n\nexport type BigBrainAuth = {\n  header: string;\n} & (\n  | {\n      kind: \"projectKey\";\n      projectKey: string;\n    }\n  | {\n      kind: \"deploymentKey\";\n      deploymentKey: string;\n    }\n  | {\n      kind: \"previewDeployKey\";\n      previewDeployKey: string;\n    }\n  | {\n      kind: \"accessToken\";\n      accessToken: string;\n    }\n);\n\nexport interface Context {\n  fs: Filesystem;\n  deprecationMessagePrinted: boolean;\n  // Reports to Sentry and either throws FatalError or exits the process.\n  // Prints the `printedMessage` if provided\n  crash(args: {\n    exitCode: number;\n    errorType: ErrorType;\n    errForSentry?: any;\n    printedMessage: string | null;\n  }): Promise<never>;\n  registerCleanup(fn: (exitCode: number, err?: any) => Promise<void>): string;\n  removeCleanup(\n    handle: string,\n  ): (exitCode: number, err?: any) => Promise<void> | null;\n  bigBrainAuth(): BigBrainAuth | null;\n  /**\n   * Prefer using `updateBigBrainAuthAfterLogin` in `deploymentSelection.ts` instead\n   */\n  _updateBigBrainAuth(auth: BigBrainAuth | null): void;\n}\n\nasync function flushAndExit(exitCode: number, err?: any) {\n  if (err) {\n    Sentry.captureException(err);\n  }\n  await Sentry.close();\n  return process.exit(exitCode);\n}\n\nexport type OneoffCtx = Context & {\n  // Generally `ctx.crash` is better to use since it handles printing a message\n  // for the user, and then calls this.\n  //\n  // This function reports to Sentry + exits the process, but does not handle\n  // printing a message for the user.\n  flushAndExit: (exitCode: number, err?: any) => Promise<never>;\n};\n\nclass OneoffContextImpl {\n  private _cleanupFns: Record<\n    string,\n    (exitCode: number, err?: any) => Promise<void>\n  > = {};\n  public fs: Filesystem = nodeFs;\n  public deprecationMessagePrinted: boolean = false;\n  public spinner: Ora | undefined = undefined;\n  private _bigBrainAuth: BigBrainAuth | null = null;\n\n  crash = async (args: {\n    exitCode: number;\n    errorType?: ErrorType;\n    errForSentry?: any;\n    printedMessage: string | null;\n  }) => {\n    if (args.printedMessage !== null) {\n      logFailure(args.printedMessage);\n    }\n    return await this.flushAndExit(args.exitCode, args.errForSentry);\n  };\n  flushAndExit = async (exitCode: number, err?: any) => {\n    logVerbose(\"Flushing and exiting, error:\", err);\n    if (err) {\n      logVerbose(err.stack);\n    }\n    const cleanupFns = this._cleanupFns;\n    // Clear the cleanup functions so that there's no risk of running them twice\n    // if this somehow gets triggered twice.\n    this._cleanupFns = {};\n    const fns = Object.values(cleanupFns);\n    logVerbose(`Running ${fns.length} cleanup functions`);\n    for (const fn of fns) {\n      await fn(exitCode, err);\n    }\n    logVerbose(\"All cleanup functions ran\");\n    return flushAndExit(exitCode, err);\n  };\n  registerCleanup(fn: (exitCode: number, err?: any) => Promise<void>) {\n    const handle = Math.random().toString(36).slice(2);\n    this._cleanupFns[handle] = fn;\n    return handle;\n  }\n  removeCleanup(handle: string) {\n    const value = this._cleanupFns[handle];\n    delete this._cleanupFns[handle];\n    return value ?? null;\n  }\n  bigBrainAuth(): BigBrainAuth | null {\n    return this._bigBrainAuth;\n  }\n  _updateBigBrainAuth(auth: BigBrainAuth | null): void {\n    logVerbose(`Updating big brain auth to ${auth?.kind ?? \"null\"}`);\n    this._bigBrainAuth = auth;\n  }\n}\n\nexport const oneoffContext: (args: {\n  url?: string | undefined;\n  adminKey?: string | undefined;\n  envFile?: string | undefined;\n}) => Promise<OneoffCtx> = async (args) => {\n  const ctx = new OneoffContextImpl();\n  await detectSuspiciousEnvironmentVariables(\n    ctx,\n    !!process.env.CONVEX_IGNORE_SUSPICIOUS_ENV_VARS,\n  );\n  await initializeBigBrainAuth(ctx, {\n    url: args.url,\n    adminKey: args.adminKey,\n    envFile: args.envFile,\n  });\n  return ctx;\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', 'GITEA_ACTIONS', 'CIRCLECI'].some(key => key in env)) {\n\t\t\treturn 3;\n\t\t}\n\n\t\tif (['TRAVIS', '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 (env.TERM === 'xterm-ghostty') {\n\t\treturn 3;\n\t}\n\n\tif (env.TERM === 'wezterm') {\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 builder = createBuilder(this, createStyler(style.open, style.close, this[STYLER]), this[IS_EMPTY]);\n\t\t\tObject.defineProperty(this, styleName, {value: builder});\n\t\t\treturn builder;\n\t\t},\n\t};\n}\n\nstyles.visible = {\n\tget() {\n\t\tconst builder = createBuilder(this, this[STYLER], true);\n\t\tObject.defineProperty(this, 'visible', {value: builder});\n\t\treturn builder;\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 createBuilder(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 createBuilder(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 createBuilder = (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 builder = (...arguments_) => applyStyle(builder, (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(builder, proto);\n\n\tbuilder[GENERATOR] = self;\n\tbuilder[STYLER] = _styler;\n\tbuilder[IS_EMPTY] = _isEmpty;\n\n\treturn builder;\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", "// Disable our restriction on `throw` because these aren't developer-facing\n// error messages.\n/* eslint-disable no-restricted-imports */\n/* eslint-disable no-restricted-syntax */\nimport { chalkStderr } from \"chalk\";\nimport stdFs, { Dirent, Mode, ReadStream, Stats } from \"fs\";\nimport * as fsPromises from \"fs/promises\";\nimport os from \"os\";\nimport path from \"path\";\nimport crypto from \"crypto\";\nimport { Readable } from \"stream\";\n\nexport type NormalizedPath = string;\n\nconst tmpDirOverrideVar = \"CONVEX_TMPDIR\";\nfunction tmpDirPath() {\n  // Allow users to override the temporary directory path with an environment variable.\n  // This override needs to (1) be project-specific, since the user may have projects\n  // on different filesystems, but also (2) be device-specific and not checked in, since\n  // it's dependent on where the user has checked out their project. So, we don't want\n  // this state in the project-specific `convex.json`, which is shared across all\n  // devices, or in the top-level `~/.convex` directory, which is shared across all\n  // projects on the local machine.\n  //\n  // Therefore, just let advanced users configure this behavior with an environment\n  // variable that they're responsible for managing themselves for now.\n  const envTmpDir = process.env[tmpDirOverrideVar];\n  return envTmpDir ?? os.tmpdir();\n}\nconst tmpDirRoot = tmpDirPath();\n\nlet warned = false;\nfunction warnCrossFilesystem(dstPath: string) {\n  const dstDir = path.dirname(dstPath);\n  if (!warned) {\n    // It's hard for these to use `logMessage` without creating a circular dependency, so just log directly.\n    // eslint-disable-next-line no-console\n    console.warn(\n      chalkStderr.yellow(\n        `Temporary directory '${tmpDirRoot}' and project directory '${dstDir}' are on different filesystems.`,\n      ),\n    );\n    // eslint-disable-next-line no-console\n    console.warn(\n      chalkStderr.gray(\n        `  If you're running into errors with other tools watching the project directory, override the temporary directory location with the ${chalkStderr.bold(\n          tmpDirOverrideVar,\n        )} environment variable.`,\n      ),\n    );\n    // eslint-disable-next-line no-console\n    console.warn(\n      chalkStderr.gray(\n        `  Be sure to pick a temporary directory that's on the same filesystem as your project.`,\n      ),\n    );\n    warned = true;\n  }\n}\n\nexport interface Filesystem {\n  listDir(dirPath: string): Dirent[];\n\n  exists(path: string): boolean;\n  stat(path: string): Stats;\n  readUtf8File(path: string): string;\n  // createReadStream returns a stream for which [Symbol.asyncIterator]\n  // yields chunks of size highWaterMark (until the last one), or 64KB if\n  // highWaterMark isn't specified.\n  // https://nodejs.org/api/stream.html#readablesymbolasynciterator\n  createReadStream(\n    path: string,\n    options: { highWaterMark?: number },\n  ): ReadStream;\n  access(path: string): void;\n\n  writeUtf8File(path: string, contents: string, mode?: Mode): void;\n  mkdir(\n    dirPath: string,\n    options?: { allowExisting?: boolean; recursive?: boolean },\n  ): void;\n  rmdir(path: string): void;\n  unlink(path: string): void;\n  swapTmpFile(fromPath: TempPath, toPath: string): void;\n\n  registerPath(path: string, st: Stats | null): void;\n  invalidate(): void;\n}\n\nexport type TempPath = string & { __tempPath: \"tempPath\" };\n\nexport interface TempDir {\n  writeUtf8File(contents: string): TempPath;\n  writeFileStream(\n    path: TempPath,\n    stream: Readable,\n    onData?: (chunk: any) => void,\n  ): Promise<void>;\n  registerTempPath(st: Stats | null): TempPath;\n  path: TempPath;\n}\n\nexport async function withTmpDir(\n  callback: (tmpDir: TempDir) => Promise<void>,\n): Promise<void> {\n  // Create temporary directories inside `tmpDirRoot` of the form `convex-<random>`.\n  const tmpPath = stdFs.mkdtempSync(path.join(tmpDirRoot, \"convex\"));\n  const tmpDir = {\n    writeUtf8File(contents: string): TempPath {\n      const filePath = path.join(tmpPath, crypto.randomUUID());\n      nodeFs.writeUtf8File(filePath, contents);\n      return filePath as TempPath;\n    },\n    registerTempPath(st: Stats | null): TempPath {\n      const filePath = path.join(tmpPath, crypto.randomUUID());\n      nodeFs.registerPath(filePath, st);\n      return filePath as TempPath;\n    },\n    writeFileStream(\n      path: TempPath,\n      stream: Readable,\n      onData?: (chunk: any) => void,\n    ): Promise<void> {\n      return nodeFs.writeFileStream(path, stream, onData);\n    },\n    path: tmpPath as TempPath,\n  };\n  try {\n    await callback(tmpDir);\n  } finally {\n    stdFs.rmSync(tmpPath, { force: true, recursive: true });\n  }\n}\n\n// Use `nodeFs` when you just want to read and write to the local filesystem\n// and don't care about collecting the paths touched. One-off commands\n// should use the singleton `nodeFs`.\nexport class NodeFs implements Filesystem {\n  listDir(dirPath: string) {\n    return stdFs.readdirSync(dirPath, { withFileTypes: true });\n  }\n  exists(path: string) {\n    try {\n      stdFs.statSync(path);\n      return true;\n    } catch (e: any) {\n      if (e.code === \"ENOENT\") {\n        return false;\n      }\n      throw e;\n    }\n  }\n  stat(path: string) {\n    return stdFs.statSync(path);\n  }\n  readUtf8File(path: string) {\n    return stdFs.readFileSync(path, { encoding: \"utf-8\" });\n  }\n  createReadStream(\n    path: string,\n    options: { highWaterMark?: number },\n  ): ReadStream {\n    return stdFs.createReadStream(path, options);\n  }\n  // To avoid issues with filesystem events triggering for our own streamed file\n  // writes, writeFileStream is intentionally not on the Filesystem interface\n  // and not implemented by RecordingFs.\n  async writeFileStream(\n    path: string,\n    stream: Readable,\n    onData?: (chunk: any) => void,\n  ): Promise<void> {\n    // 'wx' means O_CREAT | O_EXCL | O_WRONLY\n    // 0o644 means owner has readwrite access, everyone else has read access.\n    const fileHandle = await fsPromises.open(path, \"wx\", 0o644);\n    try {\n      for await (const chunk of stream) {\n        // For some reason, adding `stream.on(\"data\", onData)` causes issues with\n        // the stream, but calling a callback here works.\n        if (onData) {\n          onData(chunk);\n        }\n        await fileHandle.write(chunk);\n      }\n    } finally {\n      await fileHandle.close();\n    }\n  }\n  access(path: string) {\n    return stdFs.accessSync(path);\n  }\n  writeUtf8File(path: string, contents: string, mode?: Mode) {\n    const fd = stdFs.openSync(path, \"w\", mode);\n    try {\n      stdFs.writeFileSync(fd, contents, { encoding: \"utf-8\" });\n      stdFs.fsyncSync(fd);\n    } finally {\n      stdFs.closeSync(fd);\n    }\n  }\n  mkdir(\n    dirPath: string,\n    options?: { allowExisting?: boolean; recursive?: boolean },\n  ): void {\n    try {\n      stdFs.mkdirSync(dirPath, { recursive: options?.recursive });\n    } catch (e: any) {\n      if (options?.allowExisting && e.code === \"EEXIST\") {\n        return;\n      }\n      throw e;\n    }\n  }\n  rmdir(path: string) {\n    stdFs.rmdirSync(path);\n  }\n  unlink(path: string) {\n    return stdFs.unlinkSync(path);\n  }\n  swapTmpFile(fromPath: TempPath, toPath: string) {\n    try {\n      return stdFs.renameSync(fromPath, toPath);\n    } catch (e: any) {\n      // Fallback to copying the file if we're on different volumes.\n      if (e.code === \"EXDEV\") {\n        warnCrossFilesystem(toPath);\n        stdFs.copyFileSync(fromPath, toPath);\n        return;\n      }\n      throw e;\n    }\n  }\n  registerPath(_path: string, _st: Stats | null) {\n    // The node filesystem doesn't track reads, so we don't need to do anything here.\n  }\n  invalidate() {\n    // We don't track invalidations for the node filesystem either.\n  }\n}\nexport const nodeFs = new NodeFs();\n\n// Filesystem implementation that records all paths observed. This is useful\n// for implementing continuous watch commands that need to manage a filesystem\n// watcher and know when a command's inputs were invalidated.\nexport class RecordingFs implements Filesystem {\n  // Absolute path -> Set of observed child names\n  private observedDirectories: Map<string, Set<string>> = new Map();\n\n  // Absolute path -> observed stat (or null if observed nonexistent)\n  private observedFiles: Map<string, Stats | null> = new Map();\n\n  // Have we noticed that files have changed while recording?\n  private invalidated = false;\n\n  private traceEvents: boolean;\n\n  constructor(traceEvents: boolean) {\n    this.traceEvents = traceEvents;\n  }\n\n  listDir(dirPath: string): Dirent[] {\n    const absDirPath = path.resolve(dirPath);\n\n    // Register observing the directory itself.\n    const dirSt = nodeFs.stat(absDirPath);\n    this.registerNormalized(absDirPath, dirSt);\n\n    // List the directory and register observing all of its children.\n    const entries = nodeFs.listDir(dirPath);\n    for (const entry of entries) {\n      const childPath = path.join(absDirPath, entry.name);\n      const childSt = nodeFs.stat(childPath);\n      this.registerPath(childPath, childSt);\n    }\n\n    // Register observing the directory's children.\n    const observedNames = new Set(entries.map((e) => e.name));\n    const existingNames = this.observedDirectories.get(absDirPath);\n    if (existingNames) {\n      if (!setsEqual(observedNames, existingNames)) {\n        if (this.traceEvents) {\n          // eslint-disable-next-line no-console\n          console.log(\n            \"Invalidating due to directory children mismatch\",\n            observedNames,\n            existingNames,\n          );\n        }\n        this.invalidated = true;\n      }\n    }\n    this.observedDirectories.set(absDirPath, observedNames);\n\n    return entries;\n  }\n\n  exists(path: string): boolean {\n    try {\n      const st = nodeFs.stat(path);\n      this.registerPath(path, st);\n      return true;\n    } catch (err: any) {\n      if (err.code === \"ENOENT\") {\n        this.registerPath(path, null);\n        return false;\n      }\n      throw err;\n    }\n  }\n  stat(path: string): Stats {\n    try {\n      const st = nodeFs.stat(path);\n      this.registerPath(path, st);\n      return st;\n    } catch (err: any) {\n      if (err.code === \"ENOENT\") {\n        this.registerPath(path, null);\n      }\n      throw err;\n    }\n  }\n  readUtf8File(path: string): string {\n    try {\n      const st = nodeFs.stat(path);\n      this.registerPath(path, st);\n      return nodeFs.readUtf8File(path);\n    } catch (err: any) {\n      if (err.code === \"ENOENT\") {\n        this.registerPath(path, null);\n      }\n      throw err;\n    }\n  }\n  createReadStream(\n    path: string,\n    options: { highWaterMark?: number },\n  ): ReadStream {\n    try {\n      const st = nodeFs.stat(path);\n      this.registerPath(path, st);\n      return nodeFs.createReadStream(path, options);\n    } catch (err: any) {\n      if (err.code === \"ENOENT\") {\n        this.registerPath(path, null);\n      }\n      throw err;\n    }\n  }\n  access(path: string) {\n    try {\n      const st = nodeFs.stat(path);\n      this.registerPath(path, st);\n      return nodeFs.access(path);\n    } catch (err: any) {\n      if (err.code === \"ENOENT\") {\n        this.registerPath(path, null);\n      }\n      throw err;\n    }\n  }\n\n  writeUtf8File(filePath: string, contents: string, mode?: Mode) {\n    const absPath = path.resolve(filePath);\n\n    nodeFs.writeUtf8File(filePath, contents, mode);\n\n    this.updateOnWrite(absPath);\n  }\n\n  mkdir(\n    dirPath: string,\n    options?: { allowExisting?: boolean; recursive?: boolean },\n  ): void {\n    const absPath = path.resolve(dirPath);\n    try {\n      stdFs.mkdirSync(absPath, { recursive: options?.recursive });\n    } catch (e: any) {\n      if (options?.allowExisting && e.code === \"EEXIST\") {\n        const st = nodeFs.stat(absPath);\n        this.registerNormalized(absPath, st);\n        return;\n      }\n      throw e;\n    }\n    this.updateOnWrite(absPath);\n  }\n\n  rmdir(dirPath: string) {\n    const absPath = path.resolve(dirPath);\n    stdFs.rmdirSync(absPath);\n    this.updateOnDelete(absPath);\n  }\n  unlink(filePath: string) {\n    const absPath = path.resolve(filePath);\n    stdFs.unlinkSync(absPath);\n    this.updateOnDelete(absPath);\n  }\n  swapTmpFile(fromPath: TempPath, toPath: string) {\n    const absToPath = path.resolve(toPath);\n    nodeFs.swapTmpFile(fromPath, absToPath);\n    this.updateOnWrite(absToPath);\n  }\n\n  private updateOnWrite(absPath: string) {\n    // Stat the file or dir after writing and make it our expected observation. If we read the file after\n    // writing it and it doesn't match this stat (implying a subsequent write), we'll invalidate\n    // the current reader.\n    const newSt = nodeFs.stat(absPath);\n    // Skip invalidation checking since we don't want to conflict if we previously read this file.\n    this.observedFiles.set(absPath, newSt);\n\n    // If we observed the parent, add our newly created file.\n    const parentPath = path.resolve(path.dirname(absPath));\n    const observedParent = this.observedDirectories.get(parentPath);\n    if (observedParent !== undefined) {\n      observedParent.add(path.basename(absPath));\n    }\n  }\n  private updateOnDelete(absPath: string) {\n    // Expect this file to be gone.\n    this.observedFiles.set(absPath, null);\n\n    // Unlink it from our parent if observed.\n    const parentPath = path.resolve(path.dirname(absPath));\n    const observedParent = this.observedDirectories.get(parentPath);\n    if (observedParent !== undefined) {\n      observedParent.delete(path.basename(absPath));\n    }\n  }\n\n  registerPath(p: string, st: Stats | null) {\n    const absPath = path.resolve(p);\n    this.registerNormalized(absPath, st);\n  }\n\n  invalidate() {\n    this.invalidated = true;\n  }\n\n  registerNormalized(absPath: string, observed: Stats | null): void {\n    const existing = this.observedFiles.get(absPath);\n    if (existing !== undefined) {\n      const stMatch = stMatches(observed, existing);\n      if (!stMatch.matches) {\n        if (this.traceEvents) {\n          // eslint-disable-next-line no-console\n          console.log(\n            \"Invalidating due to st mismatch\",\n            absPath,\n            observed,\n            existing,\n            stMatch.reason,\n          );\n        }\n        this.invalidated = true;\n      }\n    }\n    this.observedFiles.set(absPath, observed);\n  }\n\n  finalize(): Observations | \"invalidated\" {\n    if (this.invalidated) {\n      return \"invalidated\";\n    }\n    return new Observations(this.observedDirectories, this.observedFiles);\n  }\n}\n\nexport type WatchEvent = {\n  name: \"add\" | \"addDir\" | \"change\" | \"unlink\" | \"unlinkDir\";\n  absPath: string;\n};\n\nexport class Observations {\n  directories: Map<string, Set<string>>;\n  files: Map<string, Stats | null>;\n\n  constructor(\n    directories: Map<string, Set<string>>,\n    files: Map<string, Stats | null>,\n  ) {\n    this.directories = directories;\n    this.files = files;\n  }\n\n  paths(): string[] {\n    const out = [];\n    for (const path of this.directories.keys()) {\n      out.push(path);\n    }\n    for (const path of this.files.keys()) {\n      out.push(path);\n    }\n    return out;\n  }\n\n  overlaps({\n    absPath,\n  }: WatchEvent): { overlaps: false } | { overlaps: true; reason: string } {\n    let currentSt: null | Stats;\n    try {\n      currentSt = nodeFs.stat(absPath);\n    } catch (e: any) {\n      if (e.code === \"ENOENT\") {\n        currentSt = null;\n      } else {\n        throw e;\n      }\n    }\n\n    // First, check to see if we observed `absPath` as a file.\n    const observedSt = this.files.get(absPath);\n    if (observedSt !== undefined) {\n      const stMatch = stMatches(observedSt, currentSt);\n      if (!stMatch.matches) {\n        const reason = `modified (${stMatch.reason})`;\n        return { overlaps: true, reason };\n      }\n    }\n\n    // Second, check if we listed the directory this file is in.\n    const parentPath = path.resolve(path.dirname(absPath));\n    const observedParent = this.directories.get(parentPath);\n    if (observedParent !== undefined) {\n      const filename = path.basename(absPath);\n\n      // If the file is gone now, but we observed it in its directory, then\n      // it was deleted.\n      if (currentSt === null && observedParent.has(filename)) {\n        return { overlaps: true, reason: \"deleted\" };\n      }\n\n      // If the file exists now, but we didn't see it when listing its directory,\n      // then it was added.\n      if (currentSt !== null && !observedParent.has(filename)) {\n        return { overlaps: true, reason: \"added\" };\n      }\n    }\n\n    return { overlaps: false };\n  }\n}\n\nfunction setsEqual<T>(a: Set<T>, b: Set<T>): boolean {\n  if (a.size !== b.size) {\n    return false;\n  }\n  for (const elem of a.keys()) {\n    if (!b.has(elem)) {\n      return false;\n    }\n  }\n  return true;\n}\n\nexport function stMatches(\n  a: Stats | null,\n  b: Stats | null,\n): { matches: true } | { matches: false; reason: string } {\n  if (a === null && b === null) {\n    return { matches: true };\n  }\n  if (a !== null && b !== null) {\n    if (a.dev !== b.dev) {\n      return { matches: false, reason: \"device boundary\" };\n    }\n    if (a.isFile() || b.isFile()) {\n      if (!a.isFile() || !b.isFile()) {\n        return { matches: false, reason: \"file type\" };\n      }\n      if (a.ino !== b.ino) {\n        return {\n          matches: false,\n          reason: `file inode (${a.ino} vs. ${b.ino})`,\n        };\n      }\n      if (a.size !== b.size) {\n        return {\n          matches: false,\n          reason: `file size (${a.size} vs. ${b.size})`,\n        };\n      }\n      if (a.mtimeMs !== b.mtimeMs) {\n        return {\n          matches: false,\n          reason: `file mtime (${a.mtimeMs} vs. ${b.mtimeMs})`,\n        };\n      }\n      return { matches: true };\n    }\n    if (a.isDirectory() || b.isDirectory()) {\n      if (!b.isDirectory() || !b.isDirectory()) {\n        return { matches: false, reason: \"dir file type\" };\n      }\n      if (a.ino !== b.ino) {\n        return {\n          matches: false,\n          reason: `dir inode (${a.ino} vs. ${b.ino})`,\n        };\n      }\n      return { matches: true };\n    }\n    // If we have something other than a file or directory, just compare inodes.\n    if (a.ino !== b.ino) {\n      return {\n        matches: false,\n        reason: `special inode (${a.ino} vs. ${b.ino})`,\n      };\n    }\n    return { matches: true };\n  }\n  return { matches: false, reason: \"deleted mismatch\" };\n}\n\n// Sort consistent with unix directory listings.\nexport function consistentPathSort(a: Dirent, b: Dirent) {\n  for (let i = 0; i < Math.min(a.name.length, b.name.length); i++) {\n    if (a.name.charCodeAt(i) !== b.name.charCodeAt(i)) {\n      return a.name.charCodeAt(i) - b.name.charCodeAt(i);\n    }\n  }\n  return a.name.length - b.name.length;\n}\n", "import { format } from \"util\";\nimport { chalkStderr } from \"chalk\";\nimport ProgressBar, {\n  ProgressBarInstance,\n  ProgressBarOptions,\n} from \"../vendor/progress/index.js\";\nimport ora, { Ora } from \"ora\";\n\nlet spinner: Ora | null = null;\n\n// console.error before it started being red by default in Node v20\nfunction logToStderr(...args: unknown[]) {\n  process.stderr.write(`${format(...args)}\\n`);\n}\n\n// Handles clearing spinner so that it doesn't get messed up\nexport function logError(message: string) {\n  spinner?.clear();\n  logToStderr(message);\n}\n\n// Handles clearing spinner so that it doesn't get messed up\nexport function logWarning(...logged: any) {\n  spinner?.clear();\n  logToStderr(...logged);\n}\n\n// Handles clearing spinner so that it doesn't get messed up\nexport function logMessage(...logged: any) {\n  spinner?.clear();\n  logToStderr(...logged);\n}\n\n// For the rare case writing output to stdout. Status and error messages\n// (logMessage, logWarning, etc.) should be written to stderr.\nexport function logOutput(...logged: any) {\n  spinner?.clear();\n  // the one spot where we can console.log\n  // eslint-disable-next-line no-console\n  console.log(...logged);\n}\n\nexport function logVerbose(...logged: any) {\n  if (process.env.CONVEX_VERBOSE) {\n    logMessage(`[verbose] ${new Date().toISOString()}`, ...logged);\n  }\n}\n\n/**\n * Returns a ProgressBar instance, and also handles clearing the spinner if necessary.\n *\n * The caller is responsible for calling `progressBar.tick()` and terminating the `progressBar`\n * when it's done.\n */\nexport function startLogProgress(\n  format: string,\n  progressBarOptions: ProgressBarOptions,\n): ProgressBarInstance {\n  spinner?.clear();\n  return new ProgressBar(format, progressBarOptions);\n}\n\n// Start a spinner.\n// To change its message use changeSpinner.\n// To print warnings/errors while it's running use logError or logWarning.\n// To stop it due to an error use logFailure.\n// To stop it due to success use logFinishedStep.\nexport function showSpinner(message: string) {\n  spinner?.stop();\n  spinner = ora({\n    // Add newline to prevent clobbering when a message\n    // we can't pipe through `logMessage` et al gets printed\n    text: message + \"\\n\",\n    stream: process.stderr,\n    // hideCursor: true doesn't work with `tsx`.\n    // see https://github.com/tapjs/signal-exit/issues/49#issuecomment-1459408082\n    // See CX-6822 for an issue to bring back cursor hiding, probably by upgrading libraries.\n    hideCursor: process.env.CONVEX_RUNNING_LIVE_IN_MONOREPO ? false : true,\n  }).start();\n}\n\nexport function changeSpinner(message: string) {\n  if (spinner) {\n    // Add newline to prevent clobbering\n    spinner.text = message + \"\\n\";\n  } else {\n    logToStderr(message);\n  }\n}\n\nexport function failExistingSpinner() {\n  spinner?.fail();\n  spinner = null;\n}\n\nexport function logFailure(message: string) {\n  if (spinner) {\n    spinner.fail(message);\n    spinner = null;\n  } else {\n    logToStderr(`${chalkStderr.red(`\u2716`)} ${message}`);\n  }\n}\n\n// Stops and removes spinner if one is active\nexport function logFinishedStep(message: string) {\n  if (spinner) {\n    spinner.succeed(message);\n    spinner = null;\n  } else {\n    logToStderr(`${chalkStderr.green(`\u2714`)} ${message}`);\n  }\n}\n\nexport function stopSpinner() {\n  if (spinner) {\n    spinner.stop();\n    spinner = null;\n  }\n}\n\n// Only shows the spinner if the async `fn` takes longer than `delayMs`\nexport async function showSpinnerIfSlow(\n  message: string,\n  delayMs: number,\n  fn: () => Promise<any>,\n) {\n  const timeout = setTimeout(() => {\n    showSpinner(message);\n  }, delayMs);\n  await fn();\n  clearTimeout(timeout);\n}\n", "/// <reference types=\"node\"/>\n/*!\n * node-progress\n * Copyright(c) 2011 TJ Holowaychuk <tj@vision-media.ca>\n * MIT Licensed\n */\n\n/**\n * These are keys in the options object you can pass to the progress bar along with total as seen in the example above.\n */\nexport interface ProgressBarOptions {\n  /**\n   * Total number of ticks to complete.\n   */\n  total: number;\n\n  /**\n   * current completed index\n   */\n  curr?: number | undefined;\n\n  /**\n   * head character defaulting to complete character\n   */\n  head?: string | undefined;\n\n  /**\n   * The displayed width of the progress bar defaulting to total.\n   */\n  width?: number | undefined;\n\n  /**\n   * minimum time between updates in milliseconds defaulting to 16\n   */\n  renderThrottle?: number | undefined;\n\n  /**\n   * The output stream defaulting to stderr.\n   */\n  stream?: NodeJS.WritableStream | undefined;\n\n  /**\n   * Completion character defaulting to \"=\".\n   */\n  complete?: string | undefined;\n\n  /**\n   * Incomplete character defaulting to \"-\".\n   */\n  incomplete?: string | undefined;\n\n  /**\n   * Option to clear the bar on completion defaulting to false.\n   */\n  clear?: boolean | undefined;\n\n  /**\n   * Optional function to call when the progress bar completes.\n   */\n  callback?: Function | undefined;\n}\n\nexport interface ProgressBarInstance {\n  stream: NodeJS.WritableStream;\n  fmt: string;\n  curr: number;\n  total: number;\n  width: number;\n  clear: boolean;\n  chars: {\n    complete: string;\n    incomplete: string;\n    head: string;\n  };\n  renderThrottle: number;\n  lastRender: number;\n  callback: Function;\n  tokens: { [key: string]: any };\n  lastDraw: string;\n  complete: boolean;\n  start?: Date;\n\n  tick(tokens?: any): void;\n  tick(count?: number, tokens?: any): void;\n  render(tokens?: any, force?: boolean): void;\n  update(ratio: number, tokens?: any): void;\n  interrupt(message: string): void;\n  terminate(): void;\n}\n\ninterface ProgressBarConstructor {\n  new (format: string, total: number): ProgressBarInstance;\n  new (format: string, options: ProgressBarOptions): ProgressBarInstance;\n  prototype: ProgressBarInstance;\n}\n\n/**\n * Initialize a `ProgressBar` with the given `fmt` string and `options` or\n * `total`.\n *\n * Options:\n *\n *   - `curr` current completed index\n *   - `total` total number of ticks to complete\n *   - `width` the displayed width of the progress bar defaulting to total\n *   - `stream` the output stream defaulting to stderr\n *   - `head` head character defaulting to complete character\n *   - `complete` completion character defaulting to \"=\"\n *   - `incomplete` incomplete character defaulting to \"-\"\n *   - `renderThrottle` minimum time between updates in milliseconds defaulting to 16\n *   - `callback` optional function to call when the progress bar completes\n *   - `clear` will clear the progress bar upon termination\n *\n * Tokens:\n *\n *   - `:bar` the progress bar itself\n *   - `:current` current tick number\n *   - `:total` total ticks\n *   - `:elapsed` time elapsed in seconds\n *   - `:percent` completion percentage\n *   - `:eta` eta in seconds\n *   - `:rate` rate of ticks per second\n *\n * @param {string} fmt\n * @param {object|number} options or total\n * @api public\n */\nconst ProgressBar: ProgressBarConstructor = function (\n  this: ProgressBarInstance,\n  fmt: string,\n  options: ProgressBarOptions | number,\n) {\n  this.stream = (options as ProgressBarOptions).stream || process.stderr;\n\n  if (typeof options == \"number\") {\n    var total = options;\n    options = {} as ProgressBarOptions;\n    (options as ProgressBarOptions).total = total;\n  } else {\n    options = options || ({} as ProgressBarOptions);\n    if (\"string\" != typeof fmt) throw new Error(\"format required\");\n    if (\"number\" != typeof (options as ProgressBarOptions).total)\n      throw new Error(\"total required\");\n  }\n\n  this.fmt = fmt;\n  this.curr = (options as ProgressBarOptions).curr || 0;\n  this.total = (options as ProgressBarOptions).total;\n  this.width = (options as ProgressBarOptions).width || this.total;\n  this.clear = (options as ProgressBarOptions).clear || false;\n  this.chars = {\n    complete: (options as ProgressBarOptions).complete || \"=\",\n    incomplete: (options as ProgressBarOptions).incomplete || \"-\",\n    head:\n      (options as ProgressBarOptions).head ||\n      (options as ProgressBarOptions).complete ||\n      \"=\",\n  };\n  this.renderThrottle =\n    (options as ProgressBarOptions).renderThrottle !== 0\n      ? (options as ProgressBarOptions).renderThrottle || 16\n      : 0;\n  this.lastRender = -Infinity;\n  this.callback = (options as ProgressBarOptions).callback || function () {};\n  this.tokens = {};\n  this.lastDraw = \"\";\n  this.complete = false;\n} as any;\n\n/**\n * \"tick\" the progress bar with optional `len` and optional `tokens`.\n *\n * @param {number|object} len or tokens\n * @param {object} tokens\n * @api public\n */\nProgressBar.prototype.tick = function (\n  this: ProgressBarInstance,\n  len?: number | any,\n  tokens?: any,\n): void {\n  if (len !== 0) len = len || 1;\n\n  // swap tokens\n  if (\"object\" == typeof len) ((tokens = len), (len = 1));\n  if (tokens) this.tokens = tokens;\n\n  // start time for eta\n  if (0 == this.curr) this.start = new Date();\n\n  this.curr += len;\n\n  // try to render\n  this.render();\n\n  // progress complete\n  if (this.curr >= this.total) {\n    this.render(undefined, true);\n    this.complete = true;\n    this.terminate();\n    this.callback(this);\n    return;\n  }\n};\n\n/**\n * Method to render the progress bar with optional `tokens` to place in the\n * progress bar's `fmt` field.\n *\n * @param {object} tokens\n * @api public\n */\nProgressBar.prototype.render = function (\n  this: ProgressBarInstance,\n  tokens?: any,\n  force?: boolean,\n): void {\n  force = force !== undefined ? force : false;\n  if (tokens) this.tokens = tokens;\n\n  if (!(this.stream as any).isTTY) return;\n\n  var now = Date.now();\n  var delta = now - this.lastRender;\n  if (!force && delta < this.renderThrottle) {\n    return;\n  } else {\n    this.lastRender = now;\n  }\n\n  var ratio = this.curr / this.total;\n  ratio = Math.min(Math.max(ratio, 0), 1);\n\n  var percent = Math.floor(ratio * 100);\n  var incomplete: string, complete: string, completeLength: number;\n  var elapsed = this.start ? new Date().getTime() - this.start.getTime() : 0;\n  var eta = percent == 100 ? 0 : elapsed * (this.total / this.curr - 1);\n  var rate = this.curr / (elapsed / 1000);\n\n  /* populate the bar template with percentages and timestamps */\n  var str = this.fmt\n    .replace(\":current\", this.curr.toString())\n    .replace(\":total\", this.total.toString())\n    .replace(\":elapsed\", isNaN(elapsed) ? \"0.0\" : (elapsed / 1000).toFixed(1))\n    .replace(\n      \":eta\",\n      isNaN(eta) || !isFinite(eta) ? \"0.0\" : (eta / 1000).toFixed(1),\n    )\n    .replace(\":percent\", percent.toFixed(0) + \"%\")\n    .replace(\":rate\", Math.round(rate).toString());\n\n  /* compute the available space (non-zero) for the bar */\n  var availableSpace = Math.max(\n    0,\n    (this.stream as any).columns - str.replace(\":bar\", \"\").length,\n  );\n  if (availableSpace && process.platform === \"win32\") {\n    availableSpace = availableSpace - 1;\n  }\n\n  var width = Math.min(this.width, availableSpace);\n\n  /* TODO: the following assumes the user has one ':bar' token */\n  completeLength = Math.round(width * ratio);\n  complete = Array(Math.max(0, completeLength + 1)).join(this.chars.complete);\n  incomplete = Array(Math.max(0, width - completeLength + 1)).join(\n    this.chars.incomplete,\n  );\n\n  /* add head to the complete string */\n  if (completeLength > 0) complete = complete.slice(0, -1) + this.chars.head;\n\n  /* fill in the actual progress bar */\n  str = str.replace(\":bar\", complete + incomplete);\n\n  /* replace the extra tokens */\n  if (this.tokens)\n    for (var key in this.tokens) str = str.replace(\":\" + key, this.tokens[key]);\n\n  if (this.lastDraw !== str) {\n    (this.stream as any).cursorTo(0);\n    this.stream.write(str);\n    (this.stream as any).clearLine(1);\n    this.lastDraw = str;\n  }\n};\n\n/**\n * \"update\" the progress bar to represent an exact percentage.\n * The ratio (between 0 and 1) specified will be multiplied by `total` and\n * floored, representing the closest available \"tick.\" For example, if a\n * progress bar has a length of 3 and `update(0.5)` is called, the progress\n * will be set to 1.\n *\n * A ratio of 0.5 will attempt to set the progress to halfway.\n *\n * @param {number} ratio The ratio (between 0 and 1 inclusive) to set the\n *   overall completion to.\n * @api public\n */\nProgressBar.prototype.update = function (\n  this: ProgressBarInstance,\n  ratio: number,\n  tokens?: any,\n): void {\n  var goal = Math.floor(ratio * this.total);\n  var delta = goal - this.curr;\n\n  this.tick(delta, tokens);\n};\n\n/**\n * \"interrupt\" the progress bar and write a message above it.\n * @param {string} message The message to write.\n * @api public\n */\nProgressBar.prototype.interrupt = function (\n  this: ProgressBarInstance,\n  message: string,\n): void {\n  // clear the current line\n  (this.stream as any).clearLine();\n  // move the cursor to the start of the line\n  (this.stream as any).cursorTo(0);\n  // write the message text\n  this.stream.write(message);\n  // terminate the line after writing the message\n  this.stream.write(\"\\n\");\n  // re-display the progress bar with its lastDraw\n  this.stream.write(this.lastDraw);\n};\n\n/**\n * Terminates a progress bar.\n *\n * @api public\n */\nProgressBar.prototype.terminate = function (this: ProgressBarInstance): void {\n  if (this.clear) {\n    if ((this.stream as any).clearLine) {\n      (this.stream as any).clearLine();\n      (this.stream as any).cursorTo(0);\n    }\n  } else {\n    this.stream.write(\"\\n\");\n  }\n};\n\nexport default ProgressBar;\n", "import process from 'node:process';\nimport chalk from 'chalk';\nimport cliCursor from 'cli-cursor';\nimport cliSpinners from 'cli-spinners';\nimport logSymbols from 'log-symbols';\nimport stripAnsi from 'strip-ansi';\nimport stringWidth from 'string-width';\nimport isInteractive from 'is-interactive';\nimport isUnicodeSupported from 'is-unicode-supported';\nimport stdinDiscarder from 'stdin-discarder';\n\nclass Ora {\n\t#linesToClear = 0;\n\t#isDiscardingStdin = false;\n\t#lineCount = 0;\n\t#frameIndex = -1;\n\t#lastSpinnerFrameTime = 0;\n\t#lastIndent = 0;\n\t#options;\n\t#spinner;\n\t#stream;\n\t#id;\n\t#initialInterval;\n\t#isEnabled;\n\t#isSilent;\n\t#indent;\n\t#text;\n\t#prefixText;\n\t#suffixText;\n\tcolor;\n\n\tconstructor(options) {\n\t\tif (typeof options === 'string') {\n\t\t\toptions = {\n\t\t\t\ttext: options,\n\t\t\t};\n\t\t}\n\n\t\tthis.#options = {\n\t\t\tcolor: 'cyan',\n\t\t\tstream: process.stderr,\n\t\t\tdiscardStdin: true,\n\t\t\thideCursor: true,\n\t\t\t...options,\n\t\t};\n\n\t\t// Public\n\t\tthis.color = this.#options.color;\n\n\t\t// It's important that these use the public setters.\n\t\tthis.spinner = this.#options.spinner;\n\n\t\tthis.#initialInterval = this.#options.interval;\n\t\tthis.#stream = this.#options.stream;\n\t\tthis.#isEnabled = typeof this.#options.isEnabled === 'boolean' ? this.#options.isEnabled : isInteractive({stream: this.#stream});\n\t\tthis.#isSilent = typeof this.#options.isSilent === 'boolean' ? this.#options.isSilent : false;\n\n\t\t// Set *after* `this.#stream`.\n\t\t// It's important that these use the public setters.\n\t\tthis.text = this.#options.text;\n\t\tthis.prefixText = this.#options.prefixText;\n\t\tthis.suffixText = this.#options.suffixText;\n\t\tthis.indent = this.#options.indent;\n\n\t\tif (process.env.NODE_ENV === 'test') {\n\t\t\tthis._stream = this.#stream;\n\t\t\tthis._isEnabled = this.#isEnabled;\n\n\t\t\tObject.defineProperty(this, '_linesToClear', {\n\t\t\t\tget() {\n\t\t\t\t\treturn this.#linesToClear;\n\t\t\t\t},\n\t\t\t\tset(newValue) {\n\t\t\t\t\tthis.#linesToClear = newValue;\n\t\t\t\t},\n\t\t\t});\n\n\t\t\tObject.defineProperty(this, '_frameIndex', {\n\t\t\t\tget() {\n\t\t\t\t\treturn this.#frameIndex;\n\t\t\t\t},\n\t\t\t});\n\n\t\t\tObject.defineProperty(this, '_lineCount', {\n\t\t\t\tget() {\n\t\t\t\t\treturn this.#lineCount;\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\t}\n\n\tget indent() {\n\t\treturn this.#indent;\n\t}\n\n\tset indent(indent = 0) {\n\t\tif (!(indent >= 0 && Number.isInteger(indent))) {\n\t\t\tthrow new Error('The `indent` option must be an integer from 0 and up');\n\t\t}\n\n\t\tthis.#indent = indent;\n\t\tthis.#updateLineCount();\n\t}\n\n\tget interval() {\n\t\treturn this.#initialInterval ?? this.#spinner.interval ?? 100;\n\t}\n\n\tget spinner() {\n\t\treturn this.#spinner;\n\t}\n\n\tset spinner(spinner) {\n\t\tthis.#frameIndex = -1;\n\t\tthis.#initialInterval = undefined;\n\n\t\tif (typeof spinner === 'object') {\n\t\t\tif (!Array.isArray(spinner.frames) || spinner.frames.length === 0 || spinner.frames.some(frame => typeof frame !== 'string')) {\n\t\t\t\tthrow new Error('The given spinner must have a non-empty `frames` array of strings');\n\t\t\t}\n\n\t\t\tif (spinner.interval !== undefined && !(Number.isInteger(spinner.interval) && spinner.interval > 0)) {\n\t\t\t\tthrow new Error('`spinner.interval` must be a positive integer if provided');\n\t\t\t}\n\n\t\t\tthis.#spinner = spinner;\n\t\t} else if (!isUnicodeSupported()) {\n\t\t\tthis.#spinner = cliSpinners.line;\n\t\t} else if (spinner === undefined) {\n\t\t\t// Set default spinner\n\t\t\tthis.#spinner = cliSpinners.dots;\n\t\t} else if (spinner !== 'default' && cliSpinners[spinner]) {\n\t\t\tthis.#spinner = cliSpinners[spinner];\n\t\t} else {\n\t\t\tthrow new Error(`There is no built-in spinner named '${spinner}'. See https://github.com/sindresorhus/cli-spinners/blob/main/spinners.json for a full list.`);\n\t\t}\n\t}\n\n\tget text() {\n\t\treturn this.#text;\n\t}\n\n\tset text(value = '') {\n\t\tthis.#text = value;\n\t\tthis.#updateLineCount();\n\t}\n\n\tget prefixText() {\n\t\treturn this.#prefixText;\n\t}\n\n\tset prefixText(value = '') {\n\t\tthis.#prefixText = value;\n\t\tthis.#updateLineCount();\n\t}\n\n\tget suffixText() {\n\t\treturn this.#suffixText;\n\t}\n\n\tset suffixText(value = '') {\n\t\tthis.#suffixText = value;\n\t\tthis.#updateLineCount();\n\t}\n\n\tget isSpinning() {\n\t\treturn this.#id !== undefined;\n\t}\n\n\t#formatAffix(value, separator, placeBefore = false) {\n\t\tconst resolved = typeof value === 'function' ? value() : value;\n\t\tif (typeof resolved === 'string' && resolved !== '') {\n\t\t\treturn placeBefore ? (separator + resolved) : (resolved + separator);\n\t\t}\n\n\t\treturn '';\n\t}\n\n\t#getFullPrefixText(prefixText = this.#prefixText, postfix = ' ') {\n\t\treturn this.#formatAffix(prefixText, postfix, false);\n\t}\n\n\t#getFullSuffixText(suffixText = this.#suffixText, prefix = ' ') {\n\t\treturn this.#formatAffix(suffixText, prefix, true);\n\t}\n\n\t#computeLineCountFrom(text, columns) {\n\t\tlet count = 0;\n\t\tfor (const line of stripAnsi(text).split('\\n')) {\n\t\t\tcount += Math.max(1, Math.ceil(stringWidth(line) / columns));\n\t\t}\n\n\t\treturn count;\n\t}\n\n\t#updateLineCount() {\n\t\tconst columns = this.#stream.columns ?? 80;\n\n\t\t// Simple side-effect free approximation (do not call functions)\n\t\tconst prefixText = typeof this.#prefixText === 'function' ? '' : this.#prefixText;\n\t\tconst suffixText = typeof this.#suffixText === 'function' ? '' : this.#suffixText;\n\t\tconst fullPrefixText = (typeof prefixText === 'string' && prefixText !== '') ? prefixText + ' ' : '';\n\t\tconst fullSuffixText = (typeof suffixText === 'string' && suffixText !== '') ? ' ' + suffixText : '';\n\t\tconst spinnerChar = '-';\n\t\tconst fullText = ' '.repeat(this.#indent) + fullPrefixText + spinnerChar + (typeof this.#text === 'string' ? ' ' + this.#text : '') + fullSuffixText;\n\n\t\tthis.#lineCount = this.#computeLineCountFrom(fullText, columns);\n\t}\n\n\tget isEnabled() {\n\t\treturn this.#isEnabled && !this.#isSilent;\n\t}\n\n\tset isEnabled(value) {\n\t\tif (typeof value !== 'boolean') {\n\t\t\tthrow new TypeError('The `isEnabled` option must be a boolean');\n\t\t}\n\n\t\tthis.#isEnabled = value;\n\t}\n\n\tget isSilent() {\n\t\treturn this.#isSilent;\n\t}\n\n\tset isSilent(value) {\n\t\tif (typeof value !== 'boolean') {\n\t\t\tthrow new TypeError('The `isSilent` option must be a boolean');\n\t\t}\n\n\t\tthis.#isSilent = value;\n\t}\n\n\tframe() {\n\t\t// Ensure we only update the spinner frame at the wanted interval,\n\t\t// even if the render method is called more often.\n\t\tconst now = Date.now();\n\t\tif (this.#frameIndex === -1 || now - this.#lastSpinnerFrameTime >= this.interval) {\n\t\t\tthis.#frameIndex = ++this.#frameIndex % this.#spinner.frames.length;\n\t\t\tthis.#lastSpinnerFrameTime = now;\n\t\t}\n\n\t\tconst {frames} = this.#spinner;\n\t\tlet frame = frames[this.#frameIndex];\n\n\t\tif (this.color) {\n\t\t\tframe = chalk[this.color](frame);\n\t\t}\n\n\t\tconst fullPrefixText = this.#getFullPrefixText(this.#prefixText, ' ');\n\t\tconst fullText = typeof this.text === 'string' ? ' ' + this.text : '';\n\t\tconst fullSuffixText = this.#getFullSuffixText(this.#suffixText, ' ');\n\n\t\treturn fullPrefixText + frame + fullText + fullSuffixText;\n\t}\n\n\tclear() {\n\t\tif (!this.#isEnabled || !this.#stream.isTTY) {\n\t\t\treturn this;\n\t\t}\n\n\t\tthis.#stream.cursorTo(0);\n\n\t\tfor (let index = 0; index < this.#linesToClear; index++) {\n\t\t\tif (index > 0) {\n\t\t\t\tthis.#stream.moveCursor(0, -1);\n\t\t\t}\n\n\t\t\tthis.#stream.clearLine(1);\n\t\t}\n\n\t\tif (this.#indent || this.#lastIndent !== this.#indent) {\n\t\t\tthis.#stream.cursorTo(this.#indent);\n\t\t}\n\n\t\tthis.#lastIndent = this.#indent;\n\t\tthis.#linesToClear = 0;\n\n\t\treturn this;\n\t}\n\n\trender() {\n\t\tif (!this.#isEnabled || this.#isSilent) {\n\t\t\treturn this;\n\t\t}\n\n\t\tthis.clear();\n\n\t\tlet frameContent = this.frame();\n\t\tconst columns = this.#stream.columns ?? 80;\n\t\tconst actualLineCount = this.#computeLineCountFrom(frameContent, columns);\n\n\t\t// If content would exceed viewport height, truncate it to prevent garbage\n\t\tconst consoleHeight = this.#stream.rows;\n\t\tif (consoleHeight && consoleHeight > 1 && actualLineCount > consoleHeight) {\n\t\t\tconst lines = frameContent.split('\\n');\n\t\t\tconst maxLines = consoleHeight - 1; // Reserve one line for truncation message\n\t\t\tframeContent = [...lines.slice(0, maxLines), '... (content truncated to fit terminal)'].join('\\n');\n\t\t}\n\n\t\tthis.#stream.write(frameContent);\n\t\tthis.#linesToClear = this.#computeLineCountFrom(frameContent, columns);\n\n\t\treturn this;\n\t}\n\n\tstart(text) {\n\t\tif (text) {\n\t\t\tthis.text = text;\n\t\t}\n\n\t\tif (this.#isSilent) {\n\t\t\treturn this;\n\t\t}\n\n\t\tif (!this.#isEnabled) {\n\t\t\tconst line = ' '.repeat(this.#indent) + this.#getFullPrefixText(this.#prefixText, ' ') + (this.text ? `- ${this.text}` : '') + this.#getFullSuffixText(this.#suffixText, ' ');\n\n\t\t\tif (line.trim() !== '') {\n\t\t\t\tthis.#stream.write(line + '\\n');\n\t\t\t}\n\n\t\t\treturn this;\n\t\t}\n\n\t\tif (this.isSpinning) {\n\t\t\treturn this;\n\t\t}\n\n\t\tif (this.#options.hideCursor) {\n\t\t\tcliCursor.hide(this.#stream);\n\t\t}\n\n\t\tif (this.#options.discardStdin && process.stdin.isTTY) {\n\t\t\tthis.#isDiscardingStdin = true;\n\t\t\tstdinDiscarder.start();\n\t\t}\n\n\t\tthis.render();\n\t\tthis.#id = setInterval(this.render.bind(this), this.interval);\n\n\t\treturn this;\n\t}\n\n\tstop() {\n\t\tclearInterval(this.#id);\n\t\tthis.#id = undefined;\n\t\tthis.#frameIndex = 0;\n\n\t\tif (this.#isEnabled) {\n\t\t\tthis.clear();\n\t\t\tif (this.#options.hideCursor) {\n\t\t\t\tcliCursor.show(this.#stream);\n\t\t\t}\n\t\t}\n\n\t\tif (this.#options.discardStdin && process.stdin.isTTY && this.#isDiscardingStdin) {\n\t\t\tstdinDiscarder.stop();\n\t\t\tthis.#isDiscardingStdin = false;\n\t\t}\n\n\t\treturn this;\n\t}\n\n\tsucceed(text) {\n\t\treturn this.stopAndPersist({symbol: logSymbols.success, text});\n\t}\n\n\tfail(text) {\n\t\treturn this.stopAndPersist({symbol: logSymbols.error, text});\n\t}\n\n\twarn(text) {\n\t\treturn this.stopAndPersist({symbol: logSymbols.warning, text});\n\t}\n\n\tinfo(text) {\n\t\treturn this.stopAndPersist({symbol: logSymbols.info, text});\n\t}\n\n\tstopAndPersist(options = {}) {\n\t\tif (this.#isSilent) {\n\t\t\treturn this;\n\t\t}\n\n\t\tconst prefixText = options.prefixText ?? this.#prefixText;\n\t\tconst fullPrefixText = this.#getFullPrefixText(prefixText, ' ');\n\n\t\tconst symbolText = options.symbol ?? ' ';\n\n\t\tconst text = options.text ?? this.text;\n\t\tconst separatorText = symbolText ? ' ' : '';\n\t\tconst fullText = (typeof text === 'string') ? separatorText + text : '';\n\n\t\tconst suffixText = options.suffixText ?? this.#suffixText;\n\t\tconst fullSuffixText = this.#getFullSuffixText(suffixText, ' ');\n\n\t\tconst textToWrite = fullPrefixText + symbolText + fullText + fullSuffixText + '\\n';\n\n\t\tthis.stop();\n\t\tthis.#stream.write(textToWrite);\n\n\t\treturn this;\n\t}\n}\n\nexport default function ora(options) {\n\treturn new Ora(options);\n}\n\nexport async function oraPromise(action, options) {\n\tconst actionIsFunction = typeof action === 'function';\n\tconst actionIsPromise = typeof action.then === 'function';\n\n\tif (!actionIsFunction && !actionIsPromise) {\n\t\tthrow new TypeError('Parameter `action` must be a Function or a Promise');\n\t}\n\n\tconst {successText, failText} = typeof options === 'object'\n\t\t? options\n\t\t: {successText: undefined, failText: undefined};\n\n\tconst spinner = ora(options).start();\n\n\ttry {\n\t\tconst promise = actionIsFunction ? action(spinner) : action;\n\t\tconst result = await promise;\n\n\t\tspinner.succeed(successText === undefined\n\t\t\t? undefined\n\t\t\t: (typeof successText === 'string' ? successText : successText(result)));\n\n\t\treturn result;\n\t} catch (error) {\n\t\tspinner.fail(failText === undefined\n\t\t\t? undefined\n\t\t\t: (typeof failText === 'string' ? failText : failText(error)));\n\n\t\tthrow error;\n\t}\n}\n\nexport {default as spinners} from 'cli-spinners';\n", "import process from 'node:process';\nimport restoreCursor from 'restore-cursor';\n\nlet isHidden = false;\n\nconst cliCursor = {};\n\ncliCursor.show = (writableStream = process.stderr) => {\n\tif (!writableStream.isTTY) {\n\t\treturn;\n\t}\n\n\tisHidden = false;\n\twritableStream.write('\\u001B[?25h');\n};\n\ncliCursor.hide = (writableStream = process.stderr) => {\n\tif (!writableStream.isTTY) {\n\t\treturn;\n\t}\n\n\trestoreCursor();\n\tisHidden = true;\n\twritableStream.write('\\u001B[?25l');\n};\n\ncliCursor.toggle = (force, writableStream) => {\n\tif (force !== undefined) {\n\t\tisHidden = force;\n\t}\n\n\tif (isHidden) {\n\t\tcliCursor.show(writableStream);\n\t} else {\n\t\tcliCursor.hide(writableStream);\n\t}\n};\n\nexport default cliCursor;\n", "import process from 'node:process';\nimport onetime from 'onetime';\nimport {onExit} from 'signal-exit';\n\nconst terminal = process.stderr.isTTY\n\t? process.stderr\n\t: (process.stdout.isTTY ? process.stdout : undefined);\n\nconst restoreCursor = terminal ? onetime(() => {\n\tonExit(() => {\n\t\tterminal.write('\\u001B[?25h');\n\t}, {alwaysLast: true});\n}) : () => {};\n\nexport default restoreCursor;\n", "const copyProperty = (to, from, property, ignoreNonConfigurable) => {\n\t// `Function#length` should reflect the parameters of `to` not `from` since we keep its body.\n\t// `Function#prototype` is non-writable and non-configurable so can never be modified.\n\tif (property === 'length' || property === 'prototype') {\n\t\treturn;\n\t}\n\n\t// `Function#arguments` and `Function#caller` should not be copied. They were reported to be present in `Reflect.ownKeys` for some devices in React Native (#41), so we explicitly ignore them here.\n\tif (property === 'arguments' || property === 'caller') {\n\t\treturn;\n\t}\n\n\tconst toDescriptor = Object.getOwnPropertyDescriptor(to, property);\n\tconst fromDescriptor = Object.getOwnPropertyDescriptor(from, property);\n\n\tif (!canCopyProperty(toDescriptor, fromDescriptor) && ignoreNonConfigurable) {\n\t\treturn;\n\t}\n\n\tObject.defineProperty(to, property, fromDescriptor);\n};\n\n// `Object.defineProperty()` throws if the property exists, is not configurable and either:\n// - one its descriptors is changed\n// - it is non-writable and its value is changed\nconst canCopyProperty = function (toDescriptor, fromDescriptor) {\n\treturn toDescriptor === undefined || toDescriptor.configurable || (\n\t\ttoDescriptor.writable === fromDescriptor.writable\n\t\t&& toDescriptor.enumerable === fromDescriptor.enumerable\n\t\t&& toDescriptor.configurable === fromDescriptor.configurable\n\t\t&& (toDescriptor.writable || toDescriptor.value === fromDescriptor.value)\n\t);\n};\n\nconst changePrototype = (to, from) => {\n\tconst fromPrototype = Object.getPrototypeOf(from);\n\tif (fromPrototype === Object.getPrototypeOf(to)) {\n\t\treturn;\n\t}\n\n\tObject.setPrototypeOf(to, fromPrototype);\n};\n\nconst wrappedToString = (withName, fromBody) => `/* Wrapped ${withName}*/\\n${fromBody}`;\n\nconst toStringDescriptor = Object.getOwnPropertyDescriptor(Function.prototype, 'toString');\nconst toStringName = Object.getOwnPropertyDescriptor(Function.prototype.toString, 'name');\n\n// We call `from.toString()` early (not lazily) to ensure `from` can be garbage collected.\n// We use `bind()` instead of a closure for the same reason.\n// Calling `from.toString()` early also allows caching it in case `to.toString()` is called several times.\nconst changeToString = (to, from, name) => {\n\tconst withName = name === '' ? '' : `with ${name.trim()}() `;\n\tconst newToString = wrappedToString.bind(null, withName, from.toString());\n\t// Ensure `to.toString.toString` is non-enumerable and has the same `same`\n\tObject.defineProperty(newToString, 'name', toStringName);\n\tconst {writable, enumerable, configurable} = toStringDescriptor; // We destructue to avoid a potential `get` descriptor.\n\tObject.defineProperty(to, 'toString', {value: newToString, writable, enumerable, configurable});\n};\n\nexport default function mimicFunction(to, from, {ignoreNonConfigurable = false} = {}) {\n\tconst {name} = to;\n\n\tfor (const property of Reflect.ownKeys(from)) {\n\t\tcopyProperty(to, from, property, ignoreNonConfigurable);\n\t}\n\n\tchangePrototype(to, from);\n\tchangeToString(to, from, name);\n\n\treturn to;\n}\n", "import mimicFunction from 'mimic-function';\n\nconst calledFunctions = new WeakMap();\n\nconst onetime = (function_, options = {}) => {\n\tif (typeof function_ !== 'function') {\n\t\tthrow new TypeError('Expected a function');\n\t}\n\n\tlet returnValue;\n\tlet callCount = 0;\n\tconst functionName = function_.displayName || function_.name || '<anonymous>';\n\n\tconst onetime = function (...arguments_) {\n\t\tcalledFunctions.set(onetime, ++callCount);\n\n\t\tif (callCount === 1) {\n\t\t\treturnValue = function_.apply(this, arguments_);\n\t\t\tfunction_ = undefined;\n\t\t} else if (options.throw === true) {\n\t\t\tthrow new Error(`Function \\`${functionName}\\` can only be called once`);\n\t\t}\n\n\t\treturn returnValue;\n\t};\n\n\tmimicFunction(onetime, function_);\n\tcalledFunctions.set(onetime, callCount);\n\n\treturn onetime;\n};\n\nonetime.callCount = function_ => {\n\tif (!calledFunctions.has(function_)) {\n\t\tthrow new Error(`The given function \\`${function_.name}\\` is not wrapped by the \\`onetime\\` package`);\n\t}\n\n\treturn calledFunctions.get(function_);\n};\n\nexport default onetime;\n", "/**\n * This is not the set of all possible signals.\n *\n * It IS, however, the set of all signals that trigger\n * an exit on either Linux or BSD systems.  Linux is a\n * superset of the signal names supported on BSD, and\n * the unknown signals just fail to register, so we can\n * catch that easily enough.\n *\n * Windows signals are a different set, since there are\n * signals that terminate Windows processes, but don't\n * terminate (or don't even exist) on Posix systems.\n *\n * Don't bother with SIGKILL.  It's uncatchable, which\n * means that we can't fire any callbacks anyway.\n *\n * If a user does happen to register a handler on a non-\n * fatal signal like SIGWINCH or something, and then\n * exit, it'll end up firing `process.emit('exit')`, so\n * the handler will be fired anyway.\n *\n * SIGBUS, SIGFPE, SIGSEGV and SIGILL, when not raised\n * artificially, inherently leave the process in a\n * state from which it is not safe to try and enter JS\n * listeners.\n */\nexport const signals: NodeJS.Signals[] = []\nsignals.push('SIGHUP', 'SIGINT', 'SIGTERM')\n\nif (process.platform !== 'win32') {\n  signals.push(\n    'SIGALRM',\n    'SIGABRT',\n    'SIGVTALRM',\n    'SIGXCPU',\n    'SIGXFSZ',\n    'SIGUSR2',\n    'SIGTRAP',\n    'SIGSYS',\n    'SIGQUIT',\n    'SIGIOT'\n    // should detect profiler and enable/disable accordingly.\n    // see #21\n    // 'SIGPROF'\n  )\n}\n\nif (process.platform === 'linux') {\n  signals.push('SIGIO', 'SIGPOLL', 'SIGPWR', 'SIGSTKFLT')\n}\n", "// Note: since nyc uses this module to output coverage, any lines\n// that are in the direct sync flow of nyc's outputCoverage are\n// ignored, since we can never get coverage for them.\n// grab a reference to node's real process object right away\nimport { signals } from './signals.js'\nexport { signals }\n\n// just a loosened process type so we can do some evil things\ntype ProcessRE = NodeJS.Process & {\n  reallyExit: (code?: number | undefined | null) => any\n  emit: (ev: string, ...a: any[]) => any\n}\n\nconst processOk = (process: any): process is ProcessRE =>\n  !!process &&\n  typeof process === 'object' &&\n  typeof process.removeListener === 'function' &&\n  typeof process.emit === 'function' &&\n  typeof process.reallyExit === 'function' &&\n  typeof process.listeners === 'function' &&\n  typeof process.kill === 'function' &&\n  typeof process.pid === 'number' &&\n  typeof process.on === 'function'\n\nconst kExitEmitter = Symbol.for('signal-exit emitter')\nconst global: typeof globalThis & { [kExitEmitter]?: Emitter } = globalThis\nconst ObjectDefineProperty = Object.defineProperty.bind(Object)\n\n/**\n * A function that takes an exit code and signal as arguments\n *\n * In the case of signal exits *only*, a return value of true\n * will indicate that the signal is being handled, and we should\n * not synthetically exit with the signal we received. Regardless\n * of the handler return value, the handler is unloaded when an\n * otherwise fatal signal is received, so you get exactly 1 shot\n * at it, unless you add another onExit handler at that point.\n *\n * In the case of numeric code exits, we may already have committed\n * to exiting the process, for example via a fatal exception or\n * unhandled promise rejection, so it is impossible to stop safely.\n */\nexport type Handler = (\n  code: number | null | undefined,\n  signal: NodeJS.Signals | null\n) => true | void\ntype ExitEvent = 'afterExit' | 'exit'\ntype Emitted = { [k in ExitEvent]: boolean }\ntype Listeners = { [k in ExitEvent]: Handler[] }\n\n// teeny special purpose ee\nclass Emitter {\n  emitted: Emitted = {\n    afterExit: false,\n    exit: false,\n  }\n\n  listeners: Listeners = {\n    afterExit: [],\n    exit: [],\n  }\n\n  count: number = 0\n  id: number = Math.random()\n\n  constructor() {\n    if (global[kExitEmitter]) {\n      return global[kExitEmitter]\n    }\n    ObjectDefineProperty(global, kExitEmitter, {\n      value: this,\n      writable: false,\n      enumerable: false,\n      configurable: false,\n    })\n  }\n\n  on(ev: ExitEvent, fn: Handler) {\n    this.listeners[ev].push(fn)\n  }\n\n  removeListener(ev: ExitEvent, fn: Handler) {\n    const list = this.listeners[ev]\n    const i = list.indexOf(fn)\n    /* c8 ignore start */\n    if (i === -1) {\n      return\n    }\n    /* c8 ignore stop */\n    if (i === 0 && list.length === 1) {\n      list.length = 0\n    } else {\n      list.splice(i, 1)\n    }\n  }\n\n  emit(\n    ev: ExitEvent,\n    code: number | null | undefined,\n    signal: NodeJS.Signals | null\n  ): boolean {\n    if (this.emitted[ev]) {\n      return false\n    }\n    this.emitted[ev] = true\n    let ret: boolean = false\n    for (const fn of this.listeners[ev]) {\n      ret = fn(code, signal) === true || ret\n    }\n    if (ev === 'exit') {\n      ret = this.emit('afterExit', code, signal) || ret\n    }\n    return ret\n  }\n}\n\nabstract class SignalExitBase {\n  abstract onExit(cb: Handler, opts?: { alwaysLast?: boolean }): () => void\n  abstract load(): void\n  abstract unload(): void\n}\n\nconst signalExitWrap = <T extends SignalExitBase>(handler: T) => {\n  return {\n    onExit(cb: Handler, opts?: { alwaysLast?: boolean }) {\n      return handler.onExit(cb, opts)\n    },\n    load() {\n      return handler.load()\n    },\n    unload() {\n      return handler.unload()\n    },\n  }\n}\n\nclass SignalExitFallback extends SignalExitBase {\n  onExit() {\n    return () => {}\n  }\n  load() {}\n  unload() {}\n}\n\nclass SignalExit extends SignalExitBase {\n  // \"SIGHUP\" throws an `ENOSYS` error on Windows,\n  // so use a supported signal instead\n  /* c8 ignore start */\n  #hupSig = process.platform === 'win32' ? 'SIGINT' : 'SIGHUP'\n  /* c8 ignore stop */\n  #emitter = new Emitter()\n  #process: ProcessRE\n  #originalProcessEmit: ProcessRE['emit']\n  #originalProcessReallyExit: ProcessRE['reallyExit']\n\n  #sigListeners: { [k in NodeJS.Signals]?: () => void } = {}\n  #loaded: boolean = false\n\n  constructor(process: ProcessRE) {\n    super()\n    this.#process = process\n    // { <signal>: <listener fn>, ... }\n    this.#sigListeners = {}\n    for (const sig of signals) {\n      this.#sigListeners[sig] = () => {\n        // If there are no other listeners, an exit is coming!\n        // Simplest way: remove us and then re-send the signal.\n        // We know that this will kill the process, so we can\n        // safely emit now.\n        const listeners = this.#process.listeners(sig)\n        let { count } = this.#emitter\n        // This is a workaround for the fact that signal-exit v3 and signal\n        // exit v4 are not aware of each other, and each will attempt to let\n        // the other handle it, so neither of them do. To correct this, we\n        // detect if we're the only handler *except* for previous versions\n        // of signal-exit, and increment by the count of listeners it has\n        // created.\n        /* c8 ignore start */\n        const p = process as unknown as {\n          __signal_exit_emitter__?: { count: number }\n        }\n        if (\n          typeof p.__signal_exit_emitter__ === 'object' &&\n          typeof p.__signal_exit_emitter__.count === 'number'\n        ) {\n          count += p.__signal_exit_emitter__.count\n        }\n        /* c8 ignore stop */\n        if (listeners.length === count) {\n          this.unload()\n          const ret = this.#emitter.emit('exit', null, sig)\n          /* c8 ignore start */\n          const s = sig === 'SIGHUP' ? this.#hupSig : sig\n          if (!ret) process.kill(process.pid, s)\n          /* c8 ignore stop */\n        }\n      }\n    }\n\n    this.#originalProcessReallyExit = process.reallyExit\n    this.#originalProcessEmit = process.emit\n  }\n\n  onExit(cb: Handler, opts?: { alwaysLast?: boolean }) {\n    /* c8 ignore start */\n    if (!processOk(this.#process)) {\n      return () => {}\n    }\n    /* c8 ignore stop */\n\n    if (this.#loaded === false) {\n      this.load()\n    }\n\n    const ev = opts?.alwaysLast ? 'afterExit' : 'exit'\n    this.#emitter.on(ev, cb)\n    return () => {\n      this.#emitter.removeListener(ev, cb)\n      if (\n        this.#emitter.listeners['exit'].length === 0 &&\n        this.#emitter.listeners['afterExit'].length === 0\n      ) {\n        this.unload()\n      }\n    }\n  }\n\n  load() {\n    if (this.#loaded) {\n      return\n    }\n    this.#loaded = true\n\n    // This is the number of onSignalExit's that are in play.\n    // It's important so that we can count the correct number of\n    // listeners on signals, and don't wait for the other one to\n    // handle it instead of us.\n    this.#emitter.count += 1\n\n    for (const sig of signals) {\n      try {\n        const fn = this.#sigListeners[sig]\n        if (fn) this.#process.on(sig, fn)\n      } catch (_) {}\n    }\n\n    this.#process.emit = (ev: string, ...a: any[]) => {\n      return this.#processEmit(ev, ...a)\n    }\n    this.#process.reallyExit = (code?: number | null | undefined) => {\n      return this.#processReallyExit(code)\n    }\n  }\n\n  unload() {\n    if (!this.#loaded) {\n      return\n    }\n    this.#loaded = false\n\n    signals.forEach(sig => {\n      const listener = this.#sigListeners[sig]\n      /* c8 ignore start */\n      if (!listener) {\n        throw new Error('Listener not defined for signal: ' + sig)\n      }\n      /* c8 ignore stop */\n      try {\n        this.#process.removeListener(sig, listener)\n        /* c8 ignore start */\n      } catch (_) {}\n      /* c8 ignore stop */\n    })\n    this.#process.emit = this.#originalProcessEmit\n    this.#process.reallyExit = this.#originalProcessReallyExit\n    this.#emitter.count -= 1\n  }\n\n  #processReallyExit(code?: number | null | undefined) {\n    /* c8 ignore start */\n    if (!processOk(this.#process)) {\n      return 0\n    }\n    this.#process.exitCode = code || 0\n    /* c8 ignore stop */\n\n    this.#emitter.emit('exit', this.#process.exitCode, null)\n    return this.#originalProcessReallyExit.call(\n      this.#process,\n      this.#process.exitCode\n    )\n  }\n\n  #processEmit(ev: string, ...args: any[]): any {\n    const og = this.#originalProcessEmit\n    if (ev === 'exit' && processOk(this.#process)) {\n      if (typeof args[0] === 'number') {\n        this.#process.exitCode = args[0]\n        /* c8 ignore start */\n      }\n      /* c8 ignore start */\n      const ret = og.call(this.#process, ev, ...args)\n      /* c8 ignore start */\n      this.#emitter.emit('exit', this.#process.exitCode, null)\n      /* c8 ignore stop */\n      return ret\n    } else {\n      return og.call(this.#process, ev, ...args)\n    }\n  }\n}\n\nconst process = globalThis.process\n// wrap so that we call the method on the actual handler, without\n// exporting it directly.\nexport const {\n  /**\n   * Called when the process is exiting, whether via signal, explicit\n   * exit, or running out of stuff to do.\n   *\n   * If the global process object is not suitable for instrumentation,\n   * then this will be a no-op.\n   *\n   * Returns a function that may be used to unload signal-exit.\n   */\n  onExit,\n\n  /**\n   * Load the listeners.  Likely you never need to call this, unless\n   * doing a rather deep integration with signal-exit functionality.\n   * Mostly exposed for the benefit of testing.\n   *\n   * @internal\n   */\n  load,\n\n  /**\n   * Unload the listeners.  Likely you never need to call this, unless\n   * doing a rather deep integration with signal-exit functionality.\n   * Mostly exposed for the benefit of testing.\n   *\n   * @internal\n   */\n  unload,\n} = signalExitWrap(\n  processOk(process) ? new SignalExit(process) : new SignalExitFallback()\n)\n", "{\n\t\"dots\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\"\u280B\",\n\t\t\t\"\u2819\",\n\t\t\t\"\u2839\",\n\t\t\t\"\u2838\",\n\t\t\t\"\u283C\",\n\t\t\t\"\u2834\",\n\t\t\t\"\u2826\",\n\t\t\t\"\u2827\",\n\t\t\t\"\u2807\",\n\t\t\t\"\u280F\"\n\t\t]\n\t},\n\t\"dots2\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\"\u28FE\",\n\t\t\t\"\u28FD\",\n\t\t\t\"\u28FB\",\n\t\t\t\"\u28BF\",\n\t\t\t\"\u287F\",\n\t\t\t\"\u28DF\",\n\t\t\t\"\u28EF\",\n\t\t\t\"\u28F7\"\n\t\t]\n\t},\n\t\"dots3\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\"\u280B\",\n\t\t\t\"\u2819\",\n\t\t\t\"\u281A\",\n\t\t\t\"\u281E\",\n\t\t\t\"\u2816\",\n\t\t\t\"\u2826\",\n\t\t\t\"\u2834\",\n\t\t\t\"\u2832\",\n\t\t\t\"\u2833\",\n\t\t\t\"\u2813\"\n\t\t]\n\t},\n\t\"dots4\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\"\u2804\",\n\t\t\t\"\u2806\",\n\t\t\t\"\u2807\",\n\t\t\t\"\u280B\",\n\t\t\t\"\u2819\",\n\t\t\t\"\u2838\",\n\t\t\t\"\u2830\",\n\t\t\t\"\u2820\",\n\t\t\t\"\u2830\",\n\t\t\t\"\u2838\",\n\t\t\t\"\u2819\",\n\t\t\t\"\u280B\",\n\t\t\t\"\u2807\",\n\t\t\t\"\u2806\"\n\t\t]\n\t},\n\t\"dots5\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\"\u280B\",\n\t\t\t\"\u2819\",\n\t\t\t\"\u281A\",\n\t\t\t\"\u2812\",\n\t\t\t\"\u2802\",\n\t\t\t\"\u2802\",\n\t\t\t\"\u2812\",\n\t\t\t\"\u2832\",\n\t\t\t\"\u2834\",\n\t\t\t\"\u2826\",\n\t\t\t\"\u2816\",\n\t\t\t\"\u2812\",\n\t\t\t\"\u2810\",\n\t\t\t\"\u2810\",\n\t\t\t\"\u2812\",\n\t\t\t\"\u2813\",\n\t\t\t\"\u280B\"\n\t\t]\n\t},\n\t\"dots6\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\"\u2801\",\n\t\t\t\"\u2809\",\n\t\t\t\"\u2819\",\n\t\t\t\"\u281A\",\n\t\t\t\"\u2812\",\n\t\t\t\"\u2802\",\n\t\t\t\"\u2802\",\n\t\t\t\"\u2812\",\n\t\t\t\"\u2832\",\n\t\t\t\"\u2834\",\n\t\t\t\"\u2824\",\n\t\t\t\"\u2804\",\n\t\t\t\"\u2804\",\n\t\t\t\"\u2824\",\n\t\t\t\"\u2834\",\n\t\t\t\"\u2832\",\n\t\t\t\"\u2812\",\n\t\t\t\"\u2802\",\n\t\t\t\"\u2802\",\n\t\t\t\"\u2812\",\n\t\t\t\"\u281A\",\n\t\t\t\"\u2819\",\n\t\t\t\"\u2809\",\n\t\t\t\"\u2801\"\n\t\t]\n\t},\n\t\"dots7\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\"\u2808\",\n\t\t\t\"\u2809\",\n\t\t\t\"\u280B\",\n\t\t\t\"\u2813\",\n\t\t\t\"\u2812\",\n\t\t\t\"\u2810\",\n\t\t\t\"\u2810\",\n\t\t\t\"\u2812\",\n\t\t\t\"\u2816\",\n\t\t\t\"\u2826\",\n\t\t\t\"\u2824\",\n\t\t\t\"\u2820\",\n\t\t\t\"\u2820\",\n\t\t\t\"\u2824\",\n\t\t\t\"\u2826\",\n\t\t\t\"\u2816\",\n\t\t\t\"\u2812\",\n\t\t\t\"\u2810\",\n\t\t\t\"\u2810\",\n\t\t\t\"\u2812\",\n\t\t\t\"\u2813\",\n\t\t\t\"\u280B\",\n\t\t\t\"\u2809\",\n\t\t\t\"\u2808\"\n\t\t]\n\t},\n\t\"dots8\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\"\u2801\",\n\t\t\t\"\u2801\",\n\t\t\t\"\u2809\",\n\t\t\t\"\u2819\",\n\t\t\t\"\u281A\",\n\t\t\t\"\u2812\",\n\t\t\t\"\u2802\",\n\t\t\t\"\u2802\",\n\t\t\t\"\u2812\",\n\t\t\t\"\u2832\",\n\t\t\t\"\u2834\",\n\t\t\t\"\u2824\",\n\t\t\t\"\u2804\",\n\t\t\t\"\u2804\",\n\t\t\t\"\u2824\",\n\t\t\t\"\u2820\",\n\t\t\t\"\u2820\",\n\t\t\t\"\u2824\",\n\t\t\t\"\u2826\",\n\t\t\t\"\u2816\",\n\t\t\t\"\u2812\",\n\t\t\t\"\u2810\",\n\t\t\t\"\u2810\",\n\t\t\t\"\u2812\",\n\t\t\t\"\u2813\",\n\t\t\t\"\u280B\",\n\t\t\t\"\u2809\",\n\t\t\t\"\u2808\",\n\t\t\t\"\u2808\"\n\t\t]\n\t},\n\t\"dots9\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\"\u28B9\",\n\t\t\t\"\u28BA\",\n\t\t\t\"\u28BC\",\n\t\t\t\"\u28F8\",\n\t\t\t\"\u28C7\",\n\t\t\t\"\u2867\",\n\t\t\t\"\u2857\",\n\t\t\t\"\u284F\"\n\t\t]\n\t},\n\t\"dots10\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\"\u2884\",\n\t\t\t\"\u2882\",\n\t\t\t\"\u2881\",\n\t\t\t\"\u2841\",\n\t\t\t\"\u2848\",\n\t\t\t\"\u2850\",\n\t\t\t\"\u2860\"\n\t\t]\n\t},\n\t\"dots11\": {\n\t\t\"interval\": 100,\n\t\t\"frames\": [\n\t\t\t\"\u2801\",\n\t\t\t\"\u2802\",\n\t\t\t\"\u2804\",\n\t\t\t\"\u2840\",\n\t\t\t\"\u2880\",\n\t\t\t\"\u2820\",\n\t\t\t\"\u2810\",\n\t\t\t\"\u2808\"\n\t\t]\n\t},\n\t\"dots12\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\"\u2880\u2800\",\n\t\t\t\"\u2840\u2800\",\n\t\t\t\"\u2804\u2800\",\n\t\t\t\"\u2882\u2800\",\n\t\t\t\"\u2842\u2800\",\n\t\t\t\"\u2805\u2800\",\n\t\t\t\"\u2883\u2800\",\n\t\t\t\"\u2843\u2800\",\n\t\t\t\"\u280D\u2800\",\n\t\t\t\"\u288B\u2800\",\n\t\t\t\"\u284B\u2800\",\n\t\t\t\"\u280D\u2801\",\n\t\t\t\"\u288B\u2801\",\n\t\t\t\"\u284B\u2801\",\n\t\t\t\"\u280D\u2809\",\n\t\t\t\"\u280B\u2809\",\n\t\t\t\"\u280B\u2809\",\n\t\t\t\"\u2809\u2819\",\n\t\t\t\"\u2809\u2819\",\n\t\t\t\"\u2809\u2829\",\n\t\t\t\"\u2808\u2899\",\n\t\t\t\"\u2808\u2859\",\n\t\t\t\"\u2888\u2829\",\n\t\t\t\"\u2840\u2899\",\n\t\t\t\"\u2804\u2859\",\n\t\t\t\"\u2882\u2829\",\n\t\t\t\"\u2842\u2898\",\n\t\t\t\"\u2805\u2858\",\n\t\t\t\"\u2883\u2828\",\n\t\t\t\"\u2843\u2890\",\n\t\t\t\"\u280D\u2850\",\n\t\t\t\"\u288B\u2820\",\n\t\t\t\"\u284B\u2880\",\n\t\t\t\"\u280D\u2841\",\n\t\t\t\"\u288B\u2801\",\n\t\t\t\"\u284B\u2801\",\n\t\t\t\"\u280D\u2809\",\n\t\t\t\"\u280B\u2809\",\n\t\t\t\"\u280B\u2809\",\n\t\t\t\"\u2809\u2819\",\n\t\t\t\"\u2809\u2819\",\n\t\t\t\"\u2809\u2829\",\n\t\t\t\"\u2808\u2899\",\n\t\t\t\"\u2808\u2859\",\n\t\t\t\"\u2808\u2829\",\n\t\t\t\"\u2800\u2899\",\n\t\t\t\"\u2800\u2859\",\n\t\t\t\"\u2800\u2829\",\n\t\t\t\"\u2800\u2898\",\n\t\t\t\"\u2800\u2858\",\n\t\t\t\"\u2800\u2828\",\n\t\t\t\"\u2800\u2890\",\n\t\t\t\"\u2800\u2850\",\n\t\t\t\"\u2800\u2820\",\n\t\t\t\"\u2800\u2880\",\n\t\t\t\"\u2800\u2840\"\n\t\t]\n\t},\n\t\"dots13\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\"\u28FC\",\n\t\t\t\"\u28F9\",\n\t\t\t\"\u28BB\",\n\t\t\t\"\u283F\",\n\t\t\t\"\u285F\",\n\t\t\t\"\u28CF\",\n\t\t\t\"\u28E7\",\n\t\t\t\"\u28F6\"\n\t\t]\n\t},\n\t\"dots14\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\"\u2809\u2809\",\n\t\t\t\"\u2808\u2819\",\n\t\t\t\"\u2800\u2839\",\n\t\t\t\"\u2800\u28B8\",\n\t\t\t\"\u2800\u28F0\",\n\t\t\t\"\u2880\u28E0\",\n\t\t\t\"\u28C0\u28C0\",\n\t\t\t\"\u28C4\u2840\",\n\t\t\t\"\u28C6\u2800\",\n\t\t\t\"\u2847\u2800\",\n\t\t\t\"\u280F\u2800\",\n\t\t\t\"\u280B\u2801\"\n\t\t]\n\t},\n\t\"dots8Bit\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\"\u2800\",\n\t\t\t\"\u2801\",\n\t\t\t\"\u2802\",\n\t\t\t\"\u2803\",\n\t\t\t\"\u2804\",\n\t\t\t\"\u2805\",\n\t\t\t\"\u2806\",\n\t\t\t\"\u2807\",\n\t\t\t\"\u2840\",\n\t\t\t\"\u2841\",\n\t\t\t\"\u2842\",\n\t\t\t\"\u2843\",\n\t\t\t\"\u2844\",\n\t\t\t\"\u2845\",\n\t\t\t\"\u2846\",\n\t\t\t\"\u2847\",\n\t\t\t\"\u2808\",\n\t\t\t\"\u2809\",\n\t\t\t\"\u280A\",\n\t\t\t\"\u280B\",\n\t\t\t\"\u280C\",\n\t\t\t\"\u280D\",\n\t\t\t\"\u280E\",\n\t\t\t\"\u280F\",\n\t\t\t\"\u2848\",\n\t\t\t\"\u2849\",\n\t\t\t\"\u284A\",\n\t\t\t\"\u284B\",\n\t\t\t\"\u284C\",\n\t\t\t\"\u284D\",\n\t\t\t\"\u284E\",\n\t\t\t\"\u284F\",\n\t\t\t\"\u2810\",\n\t\t\t\"\u2811\",\n\t\t\t\"\u2812\",\n\t\t\t\"\u2813\",\n\t\t\t\"\u2814\",\n\t\t\t\"\u2815\",\n\t\t\t\"\u2816\",\n\t\t\t\"\u2817\",\n\t\t\t\"\u2850\",\n\t\t\t\"\u2851\",\n\t\t\t\"\u2852\",\n\t\t\t\"\u2853\",\n\t\t\t\"\u2854\",\n\t\t\t\"\u2855\",\n\t\t\t\"\u2856\",\n\t\t\t\"\u2857\",\n\t\t\t\"\u2818\",\n\t\t\t\"\u2819\",\n\t\t\t\"\u281A\",\n\t\t\t\"\u281B\",\n\t\t\t\"\u281C\",\n\t\t\t\"\u281D\",\n\t\t\t\"\u281E\",\n\t\t\t\"\u281F\",\n\t\t\t\"\u2858\",\n\t\t\t\"\u2859\",\n\t\t\t\"\u285A\",\n\t\t\t\"\u285B\",\n\t\t\t\"\u285C\",\n\t\t\t\"\u285D\",\n\t\t\t\"\u285E\",\n\t\t\t\"\u285F\",\n\t\t\t\"\u2820\",\n\t\t\t\"\u2821\",\n\t\t\t\"\u2822\",\n\t\t\t\"\u2823\",\n\t\t\t\"\u2824\",\n\t\t\t\"\u2825\",\n\t\t\t\"\u2826\",\n\t\t\t\"\u2827\",\n\t\t\t\"\u2860\",\n\t\t\t\"\u2861\",\n\t\t\t\"\u2862\",\n\t\t\t\"\u2863\",\n\t\t\t\"\u2864\",\n\t\t\t\"\u2865\",\n\t\t\t\"\u2866\",\n\t\t\t\"\u2867\",\n\t\t\t\"\u2828\",\n\t\t\t\"\u2829\",\n\t\t\t\"\u282A\",\n\t\t\t\"\u282B\",\n\t\t\t\"\u282C\",\n\t\t\t\"\u282D\",\n\t\t\t\"\u282E\",\n\t\t\t\"\u282F\",\n\t\t\t\"\u2868\",\n\t\t\t\"\u2869\",\n\t\t\t\"\u286A\",\n\t\t\t\"\u286B\",\n\t\t\t\"\u286C\",\n\t\t\t\"\u286D\",\n\t\t\t\"\u286E\",\n\t\t\t\"\u286F\",\n\t\t\t\"\u2830\",\n\t\t\t\"\u2831\",\n\t\t\t\"\u2832\",\n\t\t\t\"\u2833\",\n\t\t\t\"\u2834\",\n\t\t\t\"\u2835\",\n\t\t\t\"\u2836\",\n\t\t\t\"\u2837\",\n\t\t\t\"\u2870\",\n\t\t\t\"\u2871\",\n\t\t\t\"\u2872\",\n\t\t\t\"\u2873\",\n\t\t\t\"\u2874\",\n\t\t\t\"\u2875\",\n\t\t\t\"\u2876\",\n\t\t\t\"\u2877\",\n\t\t\t\"\u2838\",\n\t\t\t\"\u2839\",\n\t\t\t\"\u283A\",\n\t\t\t\"\u283B\",\n\t\t\t\"\u283C\",\n\t\t\t\"\u283D\",\n\t\t\t\"\u283E\",\n\t\t\t\"\u283F\",\n\t\t\t\"\u2878\",\n\t\t\t\"\u2879\",\n\t\t\t\"\u287A\",\n\t\t\t\"\u287B\",\n\t\t\t\"\u287C\",\n\t\t\t\"\u287D\",\n\t\t\t\"\u287E\",\n\t\t\t\"\u287F\",\n\t\t\t\"\u2880\",\n\t\t\t\"\u2881\",\n\t\t\t\"\u2882\",\n\t\t\t\"\u2883\",\n\t\t\t\"\u2884\",\n\t\t\t\"\u2885\",\n\t\t\t\"\u2886\",\n\t\t\t\"\u2887\",\n\t\t\t\"\u28C0\",\n\t\t\t\"\u28C1\",\n\t\t\t\"\u28C2\",\n\t\t\t\"\u28C3\",\n\t\t\t\"\u28C4\",\n\t\t\t\"\u28C5\",\n\t\t\t\"\u28C6\",\n\t\t\t\"\u28C7\",\n\t\t\t\"\u2888\",\n\t\t\t\"\u2889\",\n\t\t\t\"\u288A\",\n\t\t\t\"\u288B\",\n\t\t\t\"\u288C\",\n\t\t\t\"\u288D\",\n\t\t\t\"\u288E\",\n\t\t\t\"\u288F\",\n\t\t\t\"\u28C8\",\n\t\t\t\"\u28C9\",\n\t\t\t\"\u28CA\",\n\t\t\t\"\u28CB\",\n\t\t\t\"\u28CC\",\n\t\t\t\"\u28CD\",\n\t\t\t\"\u28CE\",\n\t\t\t\"\u28CF\",\n\t\t\t\"\u2890\",\n\t\t\t\"\u2891\",\n\t\t\t\"\u2892\",\n\t\t\t\"\u2893\",\n\t\t\t\"\u2894\",\n\t\t\t\"\u2895\",\n\t\t\t\"\u2896\",\n\t\t\t\"\u2897\",\n\t\t\t\"\u28D0\",\n\t\t\t\"\u28D1\",\n\t\t\t\"\u28D2\",\n\t\t\t\"\u28D3\",\n\t\t\t\"\u28D4\",\n\t\t\t\"\u28D5\",\n\t\t\t\"\u28D6\",\n\t\t\t\"\u28D7\",\n\t\t\t\"\u2898\",\n\t\t\t\"\u2899\",\n\t\t\t\"\u289A\",\n\t\t\t\"\u289B\",\n\t\t\t\"\u289C\",\n\t\t\t\"\u289D\",\n\t\t\t\"\u289E\",\n\t\t\t\"\u289F\",\n\t\t\t\"\u28D8\",\n\t\t\t\"\u28D9\",\n\t\t\t\"\u28DA\",\n\t\t\t\"\u28DB\",\n\t\t\t\"\u28DC\",\n\t\t\t\"\u28DD\",\n\t\t\t\"\u28DE\",\n\t\t\t\"\u28DF\",\n\t\t\t\"\u28A0\",\n\t\t\t\"\u28A1\",\n\t\t\t\"\u28A2\",\n\t\t\t\"\u28A3\",\n\t\t\t\"\u28A4\",\n\t\t\t\"\u28A5\",\n\t\t\t\"\u28A6\",\n\t\t\t\"\u28A7\",\n\t\t\t\"\u28E0\",\n\t\t\t\"\u28E1\",\n\t\t\t\"\u28E2\",\n\t\t\t\"\u28E3\",\n\t\t\t\"\u28E4\",\n\t\t\t\"\u28E5\",\n\t\t\t\"\u28E6\",\n\t\t\t\"\u28E7\",\n\t\t\t\"\u28A8\",\n\t\t\t\"\u28A9\",\n\t\t\t\"\u28AA\",\n\t\t\t\"\u28AB\",\n\t\t\t\"\u28AC\",\n\t\t\t\"\u28AD\",\n\t\t\t\"\u28AE\",\n\t\t\t\"\u28AF\",\n\t\t\t\"\u28E8\",\n\t\t\t\"\u28E9\",\n\t\t\t\"\u28EA\",\n\t\t\t\"\u28EB\",\n\t\t\t\"\u28EC\",\n\t\t\t\"\u28ED\",\n\t\t\t\"\u28EE\",\n\t\t\t\"\u28EF\",\n\t\t\t\"\u28B0\",\n\t\t\t\"\u28B1\",\n\t\t\t\"\u28B2\",\n\t\t\t\"\u28B3\",\n\t\t\t\"\u28B4\",\n\t\t\t\"\u28B5\",\n\t\t\t\"\u28B6\",\n\t\t\t\"\u28B7\",\n\t\t\t\"\u28F0\",\n\t\t\t\"\u28F1\",\n\t\t\t\"\u28F2\",\n\t\t\t\"\u28F3\",\n\t\t\t\"\u28F4\",\n\t\t\t\"\u28F5\",\n\t\t\t\"\u28F6\",\n\t\t\t\"\u28F7\",\n\t\t\t\"\u28B8\",\n\t\t\t\"\u28B9\",\n\t\t\t\"\u28BA\",\n\t\t\t\"\u28BB\",\n\t\t\t\"\u28BC\",\n\t\t\t\"\u28BD\",\n\t\t\t\"\u28BE\",\n\t\t\t\"\u28BF\",\n\t\t\t\"\u28F8\",\n\t\t\t\"\u28F9\",\n\t\t\t\"\u28FA\",\n\t\t\t\"\u28FB\",\n\t\t\t\"\u28FC\",\n\t\t\t\"\u28FD\",\n\t\t\t\"\u28FE\",\n\t\t\t\"\u28FF\"\n\t\t]\n\t},\n\t\"dotsCircle\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\"\u288E \",\n\t\t\t\"\u280E\u2801\",\n\t\t\t\"\u280A\u2811\",\n\t\t\t\"\u2808\u2831\",\n\t\t\t\" \u2871\",\n\t\t\t\"\u2880\u2870\",\n\t\t\t\"\u2884\u2860\",\n\t\t\t\"\u2886\u2840\"\n\t\t]\n\t},\n\t\"sand\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\"\u2801\",\n\t\t\t\"\u2802\",\n\t\t\t\"\u2804\",\n\t\t\t\"\u2840\",\n\t\t\t\"\u2848\",\n\t\t\t\"\u2850\",\n\t\t\t\"\u2860\",\n\t\t\t\"\u28C0\",\n\t\t\t\"\u28C1\",\n\t\t\t\"\u28C2\",\n\t\t\t\"\u28C4\",\n\t\t\t\"\u28CC\",\n\t\t\t\"\u28D4\",\n\t\t\t\"\u28E4\",\n\t\t\t\"\u28E5\",\n\t\t\t\"\u28E6\",\n\t\t\t\"\u28EE\",\n\t\t\t\"\u28F6\",\n\t\t\t\"\u28F7\",\n\t\t\t\"\u28FF\",\n\t\t\t\"\u287F\",\n\t\t\t\"\u283F\",\n\t\t\t\"\u289F\",\n\t\t\t\"\u281F\",\n\t\t\t\"\u285B\",\n\t\t\t\"\u281B\",\n\t\t\t\"\u282B\",\n\t\t\t\"\u288B\",\n\t\t\t\"\u280B\",\n\t\t\t\"\u280D\",\n\t\t\t\"\u2849\",\n\t\t\t\"\u2809\",\n\t\t\t\"\u2811\",\n\t\t\t\"\u2821\",\n\t\t\t\"\u2881\"\n\t\t]\n\t},\n\t\"line\": {\n\t\t\"interval\": 130,\n\t\t\"frames\": [\n\t\t\t\"-\",\n\t\t\t\"\\\\\",\n\t\t\t\"|\",\n\t\t\t\"/\"\n\t\t]\n\t},\n\t\"line2\": {\n\t\t\"interval\": 100,\n\t\t\"frames\": [\n\t\t\t\"\u2802\",\n\t\t\t\"-\",\n\t\t\t\"\u2013\",\n\t\t\t\"\u2014\",\n\t\t\t\"\u2013\",\n\t\t\t\"-\"\n\t\t]\n\t},\n\t\"rollingLine\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\"/  \",\n\t\t\t\" - \",\n\t\t\t\" \\\\ \",\n\t\t\t\"  |\",\n\t\t\t\"  |\",\n\t\t\t\" \\\\ \",\n\t\t\t\" - \",\n\t\t\t\"/  \"\n\t\t]\n\t},\n\t\"pipe\": {\n\t\t\"interval\": 100,\n\t\t\"frames\": [\n\t\t\t\"\u2524\",\n\t\t\t\"\u2518\",\n\t\t\t\"\u2534\",\n\t\t\t\"\u2514\",\n\t\t\t\"\u251C\",\n\t\t\t\"\u250C\",\n\t\t\t\"\u252C\",\n\t\t\t\"\u2510\"\n\t\t]\n\t},\n\t\"simpleDots\": {\n\t\t\"interval\": 400,\n\t\t\"frames\": [\n\t\t\t\".  \",\n\t\t\t\".. \",\n\t\t\t\"...\",\n\t\t\t\"   \"\n\t\t]\n\t},\n\t\"simpleDotsScrolling\": {\n\t\t\"interval\": 200,\n\t\t\"frames\": [\n\t\t\t\".  \",\n\t\t\t\".. \",\n\t\t\t\"...\",\n\t\t\t\" ..\",\n\t\t\t\"  .\",\n\t\t\t\"   \"\n\t\t]\n\t},\n\t\"star\": {\n\t\t\"interval\": 70,\n\t\t\"frames\": [\n\t\t\t\"\u2736\",\n\t\t\t\"\u2738\",\n\t\t\t\"\u2739\",\n\t\t\t\"\u273A\",\n\t\t\t\"\u2739\",\n\t\t\t\"\u2737\"\n\t\t]\n\t},\n\t\"star2\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\"+\",\n\t\t\t\"x\",\n\t\t\t\"*\"\n\t\t]\n\t},\n\t\"flip\": {\n\t\t\"interval\": 70,\n\t\t\"frames\": [\n\t\t\t\"_\",\n\t\t\t\"_\",\n\t\t\t\"_\",\n\t\t\t\"-\",\n\t\t\t\"`\",\n\t\t\t\"`\",\n\t\t\t\"'\",\n\t\t\t\"\u00B4\",\n\t\t\t\"-\",\n\t\t\t\"_\",\n\t\t\t\"_\",\n\t\t\t\"_\"\n\t\t]\n\t},\n\t\"hamburger\": {\n\t\t\"interval\": 100,\n\t\t\"frames\": [\n\t\t\t\"\u2631\",\n\t\t\t\"\u2632\",\n\t\t\t\"\u2634\"\n\t\t]\n\t},\n\t\"growVertical\": {\n\t\t\"interval\": 120,\n\t\t\"frames\": [\n\t\t\t\"\u2581\",\n\t\t\t\"\u2583\",\n\t\t\t\"\u2584\",\n\t\t\t\"\u2585\",\n\t\t\t\"\u2586\",\n\t\t\t\"\u2587\",\n\t\t\t\"\u2586\",\n\t\t\t\"\u2585\",\n\t\t\t\"\u2584\",\n\t\t\t\"\u2583\"\n\t\t]\n\t},\n\t\"growHorizontal\": {\n\t\t\"interval\": 120,\n\t\t\"frames\": [\n\t\t\t\"\u258F\",\n\t\t\t\"\u258E\",\n\t\t\t\"\u258D\",\n\t\t\t\"\u258C\",\n\t\t\t\"\u258B\",\n\t\t\t\"\u258A\",\n\t\t\t\"\u2589\",\n\t\t\t\"\u258A\",\n\t\t\t\"\u258B\",\n\t\t\t\"\u258C\",\n\t\t\t\"\u258D\",\n\t\t\t\"\u258E\"\n\t\t]\n\t},\n\t\"balloon\": {\n\t\t\"interval\": 140,\n\t\t\"frames\": [\n\t\t\t\" \",\n\t\t\t\".\",\n\t\t\t\"o\",\n\t\t\t\"O\",\n\t\t\t\"@\",\n\t\t\t\"*\",\n\t\t\t\" \"\n\t\t]\n\t},\n\t\"balloon2\": {\n\t\t\"interval\": 120,\n\t\t\"frames\": [\n\t\t\t\".\",\n\t\t\t\"o\",\n\t\t\t\"O\",\n\t\t\t\"\u00B0\",\n\t\t\t\"O\",\n\t\t\t\"o\",\n\t\t\t\".\"\n\t\t]\n\t},\n\t\"noise\": {\n\t\t\"interval\": 100,\n\t\t\"frames\": [\n\t\t\t\"\u2593\",\n\t\t\t\"\u2592\",\n\t\t\t\"\u2591\"\n\t\t]\n\t},\n\t\"bounce\": {\n\t\t\"interval\": 120,\n\t\t\"frames\": [\n\t\t\t\"\u2801\",\n\t\t\t\"\u2802\",\n\t\t\t\"\u2804\",\n\t\t\t\"\u2802\"\n\t\t]\n\t},\n\t\"boxBounce\": {\n\t\t\"interval\": 120,\n\t\t\"frames\": [\n\t\t\t\"\u2596\",\n\t\t\t\"\u2598\",\n\t\t\t\"\u259D\",\n\t\t\t\"\u2597\"\n\t\t]\n\t},\n\t\"boxBounce2\": {\n\t\t\"interval\": 100,\n\t\t\"frames\": [\n\t\t\t\"\u258C\",\n\t\t\t\"\u2580\",\n\t\t\t\"\u2590\",\n\t\t\t\"\u2584\"\n\t\t]\n\t},\n\t\"triangle\": {\n\t\t\"interval\": 50,\n\t\t\"frames\": [\n\t\t\t\"\u25E2\",\n\t\t\t\"\u25E3\",\n\t\t\t\"\u25E4\",\n\t\t\t\"\u25E5\"\n\t\t]\n\t},\n\t\"binary\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\"010010\",\n\t\t\t\"001100\",\n\t\t\t\"100101\",\n\t\t\t\"111010\",\n\t\t\t\"111101\",\n\t\t\t\"010111\",\n\t\t\t\"101011\",\n\t\t\t\"111000\",\n\t\t\t\"110011\",\n\t\t\t\"110101\"\n\t\t]\n\t},\n\t\"arc\": {\n\t\t\"interval\": 100,\n\t\t\"frames\": [\n\t\t\t\"\u25DC\",\n\t\t\t\"\u25E0\",\n\t\t\t\"\u25DD\",\n\t\t\t\"\u25DE\",\n\t\t\t\"\u25E1\",\n\t\t\t\"\u25DF\"\n\t\t]\n\t},\n\t\"circle\": {\n\t\t\"interval\": 120,\n\t\t\"frames\": [\n\t\t\t\"\u25E1\",\n\t\t\t\"\u2299\",\n\t\t\t\"\u25E0\"\n\t\t]\n\t},\n\t\"squareCorners\": {\n\t\t\"interval\": 180,\n\t\t\"frames\": [\n\t\t\t\"\u25F0\",\n\t\t\t\"\u25F3\",\n\t\t\t\"\u25F2\",\n\t\t\t\"\u25F1\"\n\t\t]\n\t},\n\t\"circleQuarters\": {\n\t\t\"interval\": 120,\n\t\t\"frames\": [\n\t\t\t\"\u25F4\",\n\t\t\t\"\u25F7\",\n\t\t\t\"\u25F6\",\n\t\t\t\"\u25F5\"\n\t\t]\n\t},\n\t\"circleHalves\": {\n\t\t\"interval\": 50,\n\t\t\"frames\": [\n\t\t\t\"\u25D0\",\n\t\t\t\"\u25D3\",\n\t\t\t\"\u25D1\",\n\t\t\t\"\u25D2\"\n\t\t]\n\t},\n\t\"squish\": {\n\t\t\"interval\": 100,\n\t\t\"frames\": [\n\t\t\t\"\u256B\",\n\t\t\t\"\u256A\"\n\t\t]\n\t},\n\t\"toggle\": {\n\t\t\"interval\": 250,\n\t\t\"frames\": [\n\t\t\t\"\u22B6\",\n\t\t\t\"\u22B7\"\n\t\t]\n\t},\n\t\"toggle2\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\"\u25AB\",\n\t\t\t\"\u25AA\"\n\t\t]\n\t},\n\t\"toggle3\": {\n\t\t\"interval\": 120,\n\t\t\"frames\": [\n\t\t\t\"\u25A1\",\n\t\t\t\"\u25A0\"\n\t\t]\n\t},\n\t\"toggle4\": {\n\t\t\"interval\": 100,\n\t\t\"frames\": [\n\t\t\t\"\u25A0\",\n\t\t\t\"\u25A1\",\n\t\t\t\"\u25AA\",\n\t\t\t\"\u25AB\"\n\t\t]\n\t},\n\t\"toggle5\": {\n\t\t\"interval\": 100,\n\t\t\"frames\": [\n\t\t\t\"\u25AE\",\n\t\t\t\"\u25AF\"\n\t\t]\n\t},\n\t\"toggle6\": {\n\t\t\"interval\": 300,\n\t\t\"frames\": [\n\t\t\t\"\u101D\",\n\t\t\t\"\u1040\"\n\t\t]\n\t},\n\t\"toggle7\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\"\u29BE\",\n\t\t\t\"\u29BF\"\n\t\t]\n\t},\n\t\"toggle8\": {\n\t\t\"interval\": 100,\n\t\t\"frames\": [\n\t\t\t\"\u25CD\",\n\t\t\t\"\u25CC\"\n\t\t]\n\t},\n\t\"toggle9\": {\n\t\t\"interval\": 100,\n\t\t\"frames\": [\n\t\t\t\"\u25C9\",\n\t\t\t\"\u25CE\"\n\t\t]\n\t},\n\t\"toggle10\": {\n\t\t\"interval\": 100,\n\t\t\"frames\": [\n\t\t\t\"\u3282\",\n\t\t\t\"\u3280\",\n\t\t\t\"\u3281\"\n\t\t]\n\t},\n\t\"toggle11\": {\n\t\t\"interval\": 50,\n\t\t\"frames\": [\n\t\t\t\"\u29C7\",\n\t\t\t\"\u29C6\"\n\t\t]\n\t},\n\t\"toggle12\": {\n\t\t\"interval\": 120,\n\t\t\"frames\": [\n\t\t\t\"\u2617\",\n\t\t\t\"\u2616\"\n\t\t]\n\t},\n\t\"toggle13\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\"=\",\n\t\t\t\"*\",\n\t\t\t\"-\"\n\t\t]\n\t},\n\t\"arrow\": {\n\t\t\"interval\": 100,\n\t\t\"frames\": [\n\t\t\t\"\u2190\",\n\t\t\t\"\u2196\",\n\t\t\t\"\u2191\",\n\t\t\t\"\u2197\",\n\t\t\t\"\u2192\",\n\t\t\t\"\u2198\",\n\t\t\t\"\u2193\",\n\t\t\t\"\u2199\"\n\t\t]\n\t},\n\t\"arrow2\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\"\u2B06\uFE0F \",\n\t\t\t\"\u2197\uFE0F \",\n\t\t\t\"\u27A1\uFE0F \",\n\t\t\t\"\u2198\uFE0F \",\n\t\t\t\"\u2B07\uFE0F \",\n\t\t\t\"\u2199\uFE0F \",\n\t\t\t\"\u2B05\uFE0F \",\n\t\t\t\"\u2196\uFE0F \"\n\t\t]\n\t},\n\t\"arrow3\": {\n\t\t\"interval\": 120,\n\t\t\"frames\": [\n\t\t\t\"\u25B9\u25B9\u25B9\u25B9\u25B9\",\n\t\t\t\"\u25B8\u25B9\u25B9\u25B9\u25B9\",\n\t\t\t\"\u25B9\u25B8\u25B9\u25B9\u25B9\",\n\t\t\t\"\u25B9\u25B9\u25B8\u25B9\u25B9\",\n\t\t\t\"\u25B9\u25B9\u25B9\u25B8\u25B9\",\n\t\t\t\"\u25B9\u25B9\u25B9\u25B9\u25B8\"\n\t\t]\n\t},\n\t\"bouncingBar\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\"[    ]\",\n\t\t\t\"[=   ]\",\n\t\t\t\"[==  ]\",\n\t\t\t\"[=== ]\",\n\t\t\t\"[====]\",\n\t\t\t\"[ ===]\",\n\t\t\t\"[  ==]\",\n\t\t\t\"[   =]\",\n\t\t\t\"[    ]\",\n\t\t\t\"[   =]\",\n\t\t\t\"[  ==]\",\n\t\t\t\"[ ===]\",\n\t\t\t\"[====]\",\n\t\t\t\"[=== ]\",\n\t\t\t\"[==  ]\",\n\t\t\t\"[=   ]\"\n\t\t]\n\t},\n\t\"bouncingBall\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\"( \u25CF    )\",\n\t\t\t\"(  \u25CF   )\",\n\t\t\t\"(   \u25CF  )\",\n\t\t\t\"(    \u25CF )\",\n\t\t\t\"(     \u25CF)\",\n\t\t\t\"(    \u25CF )\",\n\t\t\t\"(   \u25CF  )\",\n\t\t\t\"(  \u25CF   )\",\n\t\t\t\"( \u25CF    )\",\n\t\t\t\"(\u25CF     )\"\n\t\t]\n\t},\n\t\"smiley\": {\n\t\t\"interval\": 200,\n\t\t\"frames\": [\n\t\t\t\"\uD83D\uDE04 \",\n\t\t\t\"\uD83D\uDE1D \"\n\t\t]\n\t},\n\t\"monkey\": {\n\t\t\"interval\": 300,\n\t\t\"frames\": [\n\t\t\t\"\uD83D\uDE48 \",\n\t\t\t\"\uD83D\uDE48 \",\n\t\t\t\"\uD83D\uDE49 \",\n\t\t\t\"\uD83D\uDE4A \"\n\t\t]\n\t},\n\t\"hearts\": {\n\t\t\"interval\": 100,\n\t\t\"frames\": [\n\t\t\t\"\uD83D\uDC9B \",\n\t\t\t\"\uD83D\uDC99 \",\n\t\t\t\"\uD83D\uDC9C \",\n\t\t\t\"\uD83D\uDC9A \",\n\t\t\t\"\uD83D\uDC97 \"\n\t\t]\n\t},\n\t\"clock\": {\n\t\t\"interval\": 100,\n\t\t\"frames\": [\n\t\t\t\"\uD83D\uDD5B \",\n\t\t\t\"\uD83D\uDD50 \",\n\t\t\t\"\uD83D\uDD51 \",\n\t\t\t\"\uD83D\uDD52 \",\n\t\t\t\"\uD83D\uDD53 \",\n\t\t\t\"\uD83D\uDD54 \",\n\t\t\t\"\uD83D\uDD55 \",\n\t\t\t\"\uD83D\uDD56 \",\n\t\t\t\"\uD83D\uDD57 \",\n\t\t\t\"\uD83D\uDD58 \",\n\t\t\t\"\uD83D\uDD59 \",\n\t\t\t\"\uD83D\uDD5A \"\n\t\t]\n\t},\n\t\"earth\": {\n\t\t\"interval\": 180,\n\t\t\"frames\": [\n\t\t\t\"\uD83C\uDF0D \",\n\t\t\t\"\uD83C\uDF0E \",\n\t\t\t\"\uD83C\uDF0F \"\n\t\t]\n\t},\n\t\"material\": {\n\t\t\"interval\": 17,\n\t\t\"frames\": [\n\t\t\t\"\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\",\n\t\t\t\"\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\",\n\t\t\t\"\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\",\n\t\t\t\"\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\",\n\t\t\t\"\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\",\n\t\t\t\"\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\",\n\t\t\t\"\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\",\n\t\t\t\"\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\",\n\t\t\t\"\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\",\n\t\t\t\"\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\",\n\t\t\t\"\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\",\n\t\t\t\"\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\",\n\t\t\t\"\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\",\n\t\t\t\"\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\",\n\t\t\t\"\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\",\n\t\t\t\"\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\",\n\t\t\t\"\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\",\n\t\t\t\"\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\",\n\t\t\t\"\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\",\n\t\t\t\"\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\",\n\t\t\t\"\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\",\n\t\t\t\"\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\",\n\t\t\t\"\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\",\n\t\t\t\"\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\",\n\t\t\t\"\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\",\n\t\t\t\"\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\",\n\t\t\t\"\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\",\n\t\t\t\"\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\",\n\t\t\t\"\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\",\n\t\t\t\"\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\",\n\t\t\t\"\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\",\n\t\t\t\"\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\",\n\t\t\t\"\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\",\n\t\t\t\"\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\",\n\t\t\t\"\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\",\n\t\t\t\"\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\",\n\t\t\t\"\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\",\n\t\t\t\"\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\",\n\t\t\t\"\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\",\n\t\t\t\"\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\",\n\t\t\t\"\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\"\n\t\t]\n\t},\n\t\"moon\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\"\uD83C\uDF11 \",\n\t\t\t\"\uD83C\uDF12 \",\n\t\t\t\"\uD83C\uDF13 \",\n\t\t\t\"\uD83C\uDF14 \",\n\t\t\t\"\uD83C\uDF15 \",\n\t\t\t\"\uD83C\uDF16 \",\n\t\t\t\"\uD83C\uDF17 \",\n\t\t\t\"\uD83C\uDF18 \"\n\t\t]\n\t},\n\t\"runner\": {\n\t\t\"interval\": 140,\n\t\t\"frames\": [\n\t\t\t\"\uD83D\uDEB6 \",\n\t\t\t\"\uD83C\uDFC3 \"\n\t\t]\n\t},\n\t\"pong\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\"\u2590\u2802       \u258C\",\n\t\t\t\"\u2590\u2808       \u258C\",\n\t\t\t\"\u2590 \u2802      \u258C\",\n\t\t\t\"\u2590 \u2820      \u258C\",\n\t\t\t\"\u2590  \u2840     \u258C\",\n\t\t\t\"\u2590  \u2820     \u258C\",\n\t\t\t\"\u2590   \u2802    \u258C\",\n\t\t\t\"\u2590   \u2808    \u258C\",\n\t\t\t\"\u2590    \u2802   \u258C\",\n\t\t\t\"\u2590    \u2820   \u258C\",\n\t\t\t\"\u2590     \u2840  \u258C\",\n\t\t\t\"\u2590     \u2820  \u258C\",\n\t\t\t\"\u2590      \u2802 \u258C\",\n\t\t\t\"\u2590      \u2808 \u258C\",\n\t\t\t\"\u2590       \u2802\u258C\",\n\t\t\t\"\u2590       \u2820\u258C\",\n\t\t\t\"\u2590       \u2840\u258C\",\n\t\t\t\"\u2590      \u2820 \u258C\",\n\t\t\t\"\u2590      \u2802 \u258C\",\n\t\t\t\"\u2590     \u2808  \u258C\",\n\t\t\t\"\u2590     \u2802  \u258C\",\n\t\t\t\"\u2590    \u2820   \u258C\",\n\t\t\t\"\u2590    \u2840   \u258C\",\n\t\t\t\"\u2590   \u2820    \u258C\",\n\t\t\t\"\u2590   \u2802    \u258C\",\n\t\t\t\"\u2590  \u2808     \u258C\",\n\t\t\t\"\u2590  \u2802     \u258C\",\n\t\t\t\"\u2590 \u2820      \u258C\",\n\t\t\t\"\u2590 \u2840      \u258C\",\n\t\t\t\"\u2590\u2820       \u258C\"\n\t\t]\n\t},\n\t\"shark\": {\n\t\t\"interval\": 120,\n\t\t\"frames\": [\n\t\t\t\"\u2590|\\\\____________\u258C\",\n\t\t\t\"\u2590_|\\\\___________\u258C\",\n\t\t\t\"\u2590__|\\\\__________\u258C\",\n\t\t\t\"\u2590___|\\\\_________\u258C\",\n\t\t\t\"\u2590____|\\\\________\u258C\",\n\t\t\t\"\u2590_____|\\\\_______\u258C\",\n\t\t\t\"\u2590______|\\\\______\u258C\",\n\t\t\t\"\u2590_______|\\\\_____\u258C\",\n\t\t\t\"\u2590________|\\\\____\u258C\",\n\t\t\t\"\u2590_________|\\\\___\u258C\",\n\t\t\t\"\u2590__________|\\\\__\u258C\",\n\t\t\t\"\u2590___________|\\\\_\u258C\",\n\t\t\t\"\u2590____________|\\\\\u258C\",\n\t\t\t\"\u2590____________/|\u258C\",\n\t\t\t\"\u2590___________/|_\u258C\",\n\t\t\t\"\u2590__________/|__\u258C\",\n\t\t\t\"\u2590_________/|___\u258C\",\n\t\t\t\"\u2590________/|____\u258C\",\n\t\t\t\"\u2590_______/|_____\u258C\",\n\t\t\t\"\u2590______/|______\u258C\",\n\t\t\t\"\u2590_____/|_______\u258C\",\n\t\t\t\"\u2590____/|________\u258C\",\n\t\t\t\"\u2590___/|_________\u258C\",\n\t\t\t\"\u2590__/|__________\u258C\",\n\t\t\t\"\u2590_/|___________\u258C\",\n\t\t\t\"\u2590/|____________\u258C\"\n\t\t]\n\t},\n\t\"dqpb\": {\n\t\t\"interval\": 100,\n\t\t\"frames\": [\n\t\t\t\"d\",\n\t\t\t\"q\",\n\t\t\t\"p\",\n\t\t\t\"b\"\n\t\t]\n\t},\n\t\"weather\": {\n\t\t\"interval\": 100,\n\t\t\"frames\": [\n\t\t\t\"\u2600\uFE0F \",\n\t\t\t\"\u2600\uFE0F \",\n\t\t\t\"\u2600\uFE0F \",\n\t\t\t\"\uD83C\uDF24 \",\n\t\t\t\"\u26C5\uFE0F \",\n\t\t\t\"\uD83C\uDF25 \",\n\t\t\t\"\u2601\uFE0F \",\n\t\t\t\"\uD83C\uDF27 \",\n\t\t\t\"\uD83C\uDF28 \",\n\t\t\t\"\uD83C\uDF27 \",\n\t\t\t\"\uD83C\uDF28 \",\n\t\t\t\"\uD83C\uDF27 \",\n\t\t\t\"\uD83C\uDF28 \",\n\t\t\t\"\u26C8 \",\n\t\t\t\"\uD83C\uDF28 \",\n\t\t\t\"\uD83C\uDF27 \",\n\t\t\t\"\uD83C\uDF28 \",\n\t\t\t\"\u2601\uFE0F \",\n\t\t\t\"\uD83C\uDF25 \",\n\t\t\t\"\u26C5\uFE0F \",\n\t\t\t\"\uD83C\uDF24 \",\n\t\t\t\"\u2600\uFE0F \",\n\t\t\t\"\u2600\uFE0F \"\n\t\t]\n\t},\n\t\"christmas\": {\n\t\t\"interval\": 400,\n\t\t\"frames\": [\n\t\t\t\"\uD83C\uDF32\",\n\t\t\t\"\uD83C\uDF84\"\n\t\t]\n\t},\n\t\"grenade\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\"\u060C  \",\n\t\t\t\"\u2032  \",\n\t\t\t\" \u00B4 \",\n\t\t\t\" \u203E \",\n\t\t\t\"  \u2E0C\",\n\t\t\t\"  \u2E0A\",\n\t\t\t\"  |\",\n\t\t\t\"  \u204E\",\n\t\t\t\"  \u2055\",\n\t\t\t\" \u0DF4 \",\n\t\t\t\"  \u2053\",\n\t\t\t\"   \",\n\t\t\t\"   \",\n\t\t\t\"   \"\n\t\t]\n\t},\n\t\"point\": {\n\t\t\"interval\": 125,\n\t\t\"frames\": [\n\t\t\t\"\u2219\u2219\u2219\",\n\t\t\t\"\u25CF\u2219\u2219\",\n\t\t\t\"\u2219\u25CF\u2219\",\n\t\t\t\"\u2219\u2219\u25CF\",\n\t\t\t\"\u2219\u2219\u2219\"\n\t\t]\n\t},\n\t\"layer\": {\n\t\t\"interval\": 150,\n\t\t\"frames\": [\n\t\t\t\"-\",\n\t\t\t\"=\",\n\t\t\t\"\u2261\"\n\t\t]\n\t},\n\t\"betaWave\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\"\u03C1\u03B2\u03B2\u03B2\u03B2\u03B2\u03B2\",\n\t\t\t\"\u03B2\u03C1\u03B2\u03B2\u03B2\u03B2\u03B2\",\n\t\t\t\"\u03B2\u03B2\u03C1\u03B2\u03B2\u03B2\u03B2\",\n\t\t\t\"\u03B2\u03B2\u03B2\u03C1\u03B2\u03B2\u03B2\",\n\t\t\t\"\u03B2\u03B2\u03B2\u03B2\u03C1\u03B2\u03B2\",\n\t\t\t\"\u03B2\u03B2\u03B2\u03B2\u03B2\u03C1\u03B2\",\n\t\t\t\"\u03B2\u03B2\u03B2\u03B2\u03B2\u03B2\u03C1\"\n\t\t]\n\t},\n\t\"fingerDance\": {\n\t\t\"interval\": 160,\n\t\t\"frames\": [\n\t\t\t\"\uD83E\uDD18 \",\n\t\t\t\"\uD83E\uDD1F \",\n\t\t\t\"\uD83D\uDD96 \",\n\t\t\t\"\u270B \",\n\t\t\t\"\uD83E\uDD1A \",\n\t\t\t\"\uD83D\uDC46 \"\n\t\t]\n\t},\n\t\"fistBump\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\"\uD83E\uDD1C\\u3000\\u3000\\u3000\\u3000\uD83E\uDD1B \",\n\t\t\t\"\uD83E\uDD1C\\u3000\\u3000\\u3000\\u3000\uD83E\uDD1B \",\n\t\t\t\"\uD83E\uDD1C\\u3000\\u3000\\u3000\\u3000\uD83E\uDD1B \",\n\t\t\t\"\\u3000\uD83E\uDD1C\\u3000\\u3000\uD83E\uDD1B\\u3000 \",\n\t\t\t\"\\u3000\\u3000\uD83E\uDD1C\uD83E\uDD1B\\u3000\\u3000 \",\n\t\t\t\"\\u3000\uD83E\uDD1C\u2728\uD83E\uDD1B\\u3000\\u3000 \",\n\t\t\t\"\uD83E\uDD1C\\u3000\u2728\\u3000\uD83E\uDD1B\\u3000 \"\n\t\t]\n\t},\n\t\"soccerHeader\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\" \uD83E\uDDD1\u26BD\uFE0F       \uD83E\uDDD1 \",\n\t\t\t\"\uD83E\uDDD1  \u26BD\uFE0F      \uD83E\uDDD1 \",\n\t\t\t\"\uD83E\uDDD1   \u26BD\uFE0F     \uD83E\uDDD1 \",\n\t\t\t\"\uD83E\uDDD1    \u26BD\uFE0F    \uD83E\uDDD1 \",\n\t\t\t\"\uD83E\uDDD1     \u26BD\uFE0F   \uD83E\uDDD1 \",\n\t\t\t\"\uD83E\uDDD1      \u26BD\uFE0F  \uD83E\uDDD1 \",\n\t\t\t\"\uD83E\uDDD1       \u26BD\uFE0F\uD83E\uDDD1  \",\n\t\t\t\"\uD83E\uDDD1      \u26BD\uFE0F  \uD83E\uDDD1 \",\n\t\t\t\"\uD83E\uDDD1     \u26BD\uFE0F   \uD83E\uDDD1 \",\n\t\t\t\"\uD83E\uDDD1    \u26BD\uFE0F    \uD83E\uDDD1 \",\n\t\t\t\"\uD83E\uDDD1   \u26BD\uFE0F     \uD83E\uDDD1 \",\n\t\t\t\"\uD83E\uDDD1  \u26BD\uFE0F      \uD83E\uDDD1 \"\n\t\t]\n\t},\n\t\"mindblown\": {\n\t\t\"interval\": 160,\n\t\t\"frames\": [\n\t\t\t\"\uD83D\uDE10 \",\n\t\t\t\"\uD83D\uDE10 \",\n\t\t\t\"\uD83D\uDE2E \",\n\t\t\t\"\uD83D\uDE2E \",\n\t\t\t\"\uD83D\uDE26 \",\n\t\t\t\"\uD83D\uDE26 \",\n\t\t\t\"\uD83D\uDE27 \",\n\t\t\t\"\uD83D\uDE27 \",\n\t\t\t\"\uD83E\uDD2F \",\n\t\t\t\"\uD83D\uDCA5 \",\n\t\t\t\"\u2728 \",\n\t\t\t\"\\u3000 \",\n\t\t\t\"\\u3000 \",\n\t\t\t\"\\u3000 \"\n\t\t]\n\t},\n\t\"speaker\": {\n\t\t\"interval\": 160,\n\t\t\"frames\": [\n\t\t\t\"\uD83D\uDD08 \",\n\t\t\t\"\uD83D\uDD09 \",\n\t\t\t\"\uD83D\uDD0A \",\n\t\t\t\"\uD83D\uDD09 \"\n\t\t]\n\t},\n\t\"orangePulse\": {\n\t\t\"interval\": 100,\n\t\t\"frames\": [\n\t\t\t\"\uD83D\uDD38 \",\n\t\t\t\"\uD83D\uDD36 \",\n\t\t\t\"\uD83D\uDFE0 \",\n\t\t\t\"\uD83D\uDFE0 \",\n\t\t\t\"\uD83D\uDD36 \"\n\t\t]\n\t},\n\t\"bluePulse\": {\n\t\t\"interval\": 100,\n\t\t\"frames\": [\n\t\t\t\"\uD83D\uDD39 \",\n\t\t\t\"\uD83D\uDD37 \",\n\t\t\t\"\uD83D\uDD35 \",\n\t\t\t\"\uD83D\uDD35 \",\n\t\t\t\"\uD83D\uDD37 \"\n\t\t]\n\t},\n\t\"orangeBluePulse\": {\n\t\t\"interval\": 100,\n\t\t\"frames\": [\n\t\t\t\"\uD83D\uDD38 \",\n\t\t\t\"\uD83D\uDD36 \",\n\t\t\t\"\uD83D\uDFE0 \",\n\t\t\t\"\uD83D\uDFE0 \",\n\t\t\t\"\uD83D\uDD36 \",\n\t\t\t\"\uD83D\uDD39 \",\n\t\t\t\"\uD83D\uDD37 \",\n\t\t\t\"\uD83D\uDD35 \",\n\t\t\t\"\uD83D\uDD35 \",\n\t\t\t\"\uD83D\uDD37 \"\n\t\t]\n\t},\n\t\"timeTravel\": {\n\t\t\"interval\": 100,\n\t\t\"frames\": [\n\t\t\t\"\uD83D\uDD5B \",\n\t\t\t\"\uD83D\uDD5A \",\n\t\t\t\"\uD83D\uDD59 \",\n\t\t\t\"\uD83D\uDD58 \",\n\t\t\t\"\uD83D\uDD57 \",\n\t\t\t\"\uD83D\uDD56 \",\n\t\t\t\"\uD83D\uDD55 \",\n\t\t\t\"\uD83D\uDD54 \",\n\t\t\t\"\uD83D\uDD53 \",\n\t\t\t\"\uD83D\uDD52 \",\n\t\t\t\"\uD83D\uDD51 \",\n\t\t\t\"\uD83D\uDD50 \"\n\t\t]\n\t},\n\t\"aesthetic\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\"\u25B0\u25B1\u25B1\u25B1\u25B1\u25B1\u25B1\",\n\t\t\t\"\u25B0\u25B0\u25B1\u25B1\u25B1\u25B1\u25B1\",\n\t\t\t\"\u25B0\u25B0\u25B0\u25B1\u25B1\u25B1\u25B1\",\n\t\t\t\"\u25B0\u25B0\u25B0\u25B0\u25B1\u25B1\u25B1\",\n\t\t\t\"\u25B0\u25B0\u25B0\u25B0\u25B0\u25B1\u25B1\",\n\t\t\t\"\u25B0\u25B0\u25B0\u25B0\u25B0\u25B0\u25B1\",\n\t\t\t\"\u25B0\u25B0\u25B0\u25B0\u25B0\u25B0\u25B0\",\n\t\t\t\"\u25B0\u25B1\u25B1\u25B1\u25B1\u25B1\u25B1\"\n\t\t]\n\t},\n\t\"dwarfFortress\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\" \u2588\u2588\u2588\u2588\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"\u263A\u2588\u2588\u2588\u2588\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"\u263A\u2588\u2588\u2588\u2588\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"\u263A\u2593\u2588\u2588\u2588\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"\u263A\u2593\u2588\u2588\u2588\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"\u263A\u2592\u2588\u2588\u2588\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"\u263A\u2592\u2588\u2588\u2588\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"\u263A\u2591\u2588\u2588\u2588\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"\u263A\u2591\u2588\u2588\u2588\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"\u263A \u2588\u2588\u2588\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\" \u263A\u2588\u2588\u2588\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\" \u263A\u2588\u2588\u2588\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\" \u263A\u2593\u2588\u2588\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\" \u263A\u2593\u2588\u2588\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\" \u263A\u2592\u2588\u2588\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\" \u263A\u2592\u2588\u2588\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\" \u263A\u2591\u2588\u2588\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\" \u263A\u2591\u2588\u2588\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\" \u263A \u2588\u2588\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"  \u263A\u2588\u2588\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"  \u263A\u2588\u2588\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"  \u263A\u2593\u2588\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"  \u263A\u2593\u2588\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"  \u263A\u2592\u2588\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"  \u263A\u2592\u2588\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"  \u263A\u2591\u2588\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"  \u263A\u2591\u2588\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"  \u263A \u2588\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"   \u263A\u2588\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"   \u263A\u2588\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"   \u263A\u2593\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"   \u263A\u2593\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"   \u263A\u2592\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"   \u263A\u2592\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"   \u263A\u2591\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"   \u263A\u2591\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"   \u263A \u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"    \u263A\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"    \u263A\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"    \u263A\u2593\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"    \u263A\u2593\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"    \u263A\u2592\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"    \u263A\u2592\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"    \u263A\u2591\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"    \u263A\u2591\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"    \u263A \u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"     \u263A\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"     \u263A\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"     \u263A\u2593\u00A3\u00A3\u00A3  \",\n\t\t\t\"     \u263A\u2593\u00A3\u00A3\u00A3  \",\n\t\t\t\"     \u263A\u2592\u00A3\u00A3\u00A3  \",\n\t\t\t\"     \u263A\u2592\u00A3\u00A3\u00A3  \",\n\t\t\t\"     \u263A\u2591\u00A3\u00A3\u00A3  \",\n\t\t\t\"     \u263A\u2591\u00A3\u00A3\u00A3  \",\n\t\t\t\"     \u263A \u00A3\u00A3\u00A3  \",\n\t\t\t\"      \u263A\u00A3\u00A3\u00A3  \",\n\t\t\t\"      \u263A\u00A3\u00A3\u00A3  \",\n\t\t\t\"      \u263A\u2593\u00A3\u00A3  \",\n\t\t\t\"      \u263A\u2593\u00A3\u00A3  \",\n\t\t\t\"      \u263A\u2592\u00A3\u00A3  \",\n\t\t\t\"      \u263A\u2592\u00A3\u00A3  \",\n\t\t\t\"      \u263A\u2591\u00A3\u00A3  \",\n\t\t\t\"      \u263A\u2591\u00A3\u00A3  \",\n\t\t\t\"      \u263A \u00A3\u00A3  \",\n\t\t\t\"       \u263A\u00A3\u00A3  \",\n\t\t\t\"       \u263A\u00A3\u00A3  \",\n\t\t\t\"       \u263A\u2593\u00A3  \",\n\t\t\t\"       \u263A\u2593\u00A3  \",\n\t\t\t\"       \u263A\u2592\u00A3  \",\n\t\t\t\"       \u263A\u2592\u00A3  \",\n\t\t\t\"       \u263A\u2591\u00A3  \",\n\t\t\t\"       \u263A\u2591\u00A3  \",\n\t\t\t\"       \u263A \u00A3  \",\n\t\t\t\"        \u263A\u00A3  \",\n\t\t\t\"        \u263A\u00A3  \",\n\t\t\t\"        \u263A\u2593  \",\n\t\t\t\"        \u263A\u2593  \",\n\t\t\t\"        \u263A\u2592  \",\n\t\t\t\"        \u263A\u2592  \",\n\t\t\t\"        \u263A\u2591  \",\n\t\t\t\"        \u263A\u2591  \",\n\t\t\t\"        \u263A   \",\n\t\t\t\"        \u263A  &\",\n\t\t\t\"        \u263A \u263C&\",\n\t\t\t\"       \u263A \u263C &\",\n\t\t\t\"       \u263A\u263C  &\",\n\t\t\t\"      \u263A\u263C  & \",\n\t\t\t\"      \u203C   & \",\n\t\t\t\"     \u263A   &  \",\n\t\t\t\"    \u203C    &  \",\n\t\t\t\"   \u263A    &   \",\n\t\t\t\"  \u203C     &   \",\n\t\t\t\" \u263A     &    \",\n\t\t\t\"\u203C      &    \",\n\t\t\t\"      &     \",\n\t\t\t\"      &     \",\n\t\t\t\"     &   \u2591  \",\n\t\t\t\"     &   \u2592  \",\n\t\t\t\"    &    \u2593  \",\n\t\t\t\"    &    \u00A3  \",\n\t\t\t\"   &    \u2591\u00A3  \",\n\t\t\t\"   &    \u2592\u00A3  \",\n\t\t\t\"  &     \u2593\u00A3  \",\n\t\t\t\"  &     \u00A3\u00A3  \",\n\t\t\t\" &     \u2591\u00A3\u00A3  \",\n\t\t\t\" &     \u2592\u00A3\u00A3  \",\n\t\t\t\"&      \u2593\u00A3\u00A3  \",\n\t\t\t\"&      \u00A3\u00A3\u00A3  \",\n\t\t\t\"      \u2591\u00A3\u00A3\u00A3  \",\n\t\t\t\"      \u2592\u00A3\u00A3\u00A3  \",\n\t\t\t\"      \u2593\u00A3\u00A3\u00A3  \",\n\t\t\t\"      \u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"     \u2591\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"     \u2592\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"     \u2593\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"     \u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"    \u2591\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"    \u2592\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"    \u2593\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"    \u2588\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"   \u2591\u2588\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"   \u2592\u2588\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"   \u2593\u2588\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"   \u2588\u2588\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"  \u2591\u2588\u2588\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"  \u2592\u2588\u2588\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"  \u2593\u2588\u2588\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"  \u2588\u2588\u2588\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\" \u2591\u2588\u2588\u2588\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\" \u2592\u2588\u2588\u2588\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\" \u2593\u2588\u2588\u2588\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\" \u2588\u2588\u2588\u2588\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\" \u2588\u2588\u2588\u2588\u2588\u2588\u00A3\u00A3\u00A3  \"\n\t\t]\n\t},\n\t\"fish\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\"~~~~~~~~~~~~~~~~~~~~\",\n\t\t\t\"> ~~~~~~~~~~~~~~~~~~\",\n\t\t\t\"\u00BA> ~~~~~~~~~~~~~~~~~\",\n\t\t\t\"(\u00BA> ~~~~~~~~~~~~~~~~\",\n\t\t\t\"((\u00BA> ~~~~~~~~~~~~~~~\",\n\t\t\t\"<((\u00BA> ~~~~~~~~~~~~~~\",\n\t\t\t\"><((\u00BA> ~~~~~~~~~~~~~\",\n\t\t\t\" ><((\u00BA> ~~~~~~~~~~~~\",\n\t\t\t\"~ ><((\u00BA> ~~~~~~~~~~~\",\n\t\t\t\"~~ <>((\u00BA> ~~~~~~~~~~\",\n\t\t\t\"~~~ ><((\u00BA> ~~~~~~~~~\",\n\t\t\t\"~~~~ <>((\u00BA> ~~~~~~~~\",\n\t\t\t\"~~~~~ ><((\u00BA> ~~~~~~~\",\n\t\t\t\"~~~~~~ <>((\u00BA> ~~~~~~\",\n\t\t\t\"~~~~~~~ ><((\u00BA> ~~~~~\",\n\t\t\t\"~~~~~~~~ <>((\u00BA> ~~~~\",\n\t\t\t\"~~~~~~~~~ ><((\u00BA> ~~~\",\n\t\t\t\"~~~~~~~~~~ <>((\u00BA> ~~\",\n\t\t\t\"~~~~~~~~~~~ ><((\u00BA> ~\",\n\t\t\t\"~~~~~~~~~~~~ <>((\u00BA> \",\n\t\t\t\"~~~~~~~~~~~~~ ><((\u00BA>\",\n\t\t\t\"~~~~~~~~~~~~~~ <>((\u00BA\",\n\t\t\t\"~~~~~~~~~~~~~~~ ><((\",\n\t\t\t\"~~~~~~~~~~~~~~~~ <>(\",\n\t\t\t\"~~~~~~~~~~~~~~~~~ ><\",\n\t\t\t\"~~~~~~~~~~~~~~~~~~ <\",\n\t\t\t\"~~~~~~~~~~~~~~~~~~~~\"\n\t\t]\n \t}\n}\n", "import spinners from './spinners.json' with {type: 'json'};\n\nexport default spinners;\n\nconst spinnersList = Object.keys(spinners);\n\nexport function randomSpinner() {\n\tconst randomIndex = Math.floor(Math.random() * spinnersList.length);\n\tconst spinnerName = spinnersList[randomIndex];\n\treturn spinners[spinnerName];\n}\n", "import {\n\tblue,\n\tgreen,\n\tyellow,\n\tred,\n} from 'yoctocolors';\nimport isUnicodeSupported from 'is-unicode-supported';\n\nconst _isUnicodeSupported = isUnicodeSupported();\n\nexport const info = blue(_isUnicodeSupported ? '\u2139' : 'i');\nexport const success = green(_isUnicodeSupported ? '\u2714' : '\u221A');\nexport const warning = yellow(_isUnicodeSupported ? '\u26A0' : '\u203C');\nexport const error = red(_isUnicodeSupported ? '\u2716' : '\u00D7');\n", "import tty from 'node:tty';\n\n// eslint-disable-next-line no-warning-comments\n// TODO: Use a better method when it's added to Node.js (https://github.com/nodejs/node/pull/40240)\n// Lots of optionals here to support Deno.\nconst hasColors = tty?.WriteStream?.prototype?.hasColors?.() ?? false;\n\nconst format = (open, close) => {\n\tif (!hasColors) {\n\t\treturn input => input;\n\t}\n\n\tconst openCode = `\\u001B[${open}m`;\n\tconst closeCode = `\\u001B[${close}m`;\n\n\treturn input => {\n\t\tconst string = input + ''; // eslint-disable-line no-implicit-coercion -- This is faster.\n\t\tlet index = string.indexOf(closeCode);\n\n\t\tif (index === -1) {\n\t\t\t// Note: Intentionally not using string interpolation for performance reasons.\n\t\t\treturn openCode + string + closeCode;\n\t\t}\n\n\t\t// Handle nested colors.\n\n\t\t// We could have done this, but it's too slow (as of Node.js 22).\n\t\t// return openCode + string.replaceAll(closeCode, (close === 22 ? closeCode : '') + openCode) + closeCode;\n\n\t\tlet result = openCode;\n\t\tlet lastIndex = 0;\n\n\t\t// SGR 22 resets both bold (1) and dim (2). When we encounter a nested\n\t\t// close for styles that use 22, we need to re-open the outer style.\n\t\tconst reopenOnNestedClose = close === 22;\n\t\tconst replaceCode = (reopenOnNestedClose ? closeCode : '') + openCode;\n\n\t\twhile (index !== -1) {\n\t\t\tresult += string.slice(lastIndex, index) + replaceCode;\n\t\t\tlastIndex = index + closeCode.length;\n\t\t\tindex = string.indexOf(closeCode, lastIndex);\n\t\t}\n\n\t\tresult += string.slice(lastIndex) + closeCode;\n\n\t\treturn result;\n\t};\n};\n\nexport const reset = format(0, 0);\nexport const bold = format(1, 22);\nexport const dim = format(2, 22);\nexport const italic = format(3, 23);\nexport const underline = format(4, 24);\nexport const overline = format(53, 55);\nexport const inverse = format(7, 27);\nexport const hidden = format(8, 28);\nexport const strikethrough = format(9, 29);\n\nexport const black = format(30, 39);\nexport const red = format(31, 39);\nexport const green = format(32, 39);\nexport const yellow = format(33, 39);\nexport const blue = format(34, 39);\nexport const magenta = format(35, 39);\nexport const cyan = format(36, 39);\nexport const white = format(37, 39);\nexport const gray = format(90, 39);\n\nexport const bgBlack = format(40, 49);\nexport const bgRed = format(41, 49);\nexport const bgGreen = format(42, 49);\nexport const bgYellow = format(43, 49);\nexport const bgBlue = format(44, 49);\nexport const bgMagenta = format(45, 49);\nexport const bgCyan = format(46, 49);\nexport const bgWhite = format(47, 49);\nexport const bgGray = format(100, 49);\n\nexport const redBright = format(91, 39);\nexport const greenBright = format(92, 39);\nexport const yellowBright = format(93, 39);\nexport const blueBright = format(94, 39);\nexport const magentaBright = format(95, 39);\nexport const cyanBright = format(96, 39);\nexport const whiteBright = format(97, 39);\n\nexport const bgRedBright = format(101, 49);\nexport const bgGreenBright = format(102, 49);\nexport const bgYellowBright = format(103, 49);\nexport const bgBlueBright = format(104, 49);\nexport const bgMagentaBright = format(105, 49);\nexport const bgCyanBright = format(106, 49);\nexport const bgWhiteBright = format(107, 49);\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", "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\n\t// OSC sequences only: ESC ] ... ST (non-greedy until the first ST)\n\tconst osc = `(?:\\\\u001B\\\\][\\\\s\\\\S]*?${ST})`;\n\n\t// CSI and related: ESC/C1, optional intermediates, optional params (supports ; and :) then final byte\n\tconst csi = '[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:\\\\d{1,4}(?:[;:]\\\\d{0,4})*)?[\\\\dA-PR-TZcf-nq-uy=><~]';\n\n\tconst pattern = `${osc}|${csi}`;\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", "// Generated code.\n\nfunction isAmbiguous(x) {\n\treturn x === 0xA1\n\t\t|| x === 0xA4\n\t\t|| x === 0xA7\n\t\t|| x === 0xA8\n\t\t|| x === 0xAA\n\t\t|| x === 0xAD\n\t\t|| x === 0xAE\n\t\t|| x >= 0xB0 && x <= 0xB4\n\t\t|| x >= 0xB6 && x <= 0xBA\n\t\t|| x >= 0xBC && x <= 0xBF\n\t\t|| x === 0xC6\n\t\t|| x === 0xD0\n\t\t|| x === 0xD7\n\t\t|| x === 0xD8\n\t\t|| x >= 0xDE && x <= 0xE1\n\t\t|| x === 0xE6\n\t\t|| x >= 0xE8 && x <= 0xEA\n\t\t|| x === 0xEC\n\t\t|| x === 0xED\n\t\t|| x === 0xF0\n\t\t|| x === 0xF2\n\t\t|| x === 0xF3\n\t\t|| x >= 0xF7 && x <= 0xFA\n\t\t|| x === 0xFC\n\t\t|| x === 0xFE\n\t\t|| x === 0x101\n\t\t|| x === 0x111\n\t\t|| x === 0x113\n\t\t|| x === 0x11B\n\t\t|| x === 0x126\n\t\t|| x === 0x127\n\t\t|| x === 0x12B\n\t\t|| x >= 0x131 && x <= 0x133\n\t\t|| x === 0x138\n\t\t|| x >= 0x13F && x <= 0x142\n\t\t|| x === 0x144\n\t\t|| x >= 0x148 && x <= 0x14B\n\t\t|| x === 0x14D\n\t\t|| x === 0x152\n\t\t|| x === 0x153\n\t\t|| x === 0x166\n\t\t|| x === 0x167\n\t\t|| x === 0x16B\n\t\t|| x === 0x1CE\n\t\t|| x === 0x1D0\n\t\t|| x === 0x1D2\n\t\t|| x === 0x1D4\n\t\t|| x === 0x1D6\n\t\t|| x === 0x1D8\n\t\t|| x === 0x1DA\n\t\t|| x === 0x1DC\n\t\t|| x === 0x251\n\t\t|| x === 0x261\n\t\t|| x === 0x2C4\n\t\t|| x === 0x2C7\n\t\t|| x >= 0x2C9 && x <= 0x2CB\n\t\t|| x === 0x2CD\n\t\t|| x === 0x2D0\n\t\t|| x >= 0x2D8 && x <= 0x2DB\n\t\t|| x === 0x2DD\n\t\t|| x === 0x2DF\n\t\t|| x >= 0x300 && x <= 0x36F\n\t\t|| x >= 0x391 && x <= 0x3A1\n\t\t|| x >= 0x3A3 && x <= 0x3A9\n\t\t|| x >= 0x3B1 && x <= 0x3C1\n\t\t|| x >= 0x3C3 && x <= 0x3C9\n\t\t|| x === 0x401\n\t\t|| x >= 0x410 && x <= 0x44F\n\t\t|| x === 0x451\n\t\t|| x === 0x2010\n\t\t|| x >= 0x2013 && x <= 0x2016\n\t\t|| x === 0x2018\n\t\t|| x === 0x2019\n\t\t|| x === 0x201C\n\t\t|| x === 0x201D\n\t\t|| x >= 0x2020 && x <= 0x2022\n\t\t|| x >= 0x2024 && x <= 0x2027\n\t\t|| x === 0x2030\n\t\t|| x === 0x2032\n\t\t|| x === 0x2033\n\t\t|| x === 0x2035\n\t\t|| x === 0x203B\n\t\t|| x === 0x203E\n\t\t|| x === 0x2074\n\t\t|| x === 0x207F\n\t\t|| x >= 0x2081 && x <= 0x2084\n\t\t|| x === 0x20AC\n\t\t|| x === 0x2103\n\t\t|| x === 0x2105\n\t\t|| x === 0x2109\n\t\t|| x === 0x2113\n\t\t|| x === 0x2116\n\t\t|| x === 0x2121\n\t\t|| x === 0x2122\n\t\t|| x === 0x2126\n\t\t|| x === 0x212B\n\t\t|| x === 0x2153\n\t\t|| x === 0x2154\n\t\t|| x >= 0x215B && x <= 0x215E\n\t\t|| x >= 0x2160 && x <= 0x216B\n\t\t|| x >= 0x2170 && x <= 0x2179\n\t\t|| x === 0x2189\n\t\t|| x >= 0x2190 && x <= 0x2199\n\t\t|| x === 0x21B8\n\t\t|| x === 0x21B9\n\t\t|| x === 0x21D2\n\t\t|| x === 0x21D4\n\t\t|| x === 0x21E7\n\t\t|| x === 0x2200\n\t\t|| x === 0x2202\n\t\t|| x === 0x2203\n\t\t|| x === 0x2207\n\t\t|| x === 0x2208\n\t\t|| x === 0x220B\n\t\t|| x === 0x220F\n\t\t|| x === 0x2211\n\t\t|| x === 0x2215\n\t\t|| x === 0x221A\n\t\t|| x >= 0x221D && x <= 0x2220\n\t\t|| x === 0x2223\n\t\t|| x === 0x2225\n\t\t|| x >= 0x2227 && x <= 0x222C\n\t\t|| x === 0x222E\n\t\t|| x >= 0x2234 && x <= 0x2237\n\t\t|| x === 0x223C\n\t\t|| x === 0x223D\n\t\t|| x === 0x2248\n\t\t|| x === 0x224C\n\t\t|| x === 0x2252\n\t\t|| x === 0x2260\n\t\t|| x === 0x2261\n\t\t|| x >= 0x2264 && x <= 0x2267\n\t\t|| x === 0x226A\n\t\t|| x === 0x226B\n\t\t|| x === 0x226E\n\t\t|| x === 0x226F\n\t\t|| x === 0x2282\n\t\t|| x === 0x2283\n\t\t|| x === 0x2286\n\t\t|| x === 0x2287\n\t\t|| x === 0x2295\n\t\t|| x === 0x2299\n\t\t|| x === 0x22A5\n\t\t|| x === 0x22BF\n\t\t|| x === 0x2312\n\t\t|| x >= 0x2460 && x <= 0x24E9\n\t\t|| x >= 0x24EB && x <= 0x254B\n\t\t|| x >= 0x2550 && x <= 0x2573\n\t\t|| x >= 0x2580 && x <= 0x258F\n\t\t|| x >= 0x2592 && x <= 0x2595\n\t\t|| x === 0x25A0\n\t\t|| x === 0x25A1\n\t\t|| x >= 0x25A3 && x <= 0x25A9\n\t\t|| x === 0x25B2\n\t\t|| x === 0x25B3\n\t\t|| x === 0x25B6\n\t\t|| x === 0x25B7\n\t\t|| x === 0x25BC\n\t\t|| x === 0x25BD\n\t\t|| x === 0x25C0\n\t\t|| x === 0x25C1\n\t\t|| x >= 0x25C6 && x <= 0x25C8\n\t\t|| x === 0x25CB\n\t\t|| x >= 0x25CE && x <= 0x25D1\n\t\t|| x >= 0x25E2 && x <= 0x25E5\n\t\t|| x === 0x25EF\n\t\t|| x === 0x2605\n\t\t|| x === 0x2606\n\t\t|| x === 0x2609\n\t\t|| x === 0x260E\n\t\t|| x === 0x260F\n\t\t|| x === 0x261C\n\t\t|| x === 0x261E\n\t\t|| x === 0x2640\n\t\t|| x === 0x2642\n\t\t|| x === 0x2660\n\t\t|| x === 0x2661\n\t\t|| x >= 0x2663 && x <= 0x2665\n\t\t|| x >= 0x2667 && x <= 0x266A\n\t\t|| x === 0x266C\n\t\t|| x === 0x266D\n\t\t|| x === 0x266F\n\t\t|| x === 0x269E\n\t\t|| x === 0x269F\n\t\t|| x === 0x26BF\n\t\t|| x >= 0x26C6 && x <= 0x26CD\n\t\t|| x >= 0x26CF && x <= 0x26D3\n\t\t|| x >= 0x26D5 && x <= 0x26E1\n\t\t|| x === 0x26E3\n\t\t|| x === 0x26E8\n\t\t|| x === 0x26E9\n\t\t|| x >= 0x26EB && x <= 0x26F1\n\t\t|| x === 0x26F4\n\t\t|| x >= 0x26F6 && x <= 0x26F9\n\t\t|| x === 0x26FB\n\t\t|| x === 0x26FC\n\t\t|| x === 0x26FE\n\t\t|| x === 0x26FF\n\t\t|| x === 0x273D\n\t\t|| x >= 0x2776 && x <= 0x277F\n\t\t|| x >= 0x2B56 && x <= 0x2B59\n\t\t|| x >= 0x3248 && x <= 0x324F\n\t\t|| x >= 0xE000 && x <= 0xF8FF\n\t\t|| x >= 0xFE00 && x <= 0xFE0F\n\t\t|| x === 0xFFFD\n\t\t|| x >= 0x1F100 && x <= 0x1F10A\n\t\t|| x >= 0x1F110 && x <= 0x1F12D\n\t\t|| x >= 0x1F130 && x <= 0x1F169\n\t\t|| x >= 0x1F170 && x <= 0x1F18D\n\t\t|| x === 0x1F18F\n\t\t|| x === 0x1F190\n\t\t|| x >= 0x1F19B && x <= 0x1F1AC\n\t\t|| x >= 0xE0100 && x <= 0xE01EF\n\t\t|| x >= 0xF0000 && x <= 0xFFFFD\n\t\t|| x >= 0x100000 && x <= 0x10FFFD;\n}\n\nfunction isFullWidth(x) {\n\treturn x === 0x3000\n\t\t|| x >= 0xFF01 && x <= 0xFF60\n\t\t|| x >= 0xFFE0 && x <= 0xFFE6;\n}\n\nfunction isWide(x) {\n\treturn x >= 0x1100 && x <= 0x115F\n\t\t|| x === 0x231A\n\t\t|| x === 0x231B\n\t\t|| x === 0x2329\n\t\t|| x === 0x232A\n\t\t|| x >= 0x23E9 && x <= 0x23EC\n\t\t|| x === 0x23F0\n\t\t|| x === 0x23F3\n\t\t|| x === 0x25FD\n\t\t|| x === 0x25FE\n\t\t|| x === 0x2614\n\t\t|| x === 0x2615\n\t\t|| x >= 0x2630 && x <= 0x2637\n\t\t|| x >= 0x2648 && x <= 0x2653\n\t\t|| x === 0x267F\n\t\t|| x >= 0x268A && x <= 0x268F\n\t\t|| x === 0x2693\n\t\t|| x === 0x26A1\n\t\t|| x === 0x26AA\n\t\t|| x === 0x26AB\n\t\t|| x === 0x26BD\n\t\t|| x === 0x26BE\n\t\t|| x === 0x26C4\n\t\t|| x === 0x26C5\n\t\t|| x === 0x26CE\n\t\t|| x === 0x26D4\n\t\t|| x === 0x26EA\n\t\t|| x === 0x26F2\n\t\t|| x === 0x26F3\n\t\t|| x === 0x26F5\n\t\t|| x === 0x26FA\n\t\t|| x === 0x26FD\n\t\t|| x === 0x2705\n\t\t|| x === 0x270A\n\t\t|| x === 0x270B\n\t\t|| x === 0x2728\n\t\t|| x === 0x274C\n\t\t|| x === 0x274E\n\t\t|| x >= 0x2753 && x <= 0x2755\n\t\t|| x === 0x2757\n\t\t|| x >= 0x2795 && x <= 0x2797\n\t\t|| x === 0x27B0\n\t\t|| x === 0x27BF\n\t\t|| x === 0x2B1B\n\t\t|| x === 0x2B1C\n\t\t|| x === 0x2B50\n\t\t|| x === 0x2B55\n\t\t|| x >= 0x2E80 && x <= 0x2E99\n\t\t|| x >= 0x2E9B && x <= 0x2EF3\n\t\t|| x >= 0x2F00 && x <= 0x2FD5\n\t\t|| x >= 0x2FF0 && x <= 0x2FFF\n\t\t|| x >= 0x3001 && x <= 0x303E\n\t\t|| x >= 0x3041 && x <= 0x3096\n\t\t|| x >= 0x3099 && x <= 0x30FF\n\t\t|| x >= 0x3105 && x <= 0x312F\n\t\t|| x >= 0x3131 && x <= 0x318E\n\t\t|| x >= 0x3190 && x <= 0x31E5\n\t\t|| x >= 0x31EF && x <= 0x321E\n\t\t|| x >= 0x3220 && x <= 0x3247\n\t\t|| x >= 0x3250 && x <= 0xA48C\n\t\t|| x >= 0xA490 && x <= 0xA4C6\n\t\t|| x >= 0xA960 && x <= 0xA97C\n\t\t|| x >= 0xAC00 && x <= 0xD7A3\n\t\t|| x >= 0xF900 && x <= 0xFAFF\n\t\t|| x >= 0xFE10 && x <= 0xFE19\n\t\t|| x >= 0xFE30 && x <= 0xFE52\n\t\t|| x >= 0xFE54 && x <= 0xFE66\n\t\t|| x >= 0xFE68 && x <= 0xFE6B\n\t\t|| x >= 0x16FE0 && x <= 0x16FE4\n\t\t|| x >= 0x16FF0 && x <= 0x16FF6\n\t\t|| x >= 0x17000 && x <= 0x18CD5\n\t\t|| x >= 0x18CFF && x <= 0x18D1E\n\t\t|| x >= 0x18D80 && x <= 0x18DF2\n\t\t|| x >= 0x1AFF0 && x <= 0x1AFF3\n\t\t|| x >= 0x1AFF5 && x <= 0x1AFFB\n\t\t|| x === 0x1AFFD\n\t\t|| x === 0x1AFFE\n\t\t|| x >= 0x1B000 && x <= 0x1B122\n\t\t|| x === 0x1B132\n\t\t|| x >= 0x1B150 && x <= 0x1B152\n\t\t|| x === 0x1B155\n\t\t|| x >= 0x1B164 && x <= 0x1B167\n\t\t|| x >= 0x1B170 && x <= 0x1B2FB\n\t\t|| x >= 0x1D300 && x <= 0x1D356\n\t\t|| x >= 0x1D360 && x <= 0x1D376\n\t\t|| x === 0x1F004\n\t\t|| x === 0x1F0CF\n\t\t|| x === 0x1F18E\n\t\t|| x >= 0x1F191 && x <= 0x1F19A\n\t\t|| x >= 0x1F200 && x <= 0x1F202\n\t\t|| x >= 0x1F210 && x <= 0x1F23B\n\t\t|| x >= 0x1F240 && x <= 0x1F248\n\t\t|| x === 0x1F250\n\t\t|| x === 0x1F251\n\t\t|| x >= 0x1F260 && x <= 0x1F265\n\t\t|| x >= 0x1F300 && x <= 0x1F320\n\t\t|| x >= 0x1F32D && x <= 0x1F335\n\t\t|| x >= 0x1F337 && x <= 0x1F37C\n\t\t|| x >= 0x1F37E && x <= 0x1F393\n\t\t|| x >= 0x1F3A0 && x <= 0x1F3CA\n\t\t|| x >= 0x1F3CF && x <= 0x1F3D3\n\t\t|| x >= 0x1F3E0 && x <= 0x1F3F0\n\t\t|| x === 0x1F3F4\n\t\t|| x >= 0x1F3F8 && x <= 0x1F43E\n\t\t|| x === 0x1F440\n\t\t|| x >= 0x1F442 && x <= 0x1F4FC\n\t\t|| x >= 0x1F4FF && x <= 0x1F53D\n\t\t|| x >= 0x1F54B && x <= 0x1F54E\n\t\t|| x >= 0x1F550 && x <= 0x1F567\n\t\t|| x === 0x1F57A\n\t\t|| x === 0x1F595\n\t\t|| x === 0x1F596\n\t\t|| x === 0x1F5A4\n\t\t|| x >= 0x1F5FB && x <= 0x1F64F\n\t\t|| x >= 0x1F680 && x <= 0x1F6C5\n\t\t|| x === 0x1F6CC\n\t\t|| x >= 0x1F6D0 && x <= 0x1F6D2\n\t\t|| x >= 0x1F6D5 && x <= 0x1F6D8\n\t\t|| x >= 0x1F6DC && x <= 0x1F6DF\n\t\t|| x === 0x1F6EB\n\t\t|| x === 0x1F6EC\n\t\t|| x >= 0x1F6F4 && x <= 0x1F6FC\n\t\t|| x >= 0x1F7E0 && x <= 0x1F7EB\n\t\t|| x === 0x1F7F0\n\t\t|| x >= 0x1F90C && x <= 0x1F93A\n\t\t|| x >= 0x1F93C && x <= 0x1F945\n\t\t|| x >= 0x1F947 && x <= 0x1F9FF\n\t\t|| x >= 0x1FA70 && x <= 0x1FA7C\n\t\t|| x >= 0x1FA80 && x <= 0x1FA8A\n\t\t|| x >= 0x1FA8E && x <= 0x1FAC6\n\t\t|| x === 0x1FAC8\n\t\t|| x >= 0x1FACD && x <= 0x1FADC\n\t\t|| x >= 0x1FADF && x <= 0x1FAEA\n\t\t|| x >= 0x1FAEF && x <= 0x1FAF8\n\t\t|| x >= 0x20000 && x <= 0x2FFFD\n\t\t|| x >= 0x30000 && x <= 0x3FFFD;\n}\n\nfunction getCategory(x) {\n\tif (isAmbiguous(x)) return 'ambiguous';\n\n\tif (isFullWidth(x)) return 'fullwidth';\n\n\tif (\n\t\tx === 0x20A9\n\t\t|| x >= 0xFF61 && x <= 0xFFBE\n\t\t|| x >= 0xFFC2 && x <= 0xFFC7\n\t\t|| x >= 0xFFCA && x <= 0xFFCF\n\t\t|| x >= 0xFFD2 && x <= 0xFFD7\n\t\t|| x >= 0xFFDA && x <= 0xFFDC\n\t\t|| x >= 0xFFE8 && x <= 0xFFEE\n\t) {\n\t\treturn 'halfwidth';\n\t}\n\n\tif (\n\t\tx >= 0x20 && x <= 0x7E\n\t\t|| x === 0xA2\n\t\t|| x === 0xA3\n\t\t|| x === 0xA5\n\t\t|| x === 0xA6\n\t\t|| x === 0xAC\n\t\t|| x === 0xAF\n\t\t|| x >= 0x27E6 && x <= 0x27ED\n\t\t|| x === 0x2985\n\t\t|| x === 0x2986\n\t) {\n\t\treturn 'narrow';\n\t}\n\n\tif (isWide(x)) return 'wide';\n\n\treturn 'neutral';\n}\n\nexport {isAmbiguous, isFullWidth, isWide, getCategory};\n", "import {getCategory, isAmbiguous, isFullWidth, isWide} from './lookup.js';\n\nfunction validate(codePoint) {\n\tif (!Number.isSafeInteger(codePoint)) {\n\t\tthrow new TypeError(`Expected a code point, got \\`${typeof codePoint}\\`.`);\n\t}\n}\n\nexport function eastAsianWidthType(codePoint) {\n\tvalidate(codePoint);\n\n\treturn getCategory(codePoint);\n}\n\nexport function eastAsianWidth(codePoint, {ambiguousAsWide = false} = {}) {\n\tvalidate(codePoint);\n\n\tif (\n\t\tisFullWidth(codePoint)\n\t\t|| isWide(codePoint)\n\t\t|| (ambiguousAsWide && isAmbiguous(codePoint))\n\t) {\n\t\treturn 2;\n\t}\n\n\treturn 1;\n}\n\n// Private exports for https://github.com/sindresorhus/is-fullwidth-code-point\nexport {isFullWidth as _isFullWidth, isWide as _isWide} from './lookup.js';\n", "import stripAnsi from 'strip-ansi';\nimport {eastAsianWidth} from 'get-east-asian-width';\n\n/**\nLogic:\n- Segment graphemes to match how terminals render clusters.\n- Width rules:\n\t1. Skip non-printing clusters (Default_Ignorable, Control, pure Mark, lone Surrogates). Tabs are ignored by design.\n\t2. RGI emoji clusters (\\p{RGI_Emoji}) are double-width.\n\t3. Otherwise use East Asian Width of the cluster\u2019s first visible code point, and add widths for trailing Halfwidth/Fullwidth Forms within the same cluster (e.g., dakuten/handakuten/prolonged sound mark).\n*/\n\nconst segmenter = new Intl.Segmenter();\n\n// Whole-cluster zero-width\nconst zeroWidthClusterRegex = /^(?:\\p{Default_Ignorable_Code_Point}|\\p{Control}|\\p{Mark}|\\p{Surrogate})+$/v;\n\n// Pick the base scalar if the cluster starts with Prepend/Format/Marks\nconst leadingNonPrintingRegex = /^[\\p{Default_Ignorable_Code_Point}\\p{Control}\\p{Format}\\p{Mark}\\p{Surrogate}]+/v;\n\n// RGI emoji sequences\nconst rgiEmojiRegex = /^\\p{RGI_Emoji}$/v;\n\nfunction baseVisible(segment) {\n\treturn segment.replace(leadingNonPrintingRegex, '');\n}\n\nfunction isZeroWidthCluster(segment) {\n\treturn zeroWidthClusterRegex.test(segment);\n}\n\nfunction trailingHalfwidthWidth(segment, eastAsianWidthOptions) {\n\tlet extra = 0;\n\tif (segment.length > 1) {\n\t\tfor (const char of segment.slice(1)) {\n\t\t\tif (char >= '\\uFF00' && char <= '\\uFFEF') {\n\t\t\t\textra += eastAsianWidth(char.codePointAt(0), eastAsianWidthOptions);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn extra;\n}\n\nexport default function stringWidth(input, options = {}) {\n\tif (typeof input !== 'string' || input.length === 0) {\n\t\treturn 0;\n\t}\n\n\tconst {\n\t\tambiguousIsNarrow = true,\n\t\tcountAnsiEscapeCodes = false,\n\t} = options;\n\n\tlet string = input;\n\n\tif (!countAnsiEscapeCodes) {\n\t\tstring = stripAnsi(string);\n\t}\n\n\tif (string.length === 0) {\n\t\treturn 0;\n\t}\n\n\tlet width = 0;\n\tconst eastAsianWidthOptions = {ambiguousAsWide: !ambiguousIsNarrow};\n\n\tfor (const {segment} of segmenter.segment(string)) {\n\t\t// Zero-width / non-printing clusters\n\t\tif (isZeroWidthCluster(segment)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Emoji width logic\n\t\tif (rgiEmojiRegex.test(segment)) {\n\t\t\twidth += 2;\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Everything else: EAW of the cluster\u2019s first visible scalar\n\t\tconst codePoint = baseVisible(segment).codePointAt(0);\n\t\twidth += eastAsianWidth(codePoint, eastAsianWidthOptions);\n\n\t\t// Add width for trailing Halfwidth and Fullwidth Forms (e.g., \uFF9E, \uFF9F, \uFF70)\n\t\twidth += trailingHalfwidthWidth(segment, eastAsianWidthOptions);\n\t}\n\n\treturn width;\n}\n", "export default function isInteractive({stream = process.stdout} = {}) {\n\treturn Boolean(\n\t\tstream && stream.isTTY &&\n\t\tprocess.env.TERM !== 'dumb' &&\n\t\t!('CI' in process.env)\n\t);\n}\n", "import process from 'node:process';\n\nconst ASCII_ETX_CODE = 0x03; // Ctrl+C emits this code\n\nclass StdinDiscarder {\n\t#activeCount = 0;\n\n\tstart() {\n\t\tthis.#activeCount++;\n\n\t\tif (this.#activeCount === 1) {\n\t\t\tthis.#realStart();\n\t\t}\n\t}\n\n\tstop() {\n\t\tif (this.#activeCount <= 0) {\n\t\t\tthrow new Error('`stop` called more times than `start`');\n\t\t}\n\n\t\tthis.#activeCount--;\n\n\t\tif (this.#activeCount === 0) {\n\t\t\tthis.#realStop();\n\t\t}\n\t}\n\n\t#realStart() {\n\t\t// No known way to make it work reliably on Windows.\n\t\tif (process.platform === 'win32' || !process.stdin.isTTY) {\n\t\t\treturn;\n\t\t}\n\n\t\tprocess.stdin.setRawMode(true);\n\t\tprocess.stdin.on('data', this.#handleInput);\n\t\tprocess.stdin.resume();\n\t}\n\n\t#realStop() {\n\t\tif (!process.stdin.isTTY) {\n\t\t\treturn;\n\t\t}\n\n\t\tprocess.stdin.off('data', this.#handleInput);\n\t\tprocess.stdin.pause();\n\t\tprocess.stdin.setRawMode(false);\n\t}\n\n\t#handleInput(chunk) {\n\t\t// Allow Ctrl+C to gracefully exit.\n\t\tif (chunk[0] === ASCII_ETX_CODE) {\n\t\t\tprocess.emit('SIGINT');\n\t\t}\n\t}\n}\n\nconst stdinDiscarder = new StdinDiscarder();\n\nexport default stdinDiscarder;\n", "import * as dotenv from \"dotenv\";\nimport { Context } from \"../../bundler/context.js\";\nimport { changedEnvVarFile, getEnvVarRegex } from \"./envvars.js\";\nimport {\n  CONVEX_DEPLOY_KEY_ENV_VAR_NAME,\n  CONVEX_DEPLOYMENT_ENV_VAR_NAME,\n  ENV_VAR_FILE_PATH,\n} from \"./utils/utils.js\";\nimport { DeploymentType } from \"./api.js\";\n\n// Given a deployment string like \"dev:tall-forest-1234\"\n// returns only the slug \"tall-forest-1234\".\n// If there's no prefix returns the original string.\nexport function stripDeploymentTypePrefix(deployment: string) {\n  return deployment.split(\":\").at(-1)!;\n}\n\n// Handling legacy CONVEX_DEPLOYMENT without type prefix as well\nexport function getDeploymentTypeFromConfiguredDeployment(raw: string) {\n  const typeRaw = raw.split(\":\")[0];\n  const type =\n    typeRaw === \"prod\" ||\n    typeRaw === \"dev\" ||\n    typeRaw === \"preview\" ||\n    typeRaw === \"local\"\n      ? typeRaw\n      : null;\n  return type;\n}\n\nexport function isAnonymousDeployment(deploymentName: string) {\n  return deploymentName.startsWith(\"anonymous-\");\n}\n\nexport function removeAnonymousPrefix(deploymentName: string) {\n  if (isAnonymousDeployment(deploymentName)) {\n    return deploymentName.slice(\"anonymous-\".length);\n  }\n  return deploymentName;\n}\n\nexport async function writeDeploymentEnvVar(\n  ctx: Context,\n  deploymentType: DeploymentType,\n  deployment: {\n    team: string | null;\n    project: string | null;\n    deploymentName: string;\n  },\n  existingValue: string | null,\n): Promise<{ wroteToGitIgnore: boolean; changedDeploymentEnvVar: boolean }> {\n  const existingFile = ctx.fs.exists(ENV_VAR_FILE_PATH)\n    ? ctx.fs.readUtf8File(ENV_VAR_FILE_PATH)\n    : null;\n  const changedFile = changesToEnvVarFile(\n    existingFile,\n    deploymentType,\n    deployment,\n  );\n  const deploymentEnvVarValue =\n    deploymentType + \":\" + deployment.deploymentName;\n  // The `existingValue` that reaches this function is at least sometimes is missing its prefix.\n  // Until this is cleaned up consider either of these values not a change.\n  // Otherwise we spam the init instructions (Welcome to Convex etc.) on every run of `npx convex dev`.\n  const changedDeploymentEnvVar =\n    !!changedFile &&\n    existingValue !== deployment.deploymentName &&\n    existingValue !== deploymentEnvVarValue;\n\n  if (changedFile !== null) {\n    ctx.fs.writeUtf8File(ENV_VAR_FILE_PATH, changedFile);\n    // Only do this if we're not reinitializing an existing setup\n    return {\n      wroteToGitIgnore: await gitIgnoreEnvVarFile(ctx),\n      changedDeploymentEnvVar,\n    };\n  }\n  return {\n    wroteToGitIgnore: false,\n    changedDeploymentEnvVar,\n  };\n}\n\n// Only used in the internal --url flow\nexport async function eraseDeploymentEnvVar(ctx: Context): Promise<boolean> {\n  const existingFile = ctx.fs.exists(ENV_VAR_FILE_PATH)\n    ? ctx.fs.readUtf8File(ENV_VAR_FILE_PATH)\n    : null;\n  if (existingFile === null) {\n    return false;\n  }\n  const config = dotenv.parse(existingFile);\n  const existing = config[CONVEX_DEPLOYMENT_ENV_VAR_NAME];\n  if (existing === undefined) {\n    return false;\n  }\n  const changedFile = existingFile.replace(\n    getEnvVarRegex(CONVEX_DEPLOYMENT_ENV_VAR_NAME),\n    \"\",\n  );\n  ctx.fs.writeUtf8File(ENV_VAR_FILE_PATH, changedFile);\n  return true;\n}\n\nasync function gitIgnoreEnvVarFile(ctx: Context): Promise<boolean> {\n  const gitIgnorePath = \".gitignore\";\n  const gitIgnoreContents = ctx.fs.exists(gitIgnorePath)\n    ? ctx.fs.readUtf8File(gitIgnorePath)\n    : \"\";\n  const changedGitIgnore = changesToGitIgnore(gitIgnoreContents);\n  if (changedGitIgnore !== null) {\n    ctx.fs.writeUtf8File(gitIgnorePath, changedGitIgnore);\n    return true;\n  }\n  return false;\n}\n\n// exported for tests\nexport function changesToEnvVarFile(\n  existingFile: string | null,\n  deploymentType: DeploymentType,\n  {\n    team,\n    project,\n    deploymentName,\n  }: { team: string | null; project: string | null; deploymentName: string },\n): string | null {\n  const deploymentValue = deploymentType + \":\" + deploymentName;\n  const commentOnPreviousLine = \"# Deployment used by `npx convex dev`\";\n  const commentAfterValue =\n    team !== null && project !== null\n      ? `team: ${team}, project: ${project}`\n      : null;\n  return changedEnvVarFile({\n    existingFileContent: existingFile,\n    envVarName: CONVEX_DEPLOYMENT_ENV_VAR_NAME,\n    envVarValue: deploymentValue,\n    commentAfterValue,\n    commentOnPreviousLine,\n  });\n}\n\n// exported for tests\nexport function changesToGitIgnore(existingFile: string | null): string | null {\n  if (existingFile === null) {\n    return `${ENV_VAR_FILE_PATH}\\n`;\n  }\n  const gitIgnoreLines = existingFile.split(\"\\n\");\n  const envVarFileIgnored = gitIgnoreLines.some((line) => {\n    if (line.startsWith(\"#\")) return false;\n    if (line.startsWith(\"!\")) return false;\n\n    // .gitignore ignores trailing whitespace, and also we need to remove\n    // the trailing `\\r` from Windows-style newline since we split on `\\n`.\n    const trimmedLine = line.trimEnd();\n\n    const envIgnorePatterns = [\n      /^\\.env\\.local$/,\n      /^\\.env\\.\\*$/,\n      /^\\.env\\*$/,\n      /^.*\\.local$/,\n      /^\\.env\\*\\.local$/,\n    ];\n\n    return envIgnorePatterns.some((pattern) => pattern.test(trimmedLine));\n  });\n  if (!envVarFileIgnored) {\n    return `${existingFile}\\n${ENV_VAR_FILE_PATH}\\n`;\n  } else {\n    return null;\n  }\n}\n\nexport async function deploymentNameFromAdminKeyOrCrash(\n  ctx: Context,\n  adminKey: string,\n) {\n  const deploymentName = deploymentNameFromAdminKey(adminKey);\n  if (deploymentName === null) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: `Please set ${CONVEX_DEPLOY_KEY_ENV_VAR_NAME} to a new key which you can find on your Convex dashboard.`,\n    });\n  }\n  return deploymentName;\n}\n\nfunction deploymentNameFromAdminKey(adminKey: string) {\n  const parts = adminKey.split(\"|\");\n  if (parts.length === 1) {\n    return null;\n  }\n  if (isPreviewDeployKey(adminKey)) {\n    // Preview deploy keys do not contain a deployment name.\n    return null;\n  }\n  return stripDeploymentTypePrefix(parts[0]);\n}\n\n// Needed to differentiate a preview deploy key\n// from a concrete preview deployment's deploy key.\n// preview deploy key: `preview:team:project|key`\n// preview deployment's deploy key: `preview:deploymentName|key`\nexport function isPreviewDeployKey(adminKey: string) {\n  const parts = adminKey.split(\"|\");\n  if (parts.length === 1) {\n    return false;\n  }\n  const [prefix] = parts;\n  const prefixParts = prefix.split(\":\");\n  return prefixParts[0] === \"preview\" && prefixParts.length === 3;\n}\n\nexport function isProjectKey(adminKey: string) {\n  return /^project:.*\\|/.test(adminKey);\n}\n\n// \"dev deploy keys\" and \"prod deploy keys\" are deployment keys.\n// On the client these are also known as admin keys.\nexport function isDeploymentKey(adminKey: string) {\n  return /^(dev|prod):.*\\|/.test(adminKey);\n}\n\n// For current keys returns prod|dev|preview,\n// for legacy keys returns \"prod\".\n// Examples:\n//  \"prod:deploymentName|key\" -> \"prod\"\n//  \"preview:deploymentName|key\" -> \"preview\"\n//  \"dev:deploymentName|key\" -> \"dev\"\n//  \"custom:deploymentName|key\" -> \"custom\"\n//  \"key\" -> \"prod\"\nexport function deploymentTypeFromAdminKey(adminKey: string) {\n  const parts = adminKey.split(\":\");\n  if (parts.length === 1) {\n    return \"prod\";\n  }\n  return parts.at(0)! as DeploymentType;\n}\n\nexport async function getTeamAndProjectFromPreviewAdminKey(\n  ctx: Context,\n  adminKey: string,\n) {\n  const parts = adminKey.split(\"|\")[0].split(\":\");\n  if (parts.length !== 3) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage:\n        \"Malformed preview CONVEX_DEPLOY_KEY, get a new key from Project Settings.\",\n    });\n  }\n  const [_preview, teamSlug, projectSlug] = parts;\n  return { teamSlug, projectSlug };\n}\n\nexport type OnDeploymentActivityFunc = (\n  isOffline: boolean,\n  wasOffline: boolean,\n) => Promise<void>;\nexport type CleanupDeploymentFunc = () => Promise<void>;\nexport type DeploymentDetails = {\n  deploymentName: string;\n  deploymentUrl: string;\n  adminKey: string;\n  onActivity: OnDeploymentActivityFunc | null;\n};\n", "/**\n * Help the developer store the CONVEX_URL environment variable.\n */\nimport { chalkStderr } from \"chalk\";\nimport * as dotenv from \"dotenv\";\n\nimport { Context } from \"../../bundler/context.js\";\nimport { logWarning } from \"../../bundler/log.js\";\nimport { loadPackageJson } from \"./utils/utils.js\";\n\nconst _FRAMEWORKS = [\n  \"create-react-app\",\n  \"Next.js\",\n  \"Vite\",\n  \"Remix\",\n  \"SvelteKit\",\n  \"Expo\",\n  \"TanStackStart\",\n] as const;\ntype Framework = (typeof _FRAMEWORKS)[number];\n\n/**\n * A configuration for writing the actual (framework specific) `CONVEX_URL`\n * and `CONVEX_SITE_URL` environment variables to a \".env\" type file.\n *\n * May be `null` if there was an error determining any of the field values.\n */\ntype EnvFileUrlConfig = {\n  /** The name of the file - typically `.env.local` */\n  envFile: string;\n  /**\n   * The framework specific `CONVEX_URL`\n   *\n   * If `null`, ignore and don't update that environment variable.\n   */\n  convexUrlEnvVar: string | null;\n  /**\n   * The framework specific `CONVEX_SITE_URL`\n   *\n   * If `null`, ignore and don't update that environment variable.\n   */\n  siteUrlEnvVar: string | null;\n  /** Existing content loaded from the `envFile`, if it exists */\n  existingFileContent: string | null;\n} | null;\n\nexport async function writeUrlsToEnvFile(\n  ctx: Context,\n  options: {\n    convexUrl: string;\n    siteUrl?: string | null | undefined;\n  },\n): Promise<EnvFileUrlConfig> {\n  const envFileConfig = await loadEnvFileUrlConfig(ctx, options);\n\n  if (envFileConfig === null) {\n    return null;\n  }\n\n  const { envFile, convexUrlEnvVar, siteUrlEnvVar, existingFileContent } =\n    envFileConfig;\n  let updatedFileContent: string | null = null;\n  if (convexUrlEnvVar) {\n    updatedFileContent = changedEnvVarFile({\n      existingFileContent,\n      envVarName: convexUrlEnvVar,\n      envVarValue: options.convexUrl,\n      commentAfterValue: null,\n      commentOnPreviousLine: null,\n    })!;\n  }\n  if (siteUrlEnvVar && options.siteUrl) {\n    updatedFileContent = changedEnvVarFile({\n      existingFileContent: updatedFileContent ?? existingFileContent,\n      envVarName: siteUrlEnvVar,\n      envVarValue: options.siteUrl,\n      commentAfterValue: null,\n      commentOnPreviousLine: null,\n    })!;\n  }\n  if (updatedFileContent) {\n    ctx.fs.writeUtf8File(envFile, updatedFileContent);\n  }\n\n  return envFileConfig;\n}\n\nexport function changedEnvVarFile({\n  existingFileContent,\n  envVarName,\n  envVarValue,\n  commentAfterValue,\n  commentOnPreviousLine,\n}: {\n  existingFileContent: string | null;\n  envVarName: string;\n  envVarValue: string;\n  commentAfterValue: string | null;\n  commentOnPreviousLine: string | null;\n}): string | null {\n  const varAssignment = `${envVarName}=${envVarValue}${\n    commentAfterValue === null ? \"\" : ` # ${commentAfterValue}`\n  }`;\n  const commentOnPreviousLineWithLineBreak =\n    commentOnPreviousLine === null ? \"\" : `${commentOnPreviousLine}\\n`;\n  if (existingFileContent === null) {\n    return `${commentOnPreviousLineWithLineBreak}${varAssignment}\\n`;\n  }\n  const config = dotenv.parse(existingFileContent);\n  const existing = config[envVarName];\n  if (existing === envVarValue) {\n    return null;\n  }\n  if (existing !== undefined) {\n    return existingFileContent.replace(\n      getEnvVarRegex(envVarName),\n      `${varAssignment}`,\n    );\n  } else {\n    const doubleLineBreak = existingFileContent.endsWith(\"\\n\") ? \"\\n\" : \"\\n\\n\";\n    return (\n      existingFileContent +\n      doubleLineBreak +\n      commentOnPreviousLineWithLineBreak +\n      varAssignment +\n      \"\\n\"\n    );\n  }\n}\n\nexport function getEnvVarRegex(envVarName: string) {\n  return new RegExp(`^${envVarName}.*$`, \"m\");\n}\n\nexport async function suggestedEnvVarNames(ctx: Context): Promise<{\n  detectedFramework?: Framework;\n  convexUrlEnvVar: ConvexUrlEnvVar;\n  convexSiteEnvVar: ConvexSiteUrlEnvVar;\n  frontendDevUrl?: string;\n  publicPrefix?: string;\n}> {\n  // no package.json, that's fine, just guess\n  if (!ctx.fs.exists(\"package.json\")) {\n    return {\n      convexUrlEnvVar: \"CONVEX_URL\",\n      convexSiteEnvVar: \"CONVEX_SITE_URL\",\n    };\n  }\n\n  const packages = await loadPackageJson(ctx);\n\n  // Is it create-react-app?\n  const isCreateReactApp = \"react-scripts\" in packages;\n  if (isCreateReactApp) {\n    return {\n      detectedFramework: \"create-react-app\",\n      convexUrlEnvVar: \"REACT_APP_CONVEX_URL\",\n      convexSiteEnvVar: \"REACT_APP_CONVEX_SITE_URL\",\n      frontendDevUrl: \"http://localhost:3000\",\n      publicPrefix: \"REACT_APP_\",\n    };\n  }\n\n  const isNextJs = \"next\" in packages;\n  if (isNextJs) {\n    return {\n      detectedFramework: \"Next.js\",\n      convexUrlEnvVar: \"NEXT_PUBLIC_CONVEX_URL\",\n      convexSiteEnvVar: \"NEXT_PUBLIC_CONVEX_SITE_URL\",\n      frontendDevUrl: \"http://localhost:3000\",\n      publicPrefix: \"NEXT_PUBLIC_\",\n    };\n  }\n\n  const isExpo = \"expo\" in packages;\n  if (isExpo) {\n    return {\n      detectedFramework: \"Expo\",\n      convexUrlEnvVar: \"EXPO_PUBLIC_CONVEX_URL\",\n      convexSiteEnvVar: \"EXPO_PUBLIC_CONVEX_SITE_URL\",\n      publicPrefix: \"EXPO_PUBLIC_\",\n    };\n  }\n\n  const isSvelteKit = \"@sveltejs/kit\" in packages;\n  if (isSvelteKit) {\n    return {\n      detectedFramework: \"SvelteKit\",\n      convexUrlEnvVar: \"PUBLIC_CONVEX_URL\",\n      convexSiteEnvVar: \"PUBLIC_CONVEX_SITE_URL\",\n      frontendDevUrl: \"http://localhost:5173\",\n      publicPrefix: \"PUBLIC_\",\n    };\n  }\n\n  // TanStackStart currently supports VITE_FOO for browser-side envvars.\n  const isTanStackStart =\n    \"@tanstack/start\" in packages || \"@tanstack/react-start\" in packages;\n\n  if (isTanStackStart) {\n    return {\n      detectedFramework: \"TanStackStart\",\n      convexUrlEnvVar: \"VITE_CONVEX_URL\",\n      convexSiteEnvVar: \"VITE_CONVEX_SITE_URL\",\n      frontendDevUrl: \"http://localhost:3000\",\n      publicPrefix: \"VITE_\",\n    };\n  }\n\n  // Vite is a dependency of a lot of things; vite appearing in dependencies is not a strong indicator.\n  const isVite = \"vite\" in packages;\n\n  if (isVite) {\n    return {\n      detectedFramework: \"Vite\",\n      convexUrlEnvVar: \"VITE_CONVEX_URL\",\n      convexSiteEnvVar: \"VITE_CONVEX_SITE_URL\",\n      frontendDevUrl: \"http://localhost:5173\",\n      publicPrefix: \"VITE_\",\n    };\n  }\n\n  // We detect Remix after Vite because when using Remix as a plugin of Vite\n  // (Remix Vite), we want to use Vite-style environment variables.\n  const isRemix = \"@remix-run/dev\" in packages;\n  if (isRemix) {\n    return {\n      detectedFramework: \"Remix\",\n      convexUrlEnvVar: \"CONVEX_URL\",\n      convexSiteEnvVar: \"CONVEX_SITE_URL\",\n      frontendDevUrl: \"http://localhost:3000\",\n    };\n  }\n\n  return {\n    convexUrlEnvVar: \"CONVEX_URL\",\n    convexSiteEnvVar: \"CONVEX_SITE_URL\",\n  };\n}\n\nasync function loadEnvFileUrlConfig(\n  ctx: Context,\n  options: {\n    convexUrl: string;\n    siteUrl?: string | null | undefined;\n  },\n): Promise<EnvFileUrlConfig> {\n  const { detectedFramework, convexUrlEnvVar, convexSiteEnvVar } =\n    await suggestedEnvVarNames(ctx);\n\n  const { envFile, existing } = suggestedDevEnvFile(ctx, detectedFramework);\n\n  if (!existing) {\n    return {\n      envFile,\n      convexUrlEnvVar,\n      siteUrlEnvVar: convexSiteEnvVar,\n      existingFileContent: null,\n    };\n  }\n\n  const existingFileContent = ctx.fs.readUtf8File(envFile);\n  const config = dotenv.parse(existingFileContent);\n\n  const resolvedConvexUrlEnvVar = resolveEnvVarName(\n    convexUrlEnvVar,\n    options.convexUrl,\n    envFile,\n    config,\n    EXPECTED_CONVEX_URL_NAMES,\n  );\n  const resolvedSiteUrlEnvVar = resolveEnvVarName(\n    convexSiteEnvVar,\n    options.siteUrl ?? \"\",\n    envFile,\n    config,\n    EXPECTED_SITE_URL_NAMES,\n  );\n  if (\n    resolvedConvexUrlEnvVar.kind === \"invalid\" ||\n    resolvedSiteUrlEnvVar.kind === \"invalid\"\n  ) {\n    return null;\n  }\n  return {\n    envFile,\n    convexUrlEnvVar: resolvedConvexUrlEnvVar.envVarName,\n    siteUrlEnvVar: resolvedSiteUrlEnvVar.envVarName,\n    existingFileContent,\n  };\n}\n\nfunction resolveEnvVarName(\n  envVarName: string,\n  envVarValue: string,\n  envFile: string,\n  config: dotenv.DotenvParseOutput,\n  expectedNames: Set<string>,\n):\n  | {\n      kind: \"invalid\";\n    }\n  | {\n      kind: \"valid\";\n      envVarName: string | null;\n    } {\n  const matching = Object.keys(config).filter((key) => expectedNames.has(key));\n  if (matching.length > 1) {\n    logWarning(\n      chalkStderr.yellow(\n        `Found multiple ${envVarName} environment variables in ${envFile} so cannot update automatically.`,\n      ),\n    );\n    return { kind: \"invalid\" };\n  }\n  if (matching.length === 1) {\n    const [existingEnvVarName, oldValue] = [matching[0], config[matching[0]]];\n    if (oldValue === envVarValue) {\n      // Set envVarName to null to indicate that it shouldn't be updated.\n      return { kind: \"valid\", envVarName: null };\n    }\n    if (\n      oldValue !== \"\" &&\n      Object.values(config).filter((v) => v === oldValue).length !== 1\n    ) {\n      logWarning(\n        chalkStderr.yellow(\n          `Can't safely modify ${envFile} for ${envVarName}, please edit manually.`,\n        ),\n      );\n      return { kind: \"invalid\" };\n    }\n    return { kind: \"valid\", envVarName: existingEnvVarName };\n  }\n  return { kind: \"valid\", envVarName };\n}\n\nfunction suggestedDevEnvFile(\n  ctx: Context,\n  framework?: Framework,\n): {\n  existing: boolean;\n  envFile: string;\n} {\n  // If a .env.local file exists, that's unequivocally the right file\n  if (ctx.fs.exists(\".env.local\")) {\n    return {\n      existing: true,\n      envFile: \".env.local\",\n    };\n  }\n\n  // Remix is on team \"don't commit the .env file,\" so .env is for dev.\n  if (framework === \"Remix\") {\n    return {\n      existing: ctx.fs.exists(\".env\"),\n      envFile: \".env\",\n    };\n  }\n\n  // The most dev-looking env file that exists, or .env.local\n  return {\n    existing: ctx.fs.exists(\".env.local\"),\n    envFile: \".env.local\",\n  };\n}\n\nexport const EXPECTED_CONVEX_URL_NAMES = new Set([\n  \"CONVEX_URL\" as const,\n  \"PUBLIC_CONVEX_URL\" as const,\n  \"NEXT_PUBLIC_CONVEX_URL\" as const,\n  \"VITE_CONVEX_URL\" as const,\n  \"REACT_APP_CONVEX_URL\" as const,\n  \"EXPO_PUBLIC_CONVEX_URL\" as const,\n]);\ntype ConvexUrlEnvVar =\n  typeof EXPECTED_CONVEX_URL_NAMES extends Set<infer T> ? T : never;\n\nexport const EXPECTED_SITE_URL_NAMES = new Set([\n  \"CONVEX_SITE_URL\" as const,\n  \"PUBLIC_CONVEX_SITE_URL\" as const,\n  \"NEXT_PUBLIC_CONVEX_SITE_URL\" as const,\n  \"VITE_CONVEX_SITE_URL\" as const,\n  \"REACT_APP_CONVEX_SITE_URL\" as const,\n  \"EXPO_PUBLIC_CONVEX_SITE_URL\" as const,\n]);\ntype ConvexSiteUrlEnvVar =\n  typeof EXPECTED_SITE_URL_NAMES extends Set<infer T> ? T : never;\n\n// Crash or warn on\n// CONVEX_DEPLOY_KEY=project:me:new-project|eyABCD0= npx convex\n// which parses as\n// CONVEX_DEPLOY_KEY=project:me:new-project | eyABCD0='' npx convex\n// when what was intended was\n// CONVEX_DEPLOY_KEY=project:me:new-project|eyABCD0= npx convex\n// This only fails so catastrophically when the key ends with `=`.\nexport async function detectSuspiciousEnvironmentVariables(\n  ctx: Context,\n  ignoreSuspiciousEnvVars = false,\n) {\n  for (const [key, value] of Object.entries(process.env)) {\n    if (value === \"\" && key.startsWith(\"ey\")) {\n      try {\n        // add a \"=\" to the end and try to base64 decode (expected format of Convex keys)\n        const decoded = JSON.parse(\n          Buffer.from(key + \"=\", \"base64\").toString(\"utf8\"),\n        );\n        // Only parseable v2 tokens to be sure this is a Convex token before complaining.\n        if (!(\"v2\" in decoded)) {\n          continue;\n        }\n      } catch {\n        continue;\n      }\n\n      if (ignoreSuspiciousEnvVars) {\n        logWarning(\n          `ignoring suspicious environment variable ${key}, did you mean to use quotes like CONVEX_DEPLOY_KEY='...'?`,\n        );\n      } else {\n        return await ctx.crash({\n          exitCode: 1,\n          errorType: \"fatal\",\n          printedMessage: `Quotes are required around environment variable values by your shell: CONVEX_DEPLOY_KEY='project:name:project|${key.slice(0, 4)}...${key.slice(key.length - 4)}=' npx convex dev`,\n        });\n      }\n    }\n  }\n}\n\nexport function getBuildEnvironment(): string | false {\n  return process.env.VERCEL\n    ? \"Vercel\"\n    : process.env.NETLIFY\n      ? \"Netlify\"\n      : false;\n}\n\nexport function gitBranchFromEnvironment(): string | null {\n  if (process.env.VERCEL) {\n    // https://vercel.com/docs/projects/environment-variables/system-environment-variables\n    return process.env.VERCEL_GIT_COMMIT_REF ?? null;\n  }\n  if (process.env.NETLIFY) {\n    // https://docs.netlify.com/configure-builds/environment-variables/\n    return process.env.HEAD ?? null;\n  }\n\n  if (process.env.CI) {\n    // https://docs.github.com/en/actions/learn-github-actions/variables\n    // https://docs.gitlab.com/ee/ci/variables/predefined_variables.html\n    return (\n      process.env.GITHUB_HEAD_REF ?? process.env.CI_COMMIT_REF_NAME ?? null\n    );\n  }\n\n  return null;\n}\n\nexport function isNonProdBuildEnvironment(): boolean {\n  if (process.env.VERCEL) {\n    // https://vercel.com/docs/projects/environment-variables/system-environment-variables\n    return process.env.VERCEL_ENV !== \"production\";\n  }\n  if (process.env.NETLIFY) {\n    // https://docs.netlify.com/configure-builds/environment-variables/\n    return process.env.CONTEXT !== \"production\";\n  }\n  return false;\n}\n", "import { paths as PlatformManagementPaths } from \"@convex-dev/platform/managementApi\";\nimport { chalkStderr } from \"chalk\";\nimport os from \"os\";\nimport path from \"path\";\n\nimport { ProjectConfig } from \"../config.js\";\n\nimport { spawn } from \"child_process\";\nimport { InvalidArgumentError } from \"commander\";\nimport fetchRetryFactory, { RequestInitRetryParams } from \"fetch-retry\";\nimport { Context, ErrorType } from \"../../../bundler/context.js\";\nimport {\n  failExistingSpinner,\n  logError,\n  logMessage,\n  logWarning,\n} from \"../../../bundler/log.js\";\nimport { version } from \"../../version.js\";\nimport type { CloudDeploymentType, Project } from \"../api.js\";\nimport { promptOptions, promptSearch, promptYesNo } from \"./prompts.js\";\nimport {\n  bigBrainEnableFeatureMetadata,\n  projectHasExistingCloudDev,\n} from \"../localDeployment/bigBrain.js\";\nimport type {\n  paths as CliManagementPaths,\n  TeamResponse,\n} from \"../../generatedApi.js\";\nimport createClient from \"openapi-fetch\";\n\nconst retryingFetch = fetchRetryFactory(fetch);\n\nexport const productionProvisionHost = \"https://api.convex.dev\";\nexport const provisionHost =\n  process.env.CONVEX_PROVISION_HOST || productionProvisionHost;\nexport const BIG_BRAIN_URL = `${provisionHost}/api/`;\nconst PLATFORM_MANAGEMENT_API_URL = `${provisionHost}/v1/`;\nexport const ENV_VAR_FILE_PATH = \".env.local\";\nexport const CONVEX_DEPLOY_KEY_ENV_VAR_NAME = \"CONVEX_DEPLOY_KEY\";\nexport const CONVEX_DEPLOYMENT_ENV_VAR_NAME = \"CONVEX_DEPLOYMENT\";\nexport const CONVEX_SELF_HOSTED_URL_VAR_NAME = \"CONVEX_SELF_HOSTED_URL\";\nexport const CONVEX_SELF_HOSTED_ADMIN_KEY_VAR_NAME =\n  \"CONVEX_SELF_HOSTED_ADMIN_KEY\";\nconst MAX_RETRIES = 6;\n// After 3 retries, log a progress message that we're retrying the request\nconst RETRY_LOG_THRESHOLD = 3;\n\n/**\n * Processes the CONVEX_DEPLOY_KEY value to handle special sentinel values.\n *\n * - If the value is `<ignore_deploy_key>`, treats it as if the env var isn't set (returns undefined)\n * - If the value matches `<missing_deploy_key:$STRING>`, crashes with the message in $STRING\n * - Otherwise returns the value as-is\n *\n * @param ctx Context for crashing if needed\n * @param deployKey The raw deploy key value from environment or config\n * @returns The processed deploy key value or undefined\n */\nexport async function processDeployKeyValue(\n  ctx: Context,\n  deployKey: string | undefined,\n): Promise<string | undefined> {\n  if (deployKey === undefined) {\n    return undefined;\n  }\n\n  // Check for <ignore_deploy_key> sentinel\n  if (deployKey === \"<ignore_deploy_key>\") {\n    return undefined;\n  }\n\n  // Check for <missing_deploy_key:$STRING> sentinel\n  const missingKeyPattern = /^<missing_deploy_key:(.+)>$/;\n  const match = deployKey.match(missingKeyPattern);\n  if (match) {\n    const errorMessage = match[1];\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: errorMessage,\n    });\n  }\n\n  return deployKey;\n}\n\nexport function parsePositiveInteger(value: string) {\n  const parsedValue = parseInteger(value);\n  if (parsedValue <= 0) {\n    // eslint-disable-next-line no-restricted-syntax\n    throw new InvalidArgumentError(\"Not a positive number.\");\n  }\n  return parsedValue;\n}\n\nexport function parseInteger(value: string) {\n  const parsedValue = +value;\n  if (isNaN(parsedValue)) {\n    // eslint-disable-next-line no-restricted-syntax\n    throw new InvalidArgumentError(\"Not a number.\");\n  }\n  return parsedValue;\n}\n\nexport type ErrorData = {\n  code: string;\n  message: string;\n};\n\n/**\n * Error thrown on non-2XX reponse codes to make most `fetch()` error handling\n * follow a single code path.\n */\nexport class ThrowingFetchError extends Error {\n  response: Response;\n  serverErrorData?: ErrorData;\n\n  constructor(\n    msg: string,\n    {\n      code,\n      message,\n      response,\n    }: { cause?: Error; code?: string; message?: string; response: Response },\n  ) {\n    if (code !== undefined && message !== undefined) {\n      super(`${msg}: ${code}: ${message}`);\n      this.serverErrorData = { code, message };\n    } else {\n      super(msg);\n    }\n\n    Object.setPrototypeOf(this, ThrowingFetchError.prototype);\n\n    this.response = response;\n  }\n\n  public static async fromResponse(\n    response: Response,\n    msg?: string,\n  ): Promise<ThrowingFetchError> {\n    msg = `${msg ? `${msg} ` : \"\"}${response.status} ${response.statusText}`;\n    let code, message;\n    try {\n      ({ code, message } = await response.json());\n    } catch {\n      // Do nothing because the non-2XX response code is the primary error here.\n    }\n    return new ThrowingFetchError(msg, { code, message, response });\n  }\n\n  async handle(ctx: Context): Promise<never> {\n    let error_type: ErrorType = \"transient\";\n    await checkFetchErrorForDeprecation(ctx, this.response);\n\n    let msg = this.message;\n\n    if (this.response.status === 400) {\n      error_type = \"invalid filesystem or env vars\";\n    } else if (this.response.status === 401) {\n      error_type = \"fatal\";\n      msg = `${msg}\\nAuthenticate with \\`npx convex dev\\``;\n    } else if (this.response.status === 404) {\n      error_type = \"fatal\";\n      msg = `${msg}: ${this.response.url}`;\n    }\n\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: error_type,\n      errForSentry: this,\n      printedMessage: chalkStderr.red(msg.trim()),\n    });\n  }\n}\n\n/**\n * Thin wrapper around `fetch()` which throws a FetchDataError on non-2XX\n * responses which includes error code and message from the response JSON.\n * (Axios-style)\n *\n * It also accepts retry options from fetch-retry.\n */\nexport async function throwingFetch(\n  resource: RequestInfo | URL,\n  options: (RequestInit & RequestInitRetryParams<typeof fetch>) | undefined,\n): Promise<Response> {\n  const response = await retryingFetch(resource, options);\n  if (!response.ok) {\n    // This error must always be handled manually.\n    // eslint-disable-next-line no-restricted-syntax\n    throw await ThrowingFetchError.fromResponse(\n      response,\n      `Error fetching ${options?.method ? options.method + \" \" : \"\"} ${\n        typeof resource === \"string\"\n          ? resource\n          : \"url\" in resource\n            ? resource.url\n            : resource.toString()\n      }`,\n    );\n  }\n  return response;\n}\n\n/**\n * Handle an error a fetch error or non-2xx response.\n */\nexport async function logAndHandleFetchError(\n  ctx: Context,\n  err: unknown,\n): Promise<never> {\n  // Fail the spinner so the stderr lines appear\n  failExistingSpinner();\n\n  if (err instanceof ThrowingFetchError) {\n    return await err.handle(ctx);\n  } else {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"transient\",\n      errForSentry: err,\n      printedMessage: chalkStderr.red(err),\n    });\n  }\n}\n\nfunction logDeprecationWarning(ctx: Context, deprecationMessage: string) {\n  if (ctx.deprecationMessagePrinted) {\n    return;\n  }\n  ctx.deprecationMessagePrinted = true;\n  logWarning(chalkStderr.yellow(deprecationMessage));\n}\n\nasync function checkFetchErrorForDeprecation(ctx: Context, resp: Response) {\n  const headers = resp.headers;\n  if (headers) {\n    const deprecationState = headers.get(\"x-convex-deprecation-state\");\n    const deprecationMessage = headers.get(\"x-convex-deprecation-message\");\n    switch (deprecationState) {\n      case null:\n        break;\n      case \"Deprecated\":\n        // This version is deprecated. Print a warning and crash.\n\n        // Gotcha:\n        // 1. Don't use `logDeprecationWarning` because we should always print\n        // why this we crashed (even if we printed a warning earlier).\n        return await ctx.crash({\n          exitCode: 1,\n          errorType: \"fatal\",\n          printedMessage: chalkStderr.red(deprecationMessage),\n        });\n      default:\n        // The error included a deprecation warning. Print, but handle the\n        // error normally (it was for another reason).\n        logDeprecationWarning(\n          ctx,\n          deprecationMessage || \"(no deprecation message included)\",\n        );\n        break;\n    }\n  }\n}\n\n/// Call this method after a successful API response to conditionally print the\n/// \"please upgrade\" message.\nexport function deprecationCheckWarning(ctx: Context, resp: Response) {\n  const headers = resp.headers;\n  if (headers) {\n    const deprecationState = headers.get(\"x-convex-deprecation-state\");\n    const deprecationMessage = headers.get(\"x-convex-deprecation-message\");\n    switch (deprecationState) {\n      case null:\n        break;\n      case \"Deprecated\":\n        // This should never happen because such states are errors, not warnings.\n        // eslint-disable-next-line no-restricted-syntax\n        throw new Error(\n          \"Called deprecationCheckWarning on a fatal error. This is a bug.\",\n        );\n      default:\n        logDeprecationWarning(\n          ctx,\n          deprecationMessage || \"(no deprecation message included)\",\n        );\n        break;\n    }\n  }\n}\n\nexport async function hasTeam(ctx: Context, teamSlug: string) {\n  const teams = (await typedBigBrainClient(ctx).GET(\"/teams\")).data!;\n  return teams.some((team) => team.slug === teamSlug);\n}\n\nexport async function validateOrSelectTeam(\n  ctx: Context,\n  teamSlug: string | undefined,\n  promptMessage: string,\n): Promise<{ team: TeamResponse; chosen: boolean }> {\n  const teams = (await typedBigBrainClient(ctx).GET(\"/teams\")).data!;\n  if (teams.length === 0) {\n    await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      errForSentry: \"No teams found\",\n      printedMessage: chalkStderr.red(\"Error: No teams found\"),\n    });\n  }\n  if (!teamSlug) {\n    // Prompt the user to select if they belong to more than one team.\n    switch (teams.length) {\n      case 1:\n        return { team: teams[0], chosen: false };\n      default: {\n        const teamSlug = await promptSearch(ctx, {\n          message: promptMessage,\n          choices: teams.map((team) => ({\n            name: `${team.name} (${team.slug})`,\n            value: team.slug,\n          })),\n        });\n        const team = teams.find((team) => team.slug === teamSlug);\n        if (!team) {\n          return await ctx.crash({\n            exitCode: 1,\n            errorType: \"fatal\",\n            printedMessage: `Error: Failed to select team`,\n          });\n        }\n        return { team, chosen: true };\n      }\n    }\n  } else {\n    // Validate the chosen team.\n    const team = teams.find((team) => team.slug === teamSlug);\n    if (!team) {\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: `Error: Team ${teamSlug} not found, fix the --team option or remove it`,\n      });\n    }\n    return { team, chosen: false };\n  }\n}\n\nexport async function selectDevDeploymentType(\n  ctx: Context,\n  {\n    chosenConfiguration,\n    newOrExisting,\n    teamSlug,\n    projectSlug,\n    userHasChosenSomethingInteractively,\n    // from `--configure --dev-deployment local|cloud`\n    devDeploymentFromFlag,\n    // from `--cloud or --local`\n    forceDevDeployment,\n  }:\n    | {\n        chosenConfiguration: \"new\" | \"existing\" | \"ask\" | null;\n        newOrExisting: \"existing\";\n        teamSlug: string;\n        projectSlug: string;\n        userHasChosenSomethingInteractively: boolean;\n        devDeploymentFromFlag: \"cloud\" | \"local\" | undefined;\n        forceDevDeployment: \"cloud\" | \"local\" | undefined;\n      }\n    | {\n        chosenConfiguration: \"new\" | \"existing\" | \"ask\" | null;\n        newOrExisting: \"new\";\n        teamSlug: string;\n        // For new projects we don't know the project slug yet.\n        projectSlug: undefined;\n        userHasChosenSomethingInteractively: boolean;\n        devDeploymentFromFlag: \"cloud\" | \"local\" | undefined;\n        forceDevDeployment: \"cloud\" | \"local\" | undefined;\n      },\n): Promise<{ devDeployment: \"cloud\" | \"local\" }> {\n  if (forceDevDeployment) return { devDeployment: forceDevDeployment };\n  if (devDeploymentFromFlag) return { devDeployment: devDeploymentFromFlag };\n\n  if (newOrExisting === \"existing\" && chosenConfiguration === null) {\n    // Don't suggest local dev if developer already has a cloud deployment.\n    if (await projectHasExistingCloudDev(ctx, { projectSlug, teamSlug })) {\n      // TODO Expand rollout to offer local dev in this case. ENG-8307\n      return { devDeployment: \"cloud\" };\n    }\n  }\n\n  // To avoid breaking previously non-interactive flows, don't prompt if enough\n  // flags were specified for configure not to already have needed input.\n  if (chosenConfiguration !== \"ask\" && !userHasChosenSomethingInteractively) {\n    return { devDeployment: \"cloud\" };\n  }\n\n  // For creating a first project (no projects exist) or joining a first project\n  // (one project exists), always use cloud since it's a smoother experience.\n  const isFirstProject =\n    (await bigBrainEnableFeatureMetadata(ctx)).totalProjects.kind !==\n    \"multiple\";\n  if (isFirstProject) {\n    return { devDeployment: \"cloud\" };\n  }\n\n  // For now default is always cloud.\n  const devDeployment: \"cloud\" | \"local\" = await promptOptions(ctx, {\n    message:\n      \"Use cloud or local dev deployment? For more see https://docs.convex.dev/cli/local-deployments\",\n    default: \"cloud\",\n    choices: [\n      { name: \"cloud deployment\", value: \"cloud\" },\n      { name: \"local deployment (BETA)\", value: \"local\" },\n    ],\n  });\n  return { devDeployment };\n}\n\nexport function logNoDefaultRegionMessage(teamSlug: string) {\n  const noDefaultRegionMessage = chalkStderr.gray(\n    `Tip: you can configure a default region for your team at ${chalkStderr.underline(`https://dashboard.convex.dev/t/${teamSlug}/settings`)}`,\n  );\n  logMessage(noDefaultRegionMessage);\n}\n\nexport async function selectRegionOrUseDefault(\n  ctx: Context,\n  selectedTeam: TeamResponse,\n  deploymentType: CloudDeploymentType,\n) {\n  if (!process.stdin.isTTY) {\n    // Use the team default in non-interactive terminals\n    if (!selectedTeam.defaultRegion) {\n      logNoDefaultRegionMessage(selectedTeam.slug);\n    }\n    return selectedTeam.defaultRegion ?? null;\n  }\n  const selectedRegionName =\n    selectedTeam.defaultRegion ??\n    (await selectRegion(ctx, selectedTeam.id, deploymentType));\n  if (!selectedTeam.defaultRegion) {\n    // Log after the user chooses a region\n    logNoDefaultRegionMessage(selectedTeam.slug);\n  }\n  return selectedRegionName;\n}\n\nexport async function selectRegion(\n  ctx: Context,\n  teamId: number,\n  deploymentType: CloudDeploymentType,\n): Promise<string> {\n  const regionsResponse = (\n    await typedPlatformClient(ctx).GET(\n      \"/teams/{team_id}/list_deployment_regions\",\n      {\n        params: {\n          path: { team_id: `${teamId}` },\n        },\n      },\n    )\n  ).data!;\n  const choices = regionsResponse.items\n    .filter((item) => Boolean(item.available))\n    .map((item) => ({\n      name: item.displayName,\n      value: item.name,\n    }))\n    .sort((a, b) => {\n      // Show US region first if it exists\n      if (a.value === \"aws-us-east-1\") return -1;\n      if (b.value === \"aws-us-east-1\") return 1;\n      return 0;\n    });\n  return await promptOptions(ctx, {\n    message: `Where should this ${deploymentType} deployment run?`,\n    suffix: `\\n${chalkStderr.gray(\n      \"See https://www.convex.dev/pricing for pricing\",\n    )}`,\n    choices,\n  });\n}\n\nexport async function hasProject(\n  ctx: Context,\n  teamSlug: string,\n  projectSlug: string,\n) {\n  try {\n    const projects: Project[] = (\n      await typedBigBrainClient(ctx).GET(\"/teams/{team_slug}/projects\", {\n        params: {\n          path: {\n            team_slug: teamSlug,\n          },\n        },\n      })\n    ).data!;\n    return !!projects.find((project) => project.slug === projectSlug);\n  } catch {\n    return false;\n  }\n}\n\nexport async function hasProjects(ctx: Context) {\n  return !!(await bigBrainAPI({ ctx, method: \"GET\", path: `has_projects` }));\n}\n\nexport async function validateOrSelectProject(\n  ctx: Context,\n  projectSlug: string | undefined,\n  teamSlug: string,\n  singleProjectPrompt: string,\n  multiProjectPrompt: string,\n): Promise<string | null> {\n  const projects: Project[] = (\n    await typedBigBrainClient(ctx).GET(\"/teams/{team_slug}/projects\", {\n      params: {\n        path: {\n          team_slug: teamSlug,\n        },\n      },\n    })\n  ).data!;\n  if (projects.length === 0) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: `No existing projects! Run this command again and choose \"create a new project.\"`,\n    });\n  }\n  if (!projectSlug) {\n    const nonDemoProjects = projects.filter((project) => !project.isDemo);\n    if (nonDemoProjects.length === 0) {\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: `No existing non-demo projects! Run this command again and choose \"create a new project.\"`,\n      });\n    }\n    // Prompt the user to select project.\n    switch (nonDemoProjects.length) {\n      case 1: {\n        const project = nonDemoProjects[0];\n        const confirmed = await promptYesNo(ctx, {\n          message: `${singleProjectPrompt} ${project.name} (${project.slug})?`,\n        });\n\n        if (!confirmed) {\n          return null;\n        }\n        return nonDemoProjects[0].slug;\n      }\n      default:\n        return await promptSearch(ctx, {\n          message: multiProjectPrompt,\n          choices: nonDemoProjects.map((project: Project) => ({\n            name: `${project.name} (${project.slug})`,\n            value: project.slug,\n          })),\n        });\n    }\n  } else {\n    // Validate the chosen project.\n    if (!projects.find((project) => project.slug === projectSlug)) {\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: `Error: Project ${projectSlug} not found, fix the --project option or remove it`,\n      });\n    }\n    return projectSlug;\n  }\n}\n\n/**\n * @param ctx\n * @returns a Record of dependency name to dependency version for dependencies\n * and devDependencies\n */\nexport async function loadPackageJson(\n  ctx: Context,\n  includePeerDeps = false,\n): Promise<Record<string, string>> {\n  let packageJson;\n  try {\n    packageJson = ctx.fs.readUtf8File(\"package.json\");\n  } catch (err) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"invalid filesystem data\",\n      printedMessage: `Unable to read your package.json: ${\n        err as any\n      }. Make sure you're running this command from the root directory of a Convex app that contains the package.json`,\n    });\n  }\n  let obj;\n  try {\n    obj = JSON.parse(packageJson);\n  } catch (err) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"invalid filesystem data\",\n      errForSentry: err,\n      printedMessage: `Unable to parse package.json: ${err as any}`,\n    });\n  }\n  if (typeof obj !== \"object\") {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"invalid filesystem data\",\n      printedMessage: \"Expected to parse an object from package.json\",\n    });\n  }\n  const packages = {\n    ...(includePeerDeps ? (obj.peerDependencies ?? {}) : {}),\n    ...(obj.dependencies ?? {}),\n    ...(obj.devDependencies ?? {}),\n  };\n  return packages;\n}\n\nexport async function ensureHasConvexDependency(ctx: Context, cmd: string) {\n  const packages = await loadPackageJson(ctx, true);\n  const hasConvexDependency = \"convex\" in packages;\n  if (!hasConvexDependency) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"invalid filesystem data\",\n      printedMessage: `In order to ${cmd}, add \\`convex\\` to your package.json dependencies.`,\n    });\n  }\n}\n\n/** Return a new array with elements of the passed in array sorted by a key lambda */\nexport const sorted = <T>(arr: T[], key: (el: T) => any): T[] => {\n  const newArr = [...arr];\n  const cmp = (a: T, b: T) => {\n    if (key(a) < key(b)) return -1;\n    if (key(a) > key(b)) return 1;\n    return 0;\n  };\n  return newArr.sort(cmp);\n};\n\nexport function functionsDir(\n  configPath: string,\n  projectConfig: ProjectConfig,\n): string {\n  return path.join(path.dirname(configPath), projectConfig.functions);\n}\n\nfunction convexName() {\n  // Use a different directory for config files generated for tests\n  if (process.env.CONVEX_PROVISION_HOST) {\n    const port = process.env.CONVEX_PROVISION_HOST.split(\":\")[2];\n    if (port === undefined || port === \"8050\") {\n      return `convex-test`;\n    } else {\n      return `convex-test-${port}`;\n    }\n  }\n  return \"convex\";\n}\n\nexport function rootDirectory(): string {\n  return path.join(os.homedir(), `.${convexName()}`);\n}\n\nexport function cacheDir() {\n  const name = convexName();\n  const platform = process.platform;\n  if (platform === \"win32\") {\n    // On Windows, `LOCALAPPDATA` is usually set, but fall back to\n    // `USERPROFILE` if not, and fall back to homedir if all else fails.\n    if (process.env.LOCALAPPDATA) {\n      return path.join(process.env.LOCALAPPDATA, name);\n    }\n    if (process.env.USERPROFILE) {\n      return path.join(process.env.USERPROFILE, \"AppData\", \"Local\", name);\n    }\n    return path.join(os.homedir(), \"AppData\", \"Local\", name);\n  }\n  return path.join(os.homedir(), \".cache\", name);\n}\n\n/**\n * Fetch with appropriate headers for the Convex Management API.\n *\n * This fetch() also has retries and throws if the response is not ok.\n */\nexport async function bigBrainFetch(ctx: Context): Promise<typeof fetch> {\n  const authHeader = ctx.bigBrainAuth()?.header;\n  const bigBrainHeaders: Record<string, string> = authHeader\n    ? {\n        Authorization: authHeader,\n        \"Convex-Client\": `npm-cli-${version}`,\n      }\n    : {\n        \"Convex-Client\": `npm-cli-${version}`,\n      };\n  return (resource: RequestInfo | URL, options: RequestInit | undefined) => {\n    const { headers: optionsHeaders, ...rest } = options || {};\n    // Use the options headers if they exist. Otherwise, use the request headers\n    const headers = {\n      ...bigBrainHeaders,\n      ...(optionsHeaders ??\n        (resource instanceof Request\n          ? Object.fromEntries(resource.headers.entries())\n          : {})),\n    };\n    const opts = {\n      retries: MAX_RETRIES,\n      retryDelay,\n      headers,\n      ...rest,\n    };\n\n    return throwingFetch(resource, opts);\n  };\n}\n\nexport async function bigBrainAPI<T = any>({\n  ctx,\n  method,\n  path,\n  data,\n}: {\n  ctx: Context;\n  method: \"GET\" | \"POST\" | \"HEAD\";\n  path: string;\n  data?: any;\n}): Promise<T> {\n  const dataString =\n    data === undefined\n      ? undefined\n      : typeof data === \"string\"\n        ? data\n        : JSON.stringify(data);\n  try {\n    return await bigBrainAPIMaybeThrows({\n      ctx,\n      method,\n      path,\n      data: dataString,\n    });\n  } catch (err: unknown) {\n    return await logAndHandleFetchError(ctx, err);\n  }\n}\n\n/**\n * Typed API client with a fetch() implemention that includes retries and crashes on errors.\n * It is always safe to call `.data!` on the response: any error would throw or crash.\n *\n * Pass { throw: true } to throw ThrowingFetchErrors instead of exiting the process.\n */\nfunction typedBigBrainClientFactory<T>(baseUrl: string) {\n  return (ctx: Context, options: { throw?: boolean } = {}) => {\n    type Paths = T extends CliManagementPaths\n      ? CliManagementPaths\n      : T extends PlatformManagementPaths\n        ? PlatformManagementPaths\n        : never;\n    const bigBrainClient = createClient<Paths>({\n      baseUrl,\n      fetch: async (\n        resource: Request,\n        options?: RequestInit,\n      ): Promise<Response> => {\n        const fetch = await bigBrainFetch(ctx);\n        return fetch(resource, options);\n      },\n    });\n\n    // Wrap the client with error handling - go back to proxy since middleware doesn't catch parsing errors\n    return new Proxy(bigBrainClient, {\n      get(target, prop) {\n        const originalMethod = target[prop as keyof typeof target];\n\n        if (\n          prop === \"GET\" ||\n          prop === \"POST\" ||\n          prop === \"HEAD\" ||\n          prop === \"OPTIONS\" ||\n          prop === \"PUT\" ||\n          prop === \"DELETE\" ||\n          prop === \"PATCH\" ||\n          prop === \"TRACE\"\n        ) {\n          return async (...args: any[]) => {\n            try {\n              return await (originalMethod as Function).apply(target, args);\n            } catch (err: unknown) {\n              if (options.throw) {\n                // eslint-disable-next-line no-restricted-syntax\n                throw err;\n              }\n              return await logAndHandleFetchError(ctx, err);\n            }\n          };\n        }\n\n        return originalMethod;\n      },\n    });\n  };\n}\n\nexport const typedBigBrainClient =\n  typedBigBrainClientFactory<CliManagementPaths>(BIG_BRAIN_URL);\nexport const typedPlatformClient =\n  typedBigBrainClientFactory<PlatformManagementPaths>(\n    PLATFORM_MANAGEMENT_API_URL,\n  );\n\nexport async function bigBrainAPIMaybeThrows({\n  ctx,\n  method,\n  path,\n  data,\n}: {\n  ctx: Context;\n  method: \"GET\" | \"POST\" | \"HEAD\";\n  path: string;\n  data?: any;\n}): Promise<any> {\n  const fetch = await bigBrainFetch(ctx);\n  const dataString =\n    data === undefined\n      ? method === \"POST\"\n        ? JSON.stringify({})\n        : undefined\n      : typeof data === \"string\"\n        ? data\n        : JSON.stringify(data);\n  const res = await fetch(new URL(path, BIG_BRAIN_URL), {\n    method,\n    ...(dataString ? { body: dataString } : {}),\n    headers:\n      method === \"POST\"\n        ? {\n            \"Content-Type\": \"application/json\",\n          }\n        : {},\n  });\n  deprecationCheckWarning(ctx, res);\n  if (res.status === 200) {\n    return await res.json();\n  }\n}\n\n/**\n * Polls an arbitrary function until a condition is met.\n *\n * @param fetch Function performing a fetch, returning resulting data.\n * @param condition This function will terminate polling when it returns `true`.\n * @param waitMs How long to wait in between fetches.\n * @returns The resulting data from `fetch`.\n */\nexport const poll = async function <Result>(\n  fetch: () => Promise<Result>,\n  condition: (data: Result) => boolean,\n  waitMs = 1000,\n) {\n  let result = await fetch();\n  while (!condition(result)) {\n    await wait(waitMs);\n    result = await fetch();\n  }\n  return result;\n};\n\nconst wait = function (waitMs: number) {\n  return new Promise((resolve) => {\n    setTimeout(resolve, waitMs);\n  });\n};\n\nexport function waitForever() {\n  // This never resolves\n  return new Promise((_) => {\n    // ignore\n  });\n}\n\n// Returns a promise and a function that resolves the promise.\nexport function waitUntilCalled(): [Promise<unknown>, () => void] {\n  let onCalled: (v: unknown) => void;\n  const waitPromise = new Promise((resolve) => (onCalled = resolve));\n  return [waitPromise, () => onCalled(null)];\n}\n\n// We can eventually switch to something like `filesize` for i18n and\n// more robust formatting, but let's keep our CLI bundle small for now.\nexport function formatSize(n: number): string {\n  if (n < 1024) {\n    return `${n} B`;\n  }\n  if (n < 1024 * 1024) {\n    return `${(n / 1024).toFixed(1)} KB`;\n  }\n  if (n < 1024 * 1024 * 1024) {\n    return `${(n / 1024 / 1024).toFixed(1)} MB`;\n  }\n  return `${(n / 1024 / 1024 / 1024).toFixed(2)} GB`;\n}\n\nexport function formatDuration(ms: number): string {\n  const twoDigits = (n: number, unit: string) =>\n    `${n.toLocaleString(\"en-US\", { maximumFractionDigits: 2 })}${unit}`;\n\n  if (ms < 1e-3) {\n    return twoDigits(ms * 1e9, \"ns\");\n  }\n  if (ms < 1) {\n    return twoDigits(ms * 1e3, \"\u00B5s\");\n  }\n  if (ms < 1e3) {\n    return twoDigits(ms, \"ms\");\n  }\n  const s = ms / 1e3;\n  if (s < 60) {\n    return twoDigits(ms / 1e3, \"s\");\n  }\n  return twoDigits(s / 60, \"m\");\n}\n\nexport function getCurrentTimeString() {\n  const now = new Date();\n  const hours = String(now.getHours()).padStart(2, \"0\");\n  const minutes = String(now.getMinutes()).padStart(2, \"0\");\n  const seconds = String(now.getSeconds()).padStart(2, \"0\");\n  return `${hours}:${minutes}:${seconds}`;\n}\n\n// We don't allow running commands in project subdirectories yet,\n// but we can provide better errors if we look around.\nexport async function findParentConfigs(ctx: Context): Promise<{\n  parentPackageJson: string;\n  parentConvexJson?: string | undefined;\n}> {\n  const parentPackageJson = findUp(ctx, \"package.json\");\n  if (!parentPackageJson) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"invalid filesystem data\",\n      printedMessage:\n        \"No package.json found. To create a new project using Convex, see https://docs.convex.dev/home#quickstarts\",\n    });\n  }\n  const candidateConvexJson =\n    parentPackageJson &&\n    path.join(path.dirname(parentPackageJson), \"convex.json\");\n  const parentConvexJson =\n    candidateConvexJson && ctx.fs.exists(candidateConvexJson)\n      ? candidateConvexJson\n      : undefined;\n  return {\n    parentPackageJson,\n    parentConvexJson,\n  };\n}\n\n/**\n * Finds a file in the current working directory or a parent.\n *\n * @returns The absolute path of the first file found or undefined.\n */\nfunction findUp(ctx: Context, filename: string): string | undefined {\n  let curDir = path.resolve(\".\");\n  let parentDir = curDir;\n  do {\n    const candidate = path.join(curDir, filename);\n    if (ctx.fs.exists(candidate)) {\n      return candidate;\n    }\n    curDir = parentDir;\n    parentDir = path.dirname(curDir);\n  } while (parentDir !== curDir);\n  return;\n}\n\n/**\n * Returns whether there's an existing project config. Throws\n * if this is not a valid directory for a project config.\n */\nexport async function isInExistingProject(ctx: Context) {\n  const { parentPackageJson, parentConvexJson } = await findParentConfigs(ctx);\n  if (parentPackageJson !== path.resolve(\"package.json\")) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"invalid filesystem data\",\n      printedMessage: \"Run this command from the root directory of a project.\",\n    });\n  }\n  return !!parentConvexJson;\n}\n\n// `spawnAsync` is the async version of Node's `spawnSync` (and `spawn`).\n//\n// By default, this returns the produced `stdout` and `stderror` and\n// an error if one was encountered (to mirror `spawnSync`).\n//\n// If `stdio` is set to `\"inherit\"`, pipes `stdout` and `stderror` (\n// pausing the spinner if one is running) and rejects the promise\n// on errors (to mirror `execFileSync`).\nexport function spawnAsync(\n  ctx: Context,\n  command: string,\n  args: ReadonlyArray<string>,\n): Promise<{\n  stdout: string;\n  stderr: string;\n  status: null | number;\n  error?: Error | undefined;\n}>;\nexport function spawnAsync(\n  ctx: Context,\n  command: string,\n  args: ReadonlyArray<string>,\n  options: { stdio: \"inherit\"; shell?: boolean },\n): Promise<void>;\nexport function spawnAsync(\n  _ctx: Context,\n  command: string,\n  args: ReadonlyArray<string>,\n  options?: { stdio: \"inherit\"; shell?: boolean },\n) {\n  return new Promise((resolve, reject) => {\n    const child = spawn(command, args, { shell: options?.shell });\n    let stdout = \"\";\n    let stderr = \"\";\n\n    const pipeOutput = options?.stdio === \"inherit\";\n\n    if (pipeOutput) {\n      child.stdout.on(\"data\", (text) =>\n        logMessage(text.toString(\"utf-8\").trimEnd()),\n      );\n      child.stderr.on(\"data\", (text) =>\n        logError(text.toString(\"utf-8\").trimEnd()),\n      );\n    } else {\n      child.stdout.on(\"data\", (data) => {\n        stdout += data.toString(\"utf-8\");\n      });\n\n      child.stderr.on(\"data\", (data) => {\n        stderr += data.toString(\"utf-8\");\n      });\n    }\n\n    const completionListener = (code: number | null) => {\n      child.removeListener(\"error\", errorListener);\n      const result = pipeOutput\n        ? { status: code }\n        : { stdout, stderr, status: code };\n      if (code !== 0) {\n        const argumentString =\n          args && args.length > 0 ? ` ${args.join(\" \")}` : \"\";\n        const error = new Error(\n          `\\`${command}${argumentString}\\` exited with non-zero code: ${code}`,\n        );\n        if (pipeOutput) {\n          reject({ ...result, error });\n        } else {\n          resolve({ ...result, error });\n        }\n      } else {\n        resolve(result);\n      }\n    };\n\n    const errorListener = (error: Error) => {\n      child.removeListener(\"exit\", completionListener);\n      child.removeListener(\"close\", completionListener);\n      if (pipeOutput) {\n        reject({ error, status: null });\n      } else {\n        resolve({ error, status: null });\n      }\n    };\n\n    if (pipeOutput) {\n      child.once(\"exit\", completionListener);\n    } else {\n      child.once(\"close\", completionListener);\n    }\n    child.once(\"error\", errorListener);\n  });\n}\n\nconst IDEMPOTENT_METHODS = [\"GET\", \"HEAD\", \"PUT\", \"DELETE\", \"OPTIONS\", \"TRACE\"];\n\nfunction retryDelay(\n  attempt: number,\n  _error: Error | null,\n  _response: Response | null,\n): number {\n  // immediate, 1s delay, 2s delay, 4s delay, etc.\n  const delay = attempt === 0 ? 1 : 2 ** (attempt - 1) * 1000;\n  const randomSum = delay * 0.2 * Math.random();\n  return delay + randomSum;\n}\n\nfunction deploymentFetchRetryOn(\n  onError?: (err: any, attempt: number) => void,\n  method?: string,\n) {\n  const shouldRetry = function (\n    _attempt: number,\n    error: Error | null,\n    response: Response | null,\n  ): { kind: \"retry\"; error: any } | { kind: \"stop\" } {\n    // Retry on network errors.\n    if (error !== null) {\n      // TODO filter out all SSL errors\n      // https://github.com/nodejs/node/blob/8a41d9b636be86350cd32847c3f89d327c4f6ff7/src/crypto/crypto_common.cc#L218-L245\n      return { kind: \"retry\", error: error };\n    }\n    // Retry on 404s since these can sometimes happen with newly created\n    // deployments for POSTs.\n    if (response?.status === 404) {\n      return {\n        kind: \"retry\",\n        error: `Received response with status ${response.status}`,\n      };\n    }\n\n    // Whatever the error code it doesn't hurt to retry idempotent requests.\n    if (\n      response &&\n      !response.ok &&\n      method &&\n      IDEMPOTENT_METHODS.includes(method.toUpperCase())\n    ) {\n      // ...but it's a bit annoying to wait for things we know won't succced\n      if (\n        [\n          400, // Bad Request\n          401, // Unauthorized\n          402, // PaymentRequired\n          403, // Forbidden\n          405, // Method Not Allowed\n          406, // Not Acceptable\n          412, // Precondition Failed\n          413, // Payload Too Large\n          414, // URI Too Long\n          415, // Unsupported Media Type\n          416, // Range Not Satisfiable\n        ].includes(response.status)\n      ) {\n        return {\n          kind: \"stop\",\n        };\n      }\n      return {\n        kind: \"retry\",\n        error: `Received response with status ${response.status}`,\n      };\n    }\n\n    return { kind: \"stop\" };\n  };\n\n  return function (\n    attempt: number,\n    error: Error | null,\n    response: Response | null,\n  ) {\n    const result = shouldRetry(attempt, error, response);\n    if (result.kind === \"retry\") {\n      onError?.(result.error, attempt);\n    }\n    if (attempt >= MAX_RETRIES) {\n      // Stop retrying if we've exhausted all retries, but do this after we've\n      // called `onError` so that the caller can still log the error.\n      return false;\n    }\n    return result.kind === \"retry\";\n  };\n}\n\n/**\n * Unlike `deploymentFetch`, this does not add on any headers, so the caller\n * must supply any headers.\n */\nexport function bareDeploymentFetch(\n  _ctx: Context,\n  options: {\n    deploymentUrl: string;\n    onError?: (err: any) => void;\n  },\n): typeof throwingFetch {\n  const { deploymentUrl, onError } = options;\n  const onErrorWithAttempt = (err: any, attempt: number) => {\n    onError?.(err);\n    if (attempt >= RETRY_LOG_THRESHOLD) {\n      logMessage(\n        chalkStderr.gray(\n          `Retrying request (attempt ${attempt}/${MAX_RETRIES})...`,\n        ),\n      );\n    }\n  };\n  return (resource: RequestInfo | URL, options: RequestInit | undefined) => {\n    const url =\n      resource instanceof URL\n        ? resource.pathname\n        : typeof resource === \"string\"\n          ? new URL(resource, deploymentUrl)\n          : new URL(resource.url, deploymentUrl);\n    const func = throwingFetch(url, {\n      retryDelay,\n      retryOn: deploymentFetchRetryOn(onErrorWithAttempt, options?.method),\n      ...options,\n    });\n    return func;\n  };\n}\n\n/**\n * This returns a `fetch` function that will fetch against `deploymentUrl`.\n *\n * It will also set the `Authorization` header, `Content-Type` header, and\n * the `Convex-Client` header if they are not set in the `fetch`.\n */\nexport function deploymentFetch(\n  _ctx: Context,\n  options: {\n    deploymentUrl: string;\n    adminKey: string;\n    onError?: (err: any) => void;\n  },\n): typeof throwingFetch {\n  const { deploymentUrl, adminKey, onError } = options;\n  const onErrorWithAttempt = (err: any, attempt: number) => {\n    onError?.(err);\n    if (attempt >= RETRY_LOG_THRESHOLD) {\n      logMessage(\n        chalkStderr.gray(\n          `Retrying request (attempt ${attempt}/${MAX_RETRIES})...`,\n        ),\n      );\n    }\n  };\n  return (resource: RequestInfo | URL, options: RequestInit | undefined) => {\n    const url =\n      resource instanceof URL\n        ? resource.pathname\n        : typeof resource === \"string\"\n          ? new URL(resource, deploymentUrl)\n          : new URL(resource.url, deploymentUrl);\n\n    const headers = new Headers(options?.headers || {});\n    if (!headers.has(\"Authorization\")) {\n      headers.set(\"Authorization\", `Convex ${adminKey}`);\n    }\n    if (!headers.has(\"Content-Type\")) {\n      headers.set(\"Content-Type\", \"application/json\");\n    }\n    if (!headers.has(\"Convex-Client\")) {\n      headers.set(\"Convex-Client\", `npm-cli-${version}`);\n    }\n    const func = throwingFetch(url, {\n      retryDelay,\n      retryOn: deploymentFetchRetryOn(onErrorWithAttempt, options?.method),\n      ...options,\n      headers,\n    });\n    return func;\n  };\n}\n\n/**\n * Whether this is likely to be a WebContainer,\n * WebContainers can't complete the WorkOS  login but where that login flow\n * fails has changed with the environment.\n */\nexport function isWebContainer(): boolean {\n  // Dynamic require as used here doesn't work with tsx\n  if (process.env.CONVEX_RUNNING_LIVE_IN_MONOREPO) {\n    return false;\n  }\n  const dynamicRequire = require;\n  if (process.versions.webcontainer === undefined) {\n    return false;\n  }\n  let blitzInternalEnv: unknown;\n  try {\n    blitzInternalEnv = dynamicRequire(\"@blitz/internal/env\");\n    // totally fine for this require to fail\n    // eslint-disable-next-line no-empty\n  } catch {}\n  return blitzInternalEnv !== null && blitzInternalEnv !== undefined;\n}\n\n// For (rare) special behaviors based on package.json details.\nexport async function currentPackageHomepage(\n  ctx: Context,\n): Promise<string | null> {\n  const { parentPackageJson: packageJsonPath } = await findParentConfigs(ctx);\n  let packageJson: any;\n  try {\n    const packageJsonString = ctx.fs.readUtf8File(packageJsonPath);\n    packageJson = JSON.parse(packageJsonString);\n  } catch (error: any) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"invalid filesystem data\",\n      printedMessage: `Couldn't parse \"${packageJsonPath}\". Make sure it's a valid JSON. Error: ${error}`,\n    });\n  }\n  const name = packageJson[\"homepage\"];\n  if (typeof name !== \"string\") {\n    // wrong type or missing\n    return null;\n  }\n  return name;\n}\n", "import commander from './index.js';\n\n// wrapper to provide named exports for ESM.\nexport const {\n  program,\n  createCommand,\n  createArgument,\n  createOption,\n  CommanderError,\n  InvalidArgumentError,\n  InvalidOptionArgumentError, // deprecated old name\n  Command,\n  Argument,\n  Option,\n  Help,\n} = commander;\n", "export const version = \"1.34.1\";\n", "import { version as versionInner } from \"../index.js\";\n\nexport const version = process.env.CONVEX_VERSION_OVERRIDE || versionInner;\n", "export const isUpKey = (key, keybindings = []) => \n// The up key\nkey.name === 'up' ||\n    // Vim keybinding: hjkl keys map to left/down/up/right\n    (keybindings.includes('vim') && key.name === 'k') ||\n    // Emacs keybinding: Ctrl+P means \"previous\" in Emacs navigation conventions\n    (keybindings.includes('emacs') && key.ctrl && key.name === 'p');\nexport const isDownKey = (key, keybindings = []) => \n// The down key\nkey.name === 'down' ||\n    // Vim keybinding: hjkl keys map to left/down/up/right\n    (keybindings.includes('vim') && key.name === 'j') ||\n    // Emacs keybinding: Ctrl+N means \"next\" in Emacs navigation conventions\n    (keybindings.includes('emacs') && key.ctrl && key.name === 'n');\nexport const isSpaceKey = (key) => key.name === 'space';\nexport const isBackspaceKey = (key) => key.name === 'backspace';\nexport const isTabKey = (key) => key.name === 'tab';\nexport const isNumberKey = (key) => '1234567890'.includes(key.name);\nexport const isEnterKey = (key) => key.name === 'enter' || key.name === 'return';\nexport const isShiftKey = (key) => key.shift;\n", "export class AbortPromptError extends Error {\n    name = 'AbortPromptError';\n    message = 'Prompt was aborted';\n    constructor(options) {\n        super();\n        this.cause = options?.cause;\n    }\n}\nexport class CancelPromptError extends Error {\n    name = 'CancelPromptError';\n    message = 'Prompt was canceled';\n}\nexport class ExitPromptError extends Error {\n    name = 'ExitPromptError';\n}\nexport class HookError extends Error {\n    name = 'HookError';\n}\nexport class ValidationError extends Error {\n    name = 'ValidationError';\n}\n", "import { AsyncResource } from 'node:async_hooks';\nimport { withPointer, handleChange } from \"./hook-engine.js\";\nexport function useState(defaultValue) {\n    return withPointer((pointer) => {\n        const setState = AsyncResource.bind(function setState(newValue) {\n            // Noop if the value is still the same.\n            if (pointer.get() !== newValue) {\n                pointer.set(newValue);\n                // Trigger re-render\n                handleChange();\n            }\n        });\n        if (pointer.initialized) {\n            return [pointer.get(), setState];\n        }\n        const value = typeof defaultValue === 'function' ? defaultValue() : defaultValue;\n        pointer.set(value);\n        return [value, setState];\n    });\n}\n", "/* eslint @typescript-eslint/no-explicit-any: [\"off\"] */\nimport { AsyncLocalStorage, AsyncResource } from 'node:async_hooks';\nimport { HookError, ValidationError } from \"./errors.js\";\nconst hookStorage = new AsyncLocalStorage();\nfunction createStore(rl) {\n    const store = {\n        rl,\n        hooks: [],\n        hooksCleanup: [],\n        hooksEffect: [],\n        index: 0,\n        handleChange() { },\n    };\n    return store;\n}\n// Run callback in with the hook engine setup.\nexport function withHooks(rl, cb) {\n    const store = createStore(rl);\n    return hookStorage.run(store, () => {\n        function cycle(render) {\n            store.handleChange = () => {\n                store.index = 0;\n                render();\n            };\n            store.handleChange();\n        }\n        return cb(cycle);\n    });\n}\n// Safe getStore utility that'll return the store or throw if undefined.\nfunction getStore() {\n    const store = hookStorage.getStore();\n    if (!store) {\n        throw new HookError('[Inquirer] Hook functions can only be called from within a prompt');\n    }\n    return store;\n}\nexport function readline() {\n    return getStore().rl;\n}\n// Merge state updates happening within the callback function to avoid multiple renders.\nexport function withUpdates(fn) {\n    const wrapped = (...args) => {\n        const store = getStore();\n        let shouldUpdate = false;\n        const oldHandleChange = store.handleChange;\n        store.handleChange = () => {\n            shouldUpdate = true;\n        };\n        const returnValue = fn(...args);\n        if (shouldUpdate) {\n            oldHandleChange();\n        }\n        store.handleChange = oldHandleChange;\n        return returnValue;\n    };\n    return AsyncResource.bind(wrapped);\n}\nexport function withPointer(cb) {\n    const store = getStore();\n    const { index } = store;\n    const pointer = {\n        get() {\n            return store.hooks[index];\n        },\n        set(value) {\n            store.hooks[index] = value;\n        },\n        initialized: index in store.hooks,\n    };\n    const returnValue = cb(pointer);\n    store.index++;\n    return returnValue;\n}\nexport function handleChange() {\n    getStore().handleChange();\n}\nexport const effectScheduler = {\n    queue(cb) {\n        const store = getStore();\n        const { index } = store;\n        store.hooksEffect.push(() => {\n            store.hooksCleanup[index]?.();\n            const cleanFn = cb(readline());\n            if (cleanFn != null && typeof cleanFn !== 'function') {\n                throw new ValidationError('useEffect return value must be a cleanup function or nothing.');\n            }\n            store.hooksCleanup[index] = cleanFn;\n        });\n    },\n    run() {\n        const store = getStore();\n        withUpdates(() => {\n            store.hooksEffect.forEach((effect) => {\n                effect();\n            });\n            // Warning: Clean the hooks before exiting the `withUpdates` block.\n            // Failure to do so means an updates would hit the same effects again.\n            store.hooksEffect.length = 0;\n        })();\n    },\n    clearAll() {\n        const store = getStore();\n        store.hooksCleanup.forEach((cleanFn) => {\n            cleanFn?.();\n        });\n        store.hooksEffect.length = 0;\n        store.hooksCleanup.length = 0;\n    },\n};\n", "import { withPointer, effectScheduler } from \"./hook-engine.js\";\nexport function useEffect(cb, depArray) {\n    withPointer((pointer) => {\n        const oldDeps = pointer.get();\n        const hasChanged = !Array.isArray(oldDeps) || depArray.some((dep, i) => !Object.is(dep, oldDeps[i]));\n        if (hasChanged) {\n            effectScheduler.queue(cb);\n        }\n        pointer.set(depArray);\n    });\n}\n", "import { styleText } from 'node:util';\nimport figures from '@inquirer/figures';\nexport const defaultTheme = {\n    prefix: {\n        idle: styleText('blue', '?'),\n        done: styleText('green', figures.tick),\n    },\n    spinner: {\n        interval: 80,\n        frames: ['\u280B', '\u2819', '\u2839', '\u2838', '\u283C', '\u2834', '\u2826', '\u2827', '\u2807', '\u280F'].map((frame) => styleText('yellow', frame)),\n    },\n    style: {\n        answer: (text) => styleText('cyan', text),\n        message: (text) => styleText('bold', text),\n        error: (text) => styleText('red', `> ${text}`),\n        defaultAnswer: (text) => styleText('dim', `(${text})`),\n        help: (text) => styleText('dim', text),\n        highlight: (text) => styleText('cyan', text),\n        key: (text) => styleText('cyan', styleText('bold', `<${text}>`)),\n    },\n};\n", "// process.env dot-notation access prints:\n// Property 'TERM' comes from an index signature, so it must be accessed with ['TERM'].ts(4111)\n/* eslint dot-notation: [\"off\"] */\nimport process from 'node:process';\n// Ported from is-unicode-supported\nfunction isUnicodeSupported() {\n    if (process.platform !== 'win32') {\n        return process.env['TERM'] !== 'linux'; // Linux console (kernel)\n    }\n    return (Boolean(process.env['WT_SESSION']) || // Windows Terminal\n        Boolean(process.env['TERMINUS_SUBLIME']) || // Terminus (<0.2.27)\n        process.env['ConEmuTask'] === '{cmd::Cmder}' || // ConEmu and cmder\n        process.env['TERM_PROGRAM'] === 'Terminus-Sublime' ||\n        process.env['TERM_PROGRAM'] === 'vscode' ||\n        process.env['TERM'] === 'xterm-256color' ||\n        process.env['TERM'] === 'alacritty' ||\n        process.env['TERMINAL_EMULATOR'] === 'JetBrains-JediTerm');\n}\n// Ported from figures\nconst common = {\n    circleQuestionMark: '(?)',\n    questionMarkPrefix: '(?)',\n    square: '\u2588',\n    squareDarkShade: '\u2593',\n    squareMediumShade: '\u2592',\n    squareLightShade: '\u2591',\n    squareTop: '\u2580',\n    squareBottom: '\u2584',\n    squareLeft: '\u258C',\n    squareRight: '\u2590',\n    squareCenter: '\u25A0',\n    bullet: '\u25CF',\n    dot: '\u2024',\n    ellipsis: '\u2026',\n    pointerSmall: '\u203A',\n    triangleUp: '\u25B2',\n    triangleUpSmall: '\u25B4',\n    triangleDown: '\u25BC',\n    triangleDownSmall: '\u25BE',\n    triangleLeftSmall: '\u25C2',\n    triangleRightSmall: '\u25B8',\n    home: '\u2302',\n    heart: '\u2665',\n    musicNote: '\u266A',\n    musicNoteBeamed: '\u266B',\n    arrowUp: '\u2191',\n    arrowDown: '\u2193',\n    arrowLeft: '\u2190',\n    arrowRight: '\u2192',\n    arrowLeftRight: '\u2194',\n    arrowUpDown: '\u2195',\n    almostEqual: '\u2248',\n    notEqual: '\u2260',\n    lessOrEqual: '\u2264',\n    greaterOrEqual: '\u2265',\n    identical: '\u2261',\n    infinity: '\u221E',\n    subscriptZero: '\u2080',\n    subscriptOne: '\u2081',\n    subscriptTwo: '\u2082',\n    subscriptThree: '\u2083',\n    subscriptFour: '\u2084',\n    subscriptFive: '\u2085',\n    subscriptSix: '\u2086',\n    subscriptSeven: '\u2087',\n    subscriptEight: '\u2088',\n    subscriptNine: '\u2089',\n    oneHalf: '\u00BD',\n    oneThird: '\u2153',\n    oneQuarter: '\u00BC',\n    oneFifth: '\u2155',\n    oneSixth: '\u2159',\n    oneEighth: '\u215B',\n    twoThirds: '\u2154',\n    twoFifths: '\u2156',\n    threeQuarters: '\u00BE',\n    threeFifths: '\u2157',\n    threeEighths: '\u215C',\n    fourFifths: '\u2158',\n    fiveSixths: '\u215A',\n    fiveEighths: '\u215D',\n    sevenEighths: '\u215E',\n    line: '\u2500',\n    lineBold: '\u2501',\n    lineDouble: '\u2550',\n    lineDashed0: '\u2504',\n    lineDashed1: '\u2505',\n    lineDashed2: '\u2508',\n    lineDashed3: '\u2509',\n    lineDashed4: '\u254C',\n    lineDashed5: '\u254D',\n    lineDashed6: '\u2574',\n    lineDashed7: '\u2576',\n    lineDashed8: '\u2578',\n    lineDashed9: '\u257A',\n    lineDashed10: '\u257C',\n    lineDashed11: '\u257E',\n    lineDashed12: '\u2212',\n    lineDashed13: '\u2013',\n    lineDashed14: '\u2010',\n    lineDashed15: '\u2043',\n    lineVertical: '\u2502',\n    lineVerticalBold: '\u2503',\n    lineVerticalDouble: '\u2551',\n    lineVerticalDashed0: '\u2506',\n    lineVerticalDashed1: '\u2507',\n    lineVerticalDashed2: '\u250A',\n    lineVerticalDashed3: '\u250B',\n    lineVerticalDashed4: '\u254E',\n    lineVerticalDashed5: '\u254F',\n    lineVerticalDashed6: '\u2575',\n    lineVerticalDashed7: '\u2577',\n    lineVerticalDashed8: '\u2579',\n    lineVerticalDashed9: '\u257B',\n    lineVerticalDashed10: '\u257D',\n    lineVerticalDashed11: '\u257F',\n    lineDownLeft: '\u2510',\n    lineDownLeftArc: '\u256E',\n    lineDownBoldLeftBold: '\u2513',\n    lineDownBoldLeft: '\u2512',\n    lineDownLeftBold: '\u2511',\n    lineDownDoubleLeftDouble: '\u2557',\n    lineDownDoubleLeft: '\u2556',\n    lineDownLeftDouble: '\u2555',\n    lineDownRight: '\u250C',\n    lineDownRightArc: '\u256D',\n    lineDownBoldRightBold: '\u250F',\n    lineDownBoldRight: '\u250E',\n    lineDownRightBold: '\u250D',\n    lineDownDoubleRightDouble: '\u2554',\n    lineDownDoubleRight: '\u2553',\n    lineDownRightDouble: '\u2552',\n    lineUpLeft: '\u2518',\n    lineUpLeftArc: '\u256F',\n    lineUpBoldLeftBold: '\u251B',\n    lineUpBoldLeft: '\u251A',\n    lineUpLeftBold: '\u2519',\n    lineUpDoubleLeftDouble: '\u255D',\n    lineUpDoubleLeft: '\u255C',\n    lineUpLeftDouble: '\u255B',\n    lineUpRight: '\u2514',\n    lineUpRightArc: '\u2570',\n    lineUpBoldRightBold: '\u2517',\n    lineUpBoldRight: '\u2516',\n    lineUpRightBold: '\u2515',\n    lineUpDoubleRightDouble: '\u255A',\n    lineUpDoubleRight: '\u2559',\n    lineUpRightDouble: '\u2558',\n    lineUpDownLeft: '\u2524',\n    lineUpBoldDownBoldLeftBold: '\u252B',\n    lineUpBoldDownBoldLeft: '\u2528',\n    lineUpDownLeftBold: '\u2525',\n    lineUpBoldDownLeftBold: '\u2529',\n    lineUpDownBoldLeftBold: '\u252A',\n    lineUpDownBoldLeft: '\u2527',\n    lineUpBoldDownLeft: '\u2526',\n    lineUpDoubleDownDoubleLeftDouble: '\u2563',\n    lineUpDoubleDownDoubleLeft: '\u2562',\n    lineUpDownLeftDouble: '\u2561',\n    lineUpDownRight: '\u251C',\n    lineUpBoldDownBoldRightBold: '\u2523',\n    lineUpBoldDownBoldRight: '\u2520',\n    lineUpDownRightBold: '\u251D',\n    lineUpBoldDownRightBold: '\u2521',\n    lineUpDownBoldRightBold: '\u2522',\n    lineUpDownBoldRight: '\u251F',\n    lineUpBoldDownRight: '\u251E',\n    lineUpDoubleDownDoubleRightDouble: '\u2560',\n    lineUpDoubleDownDoubleRight: '\u255F',\n    lineUpDownRightDouble: '\u255E',\n    lineDownLeftRight: '\u252C',\n    lineDownBoldLeftBoldRightBold: '\u2533',\n    lineDownLeftBoldRightBold: '\u252F',\n    lineDownBoldLeftRight: '\u2530',\n    lineDownBoldLeftBoldRight: '\u2531',\n    lineDownBoldLeftRightBold: '\u2532',\n    lineDownLeftRightBold: '\u252E',\n    lineDownLeftBoldRight: '\u252D',\n    lineDownDoubleLeftDoubleRightDouble: '\u2566',\n    lineDownDoubleLeftRight: '\u2565',\n    lineDownLeftDoubleRightDouble: '\u2564',\n    lineUpLeftRight: '\u2534',\n    lineUpBoldLeftBoldRightBold: '\u253B',\n    lineUpLeftBoldRightBold: '\u2537',\n    lineUpBoldLeftRight: '\u2538',\n    lineUpBoldLeftBoldRight: '\u2539',\n    lineUpBoldLeftRightBold: '\u253A',\n    lineUpLeftRightBold: '\u2536',\n    lineUpLeftBoldRight: '\u2535',\n    lineUpDoubleLeftDoubleRightDouble: '\u2569',\n    lineUpDoubleLeftRight: '\u2568',\n    lineUpLeftDoubleRightDouble: '\u2567',\n    lineUpDownLeftRight: '\u253C',\n    lineUpBoldDownBoldLeftBoldRightBold: '\u254B',\n    lineUpDownBoldLeftBoldRightBold: '\u2548',\n    lineUpBoldDownLeftBoldRightBold: '\u2547',\n    lineUpBoldDownBoldLeftRightBold: '\u254A',\n    lineUpBoldDownBoldLeftBoldRight: '\u2549',\n    lineUpBoldDownLeftRight: '\u2540',\n    lineUpDownBoldLeftRight: '\u2541',\n    lineUpDownLeftBoldRight: '\u253D',\n    lineUpDownLeftRightBold: '\u253E',\n    lineUpBoldDownBoldLeftRight: '\u2542',\n    lineUpDownLeftBoldRightBold: '\u253F',\n    lineUpBoldDownLeftBoldRight: '\u2543',\n    lineUpBoldDownLeftRightBold: '\u2544',\n    lineUpDownBoldLeftBoldRight: '\u2545',\n    lineUpDownBoldLeftRightBold: '\u2546',\n    lineUpDoubleDownDoubleLeftDoubleRightDouble: '\u256C',\n    lineUpDoubleDownDoubleLeftRight: '\u256B',\n    lineUpDownLeftDoubleRightDouble: '\u256A',\n    lineCross: '\u2573',\n    lineBackslash: '\u2572',\n    lineSlash: '\u2571',\n};\nconst specialMainSymbols = {\n    tick: '\u2714',\n    info: '\u2139',\n    warning: '\u26A0',\n    cross: '\u2718',\n    squareSmall: '\u25FB',\n    squareSmallFilled: '\u25FC',\n    circle: '\u25EF',\n    circleFilled: '\u25C9',\n    circleDotted: '\u25CC',\n    circleDouble: '\u25CE',\n    circleCircle: '\u24DE',\n    circleCross: '\u24E7',\n    circlePipe: '\u24BE',\n    radioOn: '\u25C9',\n    radioOff: '\u25EF',\n    checkboxOn: '\u2612',\n    checkboxOff: '\u2610',\n    checkboxCircleOn: '\u24E7',\n    checkboxCircleOff: '\u24BE',\n    pointer: '\u276F',\n    triangleUpOutline: '\u25B3',\n    triangleLeft: '\u25C0',\n    triangleRight: '\u25B6',\n    lozenge: '\u25C6',\n    lozengeOutline: '\u25C7',\n    hamburger: '\u2630',\n    smiley: '\u32E1',\n    mustache: '\u0DF4',\n    star: '\u2605',\n    play: '\u25B6',\n    nodejs: '\u2B22',\n    oneSeventh: '\u2150',\n    oneNinth: '\u2151',\n    oneTenth: '\u2152',\n};\nconst specialFallbackSymbols = {\n    tick: '\u221A',\n    info: 'i',\n    warning: '\u203C',\n    cross: '\u00D7',\n    squareSmall: '\u25A1',\n    squareSmallFilled: '\u25A0',\n    circle: '( )',\n    circleFilled: '(*)',\n    circleDotted: '( )',\n    circleDouble: '( )',\n    circleCircle: '(\u25CB)',\n    circleCross: '(\u00D7)',\n    circlePipe: '(\u2502)',\n    radioOn: '(*)',\n    radioOff: '( )',\n    checkboxOn: '[\u00D7]',\n    checkboxOff: '[ ]',\n    checkboxCircleOn: '(\u00D7)',\n    checkboxCircleOff: '( )',\n    pointer: '>',\n    triangleUpOutline: '\u2206',\n    triangleLeft: '\u25C4',\n    triangleRight: '\u25BA',\n    lozenge: '\u2666',\n    lozengeOutline: '\u25CA',\n    hamburger: '\u2261',\n    smiley: '\u263A',\n    mustache: '\u250C\u2500\u2510',\n    star: '\u2736',\n    play: '\u25BA',\n    nodejs: '\u2666',\n    oneSeventh: '1/7',\n    oneNinth: '1/9',\n    oneTenth: '1/10',\n};\nexport const mainSymbols = {\n    ...common,\n    ...specialMainSymbols,\n};\nexport const fallbackSymbols = {\n    ...common,\n    ...specialFallbackSymbols,\n};\nconst shouldUseMain = isUnicodeSupported();\nconst figures = shouldUseMain\n    ? mainSymbols\n    : fallbackSymbols;\nexport default figures;\nconst replacements = Object.entries(specialMainSymbols);\n// On terminals which do not support Unicode symbols, substitute them to other symbols\nexport const replaceSymbols = (string, { useFallback = !shouldUseMain } = {}) => {\n    if (useFallback) {\n        for (const [key, mainSymbol] of replacements) {\n            const fallbackSymbol = fallbackSymbols[key];\n            if (!fallbackSymbol) {\n                throw new Error(`Unable to find fallback for ${key}`);\n            }\n            string = string.replaceAll(mainSymbol, fallbackSymbol);\n        }\n    }\n    return string;\n};\n", "import { defaultTheme } from \"./theme.js\";\nfunction isPlainObject(value) {\n    if (typeof value !== 'object' || value === null)\n        return false;\n    let proto = value;\n    while (Object.getPrototypeOf(proto) !== null) {\n        proto = Object.getPrototypeOf(proto);\n    }\n    return Object.getPrototypeOf(value) === proto;\n}\nfunction deepMerge(...objects) {\n    const output = {};\n    for (const obj of objects) {\n        for (const [key, value] of Object.entries(obj)) {\n            const prevValue = output[key];\n            output[key] =\n                isPlainObject(prevValue) && isPlainObject(value)\n                    ? deepMerge(prevValue, value)\n                    : value;\n        }\n    }\n    return output;\n}\nexport function makeTheme(...themes) {\n    const themesToMerge = [\n        defaultTheme,\n        ...themes.filter((theme) => theme != null),\n    ];\n    return deepMerge(...themesToMerge);\n}\n", "import { useState } from \"./use-state.js\";\nimport { useEffect } from \"./use-effect.js\";\nimport { makeTheme } from \"./make-theme.js\";\nexport function usePrefix({ status = 'idle', theme, }) {\n    const [showLoader, setShowLoader] = useState(false);\n    const [tick, setTick] = useState(0);\n    const { prefix, spinner } = makeTheme(theme);\n    useEffect(() => {\n        if (status === 'loading') {\n            let tickInterval;\n            let inc = -1;\n            // Delay displaying spinner by 300ms, to avoid flickering\n            const delayTimeout = setTimeout(() => {\n                setShowLoader(true);\n                tickInterval = setInterval(() => {\n                    inc = inc + 1;\n                    setTick(inc % spinner.frames.length);\n                }, spinner.interval);\n            }, 300);\n            return () => {\n                clearTimeout(delayTimeout);\n                clearInterval(tickInterval);\n            };\n        }\n        else {\n            setShowLoader(false);\n        }\n    }, [status]);\n    if (showLoader) {\n        return spinner.frames[tick];\n    }\n    // There's a delay before we show the loader. So we want to ignore `loading` here, and pass idle instead.\n    const iconName = status === 'loading' ? 'idle' : status;\n    return typeof prefix === 'string' ? prefix : (prefix[iconName] ?? prefix['idle']);\n}\n", "import { withPointer } from \"./hook-engine.js\";\nexport function useMemo(fn, dependencies) {\n    return withPointer((pointer) => {\n        const prev = pointer.get();\n        if (!prev ||\n            prev.dependencies.length !== dependencies.length ||\n            prev.dependencies.some((dep, i) => dep !== dependencies[i])) {\n            const value = fn();\n            pointer.set({ value, dependencies });\n            return value;\n        }\n        return prev.value;\n    });\n}\n", "import { useState } from \"./use-state.js\";\nexport function useRef(val) {\n    return useState({ current: val })[0];\n}\n", "import { useRef } from \"./use-ref.js\";\nimport { useEffect } from \"./use-effect.js\";\nimport { withUpdates } from \"./hook-engine.js\";\nexport function useKeypress(userHandler) {\n    const signal = useRef(userHandler);\n    signal.current = userHandler;\n    useEffect((rl) => {\n        let ignore = false;\n        const handler = withUpdates((_input, event) => {\n            if (ignore)\n                return;\n            void signal.current(event, rl);\n        });\n        rl.input.on('keypress', handler);\n        return () => {\n            ignore = true;\n            rl.input.removeListener('keypress', handler);\n        };\n    }, []);\n}\n", "import cliWidth from 'cli-width';\nimport wrapAnsi from 'wrap-ansi';\nimport { readline } from \"./hook-engine.js\";\n/**\n * Force line returns at specific width. This function is ANSI code friendly and it'll\n * ignore invisible codes during width calculation.\n * @param {string} content\n * @param {number} width\n * @return {string}\n */\nexport function breakLines(content, width) {\n    return content\n        .split('\\n')\n        .flatMap((line) => wrapAnsi(line, width, { trim: false, hard: true })\n        .split('\\n')\n        .map((str) => str.trimEnd()))\n        .join('\\n');\n}\n/**\n * Returns the width of the active readline, or 80 as default value.\n * @returns {number}\n */\nexport function readlineWidth() {\n    return cliWidth({ defaultWidth: 80, output: readline().output });\n}\n", "import stripAnsi from 'strip-ansi';\nimport {eastAsianWidth} from 'get-east-asian-width';\nimport emojiRegex from 'emoji-regex';\n\nconst segmenter = new Intl.Segmenter();\n\nconst defaultIgnorableCodePointRegex = /^\\p{Default_Ignorable_Code_Point}$/u;\n\nexport default function stringWidth(string, options = {}) {\n\tif (typeof string !== 'string' || string.length === 0) {\n\t\treturn 0;\n\t}\n\n\tconst {\n\t\tambiguousIsNarrow = true,\n\t\tcountAnsiEscapeCodes = false,\n\t} = options;\n\n\tif (!countAnsiEscapeCodes) {\n\t\tstring = stripAnsi(string);\n\t}\n\n\tif (string.length === 0) {\n\t\treturn 0;\n\t}\n\n\tlet width = 0;\n\tconst eastAsianWidthOptions = {ambiguousAsWide: !ambiguousIsNarrow};\n\n\tfor (const {segment: character} of segmenter.segment(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 zero-width characters\n\t\tif (\n\t\t\t(codePoint >= 0x20_0B && codePoint <= 0x20_0F) // Zero-width space, non-joiner, joiner, left-to-right mark, right-to-left mark\n\t\t\t|| codePoint === 0xFE_FF // Zero-width no-break space\n\t\t) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Ignore combining characters\n\t\tif (\n\t\t\t(codePoint >= 0x3_00 && codePoint <= 0x3_6F) // Combining diacritical marks\n\t\t\t|| (codePoint >= 0x1A_B0 && codePoint <= 0x1A_FF) // Combining diacritical marks extended\n\t\t\t|| (codePoint >= 0x1D_C0 && codePoint <= 0x1D_FF) // Combining diacritical marks supplement\n\t\t\t|| (codePoint >= 0x20_D0 && codePoint <= 0x20_FF) // Combining diacritical marks for symbols\n\t\t\t|| (codePoint >= 0xFE_20 && codePoint <= 0xFE_2F) // Combining half marks\n\t\t) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Ignore surrogate pairs\n\t\tif (codePoint >= 0xD8_00 && codePoint <= 0xDF_FF) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Ignore variation selectors\n\t\tif (codePoint >= 0xFE_00 && codePoint <= 0xFE_0F) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// This covers some of the above cases, but we still keep them for performance reasons.\n\t\tif (defaultIgnorableCodePointRegex.test(character)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// TODO: Use `/\\p{RGI_Emoji}/v` when targeting Node.js 20.\n\t\tif (emojiRegex().test(character)) {\n\t\t\twidth += 2;\n\t\t\tcontinue;\n\t\t}\n\n\t\twidth += eastAsianWidth(codePoint, eastAsianWidthOptions);\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 = url => `${ESCAPES.values().next().value}${ANSI_ESCAPE_LINK}${url}${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.at(-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\n\t\t\tconst ansiEscapeLinkCandidate = characters.slice(index + 1, index + 1 + ANSI_ESCAPE_LINK.length).join('');\n\t\t\tisInsideLinkEscape = ansiEscapeLinkCandidate === 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.at(-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.at(-1).trimStart();\n\t\t}\n\n\t\tlet rowLength = stringWidth(rows.at(-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 preString = rows.join('\\n');\n\tconst pre = [...preString];\n\n\t// We need to keep a separate index as `String#slice()` works on Unicode code units, while `pre` is an array of codepoints.\n\tlet preStringIndex = 0;\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(preString.slice(preStringIndex)) || {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\n\t\tpreStringIndex += character.length;\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.replaceAll('\\r\\n', '\\n')\n\t\t.split('\\n')\n\t\t.map(line => exec(line, columns, options))\n\t\t.join('\\n');\n}\n", "import { useRef } from \"../use-ref.js\";\nimport { readlineWidth, breakLines } from \"../utils.js\";\nfunction usePointerPosition({ active, renderedItems, pageSize, loop, }) {\n    const state = useRef({\n        lastPointer: active,\n        lastActive: undefined,\n    });\n    const { lastPointer, lastActive } = state.current;\n    const middle = Math.floor(pageSize / 2);\n    const renderedLength = renderedItems.reduce((acc, item) => acc + item.length, 0);\n    const defaultPointerPosition = renderedItems\n        .slice(0, active)\n        .reduce((acc, item) => acc + item.length, 0);\n    let pointer = defaultPointerPosition;\n    if (renderedLength > pageSize) {\n        if (loop) {\n            /**\n             * Creates the next position for the pointer considering an infinitely\n             * looping list of items to be rendered on the page.\n             *\n             * The goal is to progressively move the cursor to the middle position as the user move down, and then keep\n             * the cursor there. When the user move up, maintain the cursor position.\n             */\n            // By default, keep the cursor position as-is.\n            pointer = lastPointer;\n            if (\n            // First render, skip this logic.\n            lastActive != null &&\n                // Only move the pointer down when the user moves down.\n                lastActive < active &&\n                // Check user didn't move up across page boundary.\n                active - lastActive < pageSize) {\n                pointer = Math.min(\n                // Furthest allowed position for the pointer is the middle of the list\n                middle, Math.abs(active - lastActive) === 1\n                    ? Math.min(\n                    // Move the pointer at most the height of the last active item.\n                    lastPointer + (renderedItems[lastActive]?.length ?? 0), \n                    // If the user moved by one item, move the pointer to the natural position of the active item as\n                    // long as it doesn't move the cursor up.\n                    Math.max(defaultPointerPosition, lastPointer))\n                    : // Otherwise, move the pointer down by the difference between the active and last active item.\n                        lastPointer + active - lastActive);\n            }\n        }\n        else {\n            /**\n             * Creates the next position for the pointer considering a finite list of\n             * items to be rendered on a page.\n             *\n             * The goal is to keep the pointer in the middle of the page whenever possible, until\n             * we reach the bounds of the list (top or bottom). In which case, the cursor moves progressively\n             * to the bottom or top of the list.\n             */\n            const spaceUnderActive = renderedItems\n                .slice(active)\n                .reduce((acc, item) => acc + item.length, 0);\n            pointer =\n                spaceUnderActive < pageSize - middle\n                    ? // If the active item is near the end of the list, progressively move the cursor towards the end.\n                        pageSize - spaceUnderActive\n                    : // Otherwise, progressively move the pointer to the middle of the list.\n                        Math.min(defaultPointerPosition, middle);\n        }\n    }\n    // Save state for the next render\n    state.current.lastPointer = pointer;\n    state.current.lastActive = active;\n    return pointer;\n}\nexport function usePagination({ items, active, renderItem, pageSize, loop = true, }) {\n    const width = readlineWidth();\n    const bound = (num) => ((num % items.length) + items.length) % items.length;\n    const renderedItems = items.map((item, index) => {\n        if (item == null)\n            return [];\n        return breakLines(renderItem({ item, index, isActive: index === active }), width).split('\\n');\n    });\n    const renderedLength = renderedItems.reduce((acc, item) => acc + item.length, 0);\n    const renderItemAtIndex = (index) => renderedItems[index] ?? [];\n    const pointer = usePointerPosition({ active, renderedItems, pageSize, loop });\n    // Render the active item to decide the position.\n    // If the active item fits under the pointer, we render it there.\n    // Otherwise, we need to render it to fit at the bottom of the page; moving the pointer up.\n    const activeItem = renderItemAtIndex(active).slice(0, pageSize);\n    const activeItemPosition = pointer + activeItem.length <= pageSize ? pointer : pageSize - activeItem.length;\n    // Create an array of lines for the page, and add the lines of the active item into the page\n    const pageBuffer = Array.from({ length: pageSize });\n    pageBuffer.splice(activeItemPosition, activeItem.length, ...activeItem);\n    // Store to prevent rendering the same item twice\n    const itemVisited = new Set([active]);\n    // Fill the page under the active item\n    let bufferPointer = activeItemPosition + activeItem.length;\n    let itemPointer = bound(active + 1);\n    while (bufferPointer < pageSize &&\n        !itemVisited.has(itemPointer) &&\n        (loop && renderedLength > pageSize ? itemPointer !== active : itemPointer > active)) {\n        const lines = renderItemAtIndex(itemPointer);\n        const linesToAdd = lines.slice(0, pageSize - bufferPointer);\n        pageBuffer.splice(bufferPointer, linesToAdd.length, ...linesToAdd);\n        // Move pointers for next iteration\n        itemVisited.add(itemPointer);\n        bufferPointer += linesToAdd.length;\n        itemPointer = bound(itemPointer + 1);\n    }\n    // Fill the page over the active item\n    bufferPointer = activeItemPosition - 1;\n    itemPointer = bound(active - 1);\n    while (bufferPointer >= 0 &&\n        !itemVisited.has(itemPointer) &&\n        (loop && renderedLength > pageSize ? itemPointer !== active : itemPointer < active)) {\n        const lines = renderItemAtIndex(itemPointer);\n        const linesToAdd = lines.slice(Math.max(0, lines.length - bufferPointer - 1));\n        pageBuffer.splice(bufferPointer - linesToAdd.length + 1, linesToAdd.length, ...linesToAdd);\n        // Move pointers for next iteration\n        itemVisited.add(itemPointer);\n        bufferPointer -= linesToAdd.length;\n        itemPointer = bound(itemPointer - 1);\n    }\n    return pageBuffer.filter((line) => typeof line === 'string').join('\\n');\n}\n", "import * as readline from 'node:readline';\nimport { AsyncResource } from 'node:async_hooks';\nimport MuteStream from 'mute-stream';\nimport { onExit as onSignalExit } from 'signal-exit';\nimport ScreenManager from \"./screen-manager.js\";\nimport { PromisePolyfill } from \"./promise-polyfill.js\";\nimport { withHooks, effectScheduler } from \"./hook-engine.js\";\nimport { AbortPromptError, CancelPromptError, ExitPromptError } from \"./errors.js\";\nfunction getCallSites() {\n    // eslint-disable-next-line @typescript-eslint/unbound-method\n    const _prepareStackTrace = Error.prepareStackTrace;\n    let result = [];\n    try {\n        Error.prepareStackTrace = (_, callSites) => {\n            const callSitesWithoutCurrent = callSites.slice(1);\n            result = callSitesWithoutCurrent;\n            return callSitesWithoutCurrent;\n        };\n        // oxlint-disable-next-line no-unused-expressions\n        new Error().stack;\n    }\n    catch {\n        // An error will occur if the Node flag --frozen-intrinsics is used.\n        // https://nodejs.org/api/cli.html#--frozen-intrinsics\n        return result;\n    }\n    Error.prepareStackTrace = _prepareStackTrace;\n    return result;\n}\nexport function createPrompt(view) {\n    const callSites = getCallSites();\n    const prompt = (config, context = {}) => {\n        // Default `input` to stdin\n        const { input = process.stdin, signal } = context;\n        const cleanups = new Set();\n        // Add mute capabilities to the output\n        const output = new MuteStream();\n        output.pipe(context.output ?? process.stdout);\n        const rl = readline.createInterface({\n            terminal: true,\n            input,\n            output,\n        });\n        const screen = new ScreenManager(rl);\n        const { promise, resolve, reject } = PromisePolyfill.withResolver();\n        const cancel = () => reject(new CancelPromptError());\n        if (signal) {\n            const abort = () => reject(new AbortPromptError({ cause: signal.reason }));\n            if (signal.aborted) {\n                abort();\n                return Object.assign(promise, { cancel });\n            }\n            signal.addEventListener('abort', abort);\n            cleanups.add(() => signal.removeEventListener('abort', abort));\n        }\n        cleanups.add(onSignalExit((code, signal) => {\n            reject(new ExitPromptError(`User force closed the prompt with ${code} ${signal}`));\n        }));\n        // SIGINT must be explicitly handled by the prompt so the ExitPromptError can be handled.\n        // Otherwise, the prompt will stop and in some scenarios never resolve.\n        // Ref issue #1741\n        const sigint = () => reject(new ExitPromptError(`User force closed the prompt with SIGINT`));\n        rl.on('SIGINT', sigint);\n        cleanups.add(() => rl.removeListener('SIGINT', sigint));\n        // Re-renders only happen when the state change; but the readline cursor could change position\n        // and that also requires a re-render (and a manual one because we mute the streams).\n        // We set the listener after the initial workLoop to avoid a double render if render triggered\n        // by a state change sets the cursor to the right position.\n        const checkCursorPos = () => screen.checkCursorPos();\n        rl.input.on('keypress', checkCursorPos);\n        cleanups.add(() => rl.input.removeListener('keypress', checkCursorPos));\n        return withHooks(rl, (cycle) => {\n            // The close event triggers immediately when the user press ctrl+c. SignalExit on the other hand\n            // triggers after the process is done (which happens after timeouts are done triggering.)\n            // We triggers the hooks cleanup phase on rl `close` so active timeouts can be cleared.\n            const hooksCleanup = AsyncResource.bind(() => effectScheduler.clearAll());\n            rl.on('close', hooksCleanup);\n            cleanups.add(() => rl.removeListener('close', hooksCleanup));\n            cycle(() => {\n                try {\n                    const nextView = view(config, (value) => {\n                        setImmediate(() => resolve(value));\n                    });\n                    // Typescript won't allow this, but not all users rely on typescript.\n                    // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n                    if (nextView === undefined) {\n                        const callerFilename = callSites[1]?.getFileName();\n                        throw new Error(`Prompt functions must return a string.\\n    at ${callerFilename}`);\n                    }\n                    const [content, bottomContent] = typeof nextView === 'string' ? [nextView] : nextView;\n                    screen.render(content, bottomContent);\n                    effectScheduler.run();\n                }\n                catch (error) {\n                    reject(error);\n                }\n            });\n            return Object.assign(promise\n                .then((answer) => {\n                effectScheduler.clearAll();\n                return answer;\n            }, (error) => {\n                effectScheduler.clearAll();\n                throw error;\n            })\n                // Wait for the promise to settle, then cleanup.\n                .finally(() => {\n                cleanups.forEach((cleanup) => cleanup());\n                screen.done({ clearContent: Boolean(context.clearPromptOnDone) });\n                output.end();\n            })\n                // Once cleanup is done, let the expose promise resolve/reject to the internal one.\n                .then(() => promise), { cancel });\n        });\n    };\n    return prompt;\n}\n", "import { stripVTControlCharacters } from 'node:util';\nimport { breakLines, readlineWidth } from \"./utils.js\";\nimport { cursorDown, cursorUp, cursorTo, cursorShow, eraseLines } from '@inquirer/ansi';\nconst height = (content) => content.split('\\n').length;\nconst lastLine = (content) => content.split('\\n').pop() ?? '';\nexport default class ScreenManager {\n    // These variables are keeping information to allow correct prompt re-rendering\n    height = 0;\n    extraLinesUnderPrompt = 0;\n    cursorPos;\n    rl;\n    constructor(rl) {\n        this.rl = rl;\n        this.cursorPos = rl.getCursorPos();\n    }\n    write(content) {\n        this.rl.output.unmute();\n        this.rl.output.write(content);\n        this.rl.output.mute();\n    }\n    render(content, bottomContent = '') {\n        // Write message to screen and setPrompt to control backspace\n        const promptLine = lastLine(content);\n        const rawPromptLine = stripVTControlCharacters(promptLine);\n        // Remove the rl.line from our prompt. We can't rely on the content of\n        // rl.line (mainly because of the password prompt), so just rely on it's\n        // length.\n        let prompt = rawPromptLine;\n        if (this.rl.line.length > 0) {\n            prompt = prompt.slice(0, -this.rl.line.length);\n        }\n        this.rl.setPrompt(prompt);\n        // SetPrompt will change cursor position, now we can get correct value\n        this.cursorPos = this.rl.getCursorPos();\n        const width = readlineWidth();\n        content = breakLines(content, width);\n        bottomContent = breakLines(bottomContent, width);\n        // Manually insert an extra line if we're at the end of the line.\n        // This prevent the cursor from appearing at the beginning of the\n        // current line.\n        if (rawPromptLine.length % width === 0) {\n            content += '\\n';\n        }\n        let output = content + (bottomContent ? '\\n' + bottomContent : '');\n        /**\n         * Re-adjust the cursor at the correct position.\n         */\n        // We need to consider parts of the prompt under the cursor as part of the bottom\n        // content in order to correctly cleanup and re-render.\n        const promptLineUpDiff = Math.floor(rawPromptLine.length / width) - this.cursorPos.rows;\n        const bottomContentHeight = promptLineUpDiff + (bottomContent ? height(bottomContent) : 0);\n        // Return cursor to the input position (on top of the bottomContent)\n        if (bottomContentHeight > 0)\n            output += cursorUp(bottomContentHeight);\n        // Return cursor to the initial left offset.\n        output += cursorTo(this.cursorPos.cols);\n        /**\n         * Render and store state for future re-rendering\n         */\n        this.write(cursorDown(this.extraLinesUnderPrompt) + eraseLines(this.height) + output);\n        this.extraLinesUnderPrompt = bottomContentHeight;\n        this.height = height(output);\n    }\n    checkCursorPos() {\n        const cursorPos = this.rl.getCursorPos();\n        if (cursorPos.cols !== this.cursorPos.cols) {\n            this.write(cursorTo(cursorPos.cols));\n            this.cursorPos = cursorPos;\n        }\n    }\n    done({ clearContent }) {\n        this.rl.setPrompt('');\n        let output = cursorDown(this.extraLinesUnderPrompt);\n        output += clearContent ? eraseLines(this.height) : '\\n';\n        output += cursorShow;\n        this.write(output);\n        this.rl.close();\n    }\n}\n", "const ESC = '\\u001B[';\n/** Move cursor to first column */\nexport const cursorLeft = ESC + 'G';\n/** Hide the cursor */\nexport const cursorHide = ESC + '?25l';\n/** Show the cursor */\nexport const cursorShow = ESC + '?25h';\n/** Move cursor up by count rows */\nexport const cursorUp = (rows = 1) => (rows > 0 ? `${ESC}${rows}A` : '');\n/** Move cursor down by count rows */\nexport const cursorDown = (rows = 1) => rows > 0 ? `${ESC}${rows}B` : '';\n/** Move cursor to position (x, y) */\nexport const cursorTo = (x, y) => {\n    if (typeof y === 'number' && !Number.isNaN(y)) {\n        return `${ESC}${y + 1};${x + 1}H`;\n    }\n    return `${ESC}${x + 1}G`;\n};\nconst eraseLine = ESC + '2K';\n/** Erase the specified number of lines above the cursor */\nexport const eraseLines = (lines) => lines > 0 ? (eraseLine + cursorUp(1)).repeat(lines - 1) + eraseLine + cursorLeft : '';\n", "// TODO: Remove this class once Node 22 becomes the minimum supported version.\nexport class PromisePolyfill extends Promise {\n    // Available starting from Node 22\n    // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/withResolvers\n    static withResolver() {\n        let resolve;\n        let reject;\n        const promise = new Promise((res, rej) => {\n            resolve = res;\n            reject = rej;\n        });\n        return { promise, resolve: resolve, reject: reject };\n    }\n}\n", "import { styleText } from 'node:util';\nimport figures from '@inquirer/figures';\n/**\n * Separator object\n * Used to space/separate choices group\n */\nexport class Separator {\n    separator = styleText('dim', Array.from({ length: 15 }).join(figures.line));\n    type = 'separator';\n    constructor(separator) {\n        if (separator) {\n            this.separator = separator;\n        }\n    }\n    static isSeparator(choice) {\n        return Boolean(choice &&\n            typeof choice === 'object' &&\n            'type' in choice &&\n            choice.type === 'separator');\n    }\n}\n", "import { createPrompt, useState, useKeypress, useEffect, usePrefix, isBackspaceKey, isEnterKey, isTabKey, makeTheme, } from '@inquirer/core';\nconst inputTheme = {\n    validationFailureMode: 'keep',\n};\nexport default createPrompt((config, done) => {\n    const { prefill = 'tab' } = config;\n    const theme = makeTheme(inputTheme, config.theme);\n    const [status, setStatus] = useState('idle');\n    const [defaultValue = '', setDefaultValue] = useState(config.default);\n    const [errorMsg, setError] = useState();\n    const [value, setValue] = useState('');\n    const prefix = usePrefix({ status, theme });\n    async function validate(value) {\n        const { required, pattern, patternError = 'Invalid input' } = config;\n        if (required && !value) {\n            return 'You must provide a value';\n        }\n        if (pattern && !pattern.test(value)) {\n            return patternError;\n        }\n        if (typeof config.validate === 'function') {\n            return (await config.validate(value)) || 'You must provide a valid value';\n        }\n        return true;\n    }\n    useKeypress(async (key, rl) => {\n        // Ignore keypress while our prompt is doing other processing.\n        if (status !== 'idle') {\n            return;\n        }\n        if (isEnterKey(key)) {\n            const answer = value || defaultValue;\n            setStatus('loading');\n            const isValid = await validate(answer);\n            if (isValid === true) {\n                setValue(answer);\n                setStatus('done');\n                done(answer);\n            }\n            else {\n                if (theme.validationFailureMode === 'clear') {\n                    setValue('');\n                }\n                else {\n                    // Reset the readline line value to the previous value. On line event, the value\n                    // get cleared, forcing the user to re-enter the value instead of fixing it.\n                    rl.write(value);\n                }\n                setError(isValid);\n                setStatus('idle');\n            }\n        }\n        else if (isBackspaceKey(key) && !value) {\n            setDefaultValue(undefined);\n        }\n        else if (isTabKey(key) && !value) {\n            setDefaultValue(undefined);\n            rl.clearLine(0); // Remove the tab character.\n            rl.write(defaultValue);\n            setValue(defaultValue);\n        }\n        else {\n            setValue(rl.line);\n            setError(undefined);\n        }\n    });\n    // If prefill is set to 'editable' cut out the default value and paste into current state and the user's cli buffer\n    // They can edit the value immediately instead of needing to press 'tab'\n    useEffect((rl) => {\n        if (prefill === 'editable' && defaultValue) {\n            rl.write(defaultValue);\n            setValue(defaultValue);\n        }\n    }, []);\n    const message = theme.style.message(config.message, status);\n    let formattedValue = value;\n    if (typeof config.transformer === 'function') {\n        formattedValue = config.transformer(value, { isFinal: status === 'done' });\n    }\n    else if (status === 'done') {\n        formattedValue = theme.style.answer(value);\n    }\n    let defaultStr;\n    if (defaultValue && status !== 'done' && !value) {\n        defaultStr = theme.style.defaultAnswer(defaultValue);\n    }\n    let error = '';\n    if (errorMsg) {\n        error = theme.style.error(errorMsg);\n    }\n    return [\n        [prefix, message, defaultStr, formattedValue]\n            .filter((v) => v !== undefined)\n            .join(' '),\n        error,\n    ];\n});\n", "import { createPrompt, useState, useKeypress, usePrefix, usePagination, useRef, useMemo, useEffect, isBackspaceKey, isEnterKey, isUpKey, isDownKey, isNumberKey, Separator, ValidationError, makeTheme, } from '@inquirer/core';\nimport { cursorHide } from '@inquirer/ansi';\nimport { styleText } from 'node:util';\nimport figures from '@inquirer/figures';\nconst selectTheme = {\n    icon: { cursor: figures.pointer },\n    style: {\n        disabled: (text) => styleText('dim', `- ${text}`),\n        description: (text) => styleText('cyan', text),\n        keysHelpTip: (keys) => keys\n            .map(([key, action]) => `${styleText('bold', key)} ${styleText('dim', action)}`)\n            .join(styleText('dim', ' \u2022 ')),\n    },\n    indexMode: 'hidden',\n    keybindings: [],\n};\nfunction isSelectable(item) {\n    return !Separator.isSeparator(item) && !item.disabled;\n}\nfunction normalizeChoices(choices) {\n    return choices.map((choice) => {\n        if (Separator.isSeparator(choice))\n            return choice;\n        if (typeof choice !== 'object' || choice === null || !('value' in choice)) {\n            // It's a raw value (string, number, etc.)\n            const name = String(choice);\n            return {\n                value: choice,\n                name,\n                short: name,\n                disabled: false,\n            };\n        }\n        const name = choice.name ?? String(choice.value);\n        const normalizedChoice = {\n            value: choice.value,\n            name,\n            short: choice.short ?? name,\n            disabled: choice.disabled ?? false,\n        };\n        if (choice.description) {\n            normalizedChoice.description = choice.description;\n        }\n        return normalizedChoice;\n    });\n}\nexport default createPrompt((config, done) => {\n    const { loop = true, pageSize = 7 } = config;\n    const theme = makeTheme(selectTheme, config.theme);\n    const { keybindings } = theme;\n    const [status, setStatus] = useState('idle');\n    const prefix = usePrefix({ status, theme });\n    const searchTimeoutRef = useRef();\n    // Vim keybindings (j/k) conflict with typing those letters in search,\n    // so search must be disabled when vim bindings are enabled\n    const searchEnabled = !keybindings.includes('vim');\n    const items = useMemo(() => normalizeChoices(config.choices), [config.choices]);\n    const bounds = useMemo(() => {\n        const first = items.findIndex(isSelectable);\n        const last = items.findLastIndex(isSelectable);\n        if (first === -1) {\n            throw new ValidationError('[select prompt] No selectable choices. All choices are disabled.');\n        }\n        return { first, last };\n    }, [items]);\n    const defaultItemIndex = useMemo(() => {\n        if (!('default' in config))\n            return -1;\n        return items.findIndex((item) => isSelectable(item) && item.value === config.default);\n    }, [config.default, items]);\n    const [active, setActive] = useState(defaultItemIndex === -1 ? bounds.first : defaultItemIndex);\n    // Safe to assume the cursor position always point to a Choice.\n    const selectedChoice = items[active];\n    useKeypress((key, rl) => {\n        clearTimeout(searchTimeoutRef.current);\n        if (isEnterKey(key)) {\n            setStatus('done');\n            done(selectedChoice.value);\n        }\n        else if (isUpKey(key, keybindings) || isDownKey(key, keybindings)) {\n            rl.clearLine(0);\n            if (loop ||\n                (isUpKey(key, keybindings) && active !== bounds.first) ||\n                (isDownKey(key, keybindings) && active !== bounds.last)) {\n                const offset = isUpKey(key, keybindings) ? -1 : 1;\n                let next = active;\n                do {\n                    next = (next + offset + items.length) % items.length;\n                } while (!isSelectable(items[next]));\n                setActive(next);\n            }\n        }\n        else if (isNumberKey(key) && !Number.isNaN(Number(rl.line))) {\n            const selectedIndex = Number(rl.line) - 1;\n            // Find the nth item (ignoring separators)\n            let selectableIndex = -1;\n            const position = items.findIndex((item) => {\n                if (Separator.isSeparator(item))\n                    return false;\n                selectableIndex++;\n                return selectableIndex === selectedIndex;\n            });\n            const item = items[position];\n            if (item != null && isSelectable(item)) {\n                setActive(position);\n            }\n            searchTimeoutRef.current = setTimeout(() => {\n                rl.clearLine(0);\n            }, 700);\n        }\n        else if (isBackspaceKey(key)) {\n            rl.clearLine(0);\n        }\n        else if (searchEnabled) {\n            const searchTerm = rl.line.toLowerCase();\n            const matchIndex = items.findIndex((item) => {\n                if (Separator.isSeparator(item) || !isSelectable(item))\n                    return false;\n                return item.name.toLowerCase().startsWith(searchTerm);\n            });\n            if (matchIndex !== -1) {\n                setActive(matchIndex);\n            }\n            searchTimeoutRef.current = setTimeout(() => {\n                rl.clearLine(0);\n            }, 700);\n        }\n    });\n    useEffect(() => () => {\n        clearTimeout(searchTimeoutRef.current);\n    }, []);\n    const message = theme.style.message(config.message, status);\n    const helpLine = theme.style.keysHelpTip([\n        ['\u2191\u2193', 'navigate'],\n        ['\u23CE', 'select'],\n    ]);\n    let separatorCount = 0;\n    const page = usePagination({\n        items,\n        active,\n        renderItem({ item, isActive, index }) {\n            if (Separator.isSeparator(item)) {\n                separatorCount++;\n                return ` ${item.separator}`;\n            }\n            const indexLabel = theme.indexMode === 'number' ? `${index + 1 - separatorCount}. ` : '';\n            if (item.disabled) {\n                const disabledLabel = typeof item.disabled === 'string' ? item.disabled : '(disabled)';\n                return theme.style.disabled(`${indexLabel}${item.name} ${disabledLabel}`);\n            }\n            const color = isActive ? theme.style.highlight : (x) => x;\n            const cursor = isActive ? theme.icon.cursor : ` `;\n            return color(`${cursor} ${indexLabel}${item.name}`);\n        },\n        pageSize,\n        loop,\n    });\n    if (status === 'done') {\n        return [prefix, message, theme.style.answer(selectedChoice.short)]\n            .filter(Boolean)\n            .join(' ');\n    }\n    const { description } = selectedChoice;\n    const lines = [\n        [prefix, message].filter(Boolean).join(' '),\n        page,\n        ' ',\n        description ? theme.style.description(description) : '',\n        helpLine,\n    ]\n        .filter(Boolean)\n        .join('\\n')\n        .trimEnd();\n    return `${lines}${cursorHide}`;\n});\nexport { Separator } from '@inquirer/core';\n", "import { createPrompt, useState, useKeypress, usePrefix, usePagination, useEffect, useMemo, useRef, isDownKey, isEnterKey, isTabKey, isUpKey, Separator, makeTheme, } from '@inquirer/core';\nimport { styleText } from 'node:util';\nimport figures from '@inquirer/figures';\nconst searchTheme = {\n    icon: { cursor: figures.pointer },\n    style: {\n        disabled: (text) => styleText('dim', `- ${text}`),\n        searchTerm: (text) => styleText('cyan', text),\n        description: (text) => styleText('cyan', text),\n        keysHelpTip: (keys) => keys\n            .map(([key, action]) => `${styleText('bold', key)} ${styleText('dim', action)}`)\n            .join(styleText('dim', ' \u2022 ')),\n    },\n};\nfunction isSelectable(item) {\n    return !Separator.isSeparator(item) && !item.disabled;\n}\nfunction normalizeChoices(choices) {\n    return choices.map((choice) => {\n        if (Separator.isSeparator(choice))\n            return choice;\n        if (typeof choice === 'string') {\n            return {\n                value: choice,\n                name: choice,\n                short: choice,\n                disabled: false,\n            };\n        }\n        const name = choice.name ?? String(choice.value);\n        const normalizedChoice = {\n            value: choice.value,\n            name,\n            short: choice.short ?? name,\n            disabled: choice.disabled ?? false,\n        };\n        if (choice.description) {\n            normalizedChoice.description = choice.description;\n        }\n        return normalizedChoice;\n    });\n}\nexport default createPrompt((config, done) => {\n    const { pageSize = 7, validate = () => true } = config;\n    const theme = makeTheme(searchTheme, config.theme);\n    const [status, setStatus] = useState('loading');\n    const [searchTerm, setSearchTerm] = useState('');\n    const [searchResults, setSearchResults] = useState([]);\n    const [searchError, setSearchError] = useState();\n    const defaultApplied = useRef(false);\n    const prefix = usePrefix({ status, theme });\n    const bounds = useMemo(() => {\n        const first = searchResults.findIndex(isSelectable);\n        const last = searchResults.findLastIndex(isSelectable);\n        return { first, last };\n    }, [searchResults]);\n    const [active = bounds.first, setActive] = useState();\n    useEffect(() => {\n        const controller = new AbortController();\n        setStatus('loading');\n        setSearchError(undefined);\n        const fetchResults = async () => {\n            try {\n                const results = await config.source(searchTerm || undefined, {\n                    signal: controller.signal,\n                });\n                if (!controller.signal.aborted) {\n                    const normalized = normalizeChoices(results);\n                    let initialActive;\n                    if (!defaultApplied.current && 'default' in config) {\n                        const defaultIndex = normalized.findIndex((item) => isSelectable(item) && item.value === config.default);\n                        initialActive = defaultIndex === -1 ? undefined : defaultIndex;\n                        defaultApplied.current = true;\n                    }\n                    setActive(initialActive);\n                    setSearchError(undefined);\n                    setSearchResults(normalized);\n                    setStatus('idle');\n                }\n            }\n            catch (error) {\n                if (!controller.signal.aborted && error instanceof Error) {\n                    setSearchError(error.message);\n                }\n            }\n        };\n        void fetchResults();\n        return () => {\n            controller.abort();\n        };\n    }, [searchTerm]);\n    // Safe to assume the cursor position never points to a Separator.\n    const selectedChoice = searchResults[active];\n    useKeypress(async (key, rl) => {\n        if (isEnterKey(key)) {\n            if (selectedChoice) {\n                setStatus('loading');\n                const isValid = await validate(selectedChoice.value);\n                setStatus('idle');\n                if (isValid === true) {\n                    setStatus('done');\n                    done(selectedChoice.value);\n                }\n                else if (selectedChoice.name === searchTerm) {\n                    setSearchError(isValid || 'You must provide a valid value');\n                }\n                else {\n                    // Reset line with new search term\n                    rl.write(selectedChoice.name);\n                    setSearchTerm(selectedChoice.name);\n                }\n            }\n            else {\n                // Reset the readline line value to the previous value. On line event, the value\n                // get cleared, forcing the user to re-enter the value instead of fixing it.\n                rl.write(searchTerm);\n            }\n        }\n        else if (isTabKey(key) && selectedChoice) {\n            rl.clearLine(0); // Remove the tab character.\n            rl.write(selectedChoice.name);\n            setSearchTerm(selectedChoice.name);\n        }\n        else if (status !== 'loading' && (isUpKey(key) || isDownKey(key))) {\n            rl.clearLine(0);\n            if ((isUpKey(key) && active !== bounds.first) ||\n                (isDownKey(key) && active !== bounds.last)) {\n                const offset = isUpKey(key) ? -1 : 1;\n                let next = active;\n                do {\n                    next = (next + offset + searchResults.length) % searchResults.length;\n                } while (!isSelectable(searchResults[next]));\n                setActive(next);\n            }\n        }\n        else {\n            setSearchTerm(rl.line);\n        }\n    });\n    const message = theme.style.message(config.message, status);\n    const helpLine = theme.style.keysHelpTip([\n        ['\u2191\u2193', 'navigate'],\n        ['\u23CE', 'select'],\n    ]);\n    const page = usePagination({\n        items: searchResults,\n        active,\n        renderItem({ item, isActive }) {\n            if (Separator.isSeparator(item)) {\n                return ` ${item.separator}`;\n            }\n            if (item.disabled) {\n                const disabledLabel = typeof item.disabled === 'string' ? item.disabled : '(disabled)';\n                return theme.style.disabled(`${item.name} ${disabledLabel}`);\n            }\n            const color = isActive ? theme.style.highlight : (x) => x;\n            const cursor = isActive ? theme.icon.cursor : ` `;\n            return color(`${cursor} ${item.name}`);\n        },\n        pageSize,\n        loop: false,\n    });\n    let error;\n    if (searchError) {\n        error = theme.style.error(searchError);\n    }\n    else if (searchResults.length === 0 && searchTerm !== '' && status === 'idle') {\n        error = theme.style.error('No results found');\n    }\n    let searchStr;\n    if (status === 'done' && selectedChoice) {\n        return [prefix, message, theme.style.answer(selectedChoice.short)]\n            .filter(Boolean)\n            .join(' ')\n            .trimEnd();\n    }\n    else {\n        searchStr = theme.style.searchTerm(searchTerm);\n    }\n    const description = selectedChoice?.description;\n    const header = [prefix, message, searchStr].filter(Boolean).join(' ').trimEnd();\n    const body = [\n        error ?? page,\n        ' ',\n        description ? theme.style.description(description) : '',\n        helpLine,\n    ]\n        .filter(Boolean)\n        .join('\\n')\n        .trimEnd();\n    return [header, body];\n});\nexport { Separator } from '@inquirer/core';\n", "import { createPrompt, useState, useKeypress, isEnterKey, isTabKey, usePrefix, makeTheme, } from '@inquirer/core';\nfunction getBooleanValue(value, defaultValue) {\n    let answer = defaultValue !== false;\n    if (/^(y|yes)/i.test(value))\n        answer = true;\n    else if (/^(n|no)/i.test(value))\n        answer = false;\n    return answer;\n}\nfunction boolToString(value) {\n    return value ? 'Yes' : 'No';\n}\nexport default createPrompt((config, done) => {\n    const { transformer = boolToString } = config;\n    const [status, setStatus] = useState('idle');\n    const [value, setValue] = useState('');\n    const theme = makeTheme(config.theme);\n    const prefix = usePrefix({ status, theme });\n    useKeypress((key, rl) => {\n        if (status !== 'idle')\n            return;\n        if (isEnterKey(key)) {\n            const answer = getBooleanValue(value, config.default);\n            setValue(transformer(answer));\n            setStatus('done');\n            done(answer);\n        }\n        else if (isTabKey(key)) {\n            const answer = boolToString(!getBooleanValue(value, config.default));\n            rl.clearLine(0); // Remove the tab character.\n            rl.write(answer);\n            setValue(answer);\n        }\n        else {\n            setValue(rl.line);\n        }\n    });\n    let formattedValue = value;\n    let defaultValue = '';\n    if (status === 'done') {\n        formattedValue = theme.style.answer(value);\n    }\n    else {\n        defaultValue = ` ${theme.style.defaultAnswer(config.default === false ? 'y/N' : 'Y/n')}`;\n    }\n    const message = theme.style.message(config.message, status);\n    return `${prefix} ${message}${defaultValue} ${formattedValue}`;\n});\n", "import input from \"@inquirer/input\";\nimport select from \"@inquirer/select\";\nimport search from \"@inquirer/search\";\nimport confirm from \"@inquirer/confirm\";\nimport { Context } from \"../../../bundler/context.js\";\nimport { logOutput } from \"../../../bundler/log.js\";\n\n/**\n * Handle ExitPromptError thrown by @inquirer/* packages when the user\n * presses Ctrl+C. Instead of printing an ugly stack trace, exit cleanly.\n * For unexpected errors, use ctx.crash to report to Sentry.\n */\nfunction handlePromptError(ctx: Context) {\n  return async (error: unknown): Promise<never> => {\n    if (error instanceof Error && error.name === \"ExitPromptError\") {\n      // User pressed Ctrl+C \u2014 exit silently with code 130 (standard for SIGINT)\n      process.exit(130);\n    }\n    return ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: `Unexpected prompt error: ${String(error)}`,\n      errForSentry: error instanceof Error ? error : undefined,\n    });\n  };\n}\n\nexport const promptString = async (\n  ctx: Context,\n  options: {\n    message: string;\n    default?: string;\n  },\n): Promise<string> => {\n  if (process.stdin.isTTY) {\n    return input({\n      message: options.message,\n      ...(options.default !== undefined ? { default: options.default } : {}),\n    }).catch(handlePromptError(ctx));\n  } else {\n    return ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: `Cannot prompt for input in non-interactive terminals. (${options.message})`,\n    });\n  }\n};\n\nexport const promptSecret = async (\n  ctx: Context,\n  options: {\n    message: string;\n  },\n): Promise<string> => {\n  if (process.stdin.isTTY) {\n    return input({\n      message: options.message,\n      transformer: (val, { isFinal }) =>\n        isFinal ? \"*\".repeat(val.length) : val,\n    }).catch(handlePromptError(ctx));\n  } else {\n    return ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: `Cannot prompt for input in non-interactive terminals. (${options.message})`,\n    });\n  }\n};\n\nexport const promptOptions = async <V>(\n  ctx: Context,\n  options: {\n    message: string;\n    choices: Array<{ name: string; value: V }>;\n    default?: V;\n    prefix?: string;\n    suffix?: string;\n  },\n): Promise<V> => {\n  if (process.stdin.isTTY) {\n    return select<V>({\n      message: options.message + (options.suffix ?? \"\"),\n      choices: options.choices,\n      ...(options.default !== undefined ? { default: options.default } : {}),\n      ...(options.prefix !== undefined\n        ? { theme: { prefix: options.prefix } }\n        : {}),\n    }).catch(handlePromptError(ctx));\n  } else {\n    return ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: `Cannot prompt for input in non-interactive terminals. (${options.message})`,\n    });\n  }\n};\n\nexport const promptSearch = async <V>(\n  ctx: Context,\n  options: {\n    message: string;\n    choices: Array<{ name: string; value: V }>;\n    default?: V;\n  },\n): Promise<V> => {\n  if (process.stdin.isTTY) {\n    return search<V>({\n      message: options.message,\n      ...(options.default !== undefined ? { default: options.default } : {}),\n      source: (input: string | undefined) => {\n        if (!input) return options.choices;\n        const term = input.toLowerCase();\n        return options.choices.filter((c) =>\n          c.name.toLowerCase().includes(term),\n        );\n      },\n    }).catch(handlePromptError(ctx));\n  } else {\n    return ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: `Cannot prompt for input in non-interactive terminals. (${options.message})`,\n    });\n  }\n};\n\nexport const promptYesNo = async (\n  ctx: Context,\n  options: {\n    message: string;\n    default?: boolean;\n    prefix?: string;\n    nonInteractiveError?: string;\n  },\n): Promise<boolean> => {\n  if (process.stdin.isTTY) {\n    return confirm({\n      message: options.message,\n      ...(options.default !== undefined ? { default: options.default } : {}),\n      ...(options.prefix !== undefined\n        ? { theme: { prefix: options.prefix } }\n        : {}),\n    }).catch(handlePromptError(ctx));\n  } else {\n    logOutput(options.message);\n    return ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage:\n        options.nonInteractiveError ??\n        `Cannot prompt for input in non-interactive terminals. (${options.message})`,\n    });\n  }\n};\n", "import { Context } from \"../../../bundler/context.js\";\nimport { bigBrainAPI } from \"../utils/utils.js\";\n\nexport async function bigBrainStart(\n  ctx: Context,\n  data: {\n    // cloud port\n    port: number;\n    projectSlug: string;\n    teamSlug: string;\n    instanceName: string | null;\n  },\n): Promise<{ deploymentName: string; adminKey: string }> {\n  return bigBrainAPI({\n    ctx,\n    method: \"POST\",\n    path: \"local_deployment/start\",\n    data,\n  });\n}\n\nexport async function bigBrainPause(\n  ctx: Context,\n  data: {\n    projectSlug: string;\n    teamSlug: string;\n  },\n): Promise<void> {\n  return bigBrainAPI({\n    ctx,\n    method: \"POST\",\n    path: \"local_deployment/pause\",\n    data,\n  });\n}\n\nexport async function bigBrainRecordActivity(\n  ctx: Context,\n  data: {\n    instanceName: string;\n  },\n) {\n  return bigBrainAPI({\n    ctx,\n    method: \"POST\",\n    path: \"local_deployment/record_activity\",\n    data,\n  });\n}\n\nexport async function bigBrainEnableFeatureMetadata(\n  ctx: Context,\n): Promise<{ totalProjects: { kind: \"none\" | \"one\" | \"multiple\" } }> {\n  return bigBrainAPI({\n    ctx,\n    method: \"POST\",\n    path: \"local_deployment/enable_feature_metadata\",\n    data: {},\n  });\n}\n\nexport async function bigBrainGenerateAdminKeyForAnonymousDeployment(\n  ctx: Context,\n  data: {\n    instanceName: string;\n    instanceSecret: string;\n  },\n) {\n  return bigBrainAPI({\n    ctx,\n    method: \"POST\",\n    path: \"local_deployment/generate_admin_key\",\n    data,\n  });\n}\n/** Whether a project already has a cloud dev deployment for this user. */\nexport async function projectHasExistingCloudDev(\n  ctx: Context,\n  {\n    projectSlug,\n    teamSlug,\n  }: {\n    projectSlug: string;\n    teamSlug: string;\n  },\n) {\n  const response = await bigBrainAPI<\n    | {\n        kind: \"Exists\";\n      }\n    | {\n        kind: \"DoesNotExist\";\n      }\n  >({\n    ctx,\n    method: \"POST\",\n    path: \"deployment/existing_dev\",\n    data: { projectSlug, teamSlug },\n  });\n  if (response.kind === \"Exists\") {\n    return true;\n  } else if (response.kind === \"DoesNotExist\") {\n    return false;\n  }\n  return await ctx.crash({\n    exitCode: 1,\n    errorType: \"fatal\",\n    printedMessage: `Unexpected /api/deployment/existing_dev response: ${JSON.stringify(response, null, 2)}`,\n  });\n}\n", "// settings & const\nconst PATH_PARAM_RE = /\\{[^{}]+\\}/g;\n\nconst supportsRequestInitExt = () => {\n  return (\n    typeof process === \"object\" &&\n    Number.parseInt(process?.versions?.node?.substring(0, 2)) >= 18 &&\n    process.versions.undici\n  );\n};\n\n/**\n * Returns a cheap, non-cryptographically-secure random ID\n * Courtesy of @imranbarbhuiya (https://github.com/imranbarbhuiya)\n */\nexport function randomID() {\n  return Math.random().toString(36).slice(2, 11);\n}\n\n/**\n * Create an openapi-fetch client.\n * @type {import(\"./index.js\").default}\n */\nexport default function createClient(clientOptions) {\n  let {\n    baseUrl = \"\",\n    Request: CustomRequest = globalThis.Request,\n    fetch: baseFetch = globalThis.fetch,\n    querySerializer: globalQuerySerializer,\n    bodySerializer: globalBodySerializer,\n    headers: baseHeaders,\n    requestInitExt = undefined,\n    ...baseOptions\n  } = { ...clientOptions };\n  requestInitExt = supportsRequestInitExt() ? requestInitExt : undefined;\n  baseUrl = removeTrailingSlash(baseUrl);\n  const globalMiddlewares = [];\n\n  /**\n   * Per-request fetch (keeps settings created in createClient()\n   * @param {T} url\n   * @param {import('./index.js').FetchOptions<T>} fetchOptions\n   */\n  async function coreFetch(schemaPath, fetchOptions) {\n    const {\n      baseUrl: localBaseUrl,\n      fetch = baseFetch,\n      Request = CustomRequest,\n      headers,\n      params = {},\n      parseAs = \"json\",\n      querySerializer: requestQuerySerializer,\n      bodySerializer = globalBodySerializer ?? defaultBodySerializer,\n      body,\n      middleware: requestMiddlewares = [],\n      ...init\n    } = fetchOptions || {};\n    let finalBaseUrl = baseUrl;\n    if (localBaseUrl) {\n      finalBaseUrl = removeTrailingSlash(localBaseUrl) ?? baseUrl;\n    }\n\n    let querySerializer =\n      typeof globalQuerySerializer === \"function\"\n        ? globalQuerySerializer\n        : createQuerySerializer(globalQuerySerializer);\n    if (requestQuerySerializer) {\n      querySerializer =\n        typeof requestQuerySerializer === \"function\"\n          ? requestQuerySerializer\n          : createQuerySerializer({\n              ...(typeof globalQuerySerializer === \"object\" ? globalQuerySerializer : {}),\n              ...requestQuerySerializer,\n            });\n    }\n\n    const serializedBody =\n      body === undefined\n        ? undefined\n        : bodySerializer(\n            body,\n            // Note: we declare mergeHeaders() both here and below because it’s a bit of a chicken-or-egg situation:\n            // bodySerializer() needs all headers so we aren’t dropping ones set by the user, however,\n            // the result of this ALSO sets the lowest-priority content-type header. So we re-merge below,\n            // setting the content-type at the very beginning to be overwritten.\n            // Lastly, based on the way headers work, it’s not a simple “present-or-not” check becauase null intentionally un-sets headers.\n            mergeHeaders(baseHeaders, headers, params.header),\n          );\n    const finalHeaders = mergeHeaders(\n      // with no body, we should not to set Content-Type\n      serializedBody === undefined ||\n        // if serialized body is FormData; browser will correctly set Content-Type & boundary expression\n        serializedBody instanceof FormData\n        ? {}\n        : {\n            \"Content-Type\": \"application/json\",\n          },\n      baseHeaders,\n      headers,\n      params.header,\n    );\n\n    // Client level middleware take priority over request-level middleware\n    const finalMiddlewares = [...globalMiddlewares, ...requestMiddlewares];\n\n    const requestInit = {\n      redirect: \"follow\",\n      ...baseOptions,\n      ...init,\n      body: serializedBody,\n      headers: finalHeaders,\n    };\n\n    let id;\n    let options;\n    let request = new Request(\n      createFinalURL(schemaPath, { baseUrl: finalBaseUrl, params, querySerializer }),\n      requestInit,\n    );\n    let response;\n\n    /** Add custom parameters to Request object */\n    for (const key in init) {\n      if (!(key in request)) {\n        request[key] = init[key];\n      }\n    }\n\n    if (finalMiddlewares.length) {\n      id = randomID();\n\n      // middleware (request)\n      options = Object.freeze({\n        baseUrl: finalBaseUrl,\n        fetch,\n        parseAs,\n        querySerializer,\n        bodySerializer,\n      });\n      for (const m of finalMiddlewares) {\n        if (m && typeof m === \"object\" && typeof m.onRequest === \"function\") {\n          const result = await m.onRequest({\n            request,\n            schemaPath,\n            params,\n            options,\n            id,\n          });\n          if (result) {\n            if (result instanceof Request) {\n              request = result;\n            } else if (result instanceof Response) {\n              response = result;\n              break;\n            } else {\n              throw new Error(\"onRequest: must return new Request() or Response() when modifying the request\");\n            }\n          }\n        }\n      }\n    }\n\n    if (!response) {\n      // fetch!\n      try {\n        response = await fetch(request, requestInitExt);\n      } catch (error) {\n        let errorAfterMiddleware = error;\n        // middleware (error)\n        // execute in reverse-array order (first priority gets last transform)\n        if (finalMiddlewares.length) {\n          for (let i = finalMiddlewares.length - 1; i >= 0; i--) {\n            const m = finalMiddlewares[i];\n            if (m && typeof m === \"object\" && typeof m.onError === \"function\") {\n              const result = await m.onError({\n                request,\n                error: errorAfterMiddleware,\n                schemaPath,\n                params,\n                options,\n                id,\n              });\n              if (result) {\n                // if error is handled by returning a response, skip remaining middleware\n                if (result instanceof Response) {\n                  errorAfterMiddleware = undefined;\n                  response = result;\n                  break;\n                }\n\n                if (result instanceof Error) {\n                  errorAfterMiddleware = result;\n                  continue;\n                }\n\n                throw new Error(\"onError: must return new Response() or instance of Error\");\n              }\n            }\n          }\n        }\n\n        // rethrow error if not handled by middleware\n        if (errorAfterMiddleware) {\n          throw errorAfterMiddleware;\n        }\n      }\n\n      // middleware (response)\n      // execute in reverse-array order (first priority gets last transform)\n      if (finalMiddlewares.length) {\n        for (let i = finalMiddlewares.length - 1; i >= 0; i--) {\n          const m = finalMiddlewares[i];\n          if (m && typeof m === \"object\" && typeof m.onResponse === \"function\") {\n            const result = await m.onResponse({\n              request,\n              response,\n              schemaPath,\n              params,\n              options,\n              id,\n            });\n            if (result) {\n              if (!(result instanceof Response)) {\n                throw new Error(\"onResponse: must return new Response() when modifying the response\");\n              }\n              response = result;\n            }\n          }\n        }\n      }\n    }\n\n    // handle empty content\n    if (response.status === 204 || request.method === \"HEAD\" || response.headers.get(\"Content-Length\") === \"0\") {\n      return response.ok ? { data: undefined, response } : { error: undefined, response };\n    }\n\n    // parse response (falling back to .text() when necessary)\n    if (response.ok) {\n      // if \"stream\", skip parsing entirely\n      if (parseAs === \"stream\") {\n        return { data: response.body, response };\n      }\n      return { data: await response[parseAs](), response };\n    }\n\n    // handle errors\n    let error = await response.text();\n    try {\n      error = JSON.parse(error); // attempt to parse as JSON\n    } catch {\n      // noop\n    }\n    return { error, response };\n  }\n\n  return {\n    request(method, url, init) {\n      return coreFetch(url, { ...init, method: method.toUpperCase() });\n    },\n    /** Call a GET endpoint */\n    GET(url, init) {\n      return coreFetch(url, { ...init, method: \"GET\" });\n    },\n    /** Call a PUT endpoint */\n    PUT(url, init) {\n      return coreFetch(url, { ...init, method: \"PUT\" });\n    },\n    /** Call a POST endpoint */\n    POST(url, init) {\n      return coreFetch(url, { ...init, method: \"POST\" });\n    },\n    /** Call a DELETE endpoint */\n    DELETE(url, init) {\n      return coreFetch(url, { ...init, method: \"DELETE\" });\n    },\n    /** Call a OPTIONS endpoint */\n    OPTIONS(url, init) {\n      return coreFetch(url, { ...init, method: \"OPTIONS\" });\n    },\n    /** Call a HEAD endpoint */\n    HEAD(url, init) {\n      return coreFetch(url, { ...init, method: \"HEAD\" });\n    },\n    /** Call a PATCH endpoint */\n    PATCH(url, init) {\n      return coreFetch(url, { ...init, method: \"PATCH\" });\n    },\n    /** Call a TRACE endpoint */\n    TRACE(url, init) {\n      return coreFetch(url, { ...init, method: \"TRACE\" });\n    },\n    /** Register middleware */\n    use(...middleware) {\n      for (const m of middleware) {\n        if (!m) {\n          continue;\n        }\n        if (typeof m !== \"object\" || !(\"onRequest\" in m || \"onResponse\" in m || \"onError\" in m)) {\n          throw new Error(\"Middleware must be an object with one of `onRequest()`, `onResponse() or `onError()`\");\n        }\n        globalMiddlewares.push(m);\n      }\n    },\n    /** Unregister middleware */\n    eject(...middleware) {\n      for (const m of middleware) {\n        const i = globalMiddlewares.indexOf(m);\n        if (i !== -1) {\n          globalMiddlewares.splice(i, 1);\n        }\n      }\n    },\n  };\n}\n\nclass PathCallForwarder {\n  constructor(client, url) {\n    this.client = client;\n    this.url = url;\n  }\n\n  GET = (init) => {\n    return this.client.GET(this.url, init);\n  };\n  PUT = (init) => {\n    return this.client.PUT(this.url, init);\n  };\n  POST = (init) => {\n    return this.client.POST(this.url, init);\n  };\n  DELETE = (init) => {\n    return this.client.DELETE(this.url, init);\n  };\n  OPTIONS = (init) => {\n    return this.client.OPTIONS(this.url, init);\n  };\n  HEAD = (init) => {\n    return this.client.HEAD(this.url, init);\n  };\n  PATCH = (init) => {\n    return this.client.PATCH(this.url, init);\n  };\n  TRACE = (init) => {\n    return this.client.TRACE(this.url, init);\n  };\n}\n\nclass PathClientProxyHandler {\n  constructor() {\n    this.client = null;\n  }\n\n  // Assume the property is an URL.\n  get(coreClient, url) {\n    const forwarder = new PathCallForwarder(coreClient, url);\n    this.client[url] = forwarder;\n    return forwarder;\n  }\n}\n\n/**\n * Wrap openapi-fetch client to support a path based API.\n * @type {import(\"./index.js\").wrapAsPathBasedClient}\n */\nexport function wrapAsPathBasedClient(coreClient) {\n  const handler = new PathClientProxyHandler();\n  const proxy = new Proxy(coreClient, handler);\n\n  // Put the proxy on the prototype chain of the actual client.\n  // This means if we do not have a memoized PathCallForwarder,\n  // we fall back to the proxy to synthesize it.\n  // However, the proxy itself is not on the hot-path (if we fetch the same\n  // endpoint multiple times, only the first call will hit the proxy).\n  function Client() {}\n  Client.prototype = proxy;\n\n  const client = new Client();\n\n  // Feed the client back to the proxy handler so it can store the generated\n  // PathCallForwarder.\n  handler.client = client;\n\n  return client;\n}\n\n/**\n * Convenience method to an openapi-fetch path based client.\n * Strictly equivalent to `wrapAsPathBasedClient(createClient(...))`.\n * @type {import(\"./index.js\").createPathBasedClient}\n */\nexport function createPathBasedClient(clientOptions) {\n  return wrapAsPathBasedClient(createClient(clientOptions));\n}\n\n// utils\n\n/**\n * Serialize primitive param values\n * @type {import(\"./index.js\").serializePrimitiveParam}\n */\nexport function serializePrimitiveParam(name, value, options) {\n  if (value === undefined || value === null) {\n    return \"\";\n  }\n  if (typeof value === \"object\") {\n    throw new Error(\n      \"Deeply-nested arrays/objects aren’t supported. Provide your own `querySerializer()` to handle these.\",\n    );\n  }\n  return `${name}=${options?.allowReserved === true ? value : encodeURIComponent(value)}`;\n}\n\n/**\n * Serialize object param (shallow only)\n * @type {import(\"./index.js\").serializeObjectParam}\n */\nexport function serializeObjectParam(name, value, options) {\n  if (!value || typeof value !== \"object\") {\n    return \"\";\n  }\n  const values = [];\n  const joiner =\n    {\n      simple: \",\",\n      label: \".\",\n      matrix: \";\",\n    }[options.style] || \"&\";\n\n  // explode: false\n  if (options.style !== \"deepObject\" && options.explode === false) {\n    for (const k in value) {\n      values.push(k, options.allowReserved === true ? value[k] : encodeURIComponent(value[k]));\n    }\n    const final = values.join(\",\"); // note: values are always joined by comma in explode: false (but joiner can prefix)\n    switch (options.style) {\n      case \"form\": {\n        return `${name}=${final}`;\n      }\n      case \"label\": {\n        return `.${final}`;\n      }\n      case \"matrix\": {\n        return `;${name}=${final}`;\n      }\n      default: {\n        return final;\n      }\n    }\n  }\n\n  // explode: true\n  for (const k in value) {\n    const finalName = options.style === \"deepObject\" ? `${name}[${k}]` : k;\n    values.push(serializePrimitiveParam(finalName, value[k], options));\n  }\n  const final = values.join(joiner);\n  return options.style === \"label\" || options.style === \"matrix\" ? `${joiner}${final}` : final;\n}\n\n/**\n * Serialize array param (shallow only)\n * @type {import(\"./index.js\").serializeArrayParam}\n */\nexport function serializeArrayParam(name, value, options) {\n  if (!Array.isArray(value)) {\n    return \"\";\n  }\n\n  // explode: false\n  if (options.explode === false) {\n    const joiner = { form: \",\", spaceDelimited: \"%20\", pipeDelimited: \"|\" }[options.style] || \",\"; // note: for arrays, joiners vary wildly based on style + explode behavior\n    const final = (options.allowReserved === true ? value : value.map((v) => encodeURIComponent(v))).join(joiner);\n    switch (options.style) {\n      case \"simple\": {\n        return final;\n      }\n      case \"label\": {\n        return `.${final}`;\n      }\n      case \"matrix\": {\n        return `;${name}=${final}`;\n      }\n      // case \"spaceDelimited\":\n      // case \"pipeDelimited\":\n      default: {\n        return `${name}=${final}`;\n      }\n    }\n  }\n\n  // explode: true\n  const joiner = { simple: \",\", label: \".\", matrix: \";\" }[options.style] || \"&\";\n  const values = [];\n  for (const v of value) {\n    if (options.style === \"simple\" || options.style === \"label\") {\n      values.push(options.allowReserved === true ? v : encodeURIComponent(v));\n    } else {\n      values.push(serializePrimitiveParam(name, v, options));\n    }\n  }\n  return options.style === \"label\" || options.style === \"matrix\"\n    ? `${joiner}${values.join(joiner)}`\n    : values.join(joiner);\n}\n\n/**\n * Serialize query params to string\n * @type {import(\"./index.js\").createQuerySerializer}\n */\nexport function createQuerySerializer(options) {\n  return function querySerializer(queryParams) {\n    const search = [];\n    if (queryParams && typeof queryParams === \"object\") {\n      for (const name in queryParams) {\n        const value = queryParams[name];\n        if (value === undefined || value === null) {\n          continue;\n        }\n        if (Array.isArray(value)) {\n          if (value.length === 0) {\n            continue;\n          }\n          search.push(\n            serializeArrayParam(name, value, {\n              style: \"form\",\n              explode: true,\n              ...options?.array,\n              allowReserved: options?.allowReserved || false,\n            }),\n          );\n          continue;\n        }\n        if (typeof value === \"object\") {\n          search.push(\n            serializeObjectParam(name, value, {\n              style: \"deepObject\",\n              explode: true,\n              ...options?.object,\n              allowReserved: options?.allowReserved || false,\n            }),\n          );\n          continue;\n        }\n        search.push(serializePrimitiveParam(name, value, options));\n      }\n    }\n    return search.join(\"&\");\n  };\n}\n\n/**\n * Handle different OpenAPI 3.x serialization styles\n * @type {import(\"./index.js\").defaultPathSerializer}\n * @see https://swagger.io/docs/specification/serialization/#path\n */\nexport function defaultPathSerializer(pathname, pathParams) {\n  let nextURL = pathname;\n  for (const match of pathname.match(PATH_PARAM_RE) ?? []) {\n    let name = match.substring(1, match.length - 1);\n    let explode = false;\n    let style = \"simple\";\n    if (name.endsWith(\"*\")) {\n      explode = true;\n      name = name.substring(0, name.length - 1);\n    }\n    if (name.startsWith(\".\")) {\n      style = \"label\";\n      name = name.substring(1);\n    } else if (name.startsWith(\";\")) {\n      style = \"matrix\";\n      name = name.substring(1);\n    }\n    if (!pathParams || pathParams[name] === undefined || pathParams[name] === null) {\n      continue;\n    }\n    const value = pathParams[name];\n    if (Array.isArray(value)) {\n      nextURL = nextURL.replace(match, serializeArrayParam(name, value, { style, explode }));\n      continue;\n    }\n    if (typeof value === \"object\") {\n      nextURL = nextURL.replace(match, serializeObjectParam(name, value, { style, explode }));\n      continue;\n    }\n    if (style === \"matrix\") {\n      nextURL = nextURL.replace(match, `;${serializePrimitiveParam(name, value)}`);\n      continue;\n    }\n    nextURL = nextURL.replace(match, style === \"label\" ? `.${encodeURIComponent(value)}` : encodeURIComponent(value));\n  }\n  return nextURL;\n}\n\n/**\n * Serialize body object to string\n * @type {import(\"./index.js\").defaultBodySerializer}\n */\nexport function defaultBodySerializer(body, headers) {\n  if (body instanceof FormData) {\n    return body;\n  }\n  if (headers) {\n    const contentType =\n      headers.get instanceof Function\n        ? (headers.get(\"Content-Type\") ?? headers.get(\"content-type\"))\n        : (headers[\"Content-Type\"] ?? headers[\"content-type\"]);\n    if (contentType === \"application/x-www-form-urlencoded\") {\n      return new URLSearchParams(body).toString();\n    }\n  }\n  return JSON.stringify(body);\n}\n\n/**\n * Construct URL string from baseUrl and handle path and query params\n * @type {import(\"./index.js\").createFinalURL}\n */\nexport function createFinalURL(pathname, options) {\n  let finalURL = `${options.baseUrl}${pathname}`;\n  if (options.params?.path) {\n    finalURL = defaultPathSerializer(finalURL, options.params.path);\n  }\n  let search = options.querySerializer(options.params.query ?? {});\n  if (search.startsWith(\"?\")) {\n    search = search.substring(1);\n  }\n  if (search) {\n    finalURL += `?${search}`;\n  }\n  return finalURL;\n}\n\n/**\n * Merge headers a and b, with b taking priority\n * @type {import(\"./index.js\").mergeHeaders}\n */\nexport function mergeHeaders(...allHeaders) {\n  const finalHeaders = new Headers();\n  for (const h of allHeaders) {\n    if (!h || typeof h !== \"object\") {\n      continue;\n    }\n    const iterator = h instanceof Headers ? h.entries() : Object.entries(h);\n    for (const [k, v] of iterator) {\n      if (v === null) {\n        finalHeaders.delete(k);\n      } else if (Array.isArray(v)) {\n        for (const v2 of v) {\n          finalHeaders.append(k, v2);\n        }\n      } else if (v !== undefined) {\n        finalHeaders.set(k, v);\n      }\n    }\n  }\n  return finalHeaders;\n}\n\n/**\n * Remove trailing slash from url\n * @type {import(\"./index.js\").removeTrailingSlash}\n */\nexport function removeTrailingSlash(url) {\n  if (url.endsWith(\"/\")) {\n    return url.substring(0, url.length - 1);\n  }\n  return url;\n}\n", "/*\n~/.cache/convex\n  binaries\n    0.0.1\n      convex-local-backend[.exe] // convex-local-backend.exe on windows\n    0.0.2\n      convex-local-backend[.exe]\n  dashboard\n    config.json\n    out\n    // if present, output files from building the self-hosted dashboard which can\n    // be served using `npx serve`\n    index.html\n\n\nDeployment state storage locations:\n\nNew default (project-local): .convex/local/default/\n  - Used for both \"local\" (linked to Convex project) and \"anonymous\" deployments\n  - One deployment per project/worktree/clone\n  - This allows worktrees/clones to have isolated storage without conflicts\n\nLegacy (home directory) - used for backward compatibility if data already exists:\n  - For \"local\" deployments: ~/.convex/convex-backend-state/local-{team}-{project}/\n  - For \"anonymous\" deployments: ~/.convex/anonymous-convex-backend-state/{anonymous-deployment-name}/\n\n\n~/.convex\n  convex-backend-state\n    local-my_team-chess\n      config.json // contains `LocalDeploymentConfig`\n      convex_local_storage\n      convex_local_backend.sqlite3\n    local-my_team-whisper\n      config.json\n      convex_local_storage\n      convex_local_backend.sqlite3\n  anonymous-convex-backend-state\n    config.json // contains { uuid: <uuid> }, used to identify the anonymous user\n    anonymous-chess\n      config.json\n      convex_local_storage\n      convex_local_backend.sqlite3\n*/\n\nimport path from \"path\";\nimport { cacheDir, rootDirectory } from \"../utils/utils.js\";\nimport { Context } from \"../../../bundler/context.js\";\nimport { logVerbose } from \"../../../bundler/log.js\";\nimport { recursivelyDelete } from \"../fsUtils.js\";\nimport crypto from \"crypto\";\n\n/**\n * Ensure the `.convex/.gitignore` file exists with the right content.\n * This prevents local deployment state from being committed to git.\n */\nexport function ensureDotConvexGitignore(\n  ctx: Context,\n  projectDir?: string,\n): void {\n  const baseDir = projectDir ?? process.cwd();\n  const dotConvexDir = path.join(baseDir, \".convex\");\n  const gitignorePath = path.join(dotConvexDir, \".gitignore\");\n\n  // Only create if .convex directory exists but .gitignore doesn't\n  if (ctx.fs.exists(dotConvexDir) && !ctx.fs.exists(gitignorePath)) {\n    ctx.fs.writeUtf8File(gitignorePath, \"/*\\n\");\n    logVerbose(`Created .convex/.gitignore to ignore local/`);\n  }\n}\n\n// Naming is hard, but \"local\" refers to deployments linked to a Convex project\n// and \"anonymous\" refers to deployments that are not linked to a Convex project\n// (but in both cases they are running locally).\nexport type LocalDeploymentKind = \"local\" | \"anonymous\";\n\nexport function rootDeploymentStateDir(kind: LocalDeploymentKind) {\n  return path.join(\n    rootDirectory(),\n    kind === \"local\"\n      ? \"convex-backend-state\"\n      : \"anonymous-convex-backend-state\",\n  );\n}\n\n/**\n * Get the project-local state directory for a deployment.\n * Always returns `.convex/local/default/` - one deployment per project.\n */\nexport function projectLocalStateDir(projectDir?: string): string {\n  const baseDir = projectDir ?? process.cwd();\n  return path.join(baseDir, \".convex\", \"local\", \"default\");\n}\n\n/**\n * Get the legacy home directory state path for a deployment.\n */\nexport function legacyDeploymentStateDir(\n  deploymentKind: LocalDeploymentKind,\n  deploymentName: string,\n): string {\n  return path.join(rootDeploymentStateDir(deploymentKind), deploymentName);\n}\n\n/**\n * Get the state directory for a deployment.\n *\n * Priority order:\n * 1. Project-local directory if it has data (config.json exists)\n * 2. Legacy home directory if it exists (backward compatibility)\n * 3. Project-local directory for new deployments\n *\n * This ensures that when project-local storage is in use, it takes precedence\n * over any legacy directories that might exist with the same deployment name.\n */\nexport function deploymentStateDir(\n  ctx: Context,\n  deploymentKind: LocalDeploymentKind,\n  deploymentName: string,\n  projectDir?: string,\n): string {\n  // Check if project-local has data - if so, use it\n  // This takes precedence over legacy to support switching deployment types\n  // within the same project directory\n  const localDir = projectLocalStateDir(projectDir);\n  const localConfigFile = path.join(localDir, \"config.json\");\n  if (ctx.fs.exists(localConfigFile)) {\n    logVerbose(\n      `Using project-local state for deployment ${deploymentName}: ${localDir}`,\n    );\n    return localDir;\n  }\n\n  // Check if legacy data exists in home directory\n  const legacyDir = legacyDeploymentStateDir(deploymentKind, deploymentName);\n  if (ctx.fs.exists(legacyDir) && ctx.fs.stat(legacyDir).isDirectory()) {\n    logVerbose(\n      `Using legacy home directory state for deployment ${deploymentName}: ${legacyDir}`,\n    );\n    return legacyDir;\n  }\n\n  // Default to project-local for new deployments\n  logVerbose(\n    `Using project-local state for new deployment ${deploymentName}: ${localDir}`,\n  );\n  return localDir;\n}\n\n/**\n * Get the state directory for a deployment without checking for legacy data.\n * This always returns the project-local path.\n */\nexport function deploymentStateDirUnchecked(projectDir?: string): string {\n  return projectLocalStateDir(projectDir);\n}\n\nexport type LocalDeploymentConfig = {\n  ports: {\n    cloud: number;\n    site: number;\n  };\n  backendVersion: string;\n  adminKey: string;\n  // If not present, use the default instance secret for local backends\n  instanceSecret?: string;\n  // The deployment name (e.g., \"local-my_team-my_project\" or \"anonymous-chess\")\n  // This is stored in the config for project-local storage where the directory\n  // name is always \"default\" rather than the deployment name.\n  deploymentName?: string;\n};\n\n/**\n * Load deployment config from a specific directory.\n * This is used when we already know the directory path.\n */\nexport function loadDeploymentConfigFromDir(\n  ctx: Context,\n  dir: string,\n): LocalDeploymentConfig | null {\n  const configFile = path.join(dir, \"config.json\");\n  if (!ctx.fs.exists(configFile)) {\n    return null;\n  }\n  const content = ctx.fs.readUtf8File(configFile);\n  try {\n    return JSON.parse(content);\n  } catch (e) {\n    logVerbose(\n      `Failed to parse local deployment config at ${dir}: ${e as any}`,\n    );\n    return null;\n  }\n}\n\n/**\n * Load the project-local deployment config.\n * This returns the config from `.convex/local/default/` if it exists.\n * Returns both the config and the deployment name stored in it.\n */\nexport function loadProjectLocalConfig(\n  ctx: Context,\n  projectDir?: string,\n): { deploymentName: string; config: LocalDeploymentConfig } | null {\n  const localDir = projectLocalStateDir(projectDir);\n  const config = loadDeploymentConfigFromDir(ctx, localDir);\n  if (config !== null && config.deploymentName) {\n    logVerbose(\n      `Found project-local deployment config for ${config.deploymentName}`,\n    );\n    return { deploymentName: config.deploymentName, config };\n  }\n  return null;\n}\n\n/**\n * Load deployment config for a deployment.\n *\n * Priority order (matching deploymentStateDir):\n * 1. Project-local directory if it has a matching config\n * 2. Legacy home directory\n */\nexport function loadDeploymentConfig(\n  ctx: Context,\n  deploymentKind: LocalDeploymentKind,\n  deploymentName: string,\n  projectDir?: string,\n): LocalDeploymentConfig | null {\n  // Check project-local location first - matches deploymentStateDir priority\n  const localDir = projectLocalStateDir(projectDir);\n  const localConfig = loadDeploymentConfigFromDir(ctx, localDir);\n  if (localConfig !== null) {\n    // Only use if config matches the requested deployment name\n    // (project-local can hold different deployments at different times)\n    if (\n      !localConfig.deploymentName ||\n      localConfig.deploymentName === deploymentName\n    ) {\n      logVerbose(\n        `Found deployment config in project-local location for ${deploymentName}`,\n      );\n      return localConfig;\n    }\n    logVerbose(\n      `Project-local config is for ${localConfig.deploymentName}, not ${deploymentName}`,\n    );\n  }\n\n  // Check legacy location\n  const legacyDir = legacyDeploymentStateDir(deploymentKind, deploymentName);\n  const legacyConfig = loadDeploymentConfigFromDir(ctx, legacyDir);\n  if (legacyConfig !== null) {\n    logVerbose(\n      `Found deployment config in legacy location for ${deploymentName}`,\n    );\n    return legacyConfig;\n  }\n\n  return null;\n}\n\n/**\n * Save deployment config.\n *\n * If data already exists in the legacy home directory, continue using that\n * location. Otherwise, use the project-local directory. The deployment name\n * is always stored in the config for project-local storage.\n */\nexport function saveDeploymentConfig(\n  ctx: Context,\n  deploymentKind: LocalDeploymentKind,\n  deploymentName: string,\n  config: LocalDeploymentConfig,\n  projectDir?: string,\n) {\n  const dir = deploymentStateDir(\n    ctx,\n    deploymentKind,\n    deploymentName,\n    projectDir,\n  );\n  const configFile = path.join(dir, \"config.json\");\n  if (!ctx.fs.exists(dir)) {\n    ctx.fs.mkdir(dir, { recursive: true });\n  }\n  // Ensure .gitignore exists to prevent local state from being committed\n  ensureDotConvexGitignore(ctx, projectDir);\n  // Always include the deployment name in the config for project-local storage\n  const configWithName = { ...config, deploymentName };\n  ctx.fs.writeUtf8File(configFile, JSON.stringify(configWithName));\n}\n\nexport function binariesDir() {\n  return path.join(cacheDir(), \"binaries\");\n}\n\nexport function dashboardZip() {\n  return path.join(dashboardDir(), \"dashboard.zip\");\n}\n\nexport function versionedBinaryDir(version: string) {\n  return path.join(binariesDir(), version);\n}\n\nexport function executablePath(version: string) {\n  return path.join(versionedBinaryDir(version), executableName());\n}\n\nexport function executableName() {\n  const ext = process.platform === \"win32\" ? \".exe\" : \"\";\n  return `convex-local-backend${ext}`;\n}\n\nexport function dashboardDir() {\n  return path.join(cacheDir(), \"dashboard\");\n}\n\nexport async function resetDashboardDir(ctx: Context) {\n  const dir = dashboardDir();\n  if (ctx.fs.exists(dir)) {\n    await recursivelyDelete(ctx, dir);\n  }\n  ctx.fs.mkdir(dir, { recursive: true });\n}\n\nexport function dashboardOutDir() {\n  return path.join(dashboardDir(), \"out\");\n}\n\nexport type DashboardConfig = {\n  port: number;\n  apiPort: number;\n  version: string;\n};\nexport function loadDashboardConfig(ctx: Context) {\n  const configFile = path.join(dashboardDir(), \"config.json\");\n  if (!ctx.fs.exists(configFile)) {\n    return null;\n  }\n  const content = ctx.fs.readUtf8File(configFile);\n  try {\n    return JSON.parse(content);\n  } catch (e) {\n    logVerbose(`Failed to parse dashboard config: ${e as any}`);\n    return null;\n  }\n}\n\nexport function saveDashboardConfig(ctx: Context, config: DashboardConfig) {\n  const configFile = path.join(dashboardDir(), \"config.json\");\n  if (!ctx.fs.exists(dashboardDir())) {\n    ctx.fs.mkdir(dashboardDir(), { recursive: true });\n  }\n  ctx.fs.writeUtf8File(configFile, JSON.stringify(config));\n}\n\nexport function loadUuidForAnonymousUser(ctx: Context) {\n  const configFile = path.join(\n    rootDeploymentStateDir(\"anonymous\"),\n    \"config.json\",\n  );\n  if (!ctx.fs.exists(configFile)) {\n    return null;\n  }\n  const content = ctx.fs.readUtf8File(configFile);\n  try {\n    const config = JSON.parse(content);\n    return config.uuid ?? null;\n  } catch (e) {\n    logVerbose(`Failed to parse uuid for anonymous user: ${e as any}`);\n    return null;\n  }\n}\n\nexport function ensureUuidForAnonymousUser(ctx: Context) {\n  const uuid = loadUuidForAnonymousUser(ctx);\n  if (uuid) {\n    return uuid;\n  }\n  const newUuid = crypto.randomUUID();\n  const anonymousDir = rootDeploymentStateDir(\"anonymous\");\n  if (!ctx.fs.exists(anonymousDir)) {\n    ctx.fs.mkdir(anonymousDir, { recursive: true });\n  }\n  ctx.fs.writeUtf8File(\n    path.join(anonymousDir, \"config.json\"),\n    JSON.stringify({ uuid: newUuid }),\n  );\n  return newUuid;\n}\n", "import { Context } from \"../../bundler/context.js\";\nimport { logOutput } from \"../../bundler/log.js\";\nimport path from \"path\";\nimport { NodeFs } from \"../../bundler/fs.js\";\n\nexport function recursivelyDelete(\n  ctx: Context,\n  deletePath: string,\n  opts?: { force?: boolean; dryRun?: boolean },\n) {\n  const dryRun = !!opts?.dryRun;\n  let st;\n  try {\n    st = ctx.fs.stat(deletePath);\n  } catch (err: any) {\n    if (err.code === \"ENOENT\" && opts?.force) {\n      return;\n    }\n    // eslint-disable-next-line no-restricted-syntax\n    throw err;\n  }\n  if (st.isDirectory()) {\n    for (const entry of ctx.fs.listDir(deletePath)) {\n      recursivelyDelete(ctx, path.join(deletePath, entry.name), opts);\n    }\n    if (dryRun) {\n      logOutput(`Command would delete directory: ${deletePath}`);\n      return;\n    }\n    try {\n      ctx.fs.rmdir(deletePath);\n    } catch (err: any) {\n      if (err.code !== \"ENOENT\") {\n        // eslint-disable-next-line no-restricted-syntax\n        throw err;\n      }\n    }\n  } else {\n    if (dryRun) {\n      logOutput(`Command would delete file: ${deletePath}`);\n      return;\n    }\n    try {\n      ctx.fs.unlink(deletePath);\n    } catch (err: any) {\n      if (err.code !== \"ENOENT\") {\n        // eslint-disable-next-line no-restricted-syntax\n        throw err;\n      }\n    }\n  }\n}\n\nexport async function recursivelyCopy(\n  ctx: Context,\n  nodeFs: NodeFs,\n  src: string,\n  dest: string,\n) {\n  const st = nodeFs.stat(src);\n  if (st.isDirectory()) {\n    nodeFs.mkdir(dest, { recursive: true });\n    for (const entry of nodeFs.listDir(src)) {\n      await recursivelyCopy(\n        ctx,\n        nodeFs,\n        path.join(src, entry.name),\n        path.join(dest, entry.name),\n      );\n    }\n  } else {\n    // Don't use writeUtf8File to allow copying arbitrary files\n    await nodeFs.writeFileStream(dest, nodeFs.createReadStream(src, {}));\n  }\n}\n", "import { version as npmVersion } from \"../../version.js\";\nimport AdmZip from \"adm-zip\";\nimport { Context } from \"../../../bundler/context.js\";\nimport {\n  logFinishedStep,\n  startLogProgress,\n  logVerbose,\n  logMessage,\n  logError,\n  logWarning,\n} from \"../../../bundler/log.js\";\nimport {\n  dashboardZip,\n  executablePath,\n  versionedBinaryDir,\n  dashboardOutDir,\n  resetDashboardDir,\n  loadDashboardConfig,\n  executableName,\n} from \"./filePaths.js\";\nimport child_process from \"child_process\";\nimport { promisify } from \"util\";\nimport { Readable } from \"stream\";\nimport { TempPath, nodeFs, withTmpDir } from \"../../../bundler/fs.js\";\nimport { recursivelyDelete, recursivelyCopy } from \"../fsUtils.js\";\nimport { LocalDeploymentError } from \"./errors.js\";\nimport type { ProgressBarInstance } from \"../../../vendor/progress/index.js\";\nimport path from \"path\";\n\nasync function makeExecutable(p: string) {\n  switch (process.platform) {\n    case \"darwin\":\n    case \"linux\": {\n      await promisify(child_process.exec)(`chmod +x ${p}`);\n    }\n  }\n}\n\nexport async function ensureBackendBinaryDownloaded(\n  ctx: Context,\n  version:\n    | { kind: \"latest\"; allowedVersion?: string | undefined }\n    | { kind: \"version\"; version: string },\n): Promise<{ binaryPath: string; version: string }> {\n  if (version.kind === \"version\") {\n    return _ensureBackendBinaryDownloaded(ctx, version.version);\n  }\n  if (version.allowedVersion) {\n    const latestVersionWithBinary = await findLatestVersionWithBinary(\n      ctx,\n      false,\n    );\n    if (latestVersionWithBinary === null) {\n      logWarning(\n        `Failed to get latest version from GitHub, using downloaded version ${version.allowedVersion}`,\n      );\n      return _ensureBackendBinaryDownloaded(ctx, version.allowedVersion);\n    }\n    return _ensureBackendBinaryDownloaded(ctx, latestVersionWithBinary);\n  }\n  const latestVersionWithBinary = await findLatestVersionWithBinary(ctx, true);\n  return _ensureBackendBinaryDownloaded(ctx, latestVersionWithBinary);\n}\n\nasync function _ensureBackendBinaryDownloaded(\n  ctx: Context,\n  version: string,\n): Promise<{ binaryPath: string; version: string }> {\n  logVerbose(`Ensuring backend binary downloaded for version ${version}`);\n  const existingDownload = await checkForExistingDownload(ctx, version);\n  if (existingDownload !== null) {\n    logVerbose(`Using existing download at ${existingDownload}`);\n    return {\n      binaryPath: existingDownload,\n      version,\n    };\n  }\n  const binaryPath = await downloadBackendBinary(ctx, version);\n  return { version, binaryPath };\n}\n\n/**\n * Finds the latest version of the Convex local backend\n * through version.convex.dev\n */\nexport async function findLatestVersionWithBinary<\n  RequireSuccess extends boolean,\n>(\n  ctx: Context,\n  requireSuccess: RequireSuccess,\n): Promise<RequireSuccess extends true ? string : string | null> {\n  // These shouldn't crash when there's a perfectly good binary already available.\n  async function maybeCrash(\n    ...args: Parameters<typeof ctx.crash>\n  ): Promise<RequireSuccess extends true ? never : null> {\n    if (requireSuccess) {\n      return await ctx.crash(...args);\n    }\n    if (args[0].printedMessage) {\n      logError(args[0].printedMessage);\n    } else {\n      logError(\"Error fetching latest version\");\n    }\n    return null as RequireSuccess extends true ? never : null;\n  }\n\n  logVerbose(\"Fetching latest backend version from version API\");\n\n  try {\n    const response = await fetch(\n      \"https://version.convex.dev/v1/local_backend_version\",\n      {\n        headers: { \"Convex-Client\": `npm-cli-${npmVersion}` },\n      },\n    );\n\n    if (!response.ok) {\n      const text = await response.text();\n      return await maybeCrash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: `version.convex.dev returned ${response.status}: ${text}`,\n        errForSentry: new LocalDeploymentError(\n          `version.convex.dev returned ${response.status}: ${text}`,\n        ),\n      });\n    }\n\n    const data = (await response.json()) as { version: string };\n    if (!data.version) {\n      return await maybeCrash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: \"Invalid response missing version field\",\n        errForSentry: new LocalDeploymentError(\n          \"Invalid response missing version field\",\n        ),\n      });\n    }\n\n    logVerbose(`Latest backend version is ${data.version}`);\n    return data.version;\n  } catch (e) {\n    return maybeCrash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: \"Failed to fetch latest backend version\",\n      errForSentry: new LocalDeploymentError(e?.toString()),\n    });\n  }\n}\n\n/**\n *\n * @param ctx\n * @param version\n * @returns The binary path if it exists, or null\n */\nasync function checkForExistingDownload(\n  ctx: Context,\n  version: string,\n): Promise<string | null> {\n  const destDir = versionedBinaryDir(version);\n  if (!ctx.fs.exists(destDir)) {\n    return null;\n  }\n  const p = executablePath(version);\n  if (!ctx.fs.exists(p)) {\n    // This directory isn't what we expected. Remove it.\n    recursivelyDelete(ctx, destDir, { force: true });\n    return null;\n  }\n  await makeExecutable(p);\n  return p;\n}\n\nasync function downloadBackendBinary(\n  ctx: Context,\n  version: string,\n): Promise<string> {\n  const downloadPath = getDownloadPath();\n  // Note: We validate earlier that there's a binary for this platform at the specified version,\n  // so in practice, we should never hit errors here.\n  if (downloadPath === null) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: `Unsupported platform ${process.platform} and architecture ${process.arch} for local deployment.`,\n    });\n  }\n  await downloadZipFile(ctx, {\n    version,\n    filename: downloadPath,\n    nameForLogging: \"Convex backend binary\",\n    onDownloadComplete: async (ctx, unzippedPath) => {\n      const name = executableName();\n      const tempExecPath = path.join(unzippedPath, name);\n      await makeExecutable(tempExecPath);\n      logVerbose(\"Marked as executable\");\n      ctx.fs.mkdir(versionedBinaryDir(version), { recursive: true });\n      ctx.fs.swapTmpFile(tempExecPath as TempPath, executablePath(version));\n    },\n  });\n  return executablePath(version);\n}\n\n/**\n * Get the artifact name, composed of the target convex-local-backend and\n * the Rust \"target triple\" appropriate for the current machine.\n **/\nfunction getDownloadPath() {\n  switch (process.platform) {\n    case \"darwin\":\n      if (process.arch === \"arm64\") {\n        return \"convex-local-backend-aarch64-apple-darwin.zip\";\n      } else if (process.arch === \"x64\") {\n        return \"convex-local-backend-x86_64-apple-darwin.zip\";\n      }\n      break;\n    case \"linux\":\n      if (process.arch === \"arm64\") {\n        return \"convex-local-backend-aarch64-unknown-linux-gnu.zip\";\n      } else if (process.arch === \"x64\") {\n        return \"convex-local-backend-x86_64-unknown-linux-gnu.zip\";\n      }\n      break;\n    case \"win32\":\n      return \"convex-local-backend-x86_64-pc-windows-msvc.zip\";\n  }\n  return null;\n}\n\nfunction getGithubDownloadUrl(version: string, filename: string) {\n  return `https://github.com/get-convex/convex-backend/releases/download/${version}/${filename}`;\n}\n\nasync function downloadZipFile(\n  ctx: Context,\n  args: {\n    version: string;\n    filename: string;\n    nameForLogging: string;\n    onDownloadComplete: (ctx: Context, unzippedPath: TempPath) => Promise<void>;\n  },\n) {\n  const { version, filename, nameForLogging } = args;\n  const url = getGithubDownloadUrl(version, filename);\n  const response = await fetch(url);\n  const contentLength = parseInt(\n    response.headers.get(\"content-length\") ?? \"\",\n    10,\n  );\n  let progressBar: ProgressBarInstance | null = null;\n  if (!isNaN(contentLength) && contentLength !== 0 && process.stdout.isTTY) {\n    progressBar = startLogProgress(\n      `Downloading ${nameForLogging} [:bar] :percent :etas`,\n      {\n        width: 40,\n        total: contentLength,\n        clear: true,\n      },\n    );\n  } else {\n    logMessage(`Downloading ${nameForLogging}`);\n  }\n  if (response.status !== 200) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: `File not found at ${url}.`,\n    });\n  }\n  await withTmpDir(async (tmpDir) => {\n    logVerbose(`Created tmp dir ${tmpDir.path}`);\n    // Create a file in the tmp dir\n    const zipLocation = tmpDir.registerTempPath(null);\n    const readable = Readable.fromWeb(response.body! as any);\n    await tmpDir.writeFileStream(zipLocation, readable, (chunk: any) => {\n      if (progressBar !== null) {\n        progressBar.tick(chunk.length);\n      }\n    });\n    if (progressBar) {\n      progressBar.terminate();\n      logFinishedStep(`Downloaded ${nameForLogging}`);\n    }\n    logVerbose(\"Downloaded zip file\");\n\n    const zip = new AdmZip(zipLocation);\n    await withTmpDir(async (versionDir) => {\n      logVerbose(`Created tmp dir ${versionDir.path}`);\n      zip.extractAllTo(versionDir.path, true);\n      logVerbose(\"Extracted from zip file\");\n      await args.onDownloadComplete(ctx, versionDir.path);\n    });\n  });\n  return executablePath(version);\n}\n\nexport async function ensureDashboardDownloaded(ctx: Context, version: string) {\n  const config = loadDashboardConfig(ctx);\n  if (config !== null && config.version === version) {\n    return;\n  }\n  await resetDashboardDir(ctx);\n  await _ensureDashboardDownloaded(ctx, version);\n}\nasync function _ensureDashboardDownloaded(ctx: Context, version: string) {\n  const zipLocation = dashboardZip();\n  if (ctx.fs.exists(zipLocation)) {\n    ctx.fs.unlink(zipLocation);\n  }\n  const outDir = dashboardOutDir();\n  await downloadZipFile(ctx, {\n    version,\n    filename: \"dashboard.zip\",\n    nameForLogging: \"Convex dashboard\",\n    onDownloadComplete: async (ctx, unzippedPath) => {\n      await recursivelyCopy(ctx, nodeFs, unzippedPath, outDir);\n      logVerbose(\"Copied into out dir\");\n    },\n  });\n  return outDir;\n}\n", "import { logFailure, logMessage } from \"../../../bundler/log.js\";\n\nexport class LocalDeploymentError extends Error {}\n\nexport function printLocalDeploymentOnError() {\n  // Note: Not printing the error message here since it should already be printed by\n  // ctx.crash.\n  logFailure(`Hit an error while running local deployment.`);\n  logMessage(\n    \"Your error has been reported to our team, and we'll be working on it. \" +\n      \"To opt out, run `npx convex disable-local-deployments`. \" +\n      \"Then re-run your original command.\",\n  );\n}\n", "import { Context } from \"../../../bundler/context.js\";\nimport { logVerbose, logMessage } from \"../../../bundler/log.js\";\nimport {\n  LocalDeploymentKind,\n  deploymentStateDir,\n  loadDeploymentConfig,\n  loadUuidForAnonymousUser,\n} from \"./filePaths.js\";\nimport { ensureBackendBinaryDownloaded } from \"./download.js\";\nimport path from \"path\";\nimport child_process from \"child_process\";\nimport detect from \"detect-port\";\nimport { SENTRY_DSN } from \"../utils/sentry.js\";\nimport { createHash } from \"crypto\";\nimport { LocalDeploymentError } from \"./errors.js\";\nimport { LOCAL_BACKEND_INSTANCE_SECRET } from \"./utils.js\";\nimport { DeploymentType, DetailedDeploymentCredentials } from \"../api.js\";\n\nexport async function runLocalBackend(\n  ctx: Context,\n  args: {\n    ports: {\n      cloud: number;\n      site: number;\n    };\n    deploymentKind: LocalDeploymentKind;\n    deploymentName: string;\n    binaryPath: string;\n    instanceSecret: string;\n    isLatestVersion: boolean;\n  },\n): Promise<{\n  cleanupHandle: string;\n}> {\n  const { ports } = args;\n  const deploymentDir = deploymentStateDir(\n    ctx,\n    args.deploymentKind,\n    args.deploymentName,\n  );\n  ctx.fs.mkdir(deploymentDir, { recursive: true });\n  const deploymentNameSha = createHash(\"sha256\")\n    .update(args.deploymentName)\n    .digest(\"hex\");\n  const commandArgs = [\n    \"--port\",\n    ports.cloud.toString(),\n    \"--site-proxy-port\",\n    ports.site.toString(),\n    \"--sentry-identifier\",\n    deploymentNameSha,\n    \"--instance-name\",\n    args.deploymentName,\n    \"--instance-secret\",\n    args.instanceSecret,\n    \"--local-storage\",\n    path.join(deploymentDir, \"convex_local_storage\"),\n    \"--beacon-tag\",\n    selfHostedEventTag(args.deploymentKind),\n    path.join(deploymentDir, \"convex_local_backend.sqlite3\"),\n  ];\n  if (args.isLatestVersion) {\n    // CLI args that were added in later versions of backend go here instead of above\n    // since the CLI may run older versions of backend (e.g. when upgrading).\n    if (args.deploymentKind === \"anonymous\") {\n      const uuid = loadUuidForAnonymousUser(ctx);\n      if (uuid !== null) {\n        commandArgs.push(\n          \"--beacon-fields\",\n          JSON.stringify({\n            override_uuid: uuid,\n          }),\n        );\n      }\n    }\n  }\n\n  // Check that binary works by running with --help\n  try {\n    const result = child_process.spawnSync(args.binaryPath, [\n      ...commandArgs,\n      \"--help\",\n    ]);\n    if (result.status === 3221225781) {\n      const message =\n        \"Local backend exited because shared libraries are missing. These may include libraries installed via 'Microsoft Visual C++ Redistributable for Visual Studio.'\";\n      return ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: message,\n        errForSentry: new LocalDeploymentError(\n          \"Local backend exited with code 3221225781\",\n        ),\n      });\n    } else if (result.status !== 0) {\n      const message = `Failed to run backend binary, exit code ${result.status}, error: ${result.stderr === null ? \"null\" : result.stderr.toString()}`;\n      return ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: message,\n        errForSentry: new LocalDeploymentError(message),\n      });\n    }\n  } catch (e) {\n    const message = `Failed to run backend binary: ${(e as any).toString()}`;\n    return ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: message,\n      errForSentry: new LocalDeploymentError(message),\n    });\n  }\n  const commandStr = `${args.binaryPath} ${commandArgs.join(\" \")}`;\n  logVerbose(`Starting local backend: \\`${commandStr}\\``);\n  const p = child_process\n    .spawn(args.binaryPath, commandArgs, {\n      stdio: \"ignore\",\n      env: {\n        ...process.env,\n        SENTRY_DSN: SENTRY_DSN,\n      },\n    })\n    .on(\"exit\", (code) => {\n      const why = code === null ? \"from signal\" : `with code ${code}`;\n      logVerbose(`Local backend exited ${why}, full command \\`${commandStr}\\``);\n    });\n  const cleanupHandle = ctx.registerCleanup(async () => {\n    logVerbose(`Stopping local backend on port ${ports.cloud}`);\n    p.kill(\"SIGTERM\");\n  });\n\n  await ensureBackendRunning(ctx, {\n    cloudPort: ports.cloud,\n    deploymentName: args.deploymentName,\n    maxTimeSecs: 30,\n  });\n\n  return {\n    cleanupHandle,\n  };\n}\n\n/** Crash if correct local backend is not currently listening on the expected port. */\nexport async function assertLocalBackendRunning(\n  ctx: Context,\n  args: {\n    url: string;\n    deploymentName: string;\n  },\n): Promise<void> {\n  logVerbose(`Checking local backend at ${args.url} is running`);\n  const result = await fetchLocalBackendStatus(args);\n  switch (result.kind) {\n    case \"running\":\n      return;\n    case \"different\":\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: `A different local backend ${result.name} is running at ${args.url}`,\n      });\n    case \"error\":\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: `Error response code received from local backend ${result.resp.status} ${result.resp.statusText}`,\n      });\n    case \"not-running\":\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: `Local backend isn't running. (it's not listening at ${args.url})\\nRun \\`npx convex dev\\` in another terminal first.`,\n      });\n  }\n}\n\n/** Wait for up to maxTimeSecs for the correct local backend to be running on the expected port. */\nexport async function ensureBackendRunning(\n  ctx: Context,\n  args: {\n    cloudPort: number;\n    deploymentName: string;\n    maxTimeSecs: number;\n  },\n): Promise<void> {\n  logVerbose(`Ensuring backend running on port ${args.cloudPort} is running`);\n  const deploymentUrl = localDeploymentUrl(args.cloudPort);\n  let timeElapsedSecs = 0;\n  let hasShownWaiting = false;\n  while (timeElapsedSecs <= args.maxTimeSecs) {\n    if (!hasShownWaiting && timeElapsedSecs > 2) {\n      logMessage(\"waiting for local backend to start...\");\n      hasShownWaiting = true;\n    }\n    try {\n      const resp = await fetch(`${deploymentUrl}/instance_name`);\n      if (resp.status === 200) {\n        const text = await resp.text();\n        if (text !== args.deploymentName) {\n          return await ctx.crash({\n            exitCode: 1,\n            errorType: \"fatal\",\n            printedMessage: `A different local backend ${text} is running on selected port ${args.cloudPort}`,\n          });\n        } else {\n          // The backend is running!\n          return;\n        }\n      } else {\n        await new Promise((resolve) => setTimeout(resolve, 500));\n        timeElapsedSecs += 0.5;\n      }\n    } catch {\n      await new Promise((resolve) => setTimeout(resolve, 500));\n      timeElapsedSecs += 0.5;\n    }\n  }\n  const message = `Local backend did not start on port ${args.cloudPort} within ${args.maxTimeSecs} seconds.`;\n  return await ctx.crash({\n    exitCode: 1,\n    errorType: \"fatal\",\n    printedMessage: message,\n    errForSentry: new LocalDeploymentError(message),\n  });\n}\n\nexport async function ensureBackendStopped(\n  ctx: Context,\n  args: {\n    ports: {\n      cloud: number;\n      site?: number;\n    };\n    maxTimeSecs: number;\n    deploymentName: string;\n    // Whether to allow a deployment with a different name to run on this port\n    allowOtherDeployments: boolean;\n  },\n) {\n  logVerbose(`Ensuring backend running on port ${args.ports.cloud} is stopped`);\n  let timeElapsedSecs = 0;\n  while (timeElapsedSecs < args.maxTimeSecs) {\n    const cloudPort = await detect(args.ports.cloud);\n    const sitePort =\n      args.ports.site === undefined ? undefined : await detect(args.ports.site);\n    // Both ports are free\n    if (cloudPort === args.ports.cloud && sitePort === args.ports.site) {\n      return;\n    }\n    try {\n      const instanceNameResp = await fetch(\n        `${localDeploymentUrl(args.ports.cloud)}/instance_name`,\n      );\n      if (instanceNameResp.ok) {\n        const instanceName = await instanceNameResp.text();\n        if (instanceName !== args.deploymentName) {\n          if (args.allowOtherDeployments) {\n            return;\n          }\n          return await ctx.crash({\n            exitCode: 1,\n            errorType: \"fatal\",\n            printedMessage: `A different local backend ${instanceName} is running on selected port ${args.ports.cloud}`,\n          });\n        }\n      }\n    } catch (error: any) {\n      logVerbose(`Error checking if backend is running: ${error.message}`);\n      // Backend is probably not running\n      continue;\n    }\n    await new Promise((resolve) => setTimeout(resolve, 500));\n    timeElapsedSecs += 0.5;\n  }\n  return ctx.crash({\n    exitCode: 1,\n    errorType: \"fatal\",\n    printedMessage: `A local backend is still running on port ${args.ports.cloud}. Please stop it and run this command again.`,\n  });\n}\n\nexport function localDeploymentUrl(cloudPort: number): string {\n  return `http://127.0.0.1:${cloudPort}`;\n}\n\nexport function selfHostedEventTag(\n  deploymentKind: LocalDeploymentKind,\n): string {\n  return deploymentKind === \"local\" ? \"cli-local-dev\" : \"cli-anonymous-dev\";\n}\n\ntype LocalBackendStatus =\n  | { kind: \"running\" }\n  | { kind: \"error\"; resp: Response }\n  | { kind: \"different\"; name: string }\n  | { kind: \"not-running\" };\n\nasync function fetchLocalBackendStatus(args: {\n  url: string;\n  deploymentName: string;\n}): Promise<LocalBackendStatus> {\n  logVerbose(`Checking local backend at ${args.url} is running`);\n  try {\n    const resp = await fetch(`${args.url}/instance_name`);\n    if (resp.status === 200) {\n      const text = await resp.text();\n      if (text !== args.deploymentName) {\n        return { kind: \"different\", name: text };\n      } else {\n        return { kind: \"running\" };\n      }\n    } else {\n      return { kind: \"error\", resp };\n    }\n  } catch {\n    return { kind: \"not-running\" };\n  }\n}\n\n/** Returns true if the correct local backend is listening. */\nexport async function isLocalBackendRunning(\n  url: string,\n  deploymentName: string,\n): Promise<boolean> {\n  return (\n    \"running\" === (await fetchLocalBackendStatus({ url, deploymentName })).kind\n  );\n}\n\nexport function shouldUseLocalDeployment(deploymentType: DeploymentType) {\n  return deploymentType === \"local\" || deploymentType === \"anonymous\";\n}\n\ninterface WithRunningBackendArgs {\n  ctx: Context;\n  deployment: {\n    deploymentUrl: string;\n    deploymentFields: DetailedDeploymentCredentials[\"deploymentFields\"];\n  };\n  action: () => Promise<void>;\n}\n\n/**\n * If the deployment is a local deployment and not already running, start it\n * for the duration of the action, then stop it.\n */\nexport async function withRunningBackend({\n  ctx,\n  deployment,\n  action,\n}: WithRunningBackendArgs) {\n  let cleanup: (() => Promise<void>) | null = null;\n\n  if (\n    deployment.deploymentFields &&\n    shouldUseLocalDeployment(deployment.deploymentFields.deploymentType)\n  ) {\n    const isRunning = await isLocalBackendRunning(\n      deployment.deploymentUrl,\n      deployment.deploymentFields.deploymentName,\n    );\n    if (!isRunning) {\n      ({ cleanup } = await startEphemeralLocalBackend(ctx, {\n        deploymentType: deployment.deploymentFields.deploymentType,\n        deploymentName: deployment.deploymentFields.deploymentName,\n      }));\n    }\n  }\n\n  try {\n    await action();\n  } finally {\n    await cleanup?.();\n  }\n}\n\n/**\n * Start a local backend for a one-off command using saved deployment config.\n * Returns a cleanup function that stops the backend.\n */\nasync function startEphemeralLocalBackend(\n  ctx: Context,\n  args: {\n    deploymentType: string;\n    deploymentName: string;\n  },\n): Promise<{ cleanup: () => Promise<void> }> {\n  const deploymentKind: LocalDeploymentKind =\n    args.deploymentType === \"anonymous\" ? \"anonymous\" : \"local\";\n\n  const config = loadDeploymentConfig(ctx, deploymentKind, args.deploymentName);\n  if (config === null) {\n    return ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: `Local backend isn't running and no saved configuration found.\\nRun \\`npx convex dev\\` first.`,\n    });\n  }\n\n  const { binaryPath } = await ensureBackendBinaryDownloaded(ctx, {\n    kind: \"version\",\n    version: config.backendVersion,\n  });\n\n  const instanceSecret = config.instanceSecret ?? LOCAL_BACKEND_INSTANCE_SECRET;\n\n  const { cleanupHandle } = await runLocalBackend(ctx, {\n    binaryPath,\n    ports: config.ports,\n    deploymentKind,\n    deploymentName: args.deploymentName,\n    instanceSecret,\n    isLatestVersion: true,\n  });\n\n  return {\n    cleanup: async () => {\n      const fn = ctx.removeCleanup(cleanupHandle);\n      if (fn) {\n        await fn(0);\n      }\n    },\n  };\n}\n", "import { createServer, AddressInfo } from 'node:net';\nimport { debuglog } from 'node:util';\nimport { ip } from 'address';\n\nconst debug = debuglog('detect-port');\n\nexport type DetectPortCallback = (err: Error | null, port?: number) => void;\n\nexport interface PortConfig {\n  port?: number | string;\n  hostname?: string | undefined;\n  callback?: DetectPortCallback;\n}\n\nexport class IPAddressNotAvailableError extends Error {\n  constructor(options?: ErrorOptions) {\n    super('The IP address is not available on this machine', options);\n    this.name = this.constructor.name;\n    Error.captureStackTrace(this, this.constructor);\n  }\n}\n\nexport function detectPort(port?: number | PortConfig | string): Promise<number>;\nexport function detectPort(callback: DetectPortCallback): void;\nexport function detectPort(port: number | PortConfig | string | undefined, callback: DetectPortCallback): void;\nexport function detectPort(port?: number | string | PortConfig | DetectPortCallback, callback?: DetectPortCallback) {\n  let hostname: string | undefined = '';\n\n  if (port && typeof port === 'object') {\n    hostname = port.hostname;\n    callback = port.callback;\n    port = port.port;\n  } else {\n    if (typeof port === 'function') {\n      callback = port;\n      port = void 0;\n    }\n  }\n\n  port = parseInt(port as unknown as string) || 0;\n  let maxPort = port + 10;\n  if (maxPort > 65535) {\n    maxPort = 65535;\n  }\n  debug('detect free port between [%s, %s)', port, maxPort);\n  if (typeof callback === 'function') {\n    return tryListen(port, maxPort, hostname)\n      .then(port => callback(null, port))\n      .catch(callback);\n  }\n  // promise\n  return tryListen(port as number, maxPort, hostname);\n}\n\nasync function handleError(port: number, maxPort: number, hostname?: string) {\n  if (port >= maxPort) {\n    debug('port: %s >= maxPort: %s, give up and use random port', port, maxPort);\n    port = 0;\n    maxPort = 0;\n  }\n  return await tryListen(port, maxPort, hostname);\n}\n\nasync function tryListen(port: number, maxPort: number, hostname?: string): Promise<number> {\n  // use user hostname\n  if (hostname) {\n    try {\n      return await listen(port, hostname);\n    } catch (err: any) {\n      if (err.code === 'EADDRNOTAVAIL') {\n        throw new IPAddressNotAvailableError({ cause: err });\n      }\n      return await handleError(++port, maxPort, hostname);\n    }\n  }\n\n  // 1. check null / undefined\n  try {\n    await listen(port);\n  } catch (err) {\n    // ignore random listening\n    if (port === 0) {\n      throw err;\n    }\n    return await handleError(++port, maxPort, hostname);\n  }\n\n  // 2. check 0.0.0.0\n  try {\n    await listen(port, '0.0.0.0');\n  } catch (err) {\n    return await handleError(++port, maxPort, hostname);\n  }\n\n  // 3. check 127.0.0.1\n  try {\n    await listen(port, '127.0.0.1');\n  } catch (err) {\n    return await handleError(++port, maxPort, hostname);\n  }\n\n  // 4. check localhost\n  try {\n    await listen(port, 'localhost');\n  } catch (err: any) {\n    // if localhost refer to the ip that is not unknown on the machine, you will see the error EADDRNOTAVAIL\n    // https://stackoverflow.com/questions/10809740/listen-eaddrnotavail-error-in-node-js\n    if (err.code !== 'EADDRNOTAVAIL') {\n      return await handleError(++port, maxPort, hostname);\n    }\n  }\n\n  // 5. check current ip\n  try {\n    return await listen(port, ip());\n  } catch (err) {\n    return await handleError(++port, maxPort, hostname);\n  }\n}\n\nfunction listen(port: number, hostname?: string) {\n  const server = createServer();\n\n  return new Promise<number>((resolve, reject) => {\n    server.once('error', err => {\n      debug('listen %s:%s error: %s', hostname, port, err);\n      server.close();\n\n      if ((err as any).code === 'ENOTFOUND') {\n        debug('ignore dns ENOTFOUND error, get free %s:%s', hostname, port);\n        return resolve(port);\n      }\n\n      return reject(err);\n    });\n\n    debug('try listen %d on %s', port, hostname);\n    server.listen(port, hostname, () => {\n      port = (server.address() as AddressInfo).port;\n      debug('get free %s:%s', hostname, port);\n      server.close();\n      return resolve(port);\n    });\n  });\n}\n", "import os from 'node:os';\nimport fs from 'node:fs/promises';\nimport childProcess from 'node:child_process';\n\nconst DEFAULT_RESOLV_FILE = '/etc/resolv.conf';\n\n// osx start line 'en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500'\n// linux start line 'eth0      Link encap:Ethernet  HWaddr 00:16:3E:00:0A:29  '\nconst MAC_OSX_START_LINE = /^(\\w+)\\:\\s+flags=/;\nconst MAC_LINUX_START_LINE = /^(\\w+)\\s{2,}link encap:\\w+/i;\n\n// ether 78:ca:39:b0:e6:7d\n// HWaddr 00:16:3E:00:0A:29\nexport const MAC_RE = /(?:ether|HWaddr)\\s+((?:[a-z0-9]{2}\\:){5}[a-z0-9]{2})/i;\n\n// osx: inet 192.168.2.104 netmask 0xffffff00 broadcast 192.168.2.255\n// linux: inet addr:10.125.5.202  Bcast:10.125.15.255  Mask:255.255.240.0\nexport const MAC_IP_RE = /inet\\s(?:addr\\:)?(\\d+\\.\\d+\\.\\d+\\.\\d+)/;\n\nexport interface Address {\n  ip?: string;\n  ipv6?: string;\n  mac?: string;\n}\n\nexport type AddressCallback = (err: Error | null, addr: Address) => void;\nexport type MacCallback = (err?: Error | null, addr?: string | null) => void;\nexport type DnsCallback = (err?: Error | null, servers?: string[]) => void;\n\nfunction getDefaultInterfaceName() {\n  let val: string | undefined = 'eth';\n  const platform = os.platform();\n  if (platform === 'darwin') {\n    val = 'en';\n  } else if (platform === 'win32') {\n    val = undefined;\n  }\n  return val;\n}\n\nfunction getIfconfigCMD() {\n  if (os.platform() === 'win32') {\n    return 'ipconfig/all';\n  }\n  return '/sbin/ifconfig';\n}\n\n// typeof os.networkInterfaces family is a number (v18.0.0)\n// types: 'IPv4' | 'IPv6' => 4 | 6\n// @see https://github.com/nodejs/node/issues/42861\nfunction matchName(actualFamily: string | number, expectedFamily: string | number) {\n  if (expectedFamily === 'IPv4') {\n    return actualFamily === 'IPv4' || actualFamily === 4;\n  }\n  if (expectedFamily === 'IPv6') {\n    return actualFamily === 'IPv6' || actualFamily === 6;\n  }\n  return actualFamily === expectedFamily;\n}\n\nfunction findAddressFromInterface(items: os.NetworkInterfaceInfo[], expectedFamily: string | number,\n  ignoreLoAddress = false) {\n  let firstMatchItem;\n  for (const item of items) {\n    if (matchName(item.family, expectedFamily)) {\n      if (ignoreLoAddress && item.address.startsWith('127.')) {\n        continue;\n      }\n      if (expectedFamily === 'IPv6') {\n        // find the scopeid = 0 item\n        if (item.scopeid === 0) return item;\n        if (!firstMatchItem) {\n          firstMatchItem = item;\n        }\n      } else {\n        return item;\n      }\n    }\n  }\n  return firstMatchItem;\n}\n\nexport function getInterfaceAddress(family?: string, name?: string) {\n  const interfaces = os.networkInterfaces();\n  const noName = !name;\n  name = name || getDefaultInterfaceName();\n  family = family || 'IPv4';\n  if (name) {\n    for (let i = -1; i < 8; i++) {\n      const interfaceName = name + (i >= 0 ? i : ''); // support 'lo' and 'lo0'\n      const items = interfaces[interfaceName];\n      if (items) {\n        const item = findAddressFromInterface(items, family);\n        if (item) {\n          return item;\n        }\n      }\n    }\n  }\n\n  if (noName) {\n    // filter all loopback or local addresses\n    for (const k in interfaces) {\n      const items = interfaces[k];\n      if (items) {\n        // all 127 addresses are local and should be ignored\n        const item = findAddressFromInterface(items, family, true);\n        if (item) {\n          return item;\n        }\n      }\n    }\n  }\n  return;\n}\n\n/**\n * Get current machine IPv4\n *\n * interfaceName: interface name, default is 'eth' on linux, 'en' on mac os.\n */\nexport function ip(interfaceName?: string) {\n  const item = getInterfaceAddress('IPv4', interfaceName);\n  return item?.address;\n}\n\n/**\n * Get current machine IPv6\n *\n * interfaceName: interface name, default is 'eth' on linux, 'en' on mac os.\n */\nexport function ipv6(interfaceName?: string) {\n  const item = getInterfaceAddress('IPv6', interfaceName);\n  return item?.address;\n}\n\nfunction getMAC(content: string, interfaceName: string, matchIP: string) {\n  const lines = content.split('\\n');\n  for (let i = 0; i < lines.length; i++) {\n    let line = lines[i].trimEnd();\n    const m = MAC_OSX_START_LINE.exec(line) || MAC_LINUX_START_LINE.exec(line);\n    if (!m) {\n      continue;\n    }\n\n    // check interface name\n    const name = m[1];\n    if (name.indexOf(interfaceName) !== 0) {\n      continue;\n    }\n\n    let ip: string | null = null;\n    let mac: string | null = null;\n    let match = MAC_RE.exec(line);\n    if (match) {\n      mac = match[1];\n    }\n\n    i++;\n    // eslint-disable-next-line no-constant-condition\n    while (true) {\n      line = lines[i];\n      if (!line || MAC_OSX_START_LINE.exec(line) || MAC_LINUX_START_LINE.exec(line)) {\n        i--;\n        break; // hit next interface, handle next interface\n      }\n      if (!mac) {\n        match = MAC_RE.exec(line);\n        if (match) {\n          mac = match[1];\n        }\n      }\n\n      if (!ip) {\n        match = MAC_IP_RE.exec(line);\n        if (match) {\n          ip = match[1];\n        }\n      }\n\n      i++;\n    }\n\n    if (ip === matchIP) {\n      return mac;\n    }\n  }\n  return null;\n}\n\n/**\n * Get current machine MAC address\n *\n * interfaceName: name, default is 'eth' on linux, 'en' on mac os.\n */\nexport function mac(callback: MacCallback): void;\nexport function mac(interfaceName: string, callback: MacCallback): void;\nexport function mac(interfaceNameOrCallback: string | MacCallback, callback?: MacCallback) {\n  let interfaceName: string | undefined;\n  if (typeof interfaceNameOrCallback === 'function') {\n    callback = interfaceNameOrCallback;\n  } else {\n    interfaceName = interfaceNameOrCallback;\n  }\n  interfaceName = interfaceName || getDefaultInterfaceName();\n  const item = getInterfaceAddress('IPv4', interfaceName);\n  if (!item) {\n    return callback!();\n  }\n\n  // https://github.com/nodejs/node/issues/13581\n  // bug in node 7.x and <= 8.4.0\n  if (!process.env.CI && (item.mac === 'ff:00:00:00:00:00' || item.mac === '00:00:00:00:00:00')) {\n    // wrong address, ignore it\n    item.mac = '';\n  }\n\n  if (item.mac) {\n    return callback!(null, item.mac);\n  }\n\n  childProcess.exec(getIfconfigCMD(), { timeout: 5000 }, (err, stdout) => {\n    if (err || !stdout) {\n      return callback!(err);\n    }\n\n    if (!interfaceName) {\n      return callback!();\n    }\n    const mac = getMAC(stdout || '', interfaceName, item.address);\n    callback!(null, mac);\n  });\n}\n\n// nameserver 172.24.102.254\nconst DNS_SERVER_RE = /^nameserver\\s+(\\d+\\.\\d+\\.\\d+\\.\\d+)$/i;\n\n/**\n * Get DNS servers.\n *\n * filepath: resolv config file path. default is '/etc/resolv.conf'.\n */\nexport function dns(callback: DnsCallback): void;\nexport function dns(filepath: string, callback: DnsCallback): void;\nexport function dns(filepathOrCallback: string | DnsCallback, callback?: DnsCallback) {\n  let filepath: string | undefined;\n  if (typeof filepathOrCallback === 'function') {\n    callback = filepathOrCallback;\n  } else {\n    filepath = filepathOrCallback;\n  }\n  filepath = filepath || DEFAULT_RESOLV_FILE;\n  fs.readFile(filepath, 'utf8')\n    .then(content => {\n      const servers: string[] = [];\n      content = content || '';\n      const lines = content.split('\\n');\n      for (const line of lines) {\n        const m = DNS_SERVER_RE.exec(line.trim());\n        if (m) {\n          servers.push(m[1]);\n        }\n      }\n      callback!(null, servers);\n    })\n    .catch(err => {\n      callback!(err);\n    });\n}\n\n/**\n * Get all addresses.\n *\n * interfaceName: interface name, default is 'eth' on linux, 'en' on mac os.\n */\nexport function address(callback: AddressCallback): void;\nexport function address(interfaceName: string, callback: AddressCallback): void;\nexport function address(interfaceNameOrCallback: string | AddressCallback, callback?: AddressCallback) {\n  let interfaceName: string | undefined;\n  if (typeof interfaceNameOrCallback === 'function') {\n    callback = interfaceNameOrCallback;\n  } else {\n    interfaceName = interfaceNameOrCallback;\n  }\n\n  const addr: Address = {\n    ip: ip(interfaceName),\n    ipv6: ipv6(interfaceName),\n    mac: undefined,\n  };\n  mac(interfaceName || '', (err?: Error | null, mac?: string | null) => {\n    if (mac) {\n      addr.mac = mac;\n    }\n    callback!(err || null, addr);\n  });\n}\n", "import { debuglog } from 'node:util';\nimport { detectPort } from './detect-port.js';\n\nconst debug = debuglog('detect-port:wait-port');\n\nfunction sleep(ms: number) {\n  return new Promise(resolve => {\n    setTimeout(resolve, ms);\n  });\n}\n\nexport class WaitPortRetryError extends Error {\n  retries: number;\n  count: number;\n\n  constructor(message: string, retries: number, count: number, options?: ErrorOptions) {\n    super(message, options);\n    this.name = this.constructor.name;\n    this.retries = retries;\n    this.count = count;\n    Error.captureStackTrace(this, this.constructor);\n  }\n}\n\nexport interface WaitPortOptions {\n  retryInterval?: number;\n  retries?: number;\n}\n\nexport async function waitPort(port: number, options: WaitPortOptions = {}) {\n  const { retryInterval = 1000, retries = Infinity } = options;\n  let count = 1;\n\n  async function loop() {\n    debug('wait port %d, retries %d, count %d', port, retries, count);\n    if (count > retries) {\n      const err = new WaitPortRetryError('retries exceeded', retries, count);\n      throw err;\n    }\n    count++;\n    const freePort = await detectPort(port);\n    if (freePort === port) {\n      await sleep(retryInterval);\n      return loop();\n    }\n    return true;\n  }\n\n  return await loop();\n}\n", "import { detectPort } from './detect-port.js';\n\nexport default detectPort;\n\nexport * from './detect-port.js';\n// keep alias detectPort to detect\nexport const detect = detectPort;\n\nexport * from './wait-port.js';\n", "import \"@sentry/tracing\";\nimport { productionProvisionHost, provisionHost } from \"../config.js\";\nimport * as Sentry from \"@sentry/node\";\nimport { version } from \"../../../index.js\";\nimport { stripVTControlCharacters } from \"util\";\n\nexport const SENTRY_DSN =\n  \"https://f9fa0306e3d540079cf40ce8c2ad9644@o1192621.ingest.sentry.io/6390839\";\n\nexport function initSentry() {\n  if (\n    (!process.env.CI || process.env.VERCEL === \"1\") &&\n    provisionHost === productionProvisionHost\n  ) {\n    Sentry.init({\n      dsn: SENTRY_DSN,\n      release: \"cli@\" + version,\n      tracesSampleRate: 0.2,\n      beforeBreadcrumb: (breadcrumb) => {\n        // Strip ANSI color codes from log lines that are sent as breadcrumbs.\n        if (breadcrumb.message) {\n          breadcrumb.message = stripVTControlCharacters(breadcrumb.message);\n        }\n        return breadcrumb;\n      },\n    });\n  }\n}\n", "import { chalkStderr } from \"chalk\";\nimport path from \"path\";\nimport { z } from \"zod\";\nimport { Context } from \"../../bundler/context.js\";\nimport { TypescriptCompiler } from \"./typecheck.js\";\nimport {\n  changeSpinner,\n  logError,\n  logFailure,\n  logFinishedStep,\n  logMessage,\n  logWarning,\n  showSpinner,\n} from \"../../bundler/log.js\";\nimport {\n  Bundle,\n  BundleHash,\n  bundle,\n  bundleAuthConfig,\n  entryPointsByEnvironment,\n} from \"../../bundler/index.js\";\nimport { version } from \"../version.js\";\nimport { deploymentDashboardUrlPage } from \"./dashboard.js\";\nimport {\n  functionsDir,\n  ErrorData,\n  loadPackageJson,\n  deploymentFetch,\n  deprecationCheckWarning,\n  logAndHandleFetchError,\n  ThrowingFetchError,\n  currentPackageHomepage,\n} from \"./utils/utils.js\";\nimport { recursivelyDelete } from \"./fsUtils.js\";\nimport { NodeDependency } from \"./deployApi/modules.js\";\nimport { ComponentDefinitionPath } from \"./components/definition/directoryStructure.js\";\nimport {\n  LocalDeploymentError,\n  printLocalDeploymentOnError,\n} from \"./localDeployment/errors.js\";\nimport { debugIsolateBundlesSerially } from \"../../bundler/debugBundle.js\";\nimport { DeploymentType } from \"./api.js\";\nexport { productionProvisionHost, provisionHost } from \"./utils/utils.js\";\n\n/** Type representing WorkOS AuthKit integration configuration. */\nexport interface AuthKitConfigureSettings {\n  redirectUris?: string[];\n  appHomepageUrl?: string;\n  corsOrigins?: string[];\n}\n\nexport interface AuthKitEnvironmentConfig {\n  environmentType?: \"development\" | \"staging\" | \"production\";\n  configure?: false | AuthKitConfigureSettings;\n  localEnvVars?: false | Record<string, string>;\n}\n\nexport interface AuthKitConfig {\n  dev?: AuthKitEnvironmentConfig;\n  preview?: AuthKitEnvironmentConfig;\n  prod?: AuthKitEnvironmentConfig;\n}\n/**\n * convex.json file parsing notes\n *\n * - Unknown fields at the top level and in node and codegen are preserved\n *   so that older CLI versions can deploy new projects (this functionality\n *   will be removed in the future).\n * - convex.json does not allow comments, but this could change in the future.\n *   Previously it contained automatically set values like productionUrl\n *   but it's more like a config file now.\n */\n\n/** Type representing Convex project configuration. */\nexport interface ProjectConfig {\n  // \u26A0\uFE0F When updating this, please also update the file used by IDEs for autocompletion and validation:\n  // -> npm-packages/convex/schemas/convex.schema.json\n\n  functions: string;\n  node: {\n    externalPackages: string[];\n    // nodeVersion has no default value, its presence/absence is meaningful\n    nodeVersion?: string | undefined;\n  };\n  generateCommonJSApi: boolean;\n\n  codegen: {\n    staticApi: boolean;\n    staticDataModel: boolean;\n    legacyComponentApi?: boolean;\n    fileType?: \"ts\" | \"js/dts\";\n  };\n\n  bundler?: {\n    includeSourcesContent?: boolean;\n  };\n\n  typescriptCompiler?: TypescriptCompiler;\n\n  // WorkOS AuthKit integration configuration\n  authKit?: AuthKitConfig | undefined;\n\n  // Convex AI files user preferences.\n  aiFiles?: {\n    // When false, disables all AI files prompts and staleness messages.\n    enabled?: boolean;\n    // @deprecated use `enabled` instead.\n    disableStalenessMessage?: boolean;\n  };\n}\n\nexport interface Config {\n  projectConfig: ProjectConfig;\n  modules: Bundle[];\n  nodeDependencies: NodeDependency[];\n  schemaId?: string;\n  udfServerVersion?: string;\n  nodeVersion?: string | undefined;\n}\n\nexport interface ConfigWithModuleHashes {\n  projectConfig: ProjectConfig;\n  moduleHashes: BundleHash[];\n  nodeDependencies: NodeDependency[];\n  schemaId?: string;\n  udfServerVersion?: string;\n}\n\nconst DEFAULT_FUNCTIONS_PATH = \"convex/\";\n\n/** Whether .ts file extensions should be used for generated code (default is false). */\nexport function usesTypeScriptCodegen(projectConfig: ProjectConfig): boolean {\n  return projectConfig.codegen.fileType === \"ts\";\n}\n\n/** Whether the new component API import style should be used (default is false) */\nexport function usesComponentApiImports(projectConfig: ProjectConfig): boolean {\n  return projectConfig.codegen.legacyComponentApi === false;\n}\n\n/**\n * Get the authKit configuration from convex.json.\n */\nexport async function getAuthKitConfig(\n  ctx: Context,\n  projectConfig: ProjectConfig,\n): Promise<AuthKitConfig | undefined> {\n  // If there's an explicit authKit config, use it\n  if (\"authKit\" in projectConfig) {\n    return projectConfig.authKit;\n  }\n\n  // TODO remove this after a few versions\n  // Migration help: is this one of the hardcoded templates that has special\n  // behavior without a convex.json? Encourage them to upgrade the template.\n  const homepage = await currentPackageHomepage(ctx);\n  const isOldWorkOSTemplate = !!(\n    homepage &&\n    [\n      \"https://github.com/workos/template-convex-nextjs-authkit/#readme\",\n      \"https://github.com/workos/template-convex-react-vite-authkit/#readme\",\n      \"https://github.com:workos/template-convex-react-vite-authkit/#readme\",\n      \"https://github.com/workos/template-convex-tanstack-start-authkit/#readme\",\n    ].includes(homepage)\n  );\n\n  if (isOldWorkOSTemplate) {\n    logWarning(\n      \"The template this project is based on has been updated to work with this version of Convex.\",\n    );\n    logWarning(\n      \"Please copy the convex.json from the latest template version or add an 'authKit' section.\",\n    );\n    logMessage(\"Learn more at https://docs.convex.dev/auth/authkit\");\n  }\n}\n\nexport async function getAuthKitEnvironmentConfig(\n  ctx: Context,\n  projectConfig: ProjectConfig,\n  deploymentType: \"dev\" | \"preview\" | \"prod\",\n): Promise<AuthKitEnvironmentConfig | undefined> {\n  const authKitConfig = await getAuthKitConfig(ctx, projectConfig);\n  return authKitConfig?.[deploymentType];\n}\n\n/** Error parsing ProjectConfig representation. */\nclass ParseError extends Error {}\n\n// WorkOS AuthKit configuration schemas\nconst AuthKitConfigureSchema = z.union([\n  z.literal(false),\n  z.object({\n    redirectUris: z.array(z.string()).optional(),\n    appHomepageUrl: z.string().optional(),\n    corsOrigins: z.array(z.string()).optional(),\n  }),\n]);\n\nconst AuthKitLocalEnvVarsSchema = z.union([\n  z.literal(false),\n  z.record(z.string()),\n]);\n\nconst AuthKitEnvironmentConfigSchema = z.object({\n  environmentType: z.enum([\"development\", \"staging\", \"production\"]).optional(),\n  configure: AuthKitConfigureSchema.optional(),\n  localEnvVars: AuthKitLocalEnvVarsSchema.optional(),\n});\n\nconst AuthKitConfigSchema = z\n  .object({\n    dev: AuthKitEnvironmentConfigSchema.optional(),\n    preview: AuthKitEnvironmentConfigSchema.optional(),\n    prod: AuthKitEnvironmentConfigSchema.optional(),\n  })\n  .refine(\n    (data) => {\n      // Validation: environmentType only allowed in prod\n      const devEnvType = data.dev?.environmentType;\n      const previewEnvType = data.preview?.environmentType;\n      if (devEnvType || previewEnvType) {\n        return false;\n      }\n      return true;\n    },\n    {\n      message: \"authKit.environmentType is only allowed in the prod section\",\n      path: [\"environmentType\"],\n    },\n  )\n  .refine(\n    (data) => {\n      // Validation: localEnvVars only allowed for dev\n      // Check preview doesn't have localEnvVars\n      if (\n        data.preview?.localEnvVars !== undefined &&\n        data.preview?.localEnvVars !== false\n      ) {\n        return false;\n      }\n      // Check prod doesn't have localEnvVars\n      if (\n        data.prod?.localEnvVars !== undefined &&\n        data.prod?.localEnvVars !== false\n      ) {\n        return false;\n      }\n      return true;\n    },\n    {\n      message:\n        \"authKit.localEnvVars is only supported for dev deployments. Preview and prod deployments must configure environment variables directly in the deployment platform.\",\n      path: [\"localEnvVars\"],\n    },\n  );\n// Separate Node and Codegen schemas so we can parse these loose or strict\nconst NodeSchema = z.object({\n  externalPackages: z\n    .array(z.string())\n    .default([])\n    .describe(\n      \"list of npm packages to install at deploy time instead of bundling. Packages with binaries should be added here.\",\n    ),\n  nodeVersion: z\n    .string()\n    .optional()\n    .describe(\"The Node.js version to use for Node.js functions\"),\n});\n\nconst CodegenSchema = z.object({\n  staticApi: z\n    .boolean()\n    .default(false)\n    .describe(\n      \"Use Convex function argument validators and return value validators to generate a typed API object\",\n    ),\n  staticDataModel: z.boolean().default(false),\n  // These optional fields have no defaults - their presence/absence is meaningful\n  legacyComponentApi: z.boolean().optional(),\n  fileType: z.enum([\"ts\", \"js/dts\"]).optional(),\n});\n\nconst BundlerSchema = z.object({\n  includeSourcesContent: z\n    .boolean()\n    .default(false)\n    .describe(\n      \"Whether to include original source code in source maps. Set to false to reduce bundle size.\",\n    ),\n});\n\nconst AiFilesSchema = z.object({\n  enabled: z.boolean().optional(),\n  disableStalenessMessage: z.boolean().optional(),\n});\n\nconst refineToObject = <T extends z.ZodTypeAny>(schema: T) =>\n  schema.refine((val) => val !== null && !Array.isArray(val), {\n    message: \"Expected `convex.json` to contain an object\",\n  });\n\n// Factory function to create schema with strict or passthrough behavior\nconst createProjectConfigSchema = (strict: boolean) => {\n  const nodeSchema = strict ? NodeSchema.strict() : NodeSchema.passthrough();\n  const codegenSchema = strict\n    ? CodegenSchema.strict()\n    : CodegenSchema.passthrough();\n  const bundlerSchema = strict\n    ? BundlerSchema.strict()\n    : BundlerSchema.passthrough();\n\n  const baseObject = z.object({\n    functions: z\n      .string()\n      .default(DEFAULT_FUNCTIONS_PATH)\n      .describe(\"Relative file path to the convex directory\"),\n    node: nodeSchema.default({ externalPackages: [] }),\n    codegen: codegenSchema.default({\n      staticApi: false,\n      staticDataModel: false,\n    }),\n    bundler: bundlerSchema.default({ includeSourcesContent: false }).optional(),\n    generateCommonJSApi: z.boolean().default(false),\n    typescriptCompiler: z\n      .enum([\"tsc\", \"tsgo\"])\n      .optional()\n      .describe(\n        \"TypeScript compiler to use for typechecking (`@typescript/native-preview` must be installed to use `tsgo`)\",\n      ),\n\n    // Optional $schema field for JSON schema validation in editors\n    $schema: z.string().optional(),\n    // WorkOS AuthKit integration configuration\n    authKit: AuthKitConfigSchema.optional(),\n    aiFiles: AiFilesSchema.optional(),\n\n    // Deprecated fields that have been deprecated for years, only here so we\n    // know it's safe to delete them.\n    project: z.string().optional(),\n    team: z.string().optional(),\n    prodUrl: z.string().optional(),\n  });\n\n  // Apply strict or passthrough BEFORE refine\n  const withStrictness = strict\n    ? baseObject.strict()\n    : baseObject.passthrough();\n\n  // Now apply the refinement\n  return withStrictness.refine(\n    (data) => {\n      // Validate that generateCommonJSApi is not true when using TypeScript codegen\n      if (data.generateCommonJSApi && data.codegen.fileType === \"ts\") {\n        return false;\n      }\n      return true;\n    },\n    {\n      message:\n        'Cannot use `generateCommonJSApi: true` with `codegen.fileType: \"ts\"`. ' +\n        \"CommonJS modules require JavaScript generation. \" +\n        'Either set `codegen.fileType: \"js/dts\"` or remove `generateCommonJSApi`.',\n      path: [\"generateCommonJSApi\"],\n    },\n  );\n};\n\n// Parse allowing extra fields (for forward compatibility)\nconst ProjectConfigSchema = refineToObject(createProjectConfigSchema(false));\n\n// Strict schema warn about extra keys\nconst ProjectConfigSchemaStrict = refineToObject(\n  createProjectConfigSchema(true),\n);\n\nconst warnedUnknownKeys = new Set<string>();\nexport function resetUnknownKeyWarnings() {\n  warnedUnknownKeys.clear();\n}\n\n/** Parse object to ProjectConfig. */\nexport async function parseProjectConfig(\n  ctx: Context,\n  obj: any,\n): Promise<ProjectConfig> {\n  if (typeof obj !== \"object\" || obj === null || Array.isArray(obj)) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"invalid filesystem data\",\n      printedMessage: \"Expected `convex.json` to contain an object\",\n    });\n  }\n\n  try {\n    // Try strict parse first to detect unknown keys\n    return ProjectConfigSchemaStrict.parse(obj);\n  } catch (error) {\n    if (error instanceof z.ZodError) {\n      // Check if all issues are unrecognized_keys issues\n      const unknownKeyIssues = error.issues.filter(\n        (issue) => issue.code === \"unrecognized_keys\",\n      );\n\n      if (\n        unknownKeyIssues.length > 0 &&\n        unknownKeyIssues.length === error.issues.length\n      ) {\n        // All errors are just unknown keys - warn about them\n        for (const issue of unknownKeyIssues) {\n          if (issue.code === \"unrecognized_keys\") {\n            const pathPrefix =\n              issue.path.length > 0 ? issue.path.join(\".\") + \".\" : \"\";\n            const unknownKeys = issue.keys as string[];\n            const newUnknownKeys = unknownKeys.filter(\n              (key) => !warnedUnknownKeys.has(pathPrefix + key),\n            );\n\n            if (newUnknownKeys.length > 0) {\n              const fullPath =\n                issue.path.length > 0\n                  ? `\\`${issue.path.join(\".\")}\\``\n                  : \"`convex.json`\";\n              logMessage(\n                chalkStderr.yellow(\n                  `Warning: Unknown ${newUnknownKeys.length === 1 ? \"property\" : \"properties\"} in ${fullPath}: ${newUnknownKeys.map((k) => `\\`${k}\\``).join(\", \")}`,\n                ),\n              );\n              logMessage(\n                chalkStderr.gray(\n                  \"  These properties will be preserved but are not recognized by this version of Convex.\",\n                ),\n              );\n\n              // Track that we've warned about these keys\n              newUnknownKeys.forEach((key) =>\n                warnedUnknownKeys.add(pathPrefix + key),\n              );\n            }\n          }\n        }\n        // Re-parse with passthrough schema to preserve unknown keys\n        return ProjectConfigSchema.parse(obj);\n      }\n\n      // Handle validation errors we won't ignore\n      if (error instanceof z.ZodError) {\n        const issue = error.issues[0];\n        const pathStr = issue.path.join(\".\");\n        const message = pathStr\n          ? `\\`${pathStr}\\` in \\`convex.json\\`: ${issue.message}`\n          : `\\`convex.json\\`: ${issue.message}`;\n        return await ctx.crash({\n          exitCode: 1,\n          errorType: \"invalid filesystem data\",\n          printedMessage: message,\n        });\n      }\n    }\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"invalid filesystem data\",\n      printedMessage: (error as any).toString(),\n    });\n  }\n}\n\n// Parse a deployment config returned by the backend, picking out\n// the fields we care about.\nfunction parseBackendConfig(obj: any): {\n  functions: string;\n  nodeVersion?: string;\n} {\n  function throwParseError(message: string) {\n    // Unexpected error\n    // eslint-disable-next-line no-restricted-syntax\n    throw new ParseError(message);\n  }\n  if (typeof obj !== \"object\") {\n    throwParseError(\"Expected an object\");\n  }\n  const { functions, nodeVersion } = obj;\n  if (typeof functions !== \"string\") {\n    throwParseError(\"Expected functions to be a string\");\n  }\n\n  if (typeof nodeVersion !== \"undefined\" && typeof nodeVersion !== \"string\") {\n    throwParseError(\"Expected nodeVersion to be a string\");\n  }\n\n  return {\n    functions,\n    ...((nodeVersion ?? null) !== null ? { nodeVersion: nodeVersion } : {}),\n  };\n}\n\nexport function configName(): string {\n  return \"convex.json\";\n}\n\nexport async function configFilepath(ctx: Context): Promise<string> {\n  const configFn = configName();\n  // We used to allow src/convex.json, but no longer (as of 10/7/2022).\n  // Leave an error message around to help people out. We can remove this\n  // error message after a couple months.\n  const preferredLocation = configFn;\n  const wrongLocation = path.join(\"src\", configFn);\n\n  // Allow either location, but not both.\n  const preferredLocationExists = ctx.fs.exists(preferredLocation);\n  const wrongLocationExists = ctx.fs.exists(wrongLocation);\n  if (preferredLocationExists && wrongLocationExists) {\n    const message = `${chalkStderr.red(`Error: both ${preferredLocation} and ${wrongLocation} files exist!`)}\\nConsolidate these and remove ${wrongLocation}.`;\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"invalid filesystem data\",\n      printedMessage: message,\n    });\n  }\n  if (!preferredLocationExists && wrongLocationExists) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"invalid filesystem data\",\n      printedMessage: `Error: Please move ${wrongLocation} to the root of your project`,\n    });\n  }\n\n  return preferredLocation;\n}\n\nexport async function getFunctionsDirectoryPath(ctx: Context): Promise<string> {\n  const { projectConfig, configPath } = await readProjectConfig(ctx);\n  return functionsDir(configPath, projectConfig);\n}\n\n/** Read configuration from a local `convex.json` file. */\nexport async function readProjectConfig(ctx: Context): Promise<{\n  projectConfig: ProjectConfig;\n  configPath: string;\n}> {\n  if (!ctx.fs.exists(\"convex.json\")) {\n    // create-react-app bans imports from outside of src, so we can just\n    // put the functions directory inside of src/ to work around this issue.\n    const packages = await loadPackageJson(ctx);\n    const isCreateReactApp = \"react-scripts\" in packages;\n    return {\n      projectConfig: {\n        functions: isCreateReactApp\n          ? `src/${DEFAULT_FUNCTIONS_PATH}`\n          : DEFAULT_FUNCTIONS_PATH,\n        node: {\n          externalPackages: [],\n        },\n        generateCommonJSApi: false,\n        codegen: {\n          staticApi: false,\n          staticDataModel: false,\n        },\n        aiFiles: {},\n      },\n      configPath: configName(),\n    };\n  }\n  let projectConfig;\n  const configPath = await configFilepath(ctx);\n  try {\n    projectConfig = await parseProjectConfig(\n      ctx,\n      JSON.parse(ctx.fs.readUtf8File(configPath)),\n    );\n  } catch (err) {\n    if (err instanceof ParseError || err instanceof SyntaxError) {\n      logError(chalkStderr.red(`Error: Parsing \"${configPath}\" failed`));\n      logMessage(chalkStderr.gray(err.toString()));\n    } else {\n      logFailure(\n        `Error: Unable to read project config file \"${configPath}\"\\n` +\n          \"  Are you running this command from the root directory of a Convex project? If so, run `npx convex dev` first.\",\n      );\n      if (err instanceof Error) {\n        logError(chalkStderr.red(err.message));\n      }\n    }\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"invalid filesystem data\",\n      errForSentry: err,\n      // TODO -- move the logging above in here\n      printedMessage: null,\n    });\n  }\n  return {\n    projectConfig,\n    configPath,\n  };\n}\n\n/**\n * Given a {@link ProjectConfig}, add in the bundled modules to produce the\n * complete config.\n */\nexport async function configFromProjectConfig(\n  ctx: Context,\n  projectConfig: ProjectConfig,\n  configPath: string,\n  verbose: boolean,\n): Promise<{\n  config: Config;\n  bundledModuleInfos: BundledModuleInfo[];\n}> {\n  const baseDir = functionsDir(configPath, projectConfig);\n  // We bundle Node.js and Convex JS runtime functions entry points separately\n  // since they execute on different platforms.\n  const entryPoints = await entryPointsByEnvironment(ctx, baseDir);\n  // es-build prints errors to console which would clobber our spinner.\n  if (verbose) {\n    showSpinner(\"Bundling modules for Convex's runtime...\");\n  }\n  const convexResult = await bundle({\n    ctx,\n    dir: baseDir,\n    entryPoints: entryPoints.isolate,\n    generateSourceMaps: true,\n    platform: \"browser\",\n  });\n  if (verbose) {\n    logMessage(\n      \"Convex's runtime modules: \",\n      convexResult.modules.map((m) => m.path),\n    );\n  }\n\n  // Bundle node modules.\n  if (verbose && entryPoints.node.length !== 0) {\n    showSpinner(\"Bundling modules for Node.js runtime...\");\n  }\n  const nodeResult = await bundle({\n    ctx,\n    dir: baseDir,\n    entryPoints: entryPoints.node,\n    generateSourceMaps: true,\n    platform: \"node\",\n    chunksFolder: path.join(\"_deps\", \"node\"),\n    externalPackagesAllowList: projectConfig.node.externalPackages,\n  });\n  if (verbose && entryPoints.node.length !== 0) {\n    logMessage(\n      \"Node.js runtime modules: \",\n      nodeResult.modules.map((m) => m.path),\n    );\n    if (projectConfig.node.externalPackages.length > 0) {\n      logMessage(\n        \"Node.js runtime external dependencies (to be installed on the server): \",\n        [...nodeResult.externalDependencies.entries()].map(\n          (a) => `${a[0]}: ${a[1]}`,\n        ),\n      );\n    }\n  }\n  const modules = convexResult.modules;\n  modules.push(...nodeResult.modules);\n  modules.push(...(await bundleAuthConfig(ctx, baseDir)));\n\n  const nodeDependencies: NodeDependency[] = [];\n  for (const [moduleName, moduleVersion] of nodeResult.externalDependencies) {\n    nodeDependencies.push({ name: moduleName, version: moduleVersion });\n  }\n\n  const bundledModuleInfos: BundledModuleInfo[] = Array.from(\n    convexResult.bundledModuleNames.keys(),\n  ).map((moduleName) => {\n    return {\n      name: moduleName,\n      platform: \"convex\",\n    };\n  });\n  bundledModuleInfos.push(\n    ...Array.from(nodeResult.bundledModuleNames.keys()).map(\n      (moduleName): BundledModuleInfo => {\n        return {\n          name: moduleName,\n          platform: \"node\",\n        };\n      },\n    ),\n  );\n\n  return {\n    config: {\n      projectConfig: projectConfig,\n      modules: modules,\n      nodeDependencies: nodeDependencies,\n      // We're just using the version this CLI is running with for now.\n      // This could be different than the version of `convex` the app runs with\n      // if the CLI is installed globally.\n      udfServerVersion: version,\n      nodeVersion: projectConfig.node.nodeVersion,\n    },\n    bundledModuleInfos,\n  };\n}\n\n/**\n * Bundle modules one by one for good bundler errors.\n */\nexport async function debugIsolateEndpointBundles(\n  ctx: Context,\n  projectConfig: ProjectConfig,\n  configPath: string,\n): Promise<void> {\n  const baseDir = functionsDir(configPath, projectConfig);\n  const entryPoints = await entryPointsByEnvironment(ctx, baseDir);\n  if (entryPoints.isolate.length === 0) {\n    logFinishedStep(\"No non-'use node' modules found.\");\n  }\n  await debugIsolateBundlesSerially(ctx, {\n    entryPoints: entryPoints.isolate,\n    extraConditions: [],\n    dir: baseDir,\n  });\n}\n\n/**\n * Read the config from `convex.json` and bundle all the modules.\n */\nexport async function readConfig(\n  ctx: Context,\n  verbose: boolean,\n): Promise<{\n  config: Config;\n  configPath: string;\n  bundledModuleInfos: BundledModuleInfo[];\n}> {\n  const { projectConfig, configPath } = await readProjectConfig(ctx);\n  const { config, bundledModuleInfos } = await configFromProjectConfig(\n    ctx,\n    projectConfig,\n    configPath,\n    verbose,\n  );\n  return { config, configPath, bundledModuleInfos };\n}\n\n/**\n * Ensure the functions directory exists.\n *\n * Note: This function no longer writes to or deletes `convex.json`. The config\n * file is now treated as user-owned and is not modified by the CLI. This allows\n * users to maintain their preferred formatting and any comments they may add\n * (if we later support JSONC parsing).\n */\nexport async function writeProjectConfig(\n  ctx: Context,\n  projectConfig: ProjectConfig,\n) {\n  const configPath = await configFilepath(ctx);\n  ctx.fs.mkdir(functionsDir(configPath, projectConfig), {\n    allowExisting: true,\n  });\n}\n\nexport function removedExistingConfig(\n  ctx: Context,\n  configPath: string,\n  options: { allowExistingConfig?: boolean },\n) {\n  if (!options.allowExistingConfig) {\n    return false;\n  }\n  recursivelyDelete(ctx, configPath);\n  logFinishedStep(`Removed existing ${configPath}`);\n  return true;\n}\n\n/** Pull configuration for the root app component from the given remote origin. */\nexport async function pullConfig(\n  ctx: Context,\n  project: string | undefined,\n  team: string | undefined,\n  origin: string,\n  adminKey: string,\n): Promise<ConfigWithModuleHashes> {\n  const fetch = deploymentFetch(ctx, {\n    deploymentUrl: origin,\n    adminKey,\n  });\n\n  changeSpinner(\"Downloading current deployment state...\");\n  try {\n    const res = await fetch(\"/api/get_config_hashes\", {\n      method: \"POST\",\n      body: JSON.stringify({ version, adminKey }),\n    });\n    deprecationCheckWarning(ctx, res);\n    const data = await res.json();\n    const backendConfig = parseBackendConfig(data.config);\n    const projectConfig = {\n      ...backendConfig,\n      node: {\n        // This field is not stored in the backend, which is ok since it is also\n        // not used to diff configs.\n        externalPackages: [],\n        nodeVersion: data.nodeVersion,\n      },\n      // This field is not stored in the backend, it only affects the client.\n      generateCommonJSApi: false,\n      // This field is also not stored in the backend, it only affects the client.\n      codegen: {\n        staticApi: false,\n        staticDataModel: false,\n      },\n      project,\n      team,\n      prodUrl: origin,\n    };\n    return {\n      projectConfig,\n      moduleHashes: data.moduleHashes,\n      // TODO(presley): Add this to diffConfig().\n      nodeDependencies: data.nodeDependencies,\n      udfServerVersion: data.udfServerVersion,\n    };\n  } catch (err: unknown) {\n    logFailure(`Error: Unable to pull deployment config from ${origin}`);\n    return await logAndHandleFetchError(ctx, err);\n  }\n}\n\ninterface BundledModuleInfo {\n  name: string;\n  platform: \"node\" | \"convex\";\n}\n\n/**\n * A component definition spec contains enough information to create bundles\n * of code that must be analyzed in order to construct a ComponentDefinition.\n *\n * Most paths are relative to the directory of the definitionPath.\n */\nexport type ComponentDefinitionSpec = {\n  /** This path is relative to the app (root component) directory. */\n  definitionPath: ComponentDefinitionPath;\n\n  /** Dependencies are paths to the directory of the dependency component definition from the app (root component) directory */\n  dependencies: ComponentDefinitionPath[];\n\n  // All other paths are relative to the directory of the definitionPath above.\n  definition: Bundle;\n  schema: Bundle;\n  functions: Bundle[];\n};\n\nexport type AppDefinitionSpec = Omit<\n  ComponentDefinitionSpec,\n  \"definitionPath\"\n> & {\n  // Only app (root) component specs contain an auth bundle.\n  auth: Bundle | null;\n};\n\nexport type ComponentDefinitionSpecWithoutImpls = Omit<\n  ComponentDefinitionSpec,\n  \"schema\" | \"functions\"\n>;\nexport type AppDefinitionSpecWithoutImpls = Omit<\n  AppDefinitionSpec,\n  \"schema\" | \"functions\" | \"auth\"\n>;\n\n/** Generate a human-readable diff between the two configs. */\nexport function diffConfig(\n  oldConfig: ConfigWithModuleHashes,\n  newConfig: Config,\n): { diffString: string } {\n  let diff = \"\";\n\n  let versionMessage = \"\";\n  const matches = oldConfig.udfServerVersion === newConfig.udfServerVersion;\n  if (oldConfig.udfServerVersion && (!newConfig.udfServerVersion || !matches)) {\n    versionMessage += `[-] ${oldConfig.udfServerVersion}\\n`;\n  }\n  if (newConfig.udfServerVersion && (!oldConfig.udfServerVersion || !matches)) {\n    versionMessage += `[+] ${newConfig.udfServerVersion}\\n`;\n  }\n  if (versionMessage) {\n    diff += \"Change the server's function version:\\n\";\n    diff += versionMessage;\n  }\n\n  if (oldConfig.projectConfig.node.nodeVersion !== newConfig.nodeVersion) {\n    diff += \"Change the server's version for Node.js actions:\\n\";\n    if (oldConfig.projectConfig.node.nodeVersion) {\n      diff += `[-] ${oldConfig.projectConfig.node.nodeVersion}\\n`;\n    }\n    if (newConfig.nodeVersion) {\n      diff += `[+] ${newConfig.nodeVersion}\\n`;\n    }\n  }\n\n  return { diffString: diff };\n}\n\n/** Handle an error from\n * legacy push path:\n * - /api/push_config\n * modern push paths:\n * - /api/deploy2/evaluate_push\n * - /api/deploy2/start_push\n * - /api/deploy2/finish_push\n *\n * finish_push errors are different from start_push errors and in theory could\n * be handled differently, but starting over works for all of them.\n */\nexport async function handlePushConfigError(\n  ctx: Context,\n  error: unknown,\n  defaultMessage: string,\n  deploymentName: string | null,\n  deployment:\n    | {\n        deploymentUrl: string;\n        adminKey: string;\n        deploymentNotice: string;\n      }\n    | undefined,\n  _deploymentType: DeploymentType | undefined,\n): Promise<never> {\n  const data: ErrorData | undefined =\n    error instanceof ThrowingFetchError ? error.serverErrorData : undefined;\n  if (data?.code === \"AuthConfigMissingEnvironmentVariable\") {\n    const errorMessage = data.message || \"(no error message given)\";\n    const [, variableName] =\n      errorMessage.match(/Environment variable (\\S+)/i) ?? [];\n\n    // DEPRECATED: This error path provisioning is being phased out in favor of\n    // pre-flight provisioning that happens before the client bundle build.\n    // We keep minimal logic here for backwards compatibility with older templates\n    // that may still rely on this path.\n    if (variableName === \"WORKOS_CLIENT_ID\" && deploymentName && deployment) {\n      // For backwards compatibility with templates that haven't been updated,\n      // we'll still show a helpful error message directing users to configure WorkOS.\n      // But we no longer do automatic provisioning here since it happens too late\n      // (after the client bundle has already been built with missing env vars).\n      logWarning(\n        \"WORKOS_CLIENT_ID is not set; you can set it manually on the deployment or for hosted Convex deployments, use auto-provisioning.\",\n      );\n      logMessage(\n        \"Learn more at https://docs.convex.dev/auth/authkit/auto-provision\",\n      );\n      logMessage(\"\");\n    }\n\n    const envVarMessage =\n      `Environment variable ${chalkStderr.bold(\n        variableName,\n      )} is used in auth config file but ` + `its value was not set.`;\n    let setEnvVarInstructions =\n      \"Go set it in the dashboard or using `npx convex env set`\";\n\n    // If `npx convex dev` is running using --url there might not be a configured deployment\n    if (deploymentName !== null) {\n      const variableQuery =\n        variableName !== undefined ? `?var=${variableName}` : \"\";\n      const dashboardUrl = deploymentDashboardUrlPage(\n        deploymentName,\n        `/settings/environment-variables${variableQuery}`,\n      );\n      setEnvVarInstructions = `Go to:\\n\\n    ${chalkStderr.bold(\n        dashboardUrl,\n      )}\\n\\n  to set it up. `;\n    }\n    await ctx.crash({\n      exitCode: 1,\n      errorType: \"invalid filesystem or env vars\",\n      errForSentry: error,\n      printedMessage: envVarMessage + \"\\n\" + setEnvVarInstructions,\n    });\n  }\n\n  if (data?.code === \"RaceDetected\") {\n    // Environment variables or schema changed during push. This is a transient\n    // error that should be retried immediately with exponential backoff.\n    const message =\n      data.message || \"Schema or environment variables changed during push\";\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"transient\",\n      errForSentry: error,\n      printedMessage: chalkStderr.yellow(message),\n    });\n  }\n\n  if (data?.code === \"InternalServerError\") {\n    if (deploymentName?.startsWith(\"local-\")) {\n      printLocalDeploymentOnError();\n      return ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        errForSentry: new LocalDeploymentError(\n          \"InternalServerError while pushing to local deployment\",\n        ),\n        printedMessage: defaultMessage,\n      });\n    }\n  }\n\n  logFailure(defaultMessage);\n  return await logAndHandleFetchError(ctx, error);\n}\n", "export * from \"./errors.js\";\nexport * from \"./helpers/parseUtil.js\";\nexport * from \"./helpers/typeAliases.js\";\nexport * from \"./helpers/util.js\";\nexport * from \"./types.js\";\nexport * from \"./ZodError.js\";\n", "export var util;\n(function (util) {\n    util.assertEqual = (_) => { };\n    function assertIs(_arg) { }\n    util.assertIs = assertIs;\n    function assertNever(_x) {\n        throw new Error();\n    }\n    util.assertNever = assertNever;\n    util.arrayToEnum = (items) => {\n        const obj = {};\n        for (const item of items) {\n            obj[item] = item;\n        }\n        return obj;\n    };\n    util.getValidEnumValues = (obj) => {\n        const validKeys = util.objectKeys(obj).filter((k) => typeof obj[obj[k]] !== \"number\");\n        const filtered = {};\n        for (const k of validKeys) {\n            filtered[k] = obj[k];\n        }\n        return util.objectValues(filtered);\n    };\n    util.objectValues = (obj) => {\n        return util.objectKeys(obj).map(function (e) {\n            return obj[e];\n        });\n    };\n    util.objectKeys = typeof Object.keys === \"function\" // eslint-disable-line ban/ban\n        ? (obj) => Object.keys(obj) // eslint-disable-line ban/ban\n        : (object) => {\n            const keys = [];\n            for (const key in object) {\n                if (Object.prototype.hasOwnProperty.call(object, key)) {\n                    keys.push(key);\n                }\n            }\n            return keys;\n        };\n    util.find = (arr, checker) => {\n        for (const item of arr) {\n            if (checker(item))\n                return item;\n        }\n        return undefined;\n    };\n    util.isInteger = typeof Number.isInteger === \"function\"\n        ? (val) => Number.isInteger(val) // eslint-disable-line ban/ban\n        : (val) => typeof val === \"number\" && Number.isFinite(val) && Math.floor(val) === val;\n    function joinValues(array, separator = \" | \") {\n        return array.map((val) => (typeof val === \"string\" ? `'${val}'` : val)).join(separator);\n    }\n    util.joinValues = joinValues;\n    util.jsonStringifyReplacer = (_, value) => {\n        if (typeof value === \"bigint\") {\n            return value.toString();\n        }\n        return value;\n    };\n})(util || (util = {}));\nexport var objectUtil;\n(function (objectUtil) {\n    objectUtil.mergeShapes = (first, second) => {\n        return {\n            ...first,\n            ...second, // second overwrites first\n        };\n    };\n})(objectUtil || (objectUtil = {}));\nexport const ZodParsedType = util.arrayToEnum([\n    \"string\",\n    \"nan\",\n    \"number\",\n    \"integer\",\n    \"float\",\n    \"boolean\",\n    \"date\",\n    \"bigint\",\n    \"symbol\",\n    \"function\",\n    \"undefined\",\n    \"null\",\n    \"array\",\n    \"object\",\n    \"unknown\",\n    \"promise\",\n    \"void\",\n    \"never\",\n    \"map\",\n    \"set\",\n]);\nexport const getParsedType = (data) => {\n    const t = typeof data;\n    switch (t) {\n        case \"undefined\":\n            return ZodParsedType.undefined;\n        case \"string\":\n            return ZodParsedType.string;\n        case \"number\":\n            return Number.isNaN(data) ? ZodParsedType.nan : ZodParsedType.number;\n        case \"boolean\":\n            return ZodParsedType.boolean;\n        case \"function\":\n            return ZodParsedType.function;\n        case \"bigint\":\n            return ZodParsedType.bigint;\n        case \"symbol\":\n            return ZodParsedType.symbol;\n        case \"object\":\n            if (Array.isArray(data)) {\n                return ZodParsedType.array;\n            }\n            if (data === null) {\n                return ZodParsedType.null;\n            }\n            if (data.then && typeof data.then === \"function\" && data.catch && typeof data.catch === \"function\") {\n                return ZodParsedType.promise;\n            }\n            if (typeof Map !== \"undefined\" && data instanceof Map) {\n                return ZodParsedType.map;\n            }\n            if (typeof Set !== \"undefined\" && data instanceof Set) {\n                return ZodParsedType.set;\n            }\n            if (typeof Date !== \"undefined\" && data instanceof Date) {\n                return ZodParsedType.date;\n            }\n            return ZodParsedType.object;\n        default:\n            return ZodParsedType.unknown;\n    }\n};\n", "import { util } from \"./helpers/util.js\";\nexport const ZodIssueCode = util.arrayToEnum([\n    \"invalid_type\",\n    \"invalid_literal\",\n    \"custom\",\n    \"invalid_union\",\n    \"invalid_union_discriminator\",\n    \"invalid_enum_value\",\n    \"unrecognized_keys\",\n    \"invalid_arguments\",\n    \"invalid_return_type\",\n    \"invalid_date\",\n    \"invalid_string\",\n    \"too_small\",\n    \"too_big\",\n    \"invalid_intersection_types\",\n    \"not_multiple_of\",\n    \"not_finite\",\n]);\nexport const quotelessJson = (obj) => {\n    const json = JSON.stringify(obj, null, 2);\n    return json.replace(/\"([^\"]+)\":/g, \"$1:\");\n};\nexport class ZodError extends Error {\n    get errors() {\n        return this.issues;\n    }\n    constructor(issues) {\n        super();\n        this.issues = [];\n        this.addIssue = (sub) => {\n            this.issues = [...this.issues, sub];\n        };\n        this.addIssues = (subs = []) => {\n            this.issues = [...this.issues, ...subs];\n        };\n        const actualProto = new.target.prototype;\n        if (Object.setPrototypeOf) {\n            // eslint-disable-next-line ban/ban\n            Object.setPrototypeOf(this, actualProto);\n        }\n        else {\n            this.__proto__ = actualProto;\n        }\n        this.name = \"ZodError\";\n        this.issues = issues;\n    }\n    format(_mapper) {\n        const mapper = _mapper ||\n            function (issue) {\n                return issue.message;\n            };\n        const fieldErrors = { _errors: [] };\n        const processError = (error) => {\n            for (const issue of error.issues) {\n                if (issue.code === \"invalid_union\") {\n                    issue.unionErrors.map(processError);\n                }\n                else if (issue.code === \"invalid_return_type\") {\n                    processError(issue.returnTypeError);\n                }\n                else if (issue.code === \"invalid_arguments\") {\n                    processError(issue.argumentsError);\n                }\n                else if (issue.path.length === 0) {\n                    fieldErrors._errors.push(mapper(issue));\n                }\n                else {\n                    let curr = fieldErrors;\n                    let i = 0;\n                    while (i < issue.path.length) {\n                        const el = issue.path[i];\n                        const terminal = i === issue.path.length - 1;\n                        if (!terminal) {\n                            curr[el] = curr[el] || { _errors: [] };\n                            // if (typeof el === \"string\") {\n                            //   curr[el] = curr[el] || { _errors: [] };\n                            // } else if (typeof el === \"number\") {\n                            //   const errorArray: any = [];\n                            //   errorArray._errors = [];\n                            //   curr[el] = curr[el] || errorArray;\n                            // }\n                        }\n                        else {\n                            curr[el] = curr[el] || { _errors: [] };\n                            curr[el]._errors.push(mapper(issue));\n                        }\n                        curr = curr[el];\n                        i++;\n                    }\n                }\n            }\n        };\n        processError(this);\n        return fieldErrors;\n    }\n    static assert(value) {\n        if (!(value instanceof ZodError)) {\n            throw new Error(`Not a ZodError: ${value}`);\n        }\n    }\n    toString() {\n        return this.message;\n    }\n    get message() {\n        return JSON.stringify(this.issues, util.jsonStringifyReplacer, 2);\n    }\n    get isEmpty() {\n        return this.issues.length === 0;\n    }\n    flatten(mapper = (issue) => issue.message) {\n        const fieldErrors = {};\n        const formErrors = [];\n        for (const sub of this.issues) {\n            if (sub.path.length > 0) {\n                const firstEl = sub.path[0];\n                fieldErrors[firstEl] = fieldErrors[firstEl] || [];\n                fieldErrors[firstEl].push(mapper(sub));\n            }\n            else {\n                formErrors.push(mapper(sub));\n            }\n        }\n        return { formErrors, fieldErrors };\n    }\n    get formErrors() {\n        return this.flatten();\n    }\n}\nZodError.create = (issues) => {\n    const error = new ZodError(issues);\n    return error;\n};\n", "import { ZodIssueCode } from \"../ZodError.js\";\nimport { util, ZodParsedType } from \"../helpers/util.js\";\nconst errorMap = (issue, _ctx) => {\n    let message;\n    switch (issue.code) {\n        case ZodIssueCode.invalid_type:\n            if (issue.received === ZodParsedType.undefined) {\n                message = \"Required\";\n            }\n            else {\n                message = `Expected ${issue.expected}, received ${issue.received}`;\n            }\n            break;\n        case ZodIssueCode.invalid_literal:\n            message = `Invalid literal value, expected ${JSON.stringify(issue.expected, util.jsonStringifyReplacer)}`;\n            break;\n        case ZodIssueCode.unrecognized_keys:\n            message = `Unrecognized key(s) in object: ${util.joinValues(issue.keys, \", \")}`;\n            break;\n        case ZodIssueCode.invalid_union:\n            message = `Invalid input`;\n            break;\n        case ZodIssueCode.invalid_union_discriminator:\n            message = `Invalid discriminator value. Expected ${util.joinValues(issue.options)}`;\n            break;\n        case ZodIssueCode.invalid_enum_value:\n            message = `Invalid enum value. Expected ${util.joinValues(issue.options)}, received '${issue.received}'`;\n            break;\n        case ZodIssueCode.invalid_arguments:\n            message = `Invalid function arguments`;\n            break;\n        case ZodIssueCode.invalid_return_type:\n            message = `Invalid function return type`;\n            break;\n        case ZodIssueCode.invalid_date:\n            message = `Invalid date`;\n            break;\n        case ZodIssueCode.invalid_string:\n            if (typeof issue.validation === \"object\") {\n                if (\"includes\" in issue.validation) {\n                    message = `Invalid input: must include \"${issue.validation.includes}\"`;\n                    if (typeof issue.validation.position === \"number\") {\n                        message = `${message} at one or more positions greater than or equal to ${issue.validation.position}`;\n                    }\n                }\n                else if (\"startsWith\" in issue.validation) {\n                    message = `Invalid input: must start with \"${issue.validation.startsWith}\"`;\n                }\n                else if (\"endsWith\" in issue.validation) {\n                    message = `Invalid input: must end with \"${issue.validation.endsWith}\"`;\n                }\n                else {\n                    util.assertNever(issue.validation);\n                }\n            }\n            else if (issue.validation !== \"regex\") {\n                message = `Invalid ${issue.validation}`;\n            }\n            else {\n                message = \"Invalid\";\n            }\n            break;\n        case ZodIssueCode.too_small:\n            if (issue.type === \"array\")\n                message = `Array must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `more than`} ${issue.minimum} element(s)`;\n            else if (issue.type === \"string\")\n                message = `String must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `over`} ${issue.minimum} character(s)`;\n            else if (issue.type === \"number\")\n                message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;\n            else if (issue.type === \"bigint\")\n                message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;\n            else if (issue.type === \"date\")\n                message = `Date must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${new Date(Number(issue.minimum))}`;\n            else\n                message = \"Invalid input\";\n            break;\n        case ZodIssueCode.too_big:\n            if (issue.type === \"array\")\n                message = `Array must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `less than`} ${issue.maximum} element(s)`;\n            else if (issue.type === \"string\")\n                message = `String must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `under`} ${issue.maximum} character(s)`;\n            else if (issue.type === \"number\")\n                message = `Number must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;\n            else if (issue.type === \"bigint\")\n                message = `BigInt must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;\n            else if (issue.type === \"date\")\n                message = `Date must be ${issue.exact ? `exactly` : issue.inclusive ? `smaller than or equal to` : `smaller than`} ${new Date(Number(issue.maximum))}`;\n            else\n                message = \"Invalid input\";\n            break;\n        case ZodIssueCode.custom:\n            message = `Invalid input`;\n            break;\n        case ZodIssueCode.invalid_intersection_types:\n            message = `Intersection results could not be merged`;\n            break;\n        case ZodIssueCode.not_multiple_of:\n            message = `Number must be a multiple of ${issue.multipleOf}`;\n            break;\n        case ZodIssueCode.not_finite:\n            message = \"Number must be finite\";\n            break;\n        default:\n            message = _ctx.defaultError;\n            util.assertNever(issue);\n    }\n    return { message };\n};\nexport default errorMap;\n", "import defaultErrorMap from \"./locales/en.js\";\nlet overrideErrorMap = defaultErrorMap;\nexport { defaultErrorMap };\nexport function setErrorMap(map) {\n    overrideErrorMap = map;\n}\nexport function getErrorMap() {\n    return overrideErrorMap;\n}\n", "import { getErrorMap } from \"../errors.js\";\nimport defaultErrorMap from \"../locales/en.js\";\nexport const makeIssue = (params) => {\n    const { data, path, errorMaps, issueData } = params;\n    const fullPath = [...path, ...(issueData.path || [])];\n    const fullIssue = {\n        ...issueData,\n        path: fullPath,\n    };\n    if (issueData.message !== undefined) {\n        return {\n            ...issueData,\n            path: fullPath,\n            message: issueData.message,\n        };\n    }\n    let errorMessage = \"\";\n    const maps = errorMaps\n        .filter((m) => !!m)\n        .slice()\n        .reverse();\n    for (const map of maps) {\n        errorMessage = map(fullIssue, { data, defaultError: errorMessage }).message;\n    }\n    return {\n        ...issueData,\n        path: fullPath,\n        message: errorMessage,\n    };\n};\nexport const EMPTY_PATH = [];\nexport function addIssueToContext(ctx, issueData) {\n    const overrideMap = getErrorMap();\n    const issue = makeIssue({\n        issueData: issueData,\n        data: ctx.data,\n        path: ctx.path,\n        errorMaps: [\n            ctx.common.contextualErrorMap, // contextual error map is first priority\n            ctx.schemaErrorMap, // then schema-bound map if available\n            overrideMap, // then global override map\n            overrideMap === defaultErrorMap ? undefined : defaultErrorMap, // then global default map\n        ].filter((x) => !!x),\n    });\n    ctx.common.issues.push(issue);\n}\nexport class ParseStatus {\n    constructor() {\n        this.value = \"valid\";\n    }\n    dirty() {\n        if (this.value === \"valid\")\n            this.value = \"dirty\";\n    }\n    abort() {\n        if (this.value !== \"aborted\")\n            this.value = \"aborted\";\n    }\n    static mergeArray(status, results) {\n        const arrayValue = [];\n        for (const s of results) {\n            if (s.status === \"aborted\")\n                return INVALID;\n            if (s.status === \"dirty\")\n                status.dirty();\n            arrayValue.push(s.value);\n        }\n        return { status: status.value, value: arrayValue };\n    }\n    static async mergeObjectAsync(status, pairs) {\n        const syncPairs = [];\n        for (const pair of pairs) {\n            const key = await pair.key;\n            const value = await pair.value;\n            syncPairs.push({\n                key,\n                value,\n            });\n        }\n        return ParseStatus.mergeObjectSync(status, syncPairs);\n    }\n    static mergeObjectSync(status, pairs) {\n        const finalObject = {};\n        for (const pair of pairs) {\n            const { key, value } = pair;\n            if (key.status === \"aborted\")\n                return INVALID;\n            if (value.status === \"aborted\")\n                return INVALID;\n            if (key.status === \"dirty\")\n                status.dirty();\n            if (value.status === \"dirty\")\n                status.dirty();\n            if (key.value !== \"__proto__\" && (typeof value.value !== \"undefined\" || pair.alwaysSet)) {\n                finalObject[key.value] = value.value;\n            }\n        }\n        return { status: status.value, value: finalObject };\n    }\n}\nexport const INVALID = Object.freeze({\n    status: \"aborted\",\n});\nexport const DIRTY = (value) => ({ status: \"dirty\", value });\nexport const OK = (value) => ({ status: \"valid\", value });\nexport const isAborted = (x) => x.status === \"aborted\";\nexport const isDirty = (x) => x.status === \"dirty\";\nexport const isValid = (x) => x.status === \"valid\";\nexport const isAsync = (x) => typeof Promise !== \"undefined\" && x instanceof Promise;\n", "export var errorUtil;\n(function (errorUtil) {\n    errorUtil.errToObj = (message) => typeof message === \"string\" ? { message } : message || {};\n    // biome-ignore lint:\n    errorUtil.toString = (message) => typeof message === \"string\" ? message : message?.message;\n})(errorUtil || (errorUtil = {}));\n", "import { ZodError, ZodIssueCode, } from \"./ZodError.js\";\nimport { defaultErrorMap, getErrorMap } from \"./errors.js\";\nimport { errorUtil } from \"./helpers/errorUtil.js\";\nimport { DIRTY, INVALID, OK, ParseStatus, addIssueToContext, isAborted, isAsync, isDirty, isValid, makeIssue, } from \"./helpers/parseUtil.js\";\nimport { util, ZodParsedType, getParsedType } from \"./helpers/util.js\";\nclass ParseInputLazyPath {\n    constructor(parent, value, path, key) {\n        this._cachedPath = [];\n        this.parent = parent;\n        this.data = value;\n        this._path = path;\n        this._key = key;\n    }\n    get path() {\n        if (!this._cachedPath.length) {\n            if (Array.isArray(this._key)) {\n                this._cachedPath.push(...this._path, ...this._key);\n            }\n            else {\n                this._cachedPath.push(...this._path, this._key);\n            }\n        }\n        return this._cachedPath;\n    }\n}\nconst handleResult = (ctx, result) => {\n    if (isValid(result)) {\n        return { success: true, data: result.value };\n    }\n    else {\n        if (!ctx.common.issues.length) {\n            throw new Error(\"Validation failed but no issues detected.\");\n        }\n        return {\n            success: false,\n            get error() {\n                if (this._error)\n                    return this._error;\n                const error = new ZodError(ctx.common.issues);\n                this._error = error;\n                return this._error;\n            },\n        };\n    }\n};\nfunction processCreateParams(params) {\n    if (!params)\n        return {};\n    const { errorMap, invalid_type_error, required_error, description } = params;\n    if (errorMap && (invalid_type_error || required_error)) {\n        throw new Error(`Can't use \"invalid_type_error\" or \"required_error\" in conjunction with custom error map.`);\n    }\n    if (errorMap)\n        return { errorMap: errorMap, description };\n    const customMap = (iss, ctx) => {\n        const { message } = params;\n        if (iss.code === \"invalid_enum_value\") {\n            return { message: message ?? ctx.defaultError };\n        }\n        if (typeof ctx.data === \"undefined\") {\n            return { message: message ?? required_error ?? ctx.defaultError };\n        }\n        if (iss.code !== \"invalid_type\")\n            return { message: ctx.defaultError };\n        return { message: message ?? invalid_type_error ?? ctx.defaultError };\n    };\n    return { errorMap: customMap, description };\n}\nexport class ZodType {\n    get description() {\n        return this._def.description;\n    }\n    _getType(input) {\n        return getParsedType(input.data);\n    }\n    _getOrReturnCtx(input, ctx) {\n        return (ctx || {\n            common: input.parent.common,\n            data: input.data,\n            parsedType: getParsedType(input.data),\n            schemaErrorMap: this._def.errorMap,\n            path: input.path,\n            parent: input.parent,\n        });\n    }\n    _processInputParams(input) {\n        return {\n            status: new ParseStatus(),\n            ctx: {\n                common: input.parent.common,\n                data: input.data,\n                parsedType: getParsedType(input.data),\n                schemaErrorMap: this._def.errorMap,\n                path: input.path,\n                parent: input.parent,\n            },\n        };\n    }\n    _parseSync(input) {\n        const result = this._parse(input);\n        if (isAsync(result)) {\n            throw new Error(\"Synchronous parse encountered promise.\");\n        }\n        return result;\n    }\n    _parseAsync(input) {\n        const result = this._parse(input);\n        return Promise.resolve(result);\n    }\n    parse(data, params) {\n        const result = this.safeParse(data, params);\n        if (result.success)\n            return result.data;\n        throw result.error;\n    }\n    safeParse(data, params) {\n        const ctx = {\n            common: {\n                issues: [],\n                async: params?.async ?? false,\n                contextualErrorMap: params?.errorMap,\n            },\n            path: params?.path || [],\n            schemaErrorMap: this._def.errorMap,\n            parent: null,\n            data,\n            parsedType: getParsedType(data),\n        };\n        const result = this._parseSync({ data, path: ctx.path, parent: ctx });\n        return handleResult(ctx, result);\n    }\n    \"~validate\"(data) {\n        const ctx = {\n            common: {\n                issues: [],\n                async: !!this[\"~standard\"].async,\n            },\n            path: [],\n            schemaErrorMap: this._def.errorMap,\n            parent: null,\n            data,\n            parsedType: getParsedType(data),\n        };\n        if (!this[\"~standard\"].async) {\n            try {\n                const result = this._parseSync({ data, path: [], parent: ctx });\n                return isValid(result)\n                    ? {\n                        value: result.value,\n                    }\n                    : {\n                        issues: ctx.common.issues,\n                    };\n            }\n            catch (err) {\n                if (err?.message?.toLowerCase()?.includes(\"encountered\")) {\n                    this[\"~standard\"].async = true;\n                }\n                ctx.common = {\n                    issues: [],\n                    async: true,\n                };\n            }\n        }\n        return this._parseAsync({ data, path: [], parent: ctx }).then((result) => isValid(result)\n            ? {\n                value: result.value,\n            }\n            : {\n                issues: ctx.common.issues,\n            });\n    }\n    async parseAsync(data, params) {\n        const result = await this.safeParseAsync(data, params);\n        if (result.success)\n            return result.data;\n        throw result.error;\n    }\n    async safeParseAsync(data, params) {\n        const ctx = {\n            common: {\n                issues: [],\n                contextualErrorMap: params?.errorMap,\n                async: true,\n            },\n            path: params?.path || [],\n            schemaErrorMap: this._def.errorMap,\n            parent: null,\n            data,\n            parsedType: getParsedType(data),\n        };\n        const maybeAsyncResult = this._parse({ data, path: ctx.path, parent: ctx });\n        const result = await (isAsync(maybeAsyncResult) ? maybeAsyncResult : Promise.resolve(maybeAsyncResult));\n        return handleResult(ctx, result);\n    }\n    refine(check, message) {\n        const getIssueProperties = (val) => {\n            if (typeof message === \"string\" || typeof message === \"undefined\") {\n                return { message };\n            }\n            else if (typeof message === \"function\") {\n                return message(val);\n            }\n            else {\n                return message;\n            }\n        };\n        return this._refinement((val, ctx) => {\n            const result = check(val);\n            const setError = () => ctx.addIssue({\n                code: ZodIssueCode.custom,\n                ...getIssueProperties(val),\n            });\n            if (typeof Promise !== \"undefined\" && result instanceof Promise) {\n                return result.then((data) => {\n                    if (!data) {\n                        setError();\n                        return false;\n                    }\n                    else {\n                        return true;\n                    }\n                });\n            }\n            if (!result) {\n                setError();\n                return false;\n            }\n            else {\n                return true;\n            }\n        });\n    }\n    refinement(check, refinementData) {\n        return this._refinement((val, ctx) => {\n            if (!check(val)) {\n                ctx.addIssue(typeof refinementData === \"function\" ? refinementData(val, ctx) : refinementData);\n                return false;\n            }\n            else {\n                return true;\n            }\n        });\n    }\n    _refinement(refinement) {\n        return new ZodEffects({\n            schema: this,\n            typeName: ZodFirstPartyTypeKind.ZodEffects,\n            effect: { type: \"refinement\", refinement },\n        });\n    }\n    superRefine(refinement) {\n        return this._refinement(refinement);\n    }\n    constructor(def) {\n        /** Alias of safeParseAsync */\n        this.spa = this.safeParseAsync;\n        this._def = def;\n        this.parse = this.parse.bind(this);\n        this.safeParse = this.safeParse.bind(this);\n        this.parseAsync = this.parseAsync.bind(this);\n        this.safeParseAsync = this.safeParseAsync.bind(this);\n        this.spa = this.spa.bind(this);\n        this.refine = this.refine.bind(this);\n        this.refinement = this.refinement.bind(this);\n        this.superRefine = this.superRefine.bind(this);\n        this.optional = this.optional.bind(this);\n        this.nullable = this.nullable.bind(this);\n        this.nullish = this.nullish.bind(this);\n        this.array = this.array.bind(this);\n        this.promise = this.promise.bind(this);\n        this.or = this.or.bind(this);\n        this.and = this.and.bind(this);\n        this.transform = this.transform.bind(this);\n        this.brand = this.brand.bind(this);\n        this.default = this.default.bind(this);\n        this.catch = this.catch.bind(this);\n        this.describe = this.describe.bind(this);\n        this.pipe = this.pipe.bind(this);\n        this.readonly = this.readonly.bind(this);\n        this.isNullable = this.isNullable.bind(this);\n        this.isOptional = this.isOptional.bind(this);\n        this[\"~standard\"] = {\n            version: 1,\n            vendor: \"zod\",\n            validate: (data) => this[\"~validate\"](data),\n        };\n    }\n    optional() {\n        return ZodOptional.create(this, this._def);\n    }\n    nullable() {\n        return ZodNullable.create(this, this._def);\n    }\n    nullish() {\n        return this.nullable().optional();\n    }\n    array() {\n        return ZodArray.create(this);\n    }\n    promise() {\n        return ZodPromise.create(this, this._def);\n    }\n    or(option) {\n        return ZodUnion.create([this, option], this._def);\n    }\n    and(incoming) {\n        return ZodIntersection.create(this, incoming, this._def);\n    }\n    transform(transform) {\n        return new ZodEffects({\n            ...processCreateParams(this._def),\n            schema: this,\n            typeName: ZodFirstPartyTypeKind.ZodEffects,\n            effect: { type: \"transform\", transform },\n        });\n    }\n    default(def) {\n        const defaultValueFunc = typeof def === \"function\" ? def : () => def;\n        return new ZodDefault({\n            ...processCreateParams(this._def),\n            innerType: this,\n            defaultValue: defaultValueFunc,\n            typeName: ZodFirstPartyTypeKind.ZodDefault,\n        });\n    }\n    brand() {\n        return new ZodBranded({\n            typeName: ZodFirstPartyTypeKind.ZodBranded,\n            type: this,\n            ...processCreateParams(this._def),\n        });\n    }\n    catch(def) {\n        const catchValueFunc = typeof def === \"function\" ? def : () => def;\n        return new ZodCatch({\n            ...processCreateParams(this._def),\n            innerType: this,\n            catchValue: catchValueFunc,\n            typeName: ZodFirstPartyTypeKind.ZodCatch,\n        });\n    }\n    describe(description) {\n        const This = this.constructor;\n        return new This({\n            ...this._def,\n            description,\n        });\n    }\n    pipe(target) {\n        return ZodPipeline.create(this, target);\n    }\n    readonly() {\n        return ZodReadonly.create(this);\n    }\n    isOptional() {\n        return this.safeParse(undefined).success;\n    }\n    isNullable() {\n        return this.safeParse(null).success;\n    }\n}\nconst cuidRegex = /^c[^\\s-]{8,}$/i;\nconst cuid2Regex = /^[0-9a-z]+$/;\nconst ulidRegex = /^[0-9A-HJKMNP-TV-Z]{26}$/i;\n// const uuidRegex =\n//   /^([a-f0-9]{8}-[a-f0-9]{4}-[1-5][a-f0-9]{3}-[a-f0-9]{4}-[a-f0-9]{12}|00000000-0000-0000-0000-000000000000)$/i;\nconst uuidRegex = /^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$/i;\nconst nanoidRegex = /^[a-z0-9_-]{21}$/i;\nconst jwtRegex = /^[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]*$/;\nconst durationRegex = /^[-+]?P(?!$)(?:(?:[-+]?\\d+Y)|(?:[-+]?\\d+[.,]\\d+Y$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:(?:[-+]?\\d+W)|(?:[-+]?\\d+[.,]\\d+W$))?(?:(?:[-+]?\\d+D)|(?:[-+]?\\d+[.,]\\d+D$))?(?:T(?=[\\d+-])(?:(?:[-+]?\\d+H)|(?:[-+]?\\d+[.,]\\d+H$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:[-+]?\\d+(?:[.,]\\d+)?S)?)??$/;\n// from https://stackoverflow.com/a/46181/1550155\n// old version: too slow, didn't support unicode\n// const emailRegex = /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i;\n//old email regex\n// const emailRegex = /^(([^<>()[\\].,;:\\s@\"]+(\\.[^<>()[\\].,;:\\s@\"]+)*)|(\".+\"))@((?!-)([^<>()[\\].,;:\\s@\"]+\\.)+[^<>()[\\].,;:\\s@\"]{1,})[^-<>()[\\].,;:\\s@\"]$/i;\n// eslint-disable-next-line\n// const emailRegex =\n//   /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\])|(\\[IPv6:(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))\\])|([A-Za-z0-9]([A-Za-z0-9-]*[A-Za-z0-9])*(\\.[A-Za-z]{2,})+))$/;\n// const emailRegex =\n//   /^[a-zA-Z0-9\\.\\!\\#\\$\\%\\&\\'\\*\\+\\/\\=\\?\\^\\_\\`\\{\\|\\}\\~\\-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n// const emailRegex =\n//   /^(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])$/i;\nconst emailRegex = /^(?!\\.)(?!.*\\.\\.)([A-Z0-9_'+\\-\\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\\-]*\\.)+[A-Z]{2,}$/i;\n// const emailRegex =\n//   /^[a-z0-9.!#$%&\u2019*+/=?^_`{|}~-]+@[a-z0-9-]+(?:\\.[a-z0-9\\-]+)*$/i;\n// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression\nconst _emojiRegex = `^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$`;\nlet emojiRegex;\n// faster, simpler, safer\nconst ipv4Regex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;\nconst ipv4CidrRegex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/(3[0-2]|[12]?[0-9])$/;\n// const ipv6Regex =\n// /^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/;\nconst ipv6Regex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/;\nconst ipv6CidrRegex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/;\n// https://stackoverflow.com/questions/7860392/determine-if-string-is-in-base64-using-javascript\nconst base64Regex = /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/;\n// https://base64.guru/standards/base64url\nconst base64urlRegex = /^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/;\n// simple\n// const dateRegexSource = `\\\\d{4}-\\\\d{2}-\\\\d{2}`;\n// no leap year validation\n// const dateRegexSource = `\\\\d{4}-((0[13578]|10|12)-31|(0[13-9]|1[0-2])-30|(0[1-9]|1[0-2])-(0[1-9]|1\\\\d|2\\\\d))`;\n// with leap year validation\nconst dateRegexSource = `((\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\\\d|30)|(02)-(0[1-9]|1\\\\d|2[0-8])))`;\nconst dateRegex = new RegExp(`^${dateRegexSource}$`);\nfunction timeRegexSource(args) {\n    let secondsRegexSource = `[0-5]\\\\d`;\n    if (args.precision) {\n        secondsRegexSource = `${secondsRegexSource}\\\\.\\\\d{${args.precision}}`;\n    }\n    else if (args.precision == null) {\n        secondsRegexSource = `${secondsRegexSource}(\\\\.\\\\d+)?`;\n    }\n    const secondsQuantifier = args.precision ? \"+\" : \"?\"; // require seconds if precision is nonzero\n    return `([01]\\\\d|2[0-3]):[0-5]\\\\d(:${secondsRegexSource})${secondsQuantifier}`;\n}\nfunction timeRegex(args) {\n    return new RegExp(`^${timeRegexSource(args)}$`);\n}\n// Adapted from https://stackoverflow.com/a/3143231\nexport function datetimeRegex(args) {\n    let regex = `${dateRegexSource}T${timeRegexSource(args)}`;\n    const opts = [];\n    opts.push(args.local ? `Z?` : `Z`);\n    if (args.offset)\n        opts.push(`([+-]\\\\d{2}:?\\\\d{2})`);\n    regex = `${regex}(${opts.join(\"|\")})`;\n    return new RegExp(`^${regex}$`);\n}\nfunction isValidIP(ip, version) {\n    if ((version === \"v4\" || !version) && ipv4Regex.test(ip)) {\n        return true;\n    }\n    if ((version === \"v6\" || !version) && ipv6Regex.test(ip)) {\n        return true;\n    }\n    return false;\n}\nfunction isValidJWT(jwt, alg) {\n    if (!jwtRegex.test(jwt))\n        return false;\n    try {\n        const [header] = jwt.split(\".\");\n        if (!header)\n            return false;\n        // Convert base64url to base64\n        const base64 = header\n            .replace(/-/g, \"+\")\n            .replace(/_/g, \"/\")\n            .padEnd(header.length + ((4 - (header.length % 4)) % 4), \"=\");\n        const decoded = JSON.parse(atob(base64));\n        if (typeof decoded !== \"object\" || decoded === null)\n            return false;\n        if (\"typ\" in decoded && decoded?.typ !== \"JWT\")\n            return false;\n        if (!decoded.alg)\n            return false;\n        if (alg && decoded.alg !== alg)\n            return false;\n        return true;\n    }\n    catch {\n        return false;\n    }\n}\nfunction isValidCidr(ip, version) {\n    if ((version === \"v4\" || !version) && ipv4CidrRegex.test(ip)) {\n        return true;\n    }\n    if ((version === \"v6\" || !version) && ipv6CidrRegex.test(ip)) {\n        return true;\n    }\n    return false;\n}\nexport class ZodString extends ZodType {\n    _parse(input) {\n        if (this._def.coerce) {\n            input.data = String(input.data);\n        }\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.string) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.string,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        const status = new ParseStatus();\n        let ctx = undefined;\n        for (const check of this._def.checks) {\n            if (check.kind === \"min\") {\n                if (input.data.length < check.value) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_small,\n                        minimum: check.value,\n                        type: \"string\",\n                        inclusive: true,\n                        exact: false,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"max\") {\n                if (input.data.length > check.value) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_big,\n                        maximum: check.value,\n                        type: \"string\",\n                        inclusive: true,\n                        exact: false,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"length\") {\n                const tooBig = input.data.length > check.value;\n                const tooSmall = input.data.length < check.value;\n                if (tooBig || tooSmall) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    if (tooBig) {\n                        addIssueToContext(ctx, {\n                            code: ZodIssueCode.too_big,\n                            maximum: check.value,\n                            type: \"string\",\n                            inclusive: true,\n                            exact: true,\n                            message: check.message,\n                        });\n                    }\n                    else if (tooSmall) {\n                        addIssueToContext(ctx, {\n                            code: ZodIssueCode.too_small,\n                            minimum: check.value,\n                            type: \"string\",\n                            inclusive: true,\n                            exact: true,\n                            message: check.message,\n                        });\n                    }\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"email\") {\n                if (!emailRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"email\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"emoji\") {\n                if (!emojiRegex) {\n                    emojiRegex = new RegExp(_emojiRegex, \"u\");\n                }\n                if (!emojiRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"emoji\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"uuid\") {\n                if (!uuidRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"uuid\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"nanoid\") {\n                if (!nanoidRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"nanoid\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"cuid\") {\n                if (!cuidRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"cuid\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"cuid2\") {\n                if (!cuid2Regex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"cuid2\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"ulid\") {\n                if (!ulidRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"ulid\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"url\") {\n                try {\n                    new URL(input.data);\n                }\n                catch {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"url\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"regex\") {\n                check.regex.lastIndex = 0;\n                const testResult = check.regex.test(input.data);\n                if (!testResult) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"regex\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"trim\") {\n                input.data = input.data.trim();\n            }\n            else if (check.kind === \"includes\") {\n                if (!input.data.includes(check.value, check.position)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.invalid_string,\n                        validation: { includes: check.value, position: check.position },\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"toLowerCase\") {\n                input.data = input.data.toLowerCase();\n            }\n            else if (check.kind === \"toUpperCase\") {\n                input.data = input.data.toUpperCase();\n            }\n            else if (check.kind === \"startsWith\") {\n                if (!input.data.startsWith(check.value)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.invalid_string,\n                        validation: { startsWith: check.value },\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"endsWith\") {\n                if (!input.data.endsWith(check.value)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.invalid_string,\n                        validation: { endsWith: check.value },\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"datetime\") {\n                const regex = datetimeRegex(check);\n                if (!regex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.invalid_string,\n                        validation: \"datetime\",\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"date\") {\n                const regex = dateRegex;\n                if (!regex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.invalid_string,\n                        validation: \"date\",\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"time\") {\n                const regex = timeRegex(check);\n                if (!regex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.invalid_string,\n                        validation: \"time\",\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"duration\") {\n                if (!durationRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"duration\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"ip\") {\n                if (!isValidIP(input.data, check.version)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"ip\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"jwt\") {\n                if (!isValidJWT(input.data, check.alg)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"jwt\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"cidr\") {\n                if (!isValidCidr(input.data, check.version)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"cidr\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"base64\") {\n                if (!base64Regex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"base64\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"base64url\") {\n                if (!base64urlRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"base64url\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else {\n                util.assertNever(check);\n            }\n        }\n        return { status: status.value, value: input.data };\n    }\n    _regex(regex, validation, message) {\n        return this.refinement((data) => regex.test(data), {\n            validation,\n            code: ZodIssueCode.invalid_string,\n            ...errorUtil.errToObj(message),\n        });\n    }\n    _addCheck(check) {\n        return new ZodString({\n            ...this._def,\n            checks: [...this._def.checks, check],\n        });\n    }\n    email(message) {\n        return this._addCheck({ kind: \"email\", ...errorUtil.errToObj(message) });\n    }\n    url(message) {\n        return this._addCheck({ kind: \"url\", ...errorUtil.errToObj(message) });\n    }\n    emoji(message) {\n        return this._addCheck({ kind: \"emoji\", ...errorUtil.errToObj(message) });\n    }\n    uuid(message) {\n        return this._addCheck({ kind: \"uuid\", ...errorUtil.errToObj(message) });\n    }\n    nanoid(message) {\n        return this._addCheck({ kind: \"nanoid\", ...errorUtil.errToObj(message) });\n    }\n    cuid(message) {\n        return this._addCheck({ kind: \"cuid\", ...errorUtil.errToObj(message) });\n    }\n    cuid2(message) {\n        return this._addCheck({ kind: \"cuid2\", ...errorUtil.errToObj(message) });\n    }\n    ulid(message) {\n        return this._addCheck({ kind: \"ulid\", ...errorUtil.errToObj(message) });\n    }\n    base64(message) {\n        return this._addCheck({ kind: \"base64\", ...errorUtil.errToObj(message) });\n    }\n    base64url(message) {\n        // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n        return this._addCheck({\n            kind: \"base64url\",\n            ...errorUtil.errToObj(message),\n        });\n    }\n    jwt(options) {\n        return this._addCheck({ kind: \"jwt\", ...errorUtil.errToObj(options) });\n    }\n    ip(options) {\n        return this._addCheck({ kind: \"ip\", ...errorUtil.errToObj(options) });\n    }\n    cidr(options) {\n        return this._addCheck({ kind: \"cidr\", ...errorUtil.errToObj(options) });\n    }\n    datetime(options) {\n        if (typeof options === \"string\") {\n            return this._addCheck({\n                kind: \"datetime\",\n                precision: null,\n                offset: false,\n                local: false,\n                message: options,\n            });\n        }\n        return this._addCheck({\n            kind: \"datetime\",\n            precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n            offset: options?.offset ?? false,\n            local: options?.local ?? false,\n            ...errorUtil.errToObj(options?.message),\n        });\n    }\n    date(message) {\n        return this._addCheck({ kind: \"date\", message });\n    }\n    time(options) {\n        if (typeof options === \"string\") {\n            return this._addCheck({\n                kind: \"time\",\n                precision: null,\n                message: options,\n            });\n        }\n        return this._addCheck({\n            kind: \"time\",\n            precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n            ...errorUtil.errToObj(options?.message),\n        });\n    }\n    duration(message) {\n        return this._addCheck({ kind: \"duration\", ...errorUtil.errToObj(message) });\n    }\n    regex(regex, message) {\n        return this._addCheck({\n            kind: \"regex\",\n            regex: regex,\n            ...errorUtil.errToObj(message),\n        });\n    }\n    includes(value, options) {\n        return this._addCheck({\n            kind: \"includes\",\n            value: value,\n            position: options?.position,\n            ...errorUtil.errToObj(options?.message),\n        });\n    }\n    startsWith(value, message) {\n        return this._addCheck({\n            kind: \"startsWith\",\n            value: value,\n            ...errorUtil.errToObj(message),\n        });\n    }\n    endsWith(value, message) {\n        return this._addCheck({\n            kind: \"endsWith\",\n            value: value,\n            ...errorUtil.errToObj(message),\n        });\n    }\n    min(minLength, message) {\n        return this._addCheck({\n            kind: \"min\",\n            value: minLength,\n            ...errorUtil.errToObj(message),\n        });\n    }\n    max(maxLength, message) {\n        return this._addCheck({\n            kind: \"max\",\n            value: maxLength,\n            ...errorUtil.errToObj(message),\n        });\n    }\n    length(len, message) {\n        return this._addCheck({\n            kind: \"length\",\n            value: len,\n            ...errorUtil.errToObj(message),\n        });\n    }\n    /**\n     * Equivalent to `.min(1)`\n     */\n    nonempty(message) {\n        return this.min(1, errorUtil.errToObj(message));\n    }\n    trim() {\n        return new ZodString({\n            ...this._def,\n            checks: [...this._def.checks, { kind: \"trim\" }],\n        });\n    }\n    toLowerCase() {\n        return new ZodString({\n            ...this._def,\n            checks: [...this._def.checks, { kind: \"toLowerCase\" }],\n        });\n    }\n    toUpperCase() {\n        return new ZodString({\n            ...this._def,\n            checks: [...this._def.checks, { kind: \"toUpperCase\" }],\n        });\n    }\n    get isDatetime() {\n        return !!this._def.checks.find((ch) => ch.kind === \"datetime\");\n    }\n    get isDate() {\n        return !!this._def.checks.find((ch) => ch.kind === \"date\");\n    }\n    get isTime() {\n        return !!this._def.checks.find((ch) => ch.kind === \"time\");\n    }\n    get isDuration() {\n        return !!this._def.checks.find((ch) => ch.kind === \"duration\");\n    }\n    get isEmail() {\n        return !!this._def.checks.find((ch) => ch.kind === \"email\");\n    }\n    get isURL() {\n        return !!this._def.checks.find((ch) => ch.kind === \"url\");\n    }\n    get isEmoji() {\n        return !!this._def.checks.find((ch) => ch.kind === \"emoji\");\n    }\n    get isUUID() {\n        return !!this._def.checks.find((ch) => ch.kind === \"uuid\");\n    }\n    get isNANOID() {\n        return !!this._def.checks.find((ch) => ch.kind === \"nanoid\");\n    }\n    get isCUID() {\n        return !!this._def.checks.find((ch) => ch.kind === \"cuid\");\n    }\n    get isCUID2() {\n        return !!this._def.checks.find((ch) => ch.kind === \"cuid2\");\n    }\n    get isULID() {\n        return !!this._def.checks.find((ch) => ch.kind === \"ulid\");\n    }\n    get isIP() {\n        return !!this._def.checks.find((ch) => ch.kind === \"ip\");\n    }\n    get isCIDR() {\n        return !!this._def.checks.find((ch) => ch.kind === \"cidr\");\n    }\n    get isBase64() {\n        return !!this._def.checks.find((ch) => ch.kind === \"base64\");\n    }\n    get isBase64url() {\n        // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n        return !!this._def.checks.find((ch) => ch.kind === \"base64url\");\n    }\n    get minLength() {\n        let min = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"min\") {\n                if (min === null || ch.value > min)\n                    min = ch.value;\n            }\n        }\n        return min;\n    }\n    get maxLength() {\n        let max = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"max\") {\n                if (max === null || ch.value < max)\n                    max = ch.value;\n            }\n        }\n        return max;\n    }\n}\nZodString.create = (params) => {\n    return new ZodString({\n        checks: [],\n        typeName: ZodFirstPartyTypeKind.ZodString,\n        coerce: params?.coerce ?? false,\n        ...processCreateParams(params),\n    });\n};\n// https://stackoverflow.com/questions/3966484/why-does-modulus-operator-return-fractional-number-in-javascript/31711034#31711034\nfunction floatSafeRemainder(val, step) {\n    const valDecCount = (val.toString().split(\".\")[1] || \"\").length;\n    const stepDecCount = (step.toString().split(\".\")[1] || \"\").length;\n    const decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount;\n    const valInt = Number.parseInt(val.toFixed(decCount).replace(\".\", \"\"));\n    const stepInt = Number.parseInt(step.toFixed(decCount).replace(\".\", \"\"));\n    return (valInt % stepInt) / 10 ** decCount;\n}\nexport class ZodNumber extends ZodType {\n    constructor() {\n        super(...arguments);\n        this.min = this.gte;\n        this.max = this.lte;\n        this.step = this.multipleOf;\n    }\n    _parse(input) {\n        if (this._def.coerce) {\n            input.data = Number(input.data);\n        }\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.number) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.number,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        let ctx = undefined;\n        const status = new ParseStatus();\n        for (const check of this._def.checks) {\n            if (check.kind === \"int\") {\n                if (!util.isInteger(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.invalid_type,\n                        expected: \"integer\",\n                        received: \"float\",\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"min\") {\n                const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n                if (tooSmall) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_small,\n                        minimum: check.value,\n                        type: \"number\",\n                        inclusive: check.inclusive,\n                        exact: false,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"max\") {\n                const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n                if (tooBig) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_big,\n                        maximum: check.value,\n                        type: \"number\",\n                        inclusive: check.inclusive,\n                        exact: false,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"multipleOf\") {\n                if (floatSafeRemainder(input.data, check.value) !== 0) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.not_multiple_of,\n                        multipleOf: check.value,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"finite\") {\n                if (!Number.isFinite(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.not_finite,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else {\n                util.assertNever(check);\n            }\n        }\n        return { status: status.value, value: input.data };\n    }\n    gte(value, message) {\n        return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n    }\n    gt(value, message) {\n        return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n    }\n    lte(value, message) {\n        return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n    }\n    lt(value, message) {\n        return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n    }\n    setLimit(kind, value, inclusive, message) {\n        return new ZodNumber({\n            ...this._def,\n            checks: [\n                ...this._def.checks,\n                {\n                    kind,\n                    value,\n                    inclusive,\n                    message: errorUtil.toString(message),\n                },\n            ],\n        });\n    }\n    _addCheck(check) {\n        return new ZodNumber({\n            ...this._def,\n            checks: [...this._def.checks, check],\n        });\n    }\n    int(message) {\n        return this._addCheck({\n            kind: \"int\",\n            message: errorUtil.toString(message),\n        });\n    }\n    positive(message) {\n        return this._addCheck({\n            kind: \"min\",\n            value: 0,\n            inclusive: false,\n            message: errorUtil.toString(message),\n        });\n    }\n    negative(message) {\n        return this._addCheck({\n            kind: \"max\",\n            value: 0,\n            inclusive: false,\n            message: errorUtil.toString(message),\n        });\n    }\n    nonpositive(message) {\n        return this._addCheck({\n            kind: \"max\",\n            value: 0,\n            inclusive: true,\n            message: errorUtil.toString(message),\n        });\n    }\n    nonnegative(message) {\n        return this._addCheck({\n            kind: \"min\",\n            value: 0,\n            inclusive: true,\n            message: errorUtil.toString(message),\n        });\n    }\n    multipleOf(value, message) {\n        return this._addCheck({\n            kind: \"multipleOf\",\n            value: value,\n            message: errorUtil.toString(message),\n        });\n    }\n    finite(message) {\n        return this._addCheck({\n            kind: \"finite\",\n            message: errorUtil.toString(message),\n        });\n    }\n    safe(message) {\n        return this._addCheck({\n            kind: \"min\",\n            inclusive: true,\n            value: Number.MIN_SAFE_INTEGER,\n            message: errorUtil.toString(message),\n        })._addCheck({\n            kind: \"max\",\n            inclusive: true,\n            value: Number.MAX_SAFE_INTEGER,\n            message: errorUtil.toString(message),\n        });\n    }\n    get minValue() {\n        let min = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"min\") {\n                if (min === null || ch.value > min)\n                    min = ch.value;\n            }\n        }\n        return min;\n    }\n    get maxValue() {\n        let max = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"max\") {\n                if (max === null || ch.value < max)\n                    max = ch.value;\n            }\n        }\n        return max;\n    }\n    get isInt() {\n        return !!this._def.checks.find((ch) => ch.kind === \"int\" || (ch.kind === \"multipleOf\" && util.isInteger(ch.value)));\n    }\n    get isFinite() {\n        let max = null;\n        let min = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"finite\" || ch.kind === \"int\" || ch.kind === \"multipleOf\") {\n                return true;\n            }\n            else if (ch.kind === \"min\") {\n                if (min === null || ch.value > min)\n                    min = ch.value;\n            }\n            else if (ch.kind === \"max\") {\n                if (max === null || ch.value < max)\n                    max = ch.value;\n            }\n        }\n        return Number.isFinite(min) && Number.isFinite(max);\n    }\n}\nZodNumber.create = (params) => {\n    return new ZodNumber({\n        checks: [],\n        typeName: ZodFirstPartyTypeKind.ZodNumber,\n        coerce: params?.coerce || false,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodBigInt extends ZodType {\n    constructor() {\n        super(...arguments);\n        this.min = this.gte;\n        this.max = this.lte;\n    }\n    _parse(input) {\n        if (this._def.coerce) {\n            try {\n                input.data = BigInt(input.data);\n            }\n            catch {\n                return this._getInvalidInput(input);\n            }\n        }\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.bigint) {\n            return this._getInvalidInput(input);\n        }\n        let ctx = undefined;\n        const status = new ParseStatus();\n        for (const check of this._def.checks) {\n            if (check.kind === \"min\") {\n                const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n                if (tooSmall) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_small,\n                        type: \"bigint\",\n                        minimum: check.value,\n                        inclusive: check.inclusive,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"max\") {\n                const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n                if (tooBig) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_big,\n                        type: \"bigint\",\n                        maximum: check.value,\n                        inclusive: check.inclusive,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"multipleOf\") {\n                if (input.data % check.value !== BigInt(0)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.not_multiple_of,\n                        multipleOf: check.value,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else {\n                util.assertNever(check);\n            }\n        }\n        return { status: status.value, value: input.data };\n    }\n    _getInvalidInput(input) {\n        const ctx = this._getOrReturnCtx(input);\n        addIssueToContext(ctx, {\n            code: ZodIssueCode.invalid_type,\n            expected: ZodParsedType.bigint,\n            received: ctx.parsedType,\n        });\n        return INVALID;\n    }\n    gte(value, message) {\n        return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n    }\n    gt(value, message) {\n        return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n    }\n    lte(value, message) {\n        return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n    }\n    lt(value, message) {\n        return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n    }\n    setLimit(kind, value, inclusive, message) {\n        return new ZodBigInt({\n            ...this._def,\n            checks: [\n                ...this._def.checks,\n                {\n                    kind,\n                    value,\n                    inclusive,\n                    message: errorUtil.toString(message),\n                },\n            ],\n        });\n    }\n    _addCheck(check) {\n        return new ZodBigInt({\n            ...this._def,\n            checks: [...this._def.checks, check],\n        });\n    }\n    positive(message) {\n        return this._addCheck({\n            kind: \"min\",\n            value: BigInt(0),\n            inclusive: false,\n            message: errorUtil.toString(message),\n        });\n    }\n    negative(message) {\n        return this._addCheck({\n            kind: \"max\",\n            value: BigInt(0),\n            inclusive: false,\n            message: errorUtil.toString(message),\n        });\n    }\n    nonpositive(message) {\n        return this._addCheck({\n            kind: \"max\",\n            value: BigInt(0),\n            inclusive: true,\n            message: errorUtil.toString(message),\n        });\n    }\n    nonnegative(message) {\n        return this._addCheck({\n            kind: \"min\",\n            value: BigInt(0),\n            inclusive: true,\n            message: errorUtil.toString(message),\n        });\n    }\n    multipleOf(value, message) {\n        return this._addCheck({\n            kind: \"multipleOf\",\n            value,\n            message: errorUtil.toString(message),\n        });\n    }\n    get minValue() {\n        let min = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"min\") {\n                if (min === null || ch.value > min)\n                    min = ch.value;\n            }\n        }\n        return min;\n    }\n    get maxValue() {\n        let max = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"max\") {\n                if (max === null || ch.value < max)\n                    max = ch.value;\n            }\n        }\n        return max;\n    }\n}\nZodBigInt.create = (params) => {\n    return new ZodBigInt({\n        checks: [],\n        typeName: ZodFirstPartyTypeKind.ZodBigInt,\n        coerce: params?.coerce ?? false,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodBoolean extends ZodType {\n    _parse(input) {\n        if (this._def.coerce) {\n            input.data = Boolean(input.data);\n        }\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.boolean) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.boolean,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        return OK(input.data);\n    }\n}\nZodBoolean.create = (params) => {\n    return new ZodBoolean({\n        typeName: ZodFirstPartyTypeKind.ZodBoolean,\n        coerce: params?.coerce || false,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodDate extends ZodType {\n    _parse(input) {\n        if (this._def.coerce) {\n            input.data = new Date(input.data);\n        }\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.date) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.date,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        if (Number.isNaN(input.data.getTime())) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_date,\n            });\n            return INVALID;\n        }\n        const status = new ParseStatus();\n        let ctx = undefined;\n        for (const check of this._def.checks) {\n            if (check.kind === \"min\") {\n                if (input.data.getTime() < check.value) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_small,\n                        message: check.message,\n                        inclusive: true,\n                        exact: false,\n                        minimum: check.value,\n                        type: \"date\",\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"max\") {\n                if (input.data.getTime() > check.value) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_big,\n                        message: check.message,\n                        inclusive: true,\n                        exact: false,\n                        maximum: check.value,\n                        type: \"date\",\n                    });\n                    status.dirty();\n                }\n            }\n            else {\n                util.assertNever(check);\n            }\n        }\n        return {\n            status: status.value,\n            value: new Date(input.data.getTime()),\n        };\n    }\n    _addCheck(check) {\n        return new ZodDate({\n            ...this._def,\n            checks: [...this._def.checks, check],\n        });\n    }\n    min(minDate, message) {\n        return this._addCheck({\n            kind: \"min\",\n            value: minDate.getTime(),\n            message: errorUtil.toString(message),\n        });\n    }\n    max(maxDate, message) {\n        return this._addCheck({\n            kind: \"max\",\n            value: maxDate.getTime(),\n            message: errorUtil.toString(message),\n        });\n    }\n    get minDate() {\n        let min = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"min\") {\n                if (min === null || ch.value > min)\n                    min = ch.value;\n            }\n        }\n        return min != null ? new Date(min) : null;\n    }\n    get maxDate() {\n        let max = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"max\") {\n                if (max === null || ch.value < max)\n                    max = ch.value;\n            }\n        }\n        return max != null ? new Date(max) : null;\n    }\n}\nZodDate.create = (params) => {\n    return new ZodDate({\n        checks: [],\n        coerce: params?.coerce || false,\n        typeName: ZodFirstPartyTypeKind.ZodDate,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodSymbol extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.symbol) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.symbol,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        return OK(input.data);\n    }\n}\nZodSymbol.create = (params) => {\n    return new ZodSymbol({\n        typeName: ZodFirstPartyTypeKind.ZodSymbol,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodUndefined extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.undefined) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.undefined,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        return OK(input.data);\n    }\n}\nZodUndefined.create = (params) => {\n    return new ZodUndefined({\n        typeName: ZodFirstPartyTypeKind.ZodUndefined,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodNull extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.null) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.null,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        return OK(input.data);\n    }\n}\nZodNull.create = (params) => {\n    return new ZodNull({\n        typeName: ZodFirstPartyTypeKind.ZodNull,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodAny extends ZodType {\n    constructor() {\n        super(...arguments);\n        // to prevent instances of other classes from extending ZodAny. this causes issues with catchall in ZodObject.\n        this._any = true;\n    }\n    _parse(input) {\n        return OK(input.data);\n    }\n}\nZodAny.create = (params) => {\n    return new ZodAny({\n        typeName: ZodFirstPartyTypeKind.ZodAny,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodUnknown extends ZodType {\n    constructor() {\n        super(...arguments);\n        // required\n        this._unknown = true;\n    }\n    _parse(input) {\n        return OK(input.data);\n    }\n}\nZodUnknown.create = (params) => {\n    return new ZodUnknown({\n        typeName: ZodFirstPartyTypeKind.ZodUnknown,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodNever extends ZodType {\n    _parse(input) {\n        const ctx = this._getOrReturnCtx(input);\n        addIssueToContext(ctx, {\n            code: ZodIssueCode.invalid_type,\n            expected: ZodParsedType.never,\n            received: ctx.parsedType,\n        });\n        return INVALID;\n    }\n}\nZodNever.create = (params) => {\n    return new ZodNever({\n        typeName: ZodFirstPartyTypeKind.ZodNever,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodVoid extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.undefined) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.void,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        return OK(input.data);\n    }\n}\nZodVoid.create = (params) => {\n    return new ZodVoid({\n        typeName: ZodFirstPartyTypeKind.ZodVoid,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodArray extends ZodType {\n    _parse(input) {\n        const { ctx, status } = this._processInputParams(input);\n        const def = this._def;\n        if (ctx.parsedType !== ZodParsedType.array) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.array,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        if (def.exactLength !== null) {\n            const tooBig = ctx.data.length > def.exactLength.value;\n            const tooSmall = ctx.data.length < def.exactLength.value;\n            if (tooBig || tooSmall) {\n                addIssueToContext(ctx, {\n                    code: tooBig ? ZodIssueCode.too_big : ZodIssueCode.too_small,\n                    minimum: (tooSmall ? def.exactLength.value : undefined),\n                    maximum: (tooBig ? def.exactLength.value : undefined),\n                    type: \"array\",\n                    inclusive: true,\n                    exact: true,\n                    message: def.exactLength.message,\n                });\n                status.dirty();\n            }\n        }\n        if (def.minLength !== null) {\n            if (ctx.data.length < def.minLength.value) {\n                addIssueToContext(ctx, {\n                    code: ZodIssueCode.too_small,\n                    minimum: def.minLength.value,\n                    type: \"array\",\n                    inclusive: true,\n                    exact: false,\n                    message: def.minLength.message,\n                });\n                status.dirty();\n            }\n        }\n        if (def.maxLength !== null) {\n            if (ctx.data.length > def.maxLength.value) {\n                addIssueToContext(ctx, {\n                    code: ZodIssueCode.too_big,\n                    maximum: def.maxLength.value,\n                    type: \"array\",\n                    inclusive: true,\n                    exact: false,\n                    message: def.maxLength.message,\n                });\n                status.dirty();\n            }\n        }\n        if (ctx.common.async) {\n            return Promise.all([...ctx.data].map((item, i) => {\n                return def.type._parseAsync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n            })).then((result) => {\n                return ParseStatus.mergeArray(status, result);\n            });\n        }\n        const result = [...ctx.data].map((item, i) => {\n            return def.type._parseSync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n        });\n        return ParseStatus.mergeArray(status, result);\n    }\n    get element() {\n        return this._def.type;\n    }\n    min(minLength, message) {\n        return new ZodArray({\n            ...this._def,\n            minLength: { value: minLength, message: errorUtil.toString(message) },\n        });\n    }\n    max(maxLength, message) {\n        return new ZodArray({\n            ...this._def,\n            maxLength: { value: maxLength, message: errorUtil.toString(message) },\n        });\n    }\n    length(len, message) {\n        return new ZodArray({\n            ...this._def,\n            exactLength: { value: len, message: errorUtil.toString(message) },\n        });\n    }\n    nonempty(message) {\n        return this.min(1, message);\n    }\n}\nZodArray.create = (schema, params) => {\n    return new ZodArray({\n        type: schema,\n        minLength: null,\n        maxLength: null,\n        exactLength: null,\n        typeName: ZodFirstPartyTypeKind.ZodArray,\n        ...processCreateParams(params),\n    });\n};\nfunction deepPartialify(schema) {\n    if (schema instanceof ZodObject) {\n        const newShape = {};\n        for (const key in schema.shape) {\n            const fieldSchema = schema.shape[key];\n            newShape[key] = ZodOptional.create(deepPartialify(fieldSchema));\n        }\n        return new ZodObject({\n            ...schema._def,\n            shape: () => newShape,\n        });\n    }\n    else if (schema instanceof ZodArray) {\n        return new ZodArray({\n            ...schema._def,\n            type: deepPartialify(schema.element),\n        });\n    }\n    else if (schema instanceof ZodOptional) {\n        return ZodOptional.create(deepPartialify(schema.unwrap()));\n    }\n    else if (schema instanceof ZodNullable) {\n        return ZodNullable.create(deepPartialify(schema.unwrap()));\n    }\n    else if (schema instanceof ZodTuple) {\n        return ZodTuple.create(schema.items.map((item) => deepPartialify(item)));\n    }\n    else {\n        return schema;\n    }\n}\nexport class ZodObject extends ZodType {\n    constructor() {\n        super(...arguments);\n        this._cached = null;\n        /**\n         * @deprecated In most cases, this is no longer needed - unknown properties are now silently stripped.\n         * If you want to pass through unknown properties, use `.passthrough()` instead.\n         */\n        this.nonstrict = this.passthrough;\n        // extend<\n        //   Augmentation extends ZodRawShape,\n        //   NewOutput extends util.flatten<{\n        //     [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n        //       ? Augmentation[k][\"_output\"]\n        //       : k extends keyof Output\n        //       ? Output[k]\n        //       : never;\n        //   }>,\n        //   NewInput extends util.flatten<{\n        //     [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n        //       ? Augmentation[k][\"_input\"]\n        //       : k extends keyof Input\n        //       ? Input[k]\n        //       : never;\n        //   }>\n        // >(\n        //   augmentation: Augmentation\n        // ): ZodObject<\n        //   extendShape<T, Augmentation>,\n        //   UnknownKeys,\n        //   Catchall,\n        //   NewOutput,\n        //   NewInput\n        // > {\n        //   return new ZodObject({\n        //     ...this._def,\n        //     shape: () => ({\n        //       ...this._def.shape(),\n        //       ...augmentation,\n        //     }),\n        //   }) as any;\n        // }\n        /**\n         * @deprecated Use `.extend` instead\n         *  */\n        this.augment = this.extend;\n    }\n    _getCached() {\n        if (this._cached !== null)\n            return this._cached;\n        const shape = this._def.shape();\n        const keys = util.objectKeys(shape);\n        this._cached = { shape, keys };\n        return this._cached;\n    }\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.object) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.object,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        const { status, ctx } = this._processInputParams(input);\n        const { shape, keys: shapeKeys } = this._getCached();\n        const extraKeys = [];\n        if (!(this._def.catchall instanceof ZodNever && this._def.unknownKeys === \"strip\")) {\n            for (const key in ctx.data) {\n                if (!shapeKeys.includes(key)) {\n                    extraKeys.push(key);\n                }\n            }\n        }\n        const pairs = [];\n        for (const key of shapeKeys) {\n            const keyValidator = shape[key];\n            const value = ctx.data[key];\n            pairs.push({\n                key: { status: \"valid\", value: key },\n                value: keyValidator._parse(new ParseInputLazyPath(ctx, value, ctx.path, key)),\n                alwaysSet: key in ctx.data,\n            });\n        }\n        if (this._def.catchall instanceof ZodNever) {\n            const unknownKeys = this._def.unknownKeys;\n            if (unknownKeys === \"passthrough\") {\n                for (const key of extraKeys) {\n                    pairs.push({\n                        key: { status: \"valid\", value: key },\n                        value: { status: \"valid\", value: ctx.data[key] },\n                    });\n                }\n            }\n            else if (unknownKeys === \"strict\") {\n                if (extraKeys.length > 0) {\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.unrecognized_keys,\n                        keys: extraKeys,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (unknownKeys === \"strip\") {\n            }\n            else {\n                throw new Error(`Internal ZodObject error: invalid unknownKeys value.`);\n            }\n        }\n        else {\n            // run catchall validation\n            const catchall = this._def.catchall;\n            for (const key of extraKeys) {\n                const value = ctx.data[key];\n                pairs.push({\n                    key: { status: \"valid\", value: key },\n                    value: catchall._parse(new ParseInputLazyPath(ctx, value, ctx.path, key) //, ctx.child(key), value, getParsedType(value)\n                    ),\n                    alwaysSet: key in ctx.data,\n                });\n            }\n        }\n        if (ctx.common.async) {\n            return Promise.resolve()\n                .then(async () => {\n                const syncPairs = [];\n                for (const pair of pairs) {\n                    const key = await pair.key;\n                    const value = await pair.value;\n                    syncPairs.push({\n                        key,\n                        value,\n                        alwaysSet: pair.alwaysSet,\n                    });\n                }\n                return syncPairs;\n            })\n                .then((syncPairs) => {\n                return ParseStatus.mergeObjectSync(status, syncPairs);\n            });\n        }\n        else {\n            return ParseStatus.mergeObjectSync(status, pairs);\n        }\n    }\n    get shape() {\n        return this._def.shape();\n    }\n    strict(message) {\n        errorUtil.errToObj;\n        return new ZodObject({\n            ...this._def,\n            unknownKeys: \"strict\",\n            ...(message !== undefined\n                ? {\n                    errorMap: (issue, ctx) => {\n                        const defaultError = this._def.errorMap?.(issue, ctx).message ?? ctx.defaultError;\n                        if (issue.code === \"unrecognized_keys\")\n                            return {\n                                message: errorUtil.errToObj(message).message ?? defaultError,\n                            };\n                        return {\n                            message: defaultError,\n                        };\n                    },\n                }\n                : {}),\n        });\n    }\n    strip() {\n        return new ZodObject({\n            ...this._def,\n            unknownKeys: \"strip\",\n        });\n    }\n    passthrough() {\n        return new ZodObject({\n            ...this._def,\n            unknownKeys: \"passthrough\",\n        });\n    }\n    // const AugmentFactory =\n    //   <Def extends ZodObjectDef>(def: Def) =>\n    //   <Augmentation extends ZodRawShape>(\n    //     augmentation: Augmentation\n    //   ): ZodObject<\n    //     extendShape<ReturnType<Def[\"shape\"]>, Augmentation>,\n    //     Def[\"unknownKeys\"],\n    //     Def[\"catchall\"]\n    //   > => {\n    //     return new ZodObject({\n    //       ...def,\n    //       shape: () => ({\n    //         ...def.shape(),\n    //         ...augmentation,\n    //       }),\n    //     }) as any;\n    //   };\n    extend(augmentation) {\n        return new ZodObject({\n            ...this._def,\n            shape: () => ({\n                ...this._def.shape(),\n                ...augmentation,\n            }),\n        });\n    }\n    /**\n     * Prior to zod@1.0.12 there was a bug in the\n     * inferred type of merged objects. Please\n     * upgrade if you are experiencing issues.\n     */\n    merge(merging) {\n        const merged = new ZodObject({\n            unknownKeys: merging._def.unknownKeys,\n            catchall: merging._def.catchall,\n            shape: () => ({\n                ...this._def.shape(),\n                ...merging._def.shape(),\n            }),\n            typeName: ZodFirstPartyTypeKind.ZodObject,\n        });\n        return merged;\n    }\n    // merge<\n    //   Incoming extends AnyZodObject,\n    //   Augmentation extends Incoming[\"shape\"],\n    //   NewOutput extends {\n    //     [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n    //       ? Augmentation[k][\"_output\"]\n    //       : k extends keyof Output\n    //       ? Output[k]\n    //       : never;\n    //   },\n    //   NewInput extends {\n    //     [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n    //       ? Augmentation[k][\"_input\"]\n    //       : k extends keyof Input\n    //       ? Input[k]\n    //       : never;\n    //   }\n    // >(\n    //   merging: Incoming\n    // ): ZodObject<\n    //   extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n    //   Incoming[\"_def\"][\"unknownKeys\"],\n    //   Incoming[\"_def\"][\"catchall\"],\n    //   NewOutput,\n    //   NewInput\n    // > {\n    //   const merged: any = new ZodObject({\n    //     unknownKeys: merging._def.unknownKeys,\n    //     catchall: merging._def.catchall,\n    //     shape: () =>\n    //       objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n    //     typeName: ZodFirstPartyTypeKind.ZodObject,\n    //   }) as any;\n    //   return merged;\n    // }\n    setKey(key, schema) {\n        return this.augment({ [key]: schema });\n    }\n    // merge<Incoming extends AnyZodObject>(\n    //   merging: Incoming\n    // ): //ZodObject<T & Incoming[\"_shape\"], UnknownKeys, Catchall> = (merging) => {\n    // ZodObject<\n    //   extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n    //   Incoming[\"_def\"][\"unknownKeys\"],\n    //   Incoming[\"_def\"][\"catchall\"]\n    // > {\n    //   // const mergedShape = objectUtil.mergeShapes(\n    //   //   this._def.shape(),\n    //   //   merging._def.shape()\n    //   // );\n    //   const merged: any = new ZodObject({\n    //     unknownKeys: merging._def.unknownKeys,\n    //     catchall: merging._def.catchall,\n    //     shape: () =>\n    //       objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n    //     typeName: ZodFirstPartyTypeKind.ZodObject,\n    //   }) as any;\n    //   return merged;\n    // }\n    catchall(index) {\n        return new ZodObject({\n            ...this._def,\n            catchall: index,\n        });\n    }\n    pick(mask) {\n        const shape = {};\n        for (const key of util.objectKeys(mask)) {\n            if (mask[key] && this.shape[key]) {\n                shape[key] = this.shape[key];\n            }\n        }\n        return new ZodObject({\n            ...this._def,\n            shape: () => shape,\n        });\n    }\n    omit(mask) {\n        const shape = {};\n        for (const key of util.objectKeys(this.shape)) {\n            if (!mask[key]) {\n                shape[key] = this.shape[key];\n            }\n        }\n        return new ZodObject({\n            ...this._def,\n            shape: () => shape,\n        });\n    }\n    /**\n     * @deprecated\n     */\n    deepPartial() {\n        return deepPartialify(this);\n    }\n    partial(mask) {\n        const newShape = {};\n        for (const key of util.objectKeys(this.shape)) {\n            const fieldSchema = this.shape[key];\n            if (mask && !mask[key]) {\n                newShape[key] = fieldSchema;\n            }\n            else {\n                newShape[key] = fieldSchema.optional();\n            }\n        }\n        return new ZodObject({\n            ...this._def,\n            shape: () => newShape,\n        });\n    }\n    required(mask) {\n        const newShape = {};\n        for (const key of util.objectKeys(this.shape)) {\n            if (mask && !mask[key]) {\n                newShape[key] = this.shape[key];\n            }\n            else {\n                const fieldSchema = this.shape[key];\n                let newField = fieldSchema;\n                while (newField instanceof ZodOptional) {\n                    newField = newField._def.innerType;\n                }\n                newShape[key] = newField;\n            }\n        }\n        return new ZodObject({\n            ...this._def,\n            shape: () => newShape,\n        });\n    }\n    keyof() {\n        return createZodEnum(util.objectKeys(this.shape));\n    }\n}\nZodObject.create = (shape, params) => {\n    return new ZodObject({\n        shape: () => shape,\n        unknownKeys: \"strip\",\n        catchall: ZodNever.create(),\n        typeName: ZodFirstPartyTypeKind.ZodObject,\n        ...processCreateParams(params),\n    });\n};\nZodObject.strictCreate = (shape, params) => {\n    return new ZodObject({\n        shape: () => shape,\n        unknownKeys: \"strict\",\n        catchall: ZodNever.create(),\n        typeName: ZodFirstPartyTypeKind.ZodObject,\n        ...processCreateParams(params),\n    });\n};\nZodObject.lazycreate = (shape, params) => {\n    return new ZodObject({\n        shape,\n        unknownKeys: \"strip\",\n        catchall: ZodNever.create(),\n        typeName: ZodFirstPartyTypeKind.ZodObject,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodUnion extends ZodType {\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        const options = this._def.options;\n        function handleResults(results) {\n            // return first issue-free validation if it exists\n            for (const result of results) {\n                if (result.result.status === \"valid\") {\n                    return result.result;\n                }\n            }\n            for (const result of results) {\n                if (result.result.status === \"dirty\") {\n                    // add issues from dirty option\n                    ctx.common.issues.push(...result.ctx.common.issues);\n                    return result.result;\n                }\n            }\n            // return invalid\n            const unionErrors = results.map((result) => new ZodError(result.ctx.common.issues));\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_union,\n                unionErrors,\n            });\n            return INVALID;\n        }\n        if (ctx.common.async) {\n            return Promise.all(options.map(async (option) => {\n                const childCtx = {\n                    ...ctx,\n                    common: {\n                        ...ctx.common,\n                        issues: [],\n                    },\n                    parent: null,\n                };\n                return {\n                    result: await option._parseAsync({\n                        data: ctx.data,\n                        path: ctx.path,\n                        parent: childCtx,\n                    }),\n                    ctx: childCtx,\n                };\n            })).then(handleResults);\n        }\n        else {\n            let dirty = undefined;\n            const issues = [];\n            for (const option of options) {\n                const childCtx = {\n                    ...ctx,\n                    common: {\n                        ...ctx.common,\n                        issues: [],\n                    },\n                    parent: null,\n                };\n                const result = option._parseSync({\n                    data: ctx.data,\n                    path: ctx.path,\n                    parent: childCtx,\n                });\n                if (result.status === \"valid\") {\n                    return result;\n                }\n                else if (result.status === \"dirty\" && !dirty) {\n                    dirty = { result, ctx: childCtx };\n                }\n                if (childCtx.common.issues.length) {\n                    issues.push(childCtx.common.issues);\n                }\n            }\n            if (dirty) {\n                ctx.common.issues.push(...dirty.ctx.common.issues);\n                return dirty.result;\n            }\n            const unionErrors = issues.map((issues) => new ZodError(issues));\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_union,\n                unionErrors,\n            });\n            return INVALID;\n        }\n    }\n    get options() {\n        return this._def.options;\n    }\n}\nZodUnion.create = (types, params) => {\n    return new ZodUnion({\n        options: types,\n        typeName: ZodFirstPartyTypeKind.ZodUnion,\n        ...processCreateParams(params),\n    });\n};\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\n//////////                                 //////////\n//////////      ZodDiscriminatedUnion      //////////\n//////////                                 //////////\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\nconst getDiscriminator = (type) => {\n    if (type instanceof ZodLazy) {\n        return getDiscriminator(type.schema);\n    }\n    else if (type instanceof ZodEffects) {\n        return getDiscriminator(type.innerType());\n    }\n    else if (type instanceof ZodLiteral) {\n        return [type.value];\n    }\n    else if (type instanceof ZodEnum) {\n        return type.options;\n    }\n    else if (type instanceof ZodNativeEnum) {\n        // eslint-disable-next-line ban/ban\n        return util.objectValues(type.enum);\n    }\n    else if (type instanceof ZodDefault) {\n        return getDiscriminator(type._def.innerType);\n    }\n    else if (type instanceof ZodUndefined) {\n        return [undefined];\n    }\n    else if (type instanceof ZodNull) {\n        return [null];\n    }\n    else if (type instanceof ZodOptional) {\n        return [undefined, ...getDiscriminator(type.unwrap())];\n    }\n    else if (type instanceof ZodNullable) {\n        return [null, ...getDiscriminator(type.unwrap())];\n    }\n    else if (type instanceof ZodBranded) {\n        return getDiscriminator(type.unwrap());\n    }\n    else if (type instanceof ZodReadonly) {\n        return getDiscriminator(type.unwrap());\n    }\n    else if (type instanceof ZodCatch) {\n        return getDiscriminator(type._def.innerType);\n    }\n    else {\n        return [];\n    }\n};\nexport class ZodDiscriminatedUnion extends ZodType {\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== ZodParsedType.object) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.object,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        const discriminator = this.discriminator;\n        const discriminatorValue = ctx.data[discriminator];\n        const option = this.optionsMap.get(discriminatorValue);\n        if (!option) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_union_discriminator,\n                options: Array.from(this.optionsMap.keys()),\n                path: [discriminator],\n            });\n            return INVALID;\n        }\n        if (ctx.common.async) {\n            return option._parseAsync({\n                data: ctx.data,\n                path: ctx.path,\n                parent: ctx,\n            });\n        }\n        else {\n            return option._parseSync({\n                data: ctx.data,\n                path: ctx.path,\n                parent: ctx,\n            });\n        }\n    }\n    get discriminator() {\n        return this._def.discriminator;\n    }\n    get options() {\n        return this._def.options;\n    }\n    get optionsMap() {\n        return this._def.optionsMap;\n    }\n    /**\n     * The constructor of the discriminated union schema. Its behaviour is very similar to that of the normal z.union() constructor.\n     * However, it only allows a union of objects, all of which need to share a discriminator property. This property must\n     * have a different value for each object in the union.\n     * @param discriminator the name of the discriminator property\n     * @param types an array of object schemas\n     * @param params\n     */\n    static create(discriminator, options, params) {\n        // Get all the valid discriminator values\n        const optionsMap = new Map();\n        // try {\n        for (const type of options) {\n            const discriminatorValues = getDiscriminator(type.shape[discriminator]);\n            if (!discriminatorValues.length) {\n                throw new Error(`A discriminator value for key \\`${discriminator}\\` could not be extracted from all schema options`);\n            }\n            for (const value of discriminatorValues) {\n                if (optionsMap.has(value)) {\n                    throw new Error(`Discriminator property ${String(discriminator)} has duplicate value ${String(value)}`);\n                }\n                optionsMap.set(value, type);\n            }\n        }\n        return new ZodDiscriminatedUnion({\n            typeName: ZodFirstPartyTypeKind.ZodDiscriminatedUnion,\n            discriminator,\n            options,\n            optionsMap,\n            ...processCreateParams(params),\n        });\n    }\n}\nfunction mergeValues(a, b) {\n    const aType = getParsedType(a);\n    const bType = getParsedType(b);\n    if (a === b) {\n        return { valid: true, data: a };\n    }\n    else if (aType === ZodParsedType.object && bType === ZodParsedType.object) {\n        const bKeys = util.objectKeys(b);\n        const sharedKeys = util.objectKeys(a).filter((key) => bKeys.indexOf(key) !== -1);\n        const newObj = { ...a, ...b };\n        for (const key of sharedKeys) {\n            const sharedValue = mergeValues(a[key], b[key]);\n            if (!sharedValue.valid) {\n                return { valid: false };\n            }\n            newObj[key] = sharedValue.data;\n        }\n        return { valid: true, data: newObj };\n    }\n    else if (aType === ZodParsedType.array && bType === ZodParsedType.array) {\n        if (a.length !== b.length) {\n            return { valid: false };\n        }\n        const newArray = [];\n        for (let index = 0; index < a.length; index++) {\n            const itemA = a[index];\n            const itemB = b[index];\n            const sharedValue = mergeValues(itemA, itemB);\n            if (!sharedValue.valid) {\n                return { valid: false };\n            }\n            newArray.push(sharedValue.data);\n        }\n        return { valid: true, data: newArray };\n    }\n    else if (aType === ZodParsedType.date && bType === ZodParsedType.date && +a === +b) {\n        return { valid: true, data: a };\n    }\n    else {\n        return { valid: false };\n    }\n}\nexport class ZodIntersection extends ZodType {\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        const handleParsed = (parsedLeft, parsedRight) => {\n            if (isAborted(parsedLeft) || isAborted(parsedRight)) {\n                return INVALID;\n            }\n            const merged = mergeValues(parsedLeft.value, parsedRight.value);\n            if (!merged.valid) {\n                addIssueToContext(ctx, {\n                    code: ZodIssueCode.invalid_intersection_types,\n                });\n                return INVALID;\n            }\n            if (isDirty(parsedLeft) || isDirty(parsedRight)) {\n                status.dirty();\n            }\n            return { status: status.value, value: merged.data };\n        };\n        if (ctx.common.async) {\n            return Promise.all([\n                this._def.left._parseAsync({\n                    data: ctx.data,\n                    path: ctx.path,\n                    parent: ctx,\n                }),\n                this._def.right._parseAsync({\n                    data: ctx.data,\n                    path: ctx.path,\n                    parent: ctx,\n                }),\n            ]).then(([left, right]) => handleParsed(left, right));\n        }\n        else {\n            return handleParsed(this._def.left._parseSync({\n                data: ctx.data,\n                path: ctx.path,\n                parent: ctx,\n            }), this._def.right._parseSync({\n                data: ctx.data,\n                path: ctx.path,\n                parent: ctx,\n            }));\n        }\n    }\n}\nZodIntersection.create = (left, right, params) => {\n    return new ZodIntersection({\n        left: left,\n        right: right,\n        typeName: ZodFirstPartyTypeKind.ZodIntersection,\n        ...processCreateParams(params),\n    });\n};\n// type ZodTupleItems = [ZodTypeAny, ...ZodTypeAny[]];\nexport class ZodTuple extends ZodType {\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== ZodParsedType.array) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.array,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        if (ctx.data.length < this._def.items.length) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.too_small,\n                minimum: this._def.items.length,\n                inclusive: true,\n                exact: false,\n                type: \"array\",\n            });\n            return INVALID;\n        }\n        const rest = this._def.rest;\n        if (!rest && ctx.data.length > this._def.items.length) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.too_big,\n                maximum: this._def.items.length,\n                inclusive: true,\n                exact: false,\n                type: \"array\",\n            });\n            status.dirty();\n        }\n        const items = [...ctx.data]\n            .map((item, itemIndex) => {\n            const schema = this._def.items[itemIndex] || this._def.rest;\n            if (!schema)\n                return null;\n            return schema._parse(new ParseInputLazyPath(ctx, item, ctx.path, itemIndex));\n        })\n            .filter((x) => !!x); // filter nulls\n        if (ctx.common.async) {\n            return Promise.all(items).then((results) => {\n                return ParseStatus.mergeArray(status, results);\n            });\n        }\n        else {\n            return ParseStatus.mergeArray(status, items);\n        }\n    }\n    get items() {\n        return this._def.items;\n    }\n    rest(rest) {\n        return new ZodTuple({\n            ...this._def,\n            rest,\n        });\n    }\n}\nZodTuple.create = (schemas, params) => {\n    if (!Array.isArray(schemas)) {\n        throw new Error(\"You must pass an array of schemas to z.tuple([ ... ])\");\n    }\n    return new ZodTuple({\n        items: schemas,\n        typeName: ZodFirstPartyTypeKind.ZodTuple,\n        rest: null,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodRecord extends ZodType {\n    get keySchema() {\n        return this._def.keyType;\n    }\n    get valueSchema() {\n        return this._def.valueType;\n    }\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== ZodParsedType.object) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.object,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        const pairs = [];\n        const keyType = this._def.keyType;\n        const valueType = this._def.valueType;\n        for (const key in ctx.data) {\n            pairs.push({\n                key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, key)),\n                value: valueType._parse(new ParseInputLazyPath(ctx, ctx.data[key], ctx.path, key)),\n                alwaysSet: key in ctx.data,\n            });\n        }\n        if (ctx.common.async) {\n            return ParseStatus.mergeObjectAsync(status, pairs);\n        }\n        else {\n            return ParseStatus.mergeObjectSync(status, pairs);\n        }\n    }\n    get element() {\n        return this._def.valueType;\n    }\n    static create(first, second, third) {\n        if (second instanceof ZodType) {\n            return new ZodRecord({\n                keyType: first,\n                valueType: second,\n                typeName: ZodFirstPartyTypeKind.ZodRecord,\n                ...processCreateParams(third),\n            });\n        }\n        return new ZodRecord({\n            keyType: ZodString.create(),\n            valueType: first,\n            typeName: ZodFirstPartyTypeKind.ZodRecord,\n            ...processCreateParams(second),\n        });\n    }\n}\nexport class ZodMap extends ZodType {\n    get keySchema() {\n        return this._def.keyType;\n    }\n    get valueSchema() {\n        return this._def.valueType;\n    }\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== ZodParsedType.map) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.map,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        const keyType = this._def.keyType;\n        const valueType = this._def.valueType;\n        const pairs = [...ctx.data.entries()].map(([key, value], index) => {\n            return {\n                key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, [index, \"key\"])),\n                value: valueType._parse(new ParseInputLazyPath(ctx, value, ctx.path, [index, \"value\"])),\n            };\n        });\n        if (ctx.common.async) {\n            const finalMap = new Map();\n            return Promise.resolve().then(async () => {\n                for (const pair of pairs) {\n                    const key = await pair.key;\n                    const value = await pair.value;\n                    if (key.status === \"aborted\" || value.status === \"aborted\") {\n                        return INVALID;\n                    }\n                    if (key.status === \"dirty\" || value.status === \"dirty\") {\n                        status.dirty();\n                    }\n                    finalMap.set(key.value, value.value);\n                }\n                return { status: status.value, value: finalMap };\n            });\n        }\n        else {\n            const finalMap = new Map();\n            for (const pair of pairs) {\n                const key = pair.key;\n                const value = pair.value;\n                if (key.status === \"aborted\" || value.status === \"aborted\") {\n                    return INVALID;\n                }\n                if (key.status === \"dirty\" || value.status === \"dirty\") {\n                    status.dirty();\n                }\n                finalMap.set(key.value, value.value);\n            }\n            return { status: status.value, value: finalMap };\n        }\n    }\n}\nZodMap.create = (keyType, valueType, params) => {\n    return new ZodMap({\n        valueType,\n        keyType,\n        typeName: ZodFirstPartyTypeKind.ZodMap,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodSet extends ZodType {\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== ZodParsedType.set) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.set,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        const def = this._def;\n        if (def.minSize !== null) {\n            if (ctx.data.size < def.minSize.value) {\n                addIssueToContext(ctx, {\n                    code: ZodIssueCode.too_small,\n                    minimum: def.minSize.value,\n                    type: \"set\",\n                    inclusive: true,\n                    exact: false,\n                    message: def.minSize.message,\n                });\n                status.dirty();\n            }\n        }\n        if (def.maxSize !== null) {\n            if (ctx.data.size > def.maxSize.value) {\n                addIssueToContext(ctx, {\n                    code: ZodIssueCode.too_big,\n                    maximum: def.maxSize.value,\n                    type: \"set\",\n                    inclusive: true,\n                    exact: false,\n                    message: def.maxSize.message,\n                });\n                status.dirty();\n            }\n        }\n        const valueType = this._def.valueType;\n        function finalizeSet(elements) {\n            const parsedSet = new Set();\n            for (const element of elements) {\n                if (element.status === \"aborted\")\n                    return INVALID;\n                if (element.status === \"dirty\")\n                    status.dirty();\n                parsedSet.add(element.value);\n            }\n            return { status: status.value, value: parsedSet };\n        }\n        const elements = [...ctx.data.values()].map((item, i) => valueType._parse(new ParseInputLazyPath(ctx, item, ctx.path, i)));\n        if (ctx.common.async) {\n            return Promise.all(elements).then((elements) => finalizeSet(elements));\n        }\n        else {\n            return finalizeSet(elements);\n        }\n    }\n    min(minSize, message) {\n        return new ZodSet({\n            ...this._def,\n            minSize: { value: minSize, message: errorUtil.toString(message) },\n        });\n    }\n    max(maxSize, message) {\n        return new ZodSet({\n            ...this._def,\n            maxSize: { value: maxSize, message: errorUtil.toString(message) },\n        });\n    }\n    size(size, message) {\n        return this.min(size, message).max(size, message);\n    }\n    nonempty(message) {\n        return this.min(1, message);\n    }\n}\nZodSet.create = (valueType, params) => {\n    return new ZodSet({\n        valueType,\n        minSize: null,\n        maxSize: null,\n        typeName: ZodFirstPartyTypeKind.ZodSet,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodFunction extends ZodType {\n    constructor() {\n        super(...arguments);\n        this.validate = this.implement;\n    }\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== ZodParsedType.function) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.function,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        function makeArgsIssue(args, error) {\n            return makeIssue({\n                data: args,\n                path: ctx.path,\n                errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), defaultErrorMap].filter((x) => !!x),\n                issueData: {\n                    code: ZodIssueCode.invalid_arguments,\n                    argumentsError: error,\n                },\n            });\n        }\n        function makeReturnsIssue(returns, error) {\n            return makeIssue({\n                data: returns,\n                path: ctx.path,\n                errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), defaultErrorMap].filter((x) => !!x),\n                issueData: {\n                    code: ZodIssueCode.invalid_return_type,\n                    returnTypeError: error,\n                },\n            });\n        }\n        const params = { errorMap: ctx.common.contextualErrorMap };\n        const fn = ctx.data;\n        if (this._def.returns instanceof ZodPromise) {\n            // Would love a way to avoid disabling this rule, but we need\n            // an alias (using an arrow function was what caused 2651).\n            // eslint-disable-next-line @typescript-eslint/no-this-alias\n            const me = this;\n            return OK(async function (...args) {\n                const error = new ZodError([]);\n                const parsedArgs = await me._def.args.parseAsync(args, params).catch((e) => {\n                    error.addIssue(makeArgsIssue(args, e));\n                    throw error;\n                });\n                const result = await Reflect.apply(fn, this, parsedArgs);\n                const parsedReturns = await me._def.returns._def.type\n                    .parseAsync(result, params)\n                    .catch((e) => {\n                    error.addIssue(makeReturnsIssue(result, e));\n                    throw error;\n                });\n                return parsedReturns;\n            });\n        }\n        else {\n            // Would love a way to avoid disabling this rule, but we need\n            // an alias (using an arrow function was what caused 2651).\n            // eslint-disable-next-line @typescript-eslint/no-this-alias\n            const me = this;\n            return OK(function (...args) {\n                const parsedArgs = me._def.args.safeParse(args, params);\n                if (!parsedArgs.success) {\n                    throw new ZodError([makeArgsIssue(args, parsedArgs.error)]);\n                }\n                const result = Reflect.apply(fn, this, parsedArgs.data);\n                const parsedReturns = me._def.returns.safeParse(result, params);\n                if (!parsedReturns.success) {\n                    throw new ZodError([makeReturnsIssue(result, parsedReturns.error)]);\n                }\n                return parsedReturns.data;\n            });\n        }\n    }\n    parameters() {\n        return this._def.args;\n    }\n    returnType() {\n        return this._def.returns;\n    }\n    args(...items) {\n        return new ZodFunction({\n            ...this._def,\n            args: ZodTuple.create(items).rest(ZodUnknown.create()),\n        });\n    }\n    returns(returnType) {\n        return new ZodFunction({\n            ...this._def,\n            returns: returnType,\n        });\n    }\n    implement(func) {\n        const validatedFunc = this.parse(func);\n        return validatedFunc;\n    }\n    strictImplement(func) {\n        const validatedFunc = this.parse(func);\n        return validatedFunc;\n    }\n    static create(args, returns, params) {\n        return new ZodFunction({\n            args: (args ? args : ZodTuple.create([]).rest(ZodUnknown.create())),\n            returns: returns || ZodUnknown.create(),\n            typeName: ZodFirstPartyTypeKind.ZodFunction,\n            ...processCreateParams(params),\n        });\n    }\n}\nexport class ZodLazy extends ZodType {\n    get schema() {\n        return this._def.getter();\n    }\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        const lazySchema = this._def.getter();\n        return lazySchema._parse({ data: ctx.data, path: ctx.path, parent: ctx });\n    }\n}\nZodLazy.create = (getter, params) => {\n    return new ZodLazy({\n        getter: getter,\n        typeName: ZodFirstPartyTypeKind.ZodLazy,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodLiteral extends ZodType {\n    _parse(input) {\n        if (input.data !== this._def.value) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                received: ctx.data,\n                code: ZodIssueCode.invalid_literal,\n                expected: this._def.value,\n            });\n            return INVALID;\n        }\n        return { status: \"valid\", value: input.data };\n    }\n    get value() {\n        return this._def.value;\n    }\n}\nZodLiteral.create = (value, params) => {\n    return new ZodLiteral({\n        value: value,\n        typeName: ZodFirstPartyTypeKind.ZodLiteral,\n        ...processCreateParams(params),\n    });\n};\nfunction createZodEnum(values, params) {\n    return new ZodEnum({\n        values,\n        typeName: ZodFirstPartyTypeKind.ZodEnum,\n        ...processCreateParams(params),\n    });\n}\nexport class ZodEnum extends ZodType {\n    _parse(input) {\n        if (typeof input.data !== \"string\") {\n            const ctx = this._getOrReturnCtx(input);\n            const expectedValues = this._def.values;\n            addIssueToContext(ctx, {\n                expected: util.joinValues(expectedValues),\n                received: ctx.parsedType,\n                code: ZodIssueCode.invalid_type,\n            });\n            return INVALID;\n        }\n        if (!this._cache) {\n            this._cache = new Set(this._def.values);\n        }\n        if (!this._cache.has(input.data)) {\n            const ctx = this._getOrReturnCtx(input);\n            const expectedValues = this._def.values;\n            addIssueToContext(ctx, {\n                received: ctx.data,\n                code: ZodIssueCode.invalid_enum_value,\n                options: expectedValues,\n            });\n            return INVALID;\n        }\n        return OK(input.data);\n    }\n    get options() {\n        return this._def.values;\n    }\n    get enum() {\n        const enumValues = {};\n        for (const val of this._def.values) {\n            enumValues[val] = val;\n        }\n        return enumValues;\n    }\n    get Values() {\n        const enumValues = {};\n        for (const val of this._def.values) {\n            enumValues[val] = val;\n        }\n        return enumValues;\n    }\n    get Enum() {\n        const enumValues = {};\n        for (const val of this._def.values) {\n            enumValues[val] = val;\n        }\n        return enumValues;\n    }\n    extract(values, newDef = this._def) {\n        return ZodEnum.create(values, {\n            ...this._def,\n            ...newDef,\n        });\n    }\n    exclude(values, newDef = this._def) {\n        return ZodEnum.create(this.options.filter((opt) => !values.includes(opt)), {\n            ...this._def,\n            ...newDef,\n        });\n    }\n}\nZodEnum.create = createZodEnum;\nexport class ZodNativeEnum extends ZodType {\n    _parse(input) {\n        const nativeEnumValues = util.getValidEnumValues(this._def.values);\n        const ctx = this._getOrReturnCtx(input);\n        if (ctx.parsedType !== ZodParsedType.string && ctx.parsedType !== ZodParsedType.number) {\n            const expectedValues = util.objectValues(nativeEnumValues);\n            addIssueToContext(ctx, {\n                expected: util.joinValues(expectedValues),\n                received: ctx.parsedType,\n                code: ZodIssueCode.invalid_type,\n            });\n            return INVALID;\n        }\n        if (!this._cache) {\n            this._cache = new Set(util.getValidEnumValues(this._def.values));\n        }\n        if (!this._cache.has(input.data)) {\n            const expectedValues = util.objectValues(nativeEnumValues);\n            addIssueToContext(ctx, {\n                received: ctx.data,\n                code: ZodIssueCode.invalid_enum_value,\n                options: expectedValues,\n            });\n            return INVALID;\n        }\n        return OK(input.data);\n    }\n    get enum() {\n        return this._def.values;\n    }\n}\nZodNativeEnum.create = (values, params) => {\n    return new ZodNativeEnum({\n        values: values,\n        typeName: ZodFirstPartyTypeKind.ZodNativeEnum,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodPromise extends ZodType {\n    unwrap() {\n        return this._def.type;\n    }\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== ZodParsedType.promise && ctx.common.async === false) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.promise,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        const promisified = ctx.parsedType === ZodParsedType.promise ? ctx.data : Promise.resolve(ctx.data);\n        return OK(promisified.then((data) => {\n            return this._def.type.parseAsync(data, {\n                path: ctx.path,\n                errorMap: ctx.common.contextualErrorMap,\n            });\n        }));\n    }\n}\nZodPromise.create = (schema, params) => {\n    return new ZodPromise({\n        type: schema,\n        typeName: ZodFirstPartyTypeKind.ZodPromise,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodEffects extends ZodType {\n    innerType() {\n        return this._def.schema;\n    }\n    sourceType() {\n        return this._def.schema._def.typeName === ZodFirstPartyTypeKind.ZodEffects\n            ? this._def.schema.sourceType()\n            : this._def.schema;\n    }\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        const effect = this._def.effect || null;\n        const checkCtx = {\n            addIssue: (arg) => {\n                addIssueToContext(ctx, arg);\n                if (arg.fatal) {\n                    status.abort();\n                }\n                else {\n                    status.dirty();\n                }\n            },\n            get path() {\n                return ctx.path;\n            },\n        };\n        checkCtx.addIssue = checkCtx.addIssue.bind(checkCtx);\n        if (effect.type === \"preprocess\") {\n            const processed = effect.transform(ctx.data, checkCtx);\n            if (ctx.common.async) {\n                return Promise.resolve(processed).then(async (processed) => {\n                    if (status.value === \"aborted\")\n                        return INVALID;\n                    const result = await this._def.schema._parseAsync({\n                        data: processed,\n                        path: ctx.path,\n                        parent: ctx,\n                    });\n                    if (result.status === \"aborted\")\n                        return INVALID;\n                    if (result.status === \"dirty\")\n                        return DIRTY(result.value);\n                    if (status.value === \"dirty\")\n                        return DIRTY(result.value);\n                    return result;\n                });\n            }\n            else {\n                if (status.value === \"aborted\")\n                    return INVALID;\n                const result = this._def.schema._parseSync({\n                    data: processed,\n                    path: ctx.path,\n                    parent: ctx,\n                });\n                if (result.status === \"aborted\")\n                    return INVALID;\n                if (result.status === \"dirty\")\n                    return DIRTY(result.value);\n                if (status.value === \"dirty\")\n                    return DIRTY(result.value);\n                return result;\n            }\n        }\n        if (effect.type === \"refinement\") {\n            const executeRefinement = (acc) => {\n                const result = effect.refinement(acc, checkCtx);\n                if (ctx.common.async) {\n                    return Promise.resolve(result);\n                }\n                if (result instanceof Promise) {\n                    throw new Error(\"Async refinement encountered during synchronous parse operation. Use .parseAsync instead.\");\n                }\n                return acc;\n            };\n            if (ctx.common.async === false) {\n                const inner = this._def.schema._parseSync({\n                    data: ctx.data,\n                    path: ctx.path,\n                    parent: ctx,\n                });\n                if (inner.status === \"aborted\")\n                    return INVALID;\n                if (inner.status === \"dirty\")\n                    status.dirty();\n                // return value is ignored\n                executeRefinement(inner.value);\n                return { status: status.value, value: inner.value };\n            }\n            else {\n                return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((inner) => {\n                    if (inner.status === \"aborted\")\n                        return INVALID;\n                    if (inner.status === \"dirty\")\n                        status.dirty();\n                    return executeRefinement(inner.value).then(() => {\n                        return { status: status.value, value: inner.value };\n                    });\n                });\n            }\n        }\n        if (effect.type === \"transform\") {\n            if (ctx.common.async === false) {\n                const base = this._def.schema._parseSync({\n                    data: ctx.data,\n                    path: ctx.path,\n                    parent: ctx,\n                });\n                if (!isValid(base))\n                    return INVALID;\n                const result = effect.transform(base.value, checkCtx);\n                if (result instanceof Promise) {\n                    throw new Error(`Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.`);\n                }\n                return { status: status.value, value: result };\n            }\n            else {\n                return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((base) => {\n                    if (!isValid(base))\n                        return INVALID;\n                    return Promise.resolve(effect.transform(base.value, checkCtx)).then((result) => ({\n                        status: status.value,\n                        value: result,\n                    }));\n                });\n            }\n        }\n        util.assertNever(effect);\n    }\n}\nZodEffects.create = (schema, effect, params) => {\n    return new ZodEffects({\n        schema,\n        typeName: ZodFirstPartyTypeKind.ZodEffects,\n        effect,\n        ...processCreateParams(params),\n    });\n};\nZodEffects.createWithPreprocess = (preprocess, schema, params) => {\n    return new ZodEffects({\n        schema,\n        effect: { type: \"preprocess\", transform: preprocess },\n        typeName: ZodFirstPartyTypeKind.ZodEffects,\n        ...processCreateParams(params),\n    });\n};\nexport { ZodEffects as ZodTransformer };\nexport class ZodOptional extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType === ZodParsedType.undefined) {\n            return OK(undefined);\n        }\n        return this._def.innerType._parse(input);\n    }\n    unwrap() {\n        return this._def.innerType;\n    }\n}\nZodOptional.create = (type, params) => {\n    return new ZodOptional({\n        innerType: type,\n        typeName: ZodFirstPartyTypeKind.ZodOptional,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodNullable extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType === ZodParsedType.null) {\n            return OK(null);\n        }\n        return this._def.innerType._parse(input);\n    }\n    unwrap() {\n        return this._def.innerType;\n    }\n}\nZodNullable.create = (type, params) => {\n    return new ZodNullable({\n        innerType: type,\n        typeName: ZodFirstPartyTypeKind.ZodNullable,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodDefault extends ZodType {\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        let data = ctx.data;\n        if (ctx.parsedType === ZodParsedType.undefined) {\n            data = this._def.defaultValue();\n        }\n        return this._def.innerType._parse({\n            data,\n            path: ctx.path,\n            parent: ctx,\n        });\n    }\n    removeDefault() {\n        return this._def.innerType;\n    }\n}\nZodDefault.create = (type, params) => {\n    return new ZodDefault({\n        innerType: type,\n        typeName: ZodFirstPartyTypeKind.ZodDefault,\n        defaultValue: typeof params.default === \"function\" ? params.default : () => params.default,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodCatch extends ZodType {\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        // newCtx is used to not collect issues from inner types in ctx\n        const newCtx = {\n            ...ctx,\n            common: {\n                ...ctx.common,\n                issues: [],\n            },\n        };\n        const result = this._def.innerType._parse({\n            data: newCtx.data,\n            path: newCtx.path,\n            parent: {\n                ...newCtx,\n            },\n        });\n        if (isAsync(result)) {\n            return result.then((result) => {\n                return {\n                    status: \"valid\",\n                    value: result.status === \"valid\"\n                        ? result.value\n                        : this._def.catchValue({\n                            get error() {\n                                return new ZodError(newCtx.common.issues);\n                            },\n                            input: newCtx.data,\n                        }),\n                };\n            });\n        }\n        else {\n            return {\n                status: \"valid\",\n                value: result.status === \"valid\"\n                    ? result.value\n                    : this._def.catchValue({\n                        get error() {\n                            return new ZodError(newCtx.common.issues);\n                        },\n                        input: newCtx.data,\n                    }),\n            };\n        }\n    }\n    removeCatch() {\n        return this._def.innerType;\n    }\n}\nZodCatch.create = (type, params) => {\n    return new ZodCatch({\n        innerType: type,\n        typeName: ZodFirstPartyTypeKind.ZodCatch,\n        catchValue: typeof params.catch === \"function\" ? params.catch : () => params.catch,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodNaN extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.nan) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.nan,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        return { status: \"valid\", value: input.data };\n    }\n}\nZodNaN.create = (params) => {\n    return new ZodNaN({\n        typeName: ZodFirstPartyTypeKind.ZodNaN,\n        ...processCreateParams(params),\n    });\n};\nexport const BRAND = Symbol(\"zod_brand\");\nexport class ZodBranded extends ZodType {\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        const data = ctx.data;\n        return this._def.type._parse({\n            data,\n            path: ctx.path,\n            parent: ctx,\n        });\n    }\n    unwrap() {\n        return this._def.type;\n    }\n}\nexport class ZodPipeline extends ZodType {\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        if (ctx.common.async) {\n            const handleAsync = async () => {\n                const inResult = await this._def.in._parseAsync({\n                    data: ctx.data,\n                    path: ctx.path,\n                    parent: ctx,\n                });\n                if (inResult.status === \"aborted\")\n                    return INVALID;\n                if (inResult.status === \"dirty\") {\n                    status.dirty();\n                    return DIRTY(inResult.value);\n                }\n                else {\n                    return this._def.out._parseAsync({\n                        data: inResult.value,\n                        path: ctx.path,\n                        parent: ctx,\n                    });\n                }\n            };\n            return handleAsync();\n        }\n        else {\n            const inResult = this._def.in._parseSync({\n                data: ctx.data,\n                path: ctx.path,\n                parent: ctx,\n            });\n            if (inResult.status === \"aborted\")\n                return INVALID;\n            if (inResult.status === \"dirty\") {\n                status.dirty();\n                return {\n                    status: \"dirty\",\n                    value: inResult.value,\n                };\n            }\n            else {\n                return this._def.out._parseSync({\n                    data: inResult.value,\n                    path: ctx.path,\n                    parent: ctx,\n                });\n            }\n        }\n    }\n    static create(a, b) {\n        return new ZodPipeline({\n            in: a,\n            out: b,\n            typeName: ZodFirstPartyTypeKind.ZodPipeline,\n        });\n    }\n}\nexport class ZodReadonly extends ZodType {\n    _parse(input) {\n        const result = this._def.innerType._parse(input);\n        const freeze = (data) => {\n            if (isValid(data)) {\n                data.value = Object.freeze(data.value);\n            }\n            return data;\n        };\n        return isAsync(result) ? result.then((data) => freeze(data)) : freeze(result);\n    }\n    unwrap() {\n        return this._def.innerType;\n    }\n}\nZodReadonly.create = (type, params) => {\n    return new ZodReadonly({\n        innerType: type,\n        typeName: ZodFirstPartyTypeKind.ZodReadonly,\n        ...processCreateParams(params),\n    });\n};\n////////////////////////////////////////\n////////////////////////////////////////\n//////////                    //////////\n//////////      z.custom      //////////\n//////////                    //////////\n////////////////////////////////////////\n////////////////////////////////////////\nfunction cleanParams(params, data) {\n    const p = typeof params === \"function\" ? params(data) : typeof params === \"string\" ? { message: params } : params;\n    const p2 = typeof p === \"string\" ? { message: p } : p;\n    return p2;\n}\nexport function custom(check, _params = {}, \n/**\n * @deprecated\n *\n * Pass `fatal` into the params object instead:\n *\n * ```ts\n * z.string().custom((val) => val.length > 5, { fatal: false })\n * ```\n *\n */\nfatal) {\n    if (check)\n        return ZodAny.create().superRefine((data, ctx) => {\n            const r = check(data);\n            if (r instanceof Promise) {\n                return r.then((r) => {\n                    if (!r) {\n                        const params = cleanParams(_params, data);\n                        const _fatal = params.fatal ?? fatal ?? true;\n                        ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n                    }\n                });\n            }\n            if (!r) {\n                const params = cleanParams(_params, data);\n                const _fatal = params.fatal ?? fatal ?? true;\n                ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n            }\n            return;\n        });\n    return ZodAny.create();\n}\nexport { ZodType as Schema, ZodType as ZodSchema };\nexport const late = {\n    object: ZodObject.lazycreate,\n};\nexport var ZodFirstPartyTypeKind;\n(function (ZodFirstPartyTypeKind) {\n    ZodFirstPartyTypeKind[\"ZodString\"] = \"ZodString\";\n    ZodFirstPartyTypeKind[\"ZodNumber\"] = \"ZodNumber\";\n    ZodFirstPartyTypeKind[\"ZodNaN\"] = \"ZodNaN\";\n    ZodFirstPartyTypeKind[\"ZodBigInt\"] = \"ZodBigInt\";\n    ZodFirstPartyTypeKind[\"ZodBoolean\"] = \"ZodBoolean\";\n    ZodFirstPartyTypeKind[\"ZodDate\"] = \"ZodDate\";\n    ZodFirstPartyTypeKind[\"ZodSymbol\"] = \"ZodSymbol\";\n    ZodFirstPartyTypeKind[\"ZodUndefined\"] = \"ZodUndefined\";\n    ZodFirstPartyTypeKind[\"ZodNull\"] = \"ZodNull\";\n    ZodFirstPartyTypeKind[\"ZodAny\"] = \"ZodAny\";\n    ZodFirstPartyTypeKind[\"ZodUnknown\"] = \"ZodUnknown\";\n    ZodFirstPartyTypeKind[\"ZodNever\"] = \"ZodNever\";\n    ZodFirstPartyTypeKind[\"ZodVoid\"] = \"ZodVoid\";\n    ZodFirstPartyTypeKind[\"ZodArray\"] = \"ZodArray\";\n    ZodFirstPartyTypeKind[\"ZodObject\"] = \"ZodObject\";\n    ZodFirstPartyTypeKind[\"ZodUnion\"] = \"ZodUnion\";\n    ZodFirstPartyTypeKind[\"ZodDiscriminatedUnion\"] = \"ZodDiscriminatedUnion\";\n    ZodFirstPartyTypeKind[\"ZodIntersection\"] = \"ZodIntersection\";\n    ZodFirstPartyTypeKind[\"ZodTuple\"] = \"ZodTuple\";\n    ZodFirstPartyTypeKind[\"ZodRecord\"] = \"ZodRecord\";\n    ZodFirstPartyTypeKind[\"ZodMap\"] = \"ZodMap\";\n    ZodFirstPartyTypeKind[\"ZodSet\"] = \"ZodSet\";\n    ZodFirstPartyTypeKind[\"ZodFunction\"] = \"ZodFunction\";\n    ZodFirstPartyTypeKind[\"ZodLazy\"] = \"ZodLazy\";\n    ZodFirstPartyTypeKind[\"ZodLiteral\"] = \"ZodLiteral\";\n    ZodFirstPartyTypeKind[\"ZodEnum\"] = \"ZodEnum\";\n    ZodFirstPartyTypeKind[\"ZodEffects\"] = \"ZodEffects\";\n    ZodFirstPartyTypeKind[\"ZodNativeEnum\"] = \"ZodNativeEnum\";\n    ZodFirstPartyTypeKind[\"ZodOptional\"] = \"ZodOptional\";\n    ZodFirstPartyTypeKind[\"ZodNullable\"] = \"ZodNullable\";\n    ZodFirstPartyTypeKind[\"ZodDefault\"] = \"ZodDefault\";\n    ZodFirstPartyTypeKind[\"ZodCatch\"] = \"ZodCatch\";\n    ZodFirstPartyTypeKind[\"ZodPromise\"] = \"ZodPromise\";\n    ZodFirstPartyTypeKind[\"ZodBranded\"] = \"ZodBranded\";\n    ZodFirstPartyTypeKind[\"ZodPipeline\"] = \"ZodPipeline\";\n    ZodFirstPartyTypeKind[\"ZodReadonly\"] = \"ZodReadonly\";\n})(ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {}));\n// requires TS 4.4+\nclass Class {\n    constructor(..._) { }\n}\nconst instanceOfType = (\n// const instanceOfType = <T extends new (...args: any[]) => any>(\ncls, params = {\n    message: `Input not instance of ${cls.name}`,\n}) => custom((data) => data instanceof cls, params);\nconst stringType = ZodString.create;\nconst numberType = ZodNumber.create;\nconst nanType = ZodNaN.create;\nconst bigIntType = ZodBigInt.create;\nconst booleanType = ZodBoolean.create;\nconst dateType = ZodDate.create;\nconst symbolType = ZodSymbol.create;\nconst undefinedType = ZodUndefined.create;\nconst nullType = ZodNull.create;\nconst anyType = ZodAny.create;\nconst unknownType = ZodUnknown.create;\nconst neverType = ZodNever.create;\nconst voidType = ZodVoid.create;\nconst arrayType = ZodArray.create;\nconst objectType = ZodObject.create;\nconst strictObjectType = ZodObject.strictCreate;\nconst unionType = ZodUnion.create;\nconst discriminatedUnionType = ZodDiscriminatedUnion.create;\nconst intersectionType = ZodIntersection.create;\nconst tupleType = ZodTuple.create;\nconst recordType = ZodRecord.create;\nconst mapType = ZodMap.create;\nconst setType = ZodSet.create;\nconst functionType = ZodFunction.create;\nconst lazyType = ZodLazy.create;\nconst literalType = ZodLiteral.create;\nconst enumType = ZodEnum.create;\nconst nativeEnumType = ZodNativeEnum.create;\nconst promiseType = ZodPromise.create;\nconst effectsType = ZodEffects.create;\nconst optionalType = ZodOptional.create;\nconst nullableType = ZodNullable.create;\nconst preprocessType = ZodEffects.createWithPreprocess;\nconst pipelineType = ZodPipeline.create;\nconst ostring = () => stringType().optional();\nconst onumber = () => numberType().optional();\nconst oboolean = () => booleanType().optional();\nexport const coerce = {\n    string: ((arg) => ZodString.create({ ...arg, coerce: true })),\n    number: ((arg) => ZodNumber.create({ ...arg, coerce: true })),\n    boolean: ((arg) => ZodBoolean.create({\n        ...arg,\n        coerce: true,\n    })),\n    bigint: ((arg) => ZodBigInt.create({ ...arg, coerce: true })),\n    date: ((arg) => ZodDate.create({ ...arg, coerce: true })),\n};\nexport { anyType as any, arrayType as array, bigIntType as bigint, booleanType as boolean, dateType as date, discriminatedUnionType as discriminatedUnion, effectsType as effect, enumType as enum, functionType as function, instanceOfType as instanceof, intersectionType as intersection, lazyType as lazy, literalType as literal, mapType as map, nanType as nan, nativeEnumType as nativeEnum, neverType as never, nullType as null, nullableType as nullable, numberType as number, objectType as object, oboolean, onumber, optionalType as optional, ostring, pipelineType as pipeline, preprocessType as preprocess, promiseType as promise, recordType as record, setType as set, strictObjectType as strictObject, stringType as string, symbolType as symbol, effectsType as transformer, tupleType as tuple, undefinedType as undefined, unionType as union, unknownType as unknown, voidType as void, };\nexport const NEVER = INVALID;\n", "import path from \"path\";\nimport { chalkStderr } from \"chalk\";\nimport esbuild from \"esbuild\";\nimport { parse as parseAST } from \"@babel/parser\";\nimport { Identifier, ImportSpecifier } from \"@babel/types\";\nimport * as Sentry from \"@sentry/node\";\nimport { Filesystem, consistentPathSort } from \"./fs.js\";\nimport { Context } from \"./context.js\";\nimport { logVerbose, logWarning } from \"./log.js\";\nimport { wasmPlugin } from \"./wasm.js\";\nimport {\n  ExternalPackage,\n  computeExternalPackages,\n  createExternalPlugin,\n  findExactVersionAndDependencies,\n} from \"./external.js\";\nimport { innerEsbuild, isEsbuildBuildError } from \"./debugBundle.js\";\nexport { nodeFs, RecordingFs } from \"./fs.js\";\nexport type { Filesystem } from \"./fs.js\";\n\nexport const actionsDir = \"actions\";\n\n// Returns a generator of { isDir, path, depth } for all paths\n// within dirPath in some topological order (not including\n// dirPath itself).\nexport function* walkDir(\n  fs: Filesystem,\n  dirPath: string,\n  shouldSkipDir?: (dirPath: string) => boolean,\n  depth?: number,\n): Generator<{ isDir: boolean; path: string; depth: number }, void, void> {\n  depth = depth ?? 0;\n  for (const dirEntry of fs.listDir(dirPath).sort(consistentPathSort)) {\n    const childPath = path.join(dirPath, dirEntry.name);\n    if (dirEntry.isDirectory()) {\n      if (shouldSkipDir && shouldSkipDir(childPath)) {\n        continue;\n      }\n      yield { isDir: true, path: childPath, depth };\n      yield* walkDir(fs, childPath, shouldSkipDir, depth + 1);\n    } else if (dirEntry.isFile()) {\n      yield { isDir: false, path: childPath, depth };\n    }\n  }\n}\n\n// Convex specific module environment.\ntype ModuleEnvironment = \"node\" | \"isolate\";\n\nexport interface Bundle {\n  path: string;\n  source: string;\n  sourceMap?: string | undefined;\n  environment: ModuleEnvironment;\n}\n\nexport interface BundleHash {\n  path: string;\n  hash: string;\n  environment: ModuleEnvironment;\n}\n\ntype EsBuildResult = esbuild.BuildResult & {\n  outputFiles: esbuild.OutputFile[];\n  // Set of referenced external modules.\n  externalModuleNames: Set<string>;\n  // Set of bundled modules.\n  bundledModuleNames: Set<string>;\n};\n\nasync function doEsbuild({\n  ctx,\n  dir,\n  entryPoints,\n  generateSourceMaps,\n  platform,\n  chunksFolder,\n  externalPackages,\n  extraConditions,\n  includeSourcesContent,\n  splitting,\n}: {\n  ctx: Context;\n  dir: string;\n  entryPoints: string[];\n  generateSourceMaps: boolean;\n  platform: esbuild.Platform;\n  chunksFolder: string;\n  externalPackages: Map<string, ExternalPackage>;\n  extraConditions: string[];\n  includeSourcesContent: boolean;\n  splitting?: boolean | undefined;\n}): Promise<EsBuildResult> {\n  const external = createExternalPlugin(ctx, externalPackages);\n  try {\n    const result = await innerEsbuild({\n      entryPoints,\n      platform,\n      generateSourceMaps,\n      chunksFolder,\n      extraConditions,\n      dir,\n      // The wasmPlugin should be last so it doesn't run on external modules.\n      plugins: [external.plugin, wasmPlugin],\n      includeSourcesContent,\n      splitting,\n    });\n\n    for (const [relPath, input] of Object.entries(result.metafile!.inputs)) {\n      // TODO: esbuild outputs paths prefixed with \"(disabled)\"\" when bundling our internal\n      // udf-runtime package. The files do actually exist locally, though.\n      if (\n        relPath.indexOf(\"(disabled):\") !== -1 ||\n        relPath.startsWith(\"wasm-binary:\") ||\n        relPath.startsWith(\"wasm-stub:\")\n      ) {\n        continue;\n      }\n      const absPath = path.resolve(relPath);\n      const st = ctx.fs.stat(absPath);\n      if (st.size !== input.bytes) {\n        logWarning(\n          `Bundled file ${absPath} changed right after esbuild invocation`,\n        );\n        // Consider this a transient error so we'll try again and hopefully\n        // no files change right after esbuild next time.\n        return await ctx.crash({\n          exitCode: 1,\n          errorType: \"transient\",\n          printedMessage: null,\n        });\n      }\n      ctx.fs.registerPath(absPath, st);\n    }\n    return {\n      ...result,\n      externalModuleNames: external.externalModuleNames,\n      bundledModuleNames: external.bundledModuleNames,\n    };\n  } catch (e: unknown) {\n    // esbuild sometimes throws a build error instead of returning a result\n    // containing an array of errors. Syntax errors are one of these cases.\n    let recommendUseNode = false;\n    if (isEsbuildBuildError(e)) {\n      for (const error of e.errors) {\n        if (error.location) {\n          const absPath = path.resolve(error.location.file);\n          const st = ctx.fs.stat(absPath);\n          ctx.fs.registerPath(absPath, st);\n        }\n        if (\n          platform !== \"node\" &&\n          !recommendUseNode &&\n          error.notes.some((note) =>\n            note.text.includes(\"Are you trying to bundle for node?\"),\n          )\n        ) {\n          recommendUseNode = true;\n        }\n      }\n    }\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"invalid filesystem data\",\n      // We don't print any error because esbuild already printed\n      // all the relevant information.\n      printedMessage: recommendUseNode\n        ? `\\nIt looks like you are using Node APIs from a file without the \"use node\" directive.\\n` +\n          `Split out actions using Node.js APIs like this into a new file only containing actions that uses \"use node\" ` +\n          `so these actions will run in a Node.js environment.\\n` +\n          `For more information see https://docs.convex.dev/functions/runtimes#nodejs-runtime\\n`\n        : null,\n    });\n  }\n}\n\nexport async function bundle({\n  ctx,\n  dir,\n  entryPoints,\n  generateSourceMaps,\n  platform,\n  chunksFolder = \"_deps\",\n  externalPackagesAllowList = [],\n  extraConditions = [],\n  includeSourcesContent = false,\n  splitting,\n}: {\n  ctx: Context;\n  dir: string;\n  entryPoints: string[];\n  generateSourceMaps: boolean;\n  platform: esbuild.Platform;\n  chunksFolder?: string;\n  externalPackagesAllowList?: string[];\n  extraConditions?: string[];\n  includeSourcesContent?: boolean;\n  splitting?: boolean;\n}): Promise<{\n  modules: Bundle[];\n  externalDependencies: Map<string, string>;\n  bundledModuleNames: Set<string>;\n}> {\n  const availableExternalPackages = await computeExternalPackages(\n    ctx,\n    externalPackagesAllowList,\n  );\n  const result = await doEsbuild({\n    ctx,\n    dir,\n    entryPoints,\n    generateSourceMaps,\n    platform,\n    chunksFolder,\n    externalPackages: availableExternalPackages,\n    extraConditions,\n    includeSourcesContent,\n    splitting,\n  });\n  // Some ESBuild errors won't show up here, instead crashing in doEsbuild().\n  if (result.errors.length) {\n    const errorMessage = result.errors\n      .map((e) => `esbuild error: ${e.text}`)\n      .join(\"\\n\");\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"invalid filesystem data\",\n      printedMessage: errorMessage,\n    });\n  }\n  for (const warning of result.warnings) {\n    logWarning(chalkStderr.yellow(`esbuild warning: ${warning.text}`));\n  }\n  const sourceMaps = new Map();\n  const modules: Bundle[] = [];\n  const environment = platform === \"node\" ? \"node\" : \"isolate\";\n  for (const outputFile of result.outputFiles) {\n    const relPath = path.relative(path.normalize(\"out\"), outputFile.path);\n    if (path.extname(relPath) === \".map\") {\n      sourceMaps.set(relPath, outputFile.text);\n      continue;\n    }\n    const posixRelPath = relPath.split(path.sep).join(path.posix.sep);\n    modules.push({ path: posixRelPath, source: outputFile.text, environment });\n  }\n  for (const module of modules) {\n    const sourceMapPath = module.path + \".map\";\n    const sourceMap = sourceMaps.get(sourceMapPath);\n    if (sourceMap) {\n      module.sourceMap = sourceMap;\n    }\n  }\n\n  return {\n    modules,\n    externalDependencies: await externalPackageVersions(\n      ctx,\n      availableExternalPackages,\n      result.externalModuleNames,\n    ),\n    bundledModuleNames: result.bundledModuleNames,\n  };\n}\n\n// We could return the full list of availableExternalPackages, but this would be\n// installing more packages that we need. Instead, we collect all external\n// dependencies we found during bundling the /convex function, as well as their\n// respective peer and optional dependencies.\nasync function externalPackageVersions(\n  ctx: Context,\n  availableExternalPackages: Map<string, ExternalPackage>,\n  referencedPackages: Set<string>,\n): Promise<Map<string, string>> {\n  const versions = new Map<string, string>();\n  const referencedPackagesQueue = Array.from(referencedPackages.keys());\n\n  for (let i = 0; i < referencedPackagesQueue.length; i++) {\n    const moduleName = referencedPackagesQueue[i];\n    // This assertion is safe because referencedPackages can only contain\n    // packages in availableExternalPackages.\n    const modulePath = availableExternalPackages.get(moduleName)!.path;\n    // Since we don't support lock files and different install commands yet, we\n    // pick up the exact version installed on the local filesystem.\n    const { version, peerAndOptionalDependencies } =\n      await findExactVersionAndDependencies(ctx, moduleName, modulePath);\n    versions.set(moduleName, version);\n\n    for (const dependency of peerAndOptionalDependencies) {\n      if (\n        availableExternalPackages.has(dependency) &&\n        !referencedPackages.has(dependency)\n      ) {\n        referencedPackagesQueue.push(dependency);\n        referencedPackages.add(dependency);\n      }\n    }\n  }\n\n  return versions;\n}\n\nexport async function bundleSchema(\n  ctx: Context,\n  dir: string,\n  extraConditions: string[],\n) {\n  let target = path.resolve(dir, \"schema.ts\");\n  if (!ctx.fs.exists(target)) {\n    target = path.resolve(dir, \"schema.js\");\n  }\n  const result = await bundle({\n    ctx,\n    dir,\n    entryPoints: [target],\n    generateSourceMaps: true,\n    platform: \"browser\",\n    extraConditions,\n  });\n  return result.modules;\n}\n\nexport async function bundleAuthConfig(ctx: Context, dir: string) {\n  const authConfigPath = path.resolve(dir, \"auth.config.js\");\n  const authConfigTsPath = path.resolve(dir, \"auth.config.ts\");\n  if (ctx.fs.exists(authConfigPath) && ctx.fs.exists(authConfigTsPath)) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"invalid filesystem data\",\n      printedMessage: `Found both ${authConfigPath} and ${authConfigTsPath}, choose one.`,\n    });\n  }\n  const chosenPath = ctx.fs.exists(authConfigTsPath)\n    ? authConfigTsPath\n    : authConfigPath;\n  if (!ctx.fs.exists(chosenPath)) {\n    logVerbose(\n      chalkStderr.yellow(\n        `Found no auth config file at ${authConfigTsPath} or ${authConfigPath} so there are no configured auth providers`,\n      ),\n    );\n    return [];\n  }\n  logVerbose(chalkStderr.yellow(`Bundling auth config found at ${chosenPath}`));\n  const result = await bundle({\n    ctx,\n    dir,\n    entryPoints: [chosenPath],\n    generateSourceMaps: true,\n    platform: \"browser\",\n    // The auth config must be one module\n    splitting: false,\n  });\n  return result.modules;\n}\n\nexport async function doesImportConvexHttpRouter(source: string) {\n  try {\n    const ast = parseAST(source, {\n      sourceType: \"module\",\n      plugins: [\"typescript\"],\n    });\n    return ast.program.body.some((node) => {\n      if (node.type !== \"ImportDeclaration\") return false;\n      return node.specifiers.some((s) => {\n        const specifier = s as ImportSpecifier;\n        const imported = specifier.imported as Identifier;\n        return imported.name === \"httpRouter\";\n      });\n    });\n  } catch {\n    return (\n      source.match(\n        /import\\s*\\{\\s*httpRouter.*\\}\\s*from\\s*\"\\s*convex\\/server\\s*\"/,\n      ) !== null\n    );\n  }\n}\n\nconst ENTRY_POINT_EXTENSIONS = [\n  // ESBuild js loader\n  \".js\",\n  \".mjs\",\n  \".cjs\",\n  // ESBuild ts loader\n  \".ts\",\n  \".tsx\",\n  \".mts\",\n  \".cts\",\n  // ESBuild jsx loader\n  \".jsx\",\n  // ESBuild supports css, text, json, and more but these file types are not\n  // allowed to define entry points.\n];\n\nexport async function entryPoints(\n  ctx: Context,\n  dir: string,\n): Promise<string[]> {\n  const entryPoints = [];\n\n  // Don't deploy directories in convex/ that define components\n  // as this leads to double-deploying.\n  const looksLikeNestedComponent = (dirPath: string): boolean => {\n    const config = path.join(dirPath, \"convex.config.ts\");\n    const isComponentDefinition = ctx.fs.exists(config);\n    if (isComponentDefinition) {\n      logVerbose(chalkStderr.yellow(`Skipping component directory ${dirPath}`));\n    }\n    return isComponentDefinition;\n  };\n\n  for (const { isDir, path: fpath, depth } of walkDir(\n    ctx.fs,\n    dir,\n    looksLikeNestedComponent,\n  )) {\n    if (isDir) {\n      continue;\n    }\n    const relPath = path.relative(dir, fpath);\n    const parsedPath = path.parse(fpath);\n    const base = parsedPath.base;\n    const extension = parsedPath.ext.toLowerCase();\n\n    if (relPath.startsWith(\"_deps\" + path.sep)) {\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"invalid filesystem data\",\n        printedMessage: `The path \"${fpath}\" is within the \"_deps\" directory, which is reserved for dependencies. Please move your code to another directory.`,\n      });\n    }\n\n    if (depth === 0 && base.toLowerCase().startsWith(\"https.\")) {\n      const source = ctx.fs.readUtf8File(fpath);\n      if (await doesImportConvexHttpRouter(source))\n        logWarning(\n          chalkStderr.yellow(\n            `Found ${fpath}. HTTP action routes will not be imported from this file. Did you mean to include http${extension}?`,\n          ),\n        );\n      Sentry.captureMessage(\n        `User code top level directory contains file ${base} which imports httpRouter.`,\n        \"warning\",\n      );\n    }\n\n    // This should match isEntryPoint in the convex eslint plugin.\n    if (!ENTRY_POINT_EXTENSIONS.some((ext) => relPath.endsWith(ext))) {\n      logVerbose(chalkStderr.yellow(`Skipping non-JS file ${fpath}`));\n    } else if (relPath.startsWith(\"_generated\" + path.sep)) {\n      logVerbose(chalkStderr.yellow(`Skipping ${fpath}`));\n    } else if (base.startsWith(\".\")) {\n      logVerbose(chalkStderr.yellow(`Skipping dotfile ${fpath}`));\n    } else if (base.startsWith(\"#\")) {\n      logVerbose(chalkStderr.yellow(`Skipping likely emacs tempfile ${fpath}`));\n    } else if (base === \"schema.ts\" || base === \"schema.js\") {\n      logVerbose(chalkStderr.yellow(`Skipping ${fpath}`));\n    } else if ((base.match(/\\./g) || []).length > 1) {\n      // `auth.config.ts` and `convex.config.ts` are important not to bundle.\n      // `*.test.ts` `*.spec.ts` are common in developer code.\n      logVerbose(\n        chalkStderr.yellow(`Skipping ${fpath} that contains multiple dots`),\n      );\n    } else if (relPath.includes(\" \")) {\n      logVerbose(\n        chalkStderr.yellow(`Skipping ${relPath} because it contains a space`),\n      );\n    } else {\n      logVerbose(chalkStderr.green(`Preparing ${fpath}`));\n      entryPoints.push(fpath);\n    }\n  }\n\n  // If using TypeScript, require that at least one line starts with `export` or `import`,\n  // a TypeScript requirement. This prevents confusing type errors from empty .ts files.\n  const nonEmptyEntryPoints = entryPoints.filter((fpath) => {\n    // This check only makes sense for TypeScript files\n    if (!fpath.endsWith(\".ts\") && !fpath.endsWith(\".tsx\")) {\n      return true;\n    }\n    const contents = ctx.fs.readUtf8File(fpath);\n    if (/^\\s{0,100}(import|export)/m.test(contents)) {\n      return true;\n    }\n    logVerbose(\n      chalkStderr.yellow(\n        `Skipping ${fpath} because it has no export or import to make it a valid TypeScript module`,\n      ),\n    );\n  });\n\n  return nonEmptyEntryPoints;\n}\n\n// A fallback regex in case we fail to parse the AST.\nexport const useNodeDirectiveRegex = /^\\s*(\"|')use node(\"|');?\\s*$/;\n\nfunction hasUseNodeDirective(ctx: Context, fpath: string): boolean {\n  // Do a quick check for the exact string. If it doesn't exist, don't\n  // bother parsing.\n  const source = ctx.fs.readUtf8File(fpath);\n  if (source.indexOf(\"use node\") === -1) {\n    return false;\n  }\n\n  // We parse the AST here to extract the \"use node\" declaration. This is more\n  // robust than doing a regex. We only use regex as a fallback.\n  try {\n    const ast = parseAST(source, {\n      // parse in strict mode and allow module declarations\n      sourceType: \"module\",\n\n      // esbuild supports jsx and typescript by default. Allow the same plugins\n      // here too.\n      plugins: [\"jsx\", \"typescript\"],\n    });\n    return ast.program.directives\n      .map((d) => d.value.value)\n      .includes(\"use node\");\n  } catch (error: any) {\n    // Given that we have failed to parse, we are most likely going to fail in\n    // the esbuild step, which seem to return better formatted error messages.\n    // We don't throw here and fallback to regex.\n    let lineMatches = false;\n    for (const line of source.split(\"\\n\")) {\n      if (line.match(useNodeDirectiveRegex)) {\n        lineMatches = true;\n        break;\n      }\n    }\n\n    // Log that we failed to parse in verbose node if we need this for debugging.\n    logVerbose(\n      `Failed to parse ${fpath}. Use node is set to ${lineMatches} based on regex. Parse error: ${error.toString()}.`,\n    );\n\n    return lineMatches;\n  }\n}\n\nexport function mustBeIsolate(relPath: string): boolean {\n  // Check if the path without extension matches any of the static paths.\n  return [\"http\", \"crons\", \"schema\", \"auth.config\"].includes(\n    relPath.replace(/\\.[^/.]+$/, \"\"),\n  );\n}\n\nasync function determineEnvironment(\n  ctx: Context,\n  dir: string,\n  fpath: string,\n): Promise<ModuleEnvironment> {\n  const relPath = path.relative(dir, fpath);\n\n  const useNodeDirectiveFound = hasUseNodeDirective(ctx, fpath);\n  if (useNodeDirectiveFound) {\n    if (mustBeIsolate(relPath)) {\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"invalid filesystem data\",\n        printedMessage: `\"use node\" directive is not allowed for ${relPath}.`,\n      });\n    }\n    return \"node\";\n  }\n\n  const actionsPrefix = actionsDir + path.sep;\n  if (relPath.startsWith(actionsPrefix)) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"invalid filesystem data\",\n      printedMessage: `${relPath} is in /actions subfolder but has no \"use node\"; directive. You can now define actions in any folder and indicate they should run in node by adding \"use node\" directive. /actions is a deprecated way to choose Node.js environment, and we require \"use node\" for all files within that folder to avoid unexpected errors during the migration. See https://docs.convex.dev/functions/actions for more details`,\n    });\n  }\n\n  return \"isolate\";\n}\n\nexport async function entryPointsByEnvironment(ctx: Context, dir: string) {\n  const isolate = [];\n  const node = [];\n  for (const entryPoint of await entryPoints(ctx, dir)) {\n    const environment = await determineEnvironment(ctx, dir, entryPoint);\n    if (environment === \"node\") {\n      node.push(entryPoint);\n    } else {\n      isolate.push(entryPoint);\n    }\n  }\n\n  return { isolate, node };\n}\n", "import { PluginBuild } from \"esbuild\";\nimport path from \"path\";\n// TODO wasm contents aren't watched\n// eslint-disable-next-line no-restricted-imports\nimport fs from \"fs\";\n\nexport const wasmPlugin = {\n  name: \"convex-wasm\",\n  setup(build: PluginBuild) {\n    // Resolve \".wasm\" files to a path with a namespace\n    build.onResolve({ filter: /\\.wasm$/ }, (args) => {\n      // If this is the import inside the stub module, import the\n      // binary itself. Put the path in the \"wasm-binary\" namespace\n      // to tell our binary load callback to load the binary file.\n      if (args.namespace === \"wasm-stub\") {\n        return {\n          path: args.path,\n          namespace: \"wasm-binary\",\n        };\n      }\n\n      // Otherwise, generate the JavaScript stub module for this\n      // \".wasm\" file. Put it in the \"wasm-stub\" namespace to tell\n      // our stub load callback to fill it with JavaScript.\n      //\n      // Resolve relative paths to absolute paths here since this\n      // resolve callback is given \"resolveDir\", the directory to\n      // resolve imports against.\n      if (args.resolveDir === \"\") {\n        return; // Ignore unresolvable paths\n      }\n      return {\n        path: path.isAbsolute(args.path)\n          ? args.path\n          : path.join(args.resolveDir, args.path),\n        namespace: \"wasm-stub\",\n      };\n    });\n\n    // Virtual modules in the \"wasm-stub\" namespace are filled with\n    // the JavaScript code for compiling the WebAssembly binary. The\n    // binary itself is imported from a second virtual module.\n    build.onLoad({ filter: /.*/, namespace: \"wasm-stub\" }, async (args) => ({\n      contents: `import wasm from ${JSON.stringify(args.path)}\n          export default new WebAssembly.Module(wasm)`,\n    }));\n\n    // Virtual modules in the \"wasm-binary\" namespace contain the\n    // actual bytes of the WebAssembly file. This uses esbuild's\n    // built-in \"binary\" loader instead of manually embedding the\n    // binary data inside JavaScript code ourselves.\n    build.onLoad({ filter: /.*/, namespace: \"wasm-binary\" }, async (args) => ({\n      contents: await fs.promises.readFile(args.path),\n      loader: \"binary\",\n    }));\n  },\n};\n", "import { PluginBuild } from \"esbuild\";\nimport type { Plugin } from \"esbuild\";\nimport { Context } from \"./context.js\";\nimport path from \"path\";\n\nimport { findUp } from \"find-up\";\nimport { findParentConfigs } from \"../cli/lib/utils/utils.js\";\n\n/**\n * Mimics Node.js node_modules resolution. Ideally we would be able to\n * reuse the logic in esbuild but calling build.resolve() from onResolve()\n * results in infinite recursion. See https://esbuild.github.io/plugins/#resolve\n */\nasync function resolveNodeModule(\n  ctx: Context,\n  moduleDir: string,\n  resolveDir: string,\n): Promise<string | null> {\n  let nodeModulesPath: string | undefined;\n\n  while (\n    (nodeModulesPath = await findUp(\"node_modules\", {\n      type: \"directory\",\n      cwd: resolveDir,\n    }))\n  ) {\n    const maybePath = path.join(nodeModulesPath, moduleDir);\n    if (ctx.fs.exists(maybePath)) {\n      return maybePath;\n    }\n    resolveDir = path.dirname(path.dirname(nodeModulesPath));\n  }\n\n  return null;\n}\n\nfunction getModule(importPath: string): { name: string; dirName: string } {\n  // In case of scoped package\n  if (importPath.startsWith(\"@\")) {\n    const split = importPath.split(\"/\");\n    return {\n      name: `${split[0]}/${split[1]}`,\n      dirName: path.join(split[0], split[1]),\n    };\n  } else {\n    const moduleName = importPath.split(\"/\")[0];\n    return {\n      name: moduleName,\n      dirName: moduleName,\n    };\n  }\n}\n\nexport type ExternalPackage = {\n  path: string;\n};\n\n// Inspired by https://www.npmjs.com/package/esbuild-node-externals.\nexport function createExternalPlugin(\n  ctx: Context,\n  externalPackages: Map<string, ExternalPackage>,\n): {\n  plugin: Plugin;\n  externalModuleNames: Set<string>;\n  bundledModuleNames: Set<string>;\n} {\n  const externalModuleNames = new Set<string>();\n  const bundledModuleNames = new Set<string>();\n  return {\n    plugin: {\n      name: \"convex-node-externals\",\n      setup(build: PluginBuild) {\n        // On every module resolved, we check if the module name should be an external\n        build.onResolve({ namespace: \"file\", filter: /.*/ }, async (args) => {\n          if (args.path.startsWith(\".\")) {\n            // Relative import.\n            return null;\n          }\n\n          const module = getModule(args.path);\n          const externalPackage = externalPackages.get(module.name);\n          if (externalPackage) {\n            const resolved = await resolveNodeModule(\n              ctx,\n              module.dirName,\n              args.resolveDir,\n            );\n            if (resolved && externalPackage.path === resolved) {\n              // Mark as external.\n              externalModuleNames.add(module.name);\n              return { path: args.path, external: true };\n            }\n          }\n\n          bundledModuleNames.add(module.name);\n          return null;\n        });\n      },\n    },\n    externalModuleNames: externalModuleNames,\n    bundledModuleNames: bundledModuleNames,\n  };\n}\n\n// Returns the versions of the packages referenced by the package.json.\nexport async function computeExternalPackages(\n  ctx: Context,\n  externalPackagesAllowList: string[],\n): Promise<Map<string, ExternalPackage>> {\n  if (externalPackagesAllowList.length === 0) {\n    // No external packages in the allow list.\n    return new Map<string, ExternalPackage>();\n  }\n\n  const { parentPackageJson: packageJsonPath } = await findParentConfigs(ctx);\n  const externalPackages = new Map<string, ExternalPackage>();\n  let packageJson: any;\n  try {\n    const packageJsonString = ctx.fs.readUtf8File(packageJsonPath);\n    packageJson = JSON.parse(packageJsonString);\n  } catch (error: any) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"invalid filesystem data\",\n      printedMessage: `Couldn't parse \"${packageJsonPath}\". Make sure it's a valid JSON. Error: ${error}`,\n    });\n  }\n\n  for (const key of [\n    \"dependencies\",\n    \"devDependencies\",\n    \"peerDependencies\",\n    \"optionalDependencies\",\n  ]) {\n    for (const [packageName, packageJsonVersion] of Object.entries(\n      packageJson[key] ?? {},\n    )) {\n      if (externalPackages.has(packageName)) {\n        // Package version and path already found.\n        continue;\n      }\n\n      if (typeof packageJsonVersion !== \"string\") {\n        return await ctx.crash({\n          exitCode: 1,\n          errorType: \"invalid filesystem data\",\n          printedMessage: `Invalid \"${packageJsonPath}\". \"${key}.${packageName}\" version has type ${typeof packageJsonVersion}.`,\n        });\n      }\n\n      if (\n        !shouldMarkExternal(\n          packageName,\n          packageJsonVersion,\n          externalPackagesAllowList,\n        )\n      ) {\n        // Package should be bundled.\n        continue;\n      }\n\n      // Check if the package path is referenced.\n      const packagePath = path.join(\n        path.dirname(packageJsonPath),\n        \"node_modules\",\n        getModule(packageName).dirName,\n      );\n      if (ctx.fs.exists(packagePath)) {\n        externalPackages.set(packageName, {\n          path: packagePath,\n        });\n      }\n    }\n  }\n\n  return externalPackages;\n}\n\nexport function shouldMarkExternal(\n  packageName: string,\n  packageJsonVersion: string,\n  externalPackagesAllowList: string[],\n): boolean {\n  // Always bundle convex.\n  if (packageName === \"convex\") {\n    return false;\n  }\n\n  if (\n    packageJsonVersion.startsWith(\"file:\") ||\n    packageJsonVersion.startsWith(\"git+file://\")\n  ) {\n    // Bundle instead of marking as external.\n    return false;\n  }\n  if (\n    packageJsonVersion.startsWith(\"http://\") ||\n    packageJsonVersion.startsWith(\"https://\") ||\n    packageJsonVersion.startsWith(\"git://\") ||\n    packageJsonVersion.startsWith(\"git+ssh://\") ||\n    packageJsonVersion.startsWith(\"git+http://\") ||\n    packageJsonVersion.startsWith(\"git+https://\")\n  ) {\n    // Installing those might or might not work. There are some corner cases\n    // like http://127.0.0.1/. Lets bundle for time being.\n    return false;\n  }\n\n  return (\n    externalPackagesAllowList.includes(packageName) ||\n    externalPackagesAllowList.includes(\"*\")\n  );\n}\n\nexport async function findExactVersionAndDependencies(\n  ctx: Context,\n  moduleName: string,\n  modulePath: string,\n): Promise<{\n  version: string;\n  peerAndOptionalDependencies: Set<string>;\n}> {\n  const modulePackageJsonPath = path.join(modulePath, \"package.json\");\n  let modulePackageJson: any;\n  try {\n    const packageJsonString = ctx.fs.readUtf8File(modulePackageJsonPath);\n    modulePackageJson = JSON.parse(packageJsonString);\n  } catch {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"invalid filesystem data\",\n      printedMessage: `Missing \"${modulePackageJsonPath}\", which is required for\n      installing external package \"${moduleName}\" configured in convex.json.`,\n    });\n  }\n  if (modulePackageJson[\"version\"] === undefined) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"invalid filesystem data\",\n      printedMessage: `\"${modulePackageJsonPath}\" misses a 'version' field. which is required for\n      installing external package \"${moduleName}\" configured in convex.json.`,\n    });\n  }\n\n  const peerAndOptionalDependencies = new Set<string>();\n  for (const key of [\"peerDependencies\", \"optionalDependencies\"]) {\n    for (const [packageName, packageJsonVersion] of Object.entries(\n      modulePackageJson[key] ?? {},\n    )) {\n      if (typeof packageJsonVersion !== \"string\") {\n        return await ctx.crash({\n          exitCode: 1,\n          errorType: \"invalid filesystem data\",\n          printedMessage: `Invalid \"${modulePackageJsonPath}\". \"${key}.${packageName}\" version has type ${typeof packageJsonVersion}.`,\n        });\n      }\n      peerAndOptionalDependencies.add(packageName);\n    }\n  }\n\n  return {\n    version: modulePackageJson[\"version\"],\n    peerAndOptionalDependencies: peerAndOptionalDependencies,\n  };\n}\n", "import path from 'node:path';\nimport fs from 'node:fs';\nimport {locatePath, locatePathSync} from 'locate-path';\nimport {toPath} from 'unicorn-magic';\n\nexport const findUpStop = Symbol('findUpStop');\n\nexport async function findUpMultiple(name, options = {}) {\n\tlet directory = path.resolve(toPath(options.cwd) ?? '');\n\tconst {root} = path.parse(directory);\n\tconst stopAt = path.resolve(directory, toPath(options.stopAt) ?? root);\n\tconst limit = options.limit ?? Number.POSITIVE_INFINITY;\n\tconst paths = [name].flat();\n\n\tconst runMatcher = async locateOptions => {\n\t\tif (typeof name !== 'function') {\n\t\t\treturn locatePath(paths, locateOptions);\n\t\t}\n\n\t\tconst foundPath = await name(locateOptions.cwd);\n\t\tif (typeof foundPath === 'string') {\n\t\t\treturn locatePath([foundPath], locateOptions);\n\t\t}\n\n\t\treturn foundPath;\n\t};\n\n\tconst matches = [];\n\twhile (true) {\n\t\t// eslint-disable-next-line no-await-in-loop\n\t\tconst foundPath = await runMatcher({...options, cwd: directory});\n\n\t\tif (foundPath === findUpStop) {\n\t\t\tbreak;\n\t\t}\n\n\t\tif (foundPath) {\n\t\t\tmatches.push(path.resolve(directory, foundPath));\n\t\t}\n\n\t\tif (directory === stopAt || matches.length >= limit) {\n\t\t\tbreak;\n\t\t}\n\n\t\tdirectory = path.dirname(directory);\n\t}\n\n\treturn matches;\n}\n\nexport function findUpMultipleSync(name, options = {}) {\n\tlet directory = path.resolve(toPath(options.cwd) ?? '');\n\tconst {root} = path.parse(directory);\n\tconst stopAt = path.resolve(directory, toPath(options.stopAt) ?? root);\n\tconst limit = options.limit ?? Number.POSITIVE_INFINITY;\n\tconst paths = [name].flat();\n\n\tconst runMatcher = locateOptions => {\n\t\tif (typeof name !== 'function') {\n\t\t\treturn locatePathSync(paths, locateOptions);\n\t\t}\n\n\t\tconst foundPath = name(locateOptions.cwd);\n\t\tif (typeof foundPath === 'string') {\n\t\t\treturn locatePathSync([foundPath], locateOptions);\n\t\t}\n\n\t\treturn foundPath;\n\t};\n\n\tconst matches = [];\n\twhile (true) {\n\t\tconst foundPath = runMatcher({...options, cwd: directory});\n\n\t\tif (foundPath === findUpStop) {\n\t\t\tbreak;\n\t\t}\n\n\t\tif (foundPath) {\n\t\t\tmatches.push(path.resolve(directory, foundPath));\n\t\t}\n\n\t\tif (directory === stopAt || matches.length >= limit) {\n\t\t\tbreak;\n\t\t}\n\n\t\tdirectory = path.dirname(directory);\n\t}\n\n\treturn matches;\n}\n\nexport async function findUp(name, options = {}) {\n\tconst matches = await findUpMultiple(name, {...options, limit: 1});\n\treturn matches[0];\n}\n\nexport function findUpSync(name, options = {}) {\n\tconst matches = findUpMultipleSync(name, {...options, limit: 1});\n\treturn matches[0];\n}\n\nasync function findDownDepthFirst(directory, paths, maxDepth, locateOptions, currentDepth = 0) {\n\tconst found = await locatePath(paths, {cwd: directory, ...locateOptions});\n\tif (found) {\n\t\treturn path.resolve(directory, found);\n\t}\n\n\tif (currentDepth >= maxDepth) {\n\t\treturn undefined;\n\t}\n\n\ttry {\n\t\tconst entries = await fs.promises.readdir(directory, {withFileTypes: true});\n\t\tfor (const entry of entries) {\n\t\t\tif (entry.isDirectory()) {\n\t\t\t\t// eslint-disable-next-line no-await-in-loop\n\t\t\t\tconst result = await findDownDepthFirst(\n\t\t\t\t\tpath.join(directory, entry.name),\n\t\t\t\t\tpaths,\n\t\t\t\t\tmaxDepth,\n\t\t\t\t\tlocateOptions,\n\t\t\t\t\tcurrentDepth + 1,\n\t\t\t\t);\n\t\t\t\tif (result) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} catch {}\n\n\treturn undefined;\n}\n\nfunction findDownDepthFirstSync(directory, paths, maxDepth, locateOptions, currentDepth = 0) {\n\tconst found = locatePathSync(paths, {cwd: directory, ...locateOptions});\n\tif (found) {\n\t\treturn path.resolve(directory, found);\n\t}\n\n\tif (currentDepth >= maxDepth) {\n\t\treturn undefined;\n\t}\n\n\ttry {\n\t\tconst entries = fs.readdirSync(directory, {withFileTypes: true});\n\t\tfor (const entry of entries) {\n\t\t\tif (entry.isDirectory()) {\n\t\t\t\tconst result = findDownDepthFirstSync(\n\t\t\t\t\tpath.join(directory, entry.name),\n\t\t\t\t\tpaths,\n\t\t\t\t\tmaxDepth,\n\t\t\t\t\tlocateOptions,\n\t\t\t\t\tcurrentDepth + 1,\n\t\t\t\t);\n\t\t\t\tif (result) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} catch {}\n\n\treturn undefined;\n}\n\nfunction prepareFindDownOptions(name, options) {\n\tconst startDirectory = path.resolve(toPath(options.cwd) ?? '');\n\tconst maxDepth = Math.max(0, options.depth ?? 1);\n\tconst paths = [name].flat();\n\tconst {type = 'file', allowSymlinks = true, strategy = 'breadth'} = options;\n\tconst locateOptions = {type, allowSymlinks};\n\treturn {\n\t\tstartDirectory,\n\t\tmaxDepth,\n\t\tpaths,\n\t\tlocateOptions,\n\t\tstrategy,\n\t};\n}\n\nasync function findDownBreadthFirst(startDirectory, paths, maxDepth, locateOptions) {\n\tconst queue = [{directory: startDirectory, depth: 0}];\n\n\twhile (queue.length > 0) {\n\t\tconst {directory, depth} = queue.shift();\n\n\t\t// eslint-disable-next-line no-await-in-loop\n\t\tconst found = await locatePath(paths, {cwd: directory, ...locateOptions});\n\t\tif (found) {\n\t\t\treturn path.resolve(directory, found);\n\t\t}\n\n\t\tif (depth >= maxDepth) {\n\t\t\tcontinue;\n\t\t}\n\n\t\ttry {\n\t\t\t// eslint-disable-next-line no-await-in-loop\n\t\t\tconst entries = await fs.promises.readdir(directory, {withFileTypes: true});\n\t\t\tfor (const entry of entries) {\n\t\t\t\tif (entry.isDirectory()) {\n\t\t\t\t\tqueue.push({directory: path.join(directory, entry.name), depth: depth + 1});\n\t\t\t\t}\n\t\t\t}\n\t\t} catch {}\n\t}\n\n\treturn undefined;\n}\n\nfunction findDownBreadthFirstSync(startDirectory, paths, maxDepth, locateOptions) {\n\tconst queue = [{directory: startDirectory, depth: 0}];\n\n\twhile (queue.length > 0) {\n\t\tconst {directory, depth} = queue.shift();\n\n\t\tconst found = locatePathSync(paths, {cwd: directory, ...locateOptions});\n\t\tif (found) {\n\t\t\treturn path.resolve(directory, found);\n\t\t}\n\n\t\tif (depth >= maxDepth) {\n\t\t\tcontinue;\n\t\t}\n\n\t\ttry {\n\t\t\tconst entries = fs.readdirSync(directory, {withFileTypes: true});\n\t\t\tfor (const entry of entries) {\n\t\t\t\tif (entry.isDirectory()) {\n\t\t\t\t\tqueue.push({directory: path.join(directory, entry.name), depth: depth + 1});\n\t\t\t\t}\n\t\t\t}\n\t\t} catch {}\n\t}\n\n\treturn undefined;\n}\n\nexport async function findDown(name, options = {}) {\n\tconst {startDirectory, maxDepth, paths, locateOptions, strategy} = prepareFindDownOptions(name, options);\n\n\treturn strategy === 'depth'\n\t\t? findDownDepthFirst(startDirectory, paths, maxDepth, locateOptions)\n\t\t: findDownBreadthFirst(startDirectory, paths, maxDepth, locateOptions);\n}\n\nexport function findDownSync(name, options = {}) {\n\tconst {startDirectory, maxDepth, paths, locateOptions, strategy} = prepareFindDownOptions(name, options);\n\n\treturn strategy === 'depth'\n\t\t? findDownDepthFirstSync(startDirectory, paths, maxDepth, locateOptions)\n\t\t: findDownBreadthFirstSync(startDirectory, paths, maxDepth, locateOptions);\n}\n\n", "import process from 'node:process';\nimport path from 'node:path';\nimport fs, {promises as fsPromises} from 'node:fs';\nimport {fileURLToPath} from 'node:url';\nimport pLocate from 'p-locate';\n\nconst typeMappings = {\n\tdirectory: 'isDirectory',\n\tfile: 'isFile',\n};\n\nfunction checkType(type) {\n\tif (type === 'both' || Object.hasOwn(typeMappings, type)) {\n\t\treturn;\n\t}\n\n\tthrow new Error(`Invalid type specified: ${type}`);\n}\n\nconst matchType = (type, stat) => type === 'both' ? (stat.isFile() || stat.isDirectory()) : stat[typeMappings[type]]();\n\nconst toPath = urlOrPath => urlOrPath instanceof URL ? fileURLToPath(urlOrPath) : urlOrPath;\n\nexport async function locatePath(\n\tpaths,\n\t{\n\t\tcwd = process.cwd(),\n\t\ttype = 'file',\n\t\tallowSymlinks = true,\n\t\tconcurrency,\n\t\tpreserveOrder,\n\t} = {},\n) {\n\tcheckType(type);\n\tcwd = toPath(cwd);\n\n\tconst statFunction = allowSymlinks ? fsPromises.stat : fsPromises.lstat;\n\n\treturn pLocate(paths, async path_ => {\n\t\ttry {\n\t\t\tconst stat = await statFunction(path.resolve(cwd, path_));\n\t\t\treturn matchType(type, stat);\n\t\t} catch {\n\t\t\treturn false;\n\t\t}\n\t}, {concurrency, preserveOrder});\n}\n\nexport function locatePathSync(\n\tpaths,\n\t{\n\t\tcwd = process.cwd(),\n\t\ttype = 'file',\n\t\tallowSymlinks = true,\n\t} = {},\n) {\n\tcheckType(type);\n\tcwd = toPath(cwd);\n\n\tconst statFunction = allowSymlinks ? fs.statSync : fs.lstatSync;\n\n\tfor (const path_ of paths) {\n\t\ttry {\n\t\t\tconst stat = statFunction(path.resolve(cwd, path_), {\n\t\t\t\tthrowIfNoEntry: false,\n\t\t\t});\n\n\t\t\tif (!stat) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (matchType(type, stat)) {\n\t\t\t\treturn path_;\n\t\t\t}\n\t\t} catch {}\n\t}\n}\n", "/*\nHow it works:\n`this.#head` is an instance of `Node` which keeps track of its current value and nests another instance of `Node` that keeps the value that comes after it. When a value is provided to `.enqueue()`, the code needs to iterate through `this.#head`, going deeper and deeper to find the last value. However, iterating through every single item is slow. This problem is solved by saving a reference to the last value as `this.#tail` so that it can reference it to add a new value.\n*/\n\nclass Node {\n\tvalue;\n\tnext;\n\n\tconstructor(value) {\n\t\tthis.value = value;\n\t}\n}\n\nexport default class Queue {\n\t#head;\n\t#tail;\n\t#size;\n\n\tconstructor() {\n\t\tthis.clear();\n\t}\n\n\tenqueue(value) {\n\t\tconst node = new Node(value);\n\n\t\tif (this.#head) {\n\t\t\tthis.#tail.next = node;\n\t\t\tthis.#tail = node;\n\t\t} else {\n\t\t\tthis.#head = node;\n\t\t\tthis.#tail = node;\n\t\t}\n\n\t\tthis.#size++;\n\t}\n\n\tdequeue() {\n\t\tconst current = this.#head;\n\t\tif (!current) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#head = this.#head.next;\n\t\tthis.#size--;\n\n\t\t// Clean up tail reference when queue becomes empty\n\t\tif (!this.#head) {\n\t\t\tthis.#tail = undefined;\n\t\t}\n\n\t\treturn current.value;\n\t}\n\n\tpeek() {\n\t\tif (!this.#head) {\n\t\t\treturn;\n\t\t}\n\n\t\treturn this.#head.value;\n\n\t\t// TODO: Node.js 18.\n\t\t// return this.#head?.value;\n\t}\n\n\tclear() {\n\t\tthis.#head = undefined;\n\t\tthis.#tail = undefined;\n\t\tthis.#size = 0;\n\t}\n\n\tget size() {\n\t\treturn this.#size;\n\t}\n\n\t* [Symbol.iterator]() {\n\t\tlet current = this.#head;\n\n\t\twhile (current) {\n\t\t\tyield current.value;\n\t\t\tcurrent = current.next;\n\t\t}\n\t}\n\n\t* drain() {\n\t\twhile (this.#head) {\n\t\t\tyield this.dequeue();\n\t\t}\n\t}\n}\n", "import Queue from 'yocto-queue';\n\nexport default function pLimit(concurrency) {\n\tif (!((Number.isInteger(concurrency) || concurrency === Number.POSITIVE_INFINITY) && concurrency > 0)) {\n\t\tthrow new TypeError('Expected `concurrency` to be a number from 1 and up');\n\t}\n\n\tconst queue = new Queue();\n\tlet activeCount = 0;\n\n\tconst next = () => {\n\t\tactiveCount--;\n\n\t\tif (queue.size > 0) {\n\t\t\tqueue.dequeue()();\n\t\t}\n\t};\n\n\tconst run = async (fn, resolve, args) => {\n\t\tactiveCount++;\n\n\t\tconst result = (async () => fn(...args))();\n\n\t\tresolve(result);\n\n\t\ttry {\n\t\t\tawait result;\n\t\t} catch {}\n\n\t\tnext();\n\t};\n\n\tconst enqueue = (fn, resolve, args) => {\n\t\tqueue.enqueue(run.bind(undefined, fn, resolve, args));\n\n\t\t(async () => {\n\t\t\t// This function needs to wait until the next microtask before comparing\n\t\t\t// `activeCount` to `concurrency`, because `activeCount` is updated asynchronously\n\t\t\t// when the run function is dequeued and called. The comparison in the if-statement\n\t\t\t// needs to happen asynchronously as well to get an up-to-date value for `activeCount`.\n\t\t\tawait Promise.resolve();\n\n\t\t\tif (activeCount < concurrency && queue.size > 0) {\n\t\t\t\tqueue.dequeue()();\n\t\t\t}\n\t\t})();\n\t};\n\n\tconst generator = (fn, ...args) => new Promise(resolve => {\n\t\tenqueue(fn, resolve, args);\n\t});\n\n\tObject.defineProperties(generator, {\n\t\tactiveCount: {\n\t\t\tget: () => activeCount,\n\t\t},\n\t\tpendingCount: {\n\t\t\tget: () => queue.size,\n\t\t},\n\t\tclearQueue: {\n\t\t\tvalue: () => {\n\t\t\t\tqueue.clear();\n\t\t\t},\n\t\t},\n\t});\n\n\treturn generator;\n}\n", "import pLimit from 'p-limit';\n\nclass EndError extends Error {\n\tconstructor(value) {\n\t\tsuper();\n\t\tthis.value = value;\n\t}\n}\n\n// The input can also be a promise, so we await it.\nconst testElement = async (element, tester) => tester(await element);\n\n// The input can also be a promise, so we `Promise.all()` them both.\nconst finder = async element => {\n\tconst values = await Promise.all(element);\n\tif (values[1] === true) {\n\t\tthrow new EndError(values[0]);\n\t}\n\n\treturn false;\n};\n\nexport default async function pLocate(\n\titerable,\n\ttester,\n\t{\n\t\tconcurrency = Number.POSITIVE_INFINITY,\n\t\tpreserveOrder = true,\n\t} = {},\n) {\n\tconst limit = pLimit(concurrency);\n\n\t// Start all the promises concurrently with optional limit.\n\tconst items = [...iterable].map(element => [element, limit(testElement, element, tester)]);\n\n\t// Check the promises either serially or concurrently.\n\tconst checkLimit = pLimit(preserveOrder ? 1 : Number.POSITIVE_INFINITY);\n\n\ttry {\n\t\tawait Promise.all(items.map(element => checkLimit(finder, element)));\n\t} catch (error) {\n\t\tif (error instanceof EndError) {\n\t\t\treturn error.value;\n\t\t}\n\n\t\tthrow error;\n\t}\n}\n", "import {promisify} from 'node:util';\nimport {execFile as execFileCallback, execFileSync as execFileSyncOriginal} from 'node:child_process';\nimport path from 'node:path';\nimport {fileURLToPath} from 'node:url';\n\nconst execFileOriginal = promisify(execFileCallback);\n\nexport function toPath(urlOrPath) {\n\treturn urlOrPath instanceof URL ? fileURLToPath(urlOrPath) : urlOrPath;\n}\n\nexport function rootDirectory(pathInput) {\n\treturn path.parse(toPath(pathInput)).root;\n}\n\nexport function traversePathUp(startPath) {\n\treturn {\n\t\t* [Symbol.iterator]() {\n\t\t\tlet currentPath = path.resolve(toPath(startPath));\n\t\t\tlet previousPath;\n\n\t\t\twhile (previousPath !== currentPath) {\n\t\t\t\tyield currentPath;\n\t\t\t\tpreviousPath = currentPath;\n\t\t\t\tcurrentPath = path.resolve(currentPath, '..');\n\t\t\t}\n\t\t},\n\t};\n}\n\nconst TEN_MEGABYTES_IN_BYTES = 10 * 1024 * 1024;\n\nexport async function execFile(file, arguments_, options = {}) {\n\treturn execFileOriginal(file, arguments_, {\n\t\tmaxBuffer: TEN_MEGABYTES_IN_BYTES,\n\t\t...options,\n\t});\n}\n\nexport function execFileSync(file, arguments_ = [], options = {}) {\n\treturn execFileSyncOriginal(file, arguments_, {\n\t\tmaxBuffer: TEN_MEGABYTES_IN_BYTES,\n\t\tencoding: 'utf8',\n\t\tstdio: 'pipe',\n\t\t...options,\n\t});\n}\n\nexport * from './default.js';\n", "import path from \"path\";\nimport esbuild, { BuildFailure, LogLevel, Plugin } from \"esbuild\";\nimport { Context } from \"./context.js\";\nimport {\n  logError,\n  changeSpinner,\n  logFailure,\n  logVerbose,\n  logMessage,\n} from \"./log.js\";\nimport { wasmPlugin } from \"./wasm.js\";\nimport dependencyTrackerPlugin from \"./depgraph.js\";\n\nexport async function innerEsbuild({\n  entryPoints,\n  platform,\n  dir,\n  extraConditions,\n  generateSourceMaps,\n  plugins,\n  chunksFolder,\n  logLevel,\n  includeSourcesContent = false,\n  splitting = true,\n}: {\n  entryPoints: string[];\n  platform: esbuild.Platform;\n  dir: string;\n  extraConditions: string[];\n  generateSourceMaps: boolean;\n  plugins: Plugin[];\n  chunksFolder: string;\n  logLevel?: LogLevel;\n  includeSourcesContent?: boolean;\n  splitting?: boolean | undefined;\n}) {\n  const result = await esbuild.build({\n    entryPoints,\n    bundle: true,\n    platform: platform,\n    format: \"esm\",\n    target: \"esnext\",\n    jsx: \"automatic\",\n    outdir: \"out\",\n    outbase: dir,\n    conditions: [\"convex\", \"module\", ...extraConditions],\n    plugins,\n    write: false,\n    sourcemap: generateSourceMaps,\n    sourcesContent: includeSourcesContent,\n    splitting,\n    chunkNames: path.join(chunksFolder, \"[hash]\"),\n    treeShaking: true,\n    minifySyntax: true,\n    minifyIdentifiers: true,\n    // Enabling minifyWhitespace breaks sourcemaps on convex backends.\n    // The sourcemaps produced are valid on https://evanw.github.io/source-map-visualization\n    // but something we're doing (perhaps involving https://github.com/getsentry/rust-sourcemap)\n    // makes everything map to the same line.\n    minifyWhitespace: false, // false is the default, just showing for clarify.\n    keepNames: true,\n    define: {\n      \"process.env.NODE_ENV\": '\"production\"',\n    },\n    metafile: true,\n    logLevel: logLevel || \"warning\",\n  });\n  return result;\n}\n\nexport function isEsbuildBuildError(e: any): e is BuildFailure {\n  return (\n    \"errors\" in e &&\n    \"warnings\" in e &&\n    Array.isArray(e.errors) &&\n    Array.isArray(e.warnings)\n  );\n}\n\n/**\n * Bundle non-\"use node\" entry points one at a time to track down the first file with an error\n * is being imported.\n */\nexport async function debugIsolateBundlesSerially(\n  ctx: Context,\n  {\n    entryPoints,\n    extraConditions,\n    dir,\n  }: {\n    entryPoints: string[];\n    extraConditions: string[];\n    dir: string;\n  },\n): Promise<void> {\n  logMessage(\n    `Bundling convex entry points one at a time to track down things that can't be bundled for the Convex JS runtime.`,\n  );\n  let i = 1;\n  for (const entryPoint of entryPoints) {\n    changeSpinner(\n      `bundling entry point ${entryPoint} (${i++}/${entryPoints.length})...`,\n    );\n\n    const { plugin, tracer } = dependencyTrackerPlugin();\n    try {\n      await innerEsbuild({\n        entryPoints: [entryPoint],\n        platform: \"browser\",\n        generateSourceMaps: true,\n        chunksFolder: \"_deps\",\n        extraConditions,\n        dir,\n        plugins: [plugin, wasmPlugin],\n        logLevel: \"silent\",\n      });\n    } catch (error) {\n      if (!isEsbuildBuildError(error) || !error.errors[0]) {\n        return await ctx.crash({\n          exitCode: 1,\n          errorType: \"invalid filesystem data\",\n          printedMessage: null,\n        });\n      }\n\n      const buildError = error.errors[0];\n      const errorFile = buildError.location?.file;\n      if (!errorFile) {\n        return await ctx.crash({\n          exitCode: 1,\n          errorType: \"invalid filesystem data\",\n          printedMessage: null,\n        });\n      }\n\n      const importedPath = buildError.text.match(/\"([^\"]+)\"/)?.[1];\n      if (!importedPath) continue;\n\n      const full = path.resolve(errorFile);\n      logError(\"\");\n      logError(\n        `Bundling ${entryPoint} resulted in ${error.errors.length} esbuild errors.`,\n      );\n      logError(`One of the bundling errors occurred while bundling ${full}:\\n`);\n      logError(\n        esbuild\n          .formatMessagesSync([buildError], {\n            kind: \"error\",\n            color: true,\n          })\n          .join(\"\\n\"),\n      );\n      logError(\"It would help to avoid importing this file.\");\n      const chains = tracer.traceImportChains(entryPoint, full);\n      const chain: string[] = chains[0];\n      chain.reverse();\n\n      logError(``);\n      if (chain.length > 0) {\n        const problematicFileRelative = formatFilePath(dir, chain[0]);\n\n        if (chain.length === 1) {\n          logError(`  ${problematicFileRelative}`);\n        } else {\n          logError(`  ${problematicFileRelative} is imported by`);\n\n          for (let i = 1; i < chain.length - 1; i++) {\n            const fileRelative = formatFilePath(dir, chain[i]);\n            logError(`  ${fileRelative}, which is imported by`);\n          }\n\n          const entryPointFile = chain[chain.length - 1];\n          const entryPointRelative = formatFilePath(dir, entryPointFile);\n\n          logError(`  ${entryPointRelative}, which doesn't use \"use node\"\\n`);\n          logError(\n            `  For registered action functions to use Node.js APIs in any code they run they must be defined\\n` +\n              `  in a file with 'use node' at the top. See https://docs.convex.dev/functions/runtimes#nodejs-runtime\\n`,\n          );\n        }\n      }\n\n      logFailure(\"Bundling failed\");\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"invalid filesystem data\",\n        printedMessage: \"Bundling failed.\",\n      });\n    }\n    logVerbose(`${entryPoint} bundled`);\n  }\n}\n\n// Helper function to format file paths consistently\nfunction formatFilePath(baseDir: string, filePath: string): string {\n  // If it's already a relative path like \"./shared\", just return it\n  if (!path.isAbsolute(filePath)) {\n    // For relative paths, ensure they start with \"convex/\"\n    if (!filePath.startsWith(\"convex/\")) {\n      // If it's a path like \"./subdir/file.ts\" or \"subdir/file.ts\"\n      const cleanPath = filePath.replace(/^\\.\\//, \"\");\n      return `convex/${cleanPath}`;\n    }\n    return filePath;\n  }\n\n  // Get the path relative to the base directory\n  const relativePath = path.relative(baseDir, filePath);\n\n  // Remove any leading \"./\" that path.relative might add\n  const cleanPath = relativePath.replace(/^\\.\\//, \"\");\n\n  // Check if this is a path within the convex directory\n  const isConvexPath =\n    cleanPath.startsWith(\"convex/\") ||\n    cleanPath.includes(\"/convex/\") ||\n    path.dirname(cleanPath) === \"convex\";\n\n  if (isConvexPath) {\n    // If it already starts with convex/, return it as is\n    if (cleanPath.startsWith(\"convex/\")) {\n      return cleanPath;\n    }\n\n    // For files in the convex directory\n    if (path.dirname(cleanPath) === \"convex\") {\n      const filename = path.basename(cleanPath);\n      return `convex/${filename}`;\n    }\n\n    // For files in subdirectories of convex\n    const convexIndex = cleanPath.indexOf(\"convex/\");\n    if (convexIndex >= 0) {\n      return cleanPath.substring(convexIndex);\n    }\n  }\n\n  // For any other path, assume it's in the convex directory\n  // This handles cases where the file is in a subdirectory of convex\n  // but the path doesn't include \"convex/\" explicitly\n  return `convex/${cleanPath}`;\n}\n", "/**\n * Normally esbuild can output a metafile containing the dependency\n * graph. However if bundling fails (say no dependency can be found)\n * then no metafile is produced.\n *\n * This plugin produces a similar dependency graph even in incomplete\n * bundling runs that are aborted early due to an error.\n *\n * It is WAY SLOWER!\n *\n * This enables a bundler error to be annotated with an import trace\n * describing why that file was imported.\n */\nimport * as esbuild from \"esbuild\";\nimport * as path from \"path\";\n\n// Interface for the tracer object returned by the plugin\ninterface ImportTracer {\n  /**\n   * Traces all import chains from a specific entry point to the specified file.\n   * @param entryPoint The entry point to start the trace from.\n   * @param filename The file to trace import chains to.\n   * @returns An array of import chains, each chain being an array of file paths.\n   */\n  traceImportChains(entryPoint: string, filename: string): string[][];\n\n  /**\n   * Returns a copy of the entire dependency graph.\n   * @returns A map where keys are importers and values are sets of imported files.\n   */\n  getDependencyGraph(): Map<string, Set<string>>;\n}\n\n// Interface for the combined plugin and tracer\ninterface ImportTracerPlugin {\n  plugin: esbuild.Plugin;\n  tracer: ImportTracer;\n}\n\n/**\n * Creates an esbuild plugin that tracks import dependencies.\n * The plugin builds a dependency graph during bundling without\n * reimplementing module resolution logic.\n *\n * @returns An object containing the plugin and a tracer for analyzing import chains.\n */\nfunction createImportTracerPlugin(): ImportTracerPlugin {\n  // Dependency graph: Map<importer, Set<imported>>\n  const dependencyGraph = new Map<string, Set<string>>();\n  // Set of entry points\n  const entryPoints = new Set<string>();\n  // Set of imports currently being processed to avoid infinite recursion\n  const processingImports = new Set<string>();\n\n  const plugin: esbuild.Plugin = {\n    name: \"import-tracer\",\n    setup(build) {\n      // Reset state on new build\n      build.onStart(() => {\n        dependencyGraph.clear();\n        entryPoints.clear();\n        processingImports.clear();\n      });\n\n      // Capture entry points\n      build.onResolve({ filter: /.*/ }, (args) => {\n        if (args.kind === \"entry-point\") {\n          entryPoints.add(args.path);\n        }\n        return null; // Continue with normal resolution\n      });\n\n      // Track resolved imports\n      build.onResolve({ filter: /.*/ }, async (args) => {\n        if (\n          args.importer &&\n          (args.kind === \"import-statement\" ||\n            args.kind === \"require-call\" ||\n            args.kind === \"dynamic-import\" ||\n            args.kind === \"require-resolve\")\n        ) {\n          const importKey = `${args.importer}:${args.path}`;\n\n          // Avoid infinite recursion\n          if (processingImports.has(importKey)) {\n            return null;\n          }\n\n          try {\n            processingImports.add(importKey);\n\n            //console.log(\"-------------> \", args.path);\n            // Use esbuild's resolution logic - this lets us avoid\n            // reimplementing module resolution ourselves\n            const result = await build.resolve(args.path, {\n              // Does it work to pretendit's always an import???\n              kind: \"import-statement\",\n              resolveDir: args.resolveDir,\n            });\n\n            if (result.errors.length === 0) {\n              // Record the dependency relationship\n              if (!dependencyGraph.has(args.importer)) {\n                dependencyGraph.set(args.importer, new Set());\n              }\n              dependencyGraph.get(args.importer)!.add(result.path);\n            }\n          } finally {\n            processingImports.delete(importKey);\n          }\n        }\n\n        return null; // Let esbuild continue with normal resolution\n      });\n    },\n  };\n\n  const tracer: ImportTracer = {\n    traceImportChains(entryPoint: string, filename: string): string[][] {\n      const resolvedEntryPoint = path.resolve(entryPoint);\n\n      // Find shortest path using BFS\n      const findShortestPath = (\n        start: string,\n        target: string,\n      ): string[] | null => {\n        const queue: { node: string; path: string[] }[] = [\n          { node: start, path: [start] },\n        ];\n        const visited = new Set<string>([start]);\n\n        while (queue.length > 0) {\n          const { node, path } = queue.shift()!;\n\n          if (node === target) {\n            return path;\n          }\n\n          const imports = dependencyGraph.get(node) || new Set();\n          for (const imp of imports) {\n            if (!visited.has(imp)) {\n              visited.add(imp);\n              queue.push({ node: imp, path: [...path, imp] });\n            }\n          }\n        }\n\n        return null;\n      };\n\n      const result = findShortestPath(resolvedEntryPoint, filename);\n      return result ? [result] : [];\n    },\n\n    getDependencyGraph(): Map<string, Set<string>> {\n      // Return a deep copy of the dependency graph\n      const copy = new Map<string, Set<string>>();\n      for (const [key, value] of dependencyGraph.entries()) {\n        copy.set(key, new Set(value));\n      }\n      return copy;\n    },\n  };\n\n  return { plugin, tracer };\n}\n\nexport default createImportTracerPlugin;\n", "import { Context } from \"../../../bundler/context.js\";\nimport { logMessage } from \"../../../bundler/log.js\";\nimport { detect } from \"detect-port\";\nimport crypto from \"crypto\";\nimport { chalkStderr } from \"chalk\";\n\nexport async function choosePorts(\n  ctx: Context,\n  {\n    count,\n    requestedPorts,\n    startPort,\n  }: {\n    count: number;\n    requestedPorts?: Array<number | null>;\n    startPort: number;\n  },\n): Promise<Array<number>> {\n  const ports: Array<number> = [];\n  for (let i = 0; i < count; i++) {\n    const requestedPort = requestedPorts?.[i];\n    if (requestedPort !== null) {\n      const port = await detect(requestedPort);\n      if (port !== requestedPort) {\n        return ctx.crash({\n          exitCode: 1,\n          errorType: \"fatal\",\n          printedMessage: `Requested port ${requestedPort} is not available`,\n        });\n      }\n      ports.push(port);\n    } else {\n      const portToTry =\n        ports.length > 0 ? ports[ports.length - 1] + 1 : startPort;\n      const port = await detect(portToTry);\n      ports.push(port);\n    }\n  }\n  return ports;\n}\n\nexport async function isOffline(): Promise<boolean> {\n  // TODO(ENG-7080) -- implement this for real\n  return false;\n}\n\nexport function printLocalDeploymentWelcomeMessage() {\n  logMessage(\n    chalkStderr.cyan(\"You're trying out the beta local deployment feature!\"),\n  );\n  logMessage(\n    chalkStderr.cyan(\n      \"To learn more, read the docs: https://docs.convex.dev/cli/local-deployments\",\n    ),\n  );\n  logMessage(\n    chalkStderr.cyan(\n      \"To opt out at any time, run `npx convex disable-local-deployments`\",\n    ),\n  );\n}\n\nexport function generateInstanceSecret(): string {\n  return crypto.randomBytes(32).toString(\"hex\");\n}\n\nexport const LOCAL_BACKEND_INSTANCE_SECRET =\n  \"4361726e697461732c206c69746572616c6c79206d65616e696e6720226c6974\";\n", "import http from \"node:http\";\nimport { Context } from \"../../../bundler/context.js\";\nimport { logVerbose } from \"../../../bundler/log.js\";\n\n// The below is adapted from https://github.com/vercel/serve/blob/main/source/utilities/server.ts\n// MIT License -- https://github.com/vercel/serve/blob/main/license.md\n// Copyright (c) 2023 Vercel, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and 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 the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// This has been pared down to only support running locally. It removed options\n// we're not using, and added Convex-CLI specific cleanup handling.\nexport const startServer = async (\n  ctx: Context,\n  port: number,\n  handler: (\n    request: http.IncomingMessage,\n    response: http.ServerResponse,\n  ) => Promise<void>,\n  options: {\n    cors?: boolean;\n  },\n): Promise<{ cleanupHandle: string }> => {\n  // Define the request handler for the server.\n  const serverHandler = (request: any, response: any): void => {\n    // We can't return a promise in a HTTP request handler, so we run our code\n    // inside an async function instead.\n    const run = async () => {\n      if (options.cors) {\n        response.setHeader(\"Access-Control-Allow-Origin\", \"*\");\n        response.setHeader(\"Access-Control-Allow-Headers\", \"*\");\n        response.setHeader(\"Access-Control-Allow-Credentials\", \"true\");\n        response.setHeader(\"Access-Control-Allow-Private-Network\", \"true\");\n      }\n      // TODO -- consider adding support for compression\n      // if (!args['--no-compression'])\n      //   await compress(request as ExpressRequest, response as ExpressResponse);\n\n      await handler(request, response);\n    };\n\n    // Then we run the async function, and log any errors.\n    // TODO: consider adding a `onError` callback in case we want different error\n    // handling.\n    run().catch((error: Error) => {\n      logVerbose(\n        `Failed to serve: ${error.stack?.toString() ?? error.message}`,\n      );\n    });\n  };\n\n  const server = http.createServer(serverHandler);\n  const cleanupHandle = ctx.registerCleanup(async () => {\n    logVerbose(`Stopping server on port ${port}`);\n    await server.close();\n  });\n\n  // Listen for any error that occurs while serving, and throw an error\n  // if any errors are received.\n  server.on(\"error\", (error) => {\n    logVerbose(`Failed to serve: ${error.stack?.toString() ?? error.message}`);\n  });\n\n  // Finally, start the server -- this promise resolves once the server has started.\n  await new Promise((resolve, _reject) => {\n    server.listen(port, `127.0.0.1`, () => resolve(`http://127.0.0.1:${port}`));\n  });\n  return { cleanupHandle };\n};\n", "// ----------------------------------------------------------------------------\n// Anonymous (No account)\n\nimport path from \"path\";\nimport { Context } from \"../../../bundler/context.js\";\nimport {\n  logFinishedStep,\n  logMessage,\n  logVerbose,\n  logWarning,\n} from \"../../../bundler/log.js\";\nimport { promptSearch, promptYesNo } from \"../utils/prompts.js\";\nimport {\n  bigBrainGenerateAdminKeyForAnonymousDeployment,\n  bigBrainPause,\n  bigBrainStart,\n} from \"./bigBrain.js\";\nimport { LocalDeploymentError, printLocalDeploymentOnError } from \"./errors.js\";\nimport {\n  LocalDeploymentKind,\n  deploymentStateDir,\n  ensureUuidForAnonymousUser,\n  legacyDeploymentStateDir,\n  loadDeploymentConfig,\n  loadDeploymentConfigFromDir,\n  loadProjectLocalConfig,\n  saveDeploymentConfig,\n} from \"./filePaths.js\";\nimport { rootDeploymentStateDir } from \"./filePaths.js\";\nimport { LocalDeploymentConfig } from \"./filePaths.js\";\nimport { DeploymentDetails } from \"./localDeployment.js\";\nimport { ensureBackendStopped, localDeploymentUrl } from \"./run.js\";\nimport { ensureBackendRunning } from \"./run.js\";\nimport { handlePotentialUpgrade } from \"./upgrade.js\";\nimport {\n  isOffline,\n  generateInstanceSecret,\n  choosePorts,\n  LOCAL_BACKEND_INSTANCE_SECRET,\n} from \"./utils.js\";\nimport { handleDashboard } from \"./dashboard.js\";\nimport { recursivelyDelete, recursivelyCopy } from \"../fsUtils.js\";\nimport { ensureBackendBinaryDownloaded } from \"./download.js\";\nimport { isAnonymousDeployment } from \"../deployment.js\";\nimport { createProject } from \"../api.js\";\nimport { removeAnonymousPrefix } from \"../deployment.js\";\nimport { nodeFs } from \"../../../bundler/fs.js\";\nimport { doInitConvexFolder } from \"../codegen.js\";\nimport { readProjectConfig } from \"../config.js\";\nimport { functionsDir } from \"../utils/utils.js\";\nimport { maybeSetupAiFiles } from \"../aiFiles/index.js\";\n\nexport async function handleAnonymousDeployment(\n  ctx: Context,\n  options: {\n    ports?:\n      | {\n          cloud: number;\n          site: number;\n        }\n      | undefined;\n    backendVersion?: string | undefined;\n    dashboardVersion?: string | undefined;\n    forceUpgrade: boolean;\n    deploymentName: string | null;\n    chosenConfiguration: \"new\" | \"existing\" | \"ask\" | null;\n  },\n): Promise<DeploymentDetails> {\n  if (await isOffline()) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: \"Cannot run a local deployment while offline\",\n    });\n  }\n\n  const deployment = await chooseDeployment(ctx, {\n    deploymentName: options.deploymentName,\n    chosenConfiguration: options.chosenConfiguration,\n  });\n  if (\n    deployment.kind === \"first\" &&\n    process.env.CONVEX_AGENT_MODE !== \"anonymous\"\n  ) {\n    logMessage(\n      \"This command, `npx convex dev`, will run your Convex backend locally and update it with the function you write in the `convex/` directory.\",\n    );\n    logMessage(\n      \"Use `npx convex dashboard` to view and interact with your project from a web UI.\",\n    );\n    logMessage(\n      \"Use `npx convex docs` to read the docs and `npx convex help` to see other commands.\",\n    );\n    ensureUuidForAnonymousUser(ctx);\n    if (process.stdin.isTTY) {\n      const result = await promptYesNo(ctx, {\n        message: \"Continue?\",\n        default: true,\n      });\n      if (!result) {\n        return ctx.crash({\n          exitCode: 1,\n          errorType: \"fatal\",\n          printedMessage: \"Exiting\",\n        });\n      }\n    }\n  }\n  ctx.registerCleanup(async (_exitCode, err) => {\n    if (err instanceof LocalDeploymentError) {\n      printLocalDeploymentOnError();\n    }\n  });\n  const { binaryPath, version } = await ensureBackendBinaryDownloaded(\n    ctx,\n    options.backendVersion === undefined\n      ? {\n          kind: \"latest\",\n        }\n      : { kind: \"version\", version: options.backendVersion },\n  );\n  await handleDashboard(ctx, version);\n  let adminKey: string;\n  let instanceSecret: string;\n  if (deployment.kind === \"existing\") {\n    adminKey = deployment.config.adminKey;\n    instanceSecret =\n      deployment.config.instanceSecret ?? LOCAL_BACKEND_INSTANCE_SECRET;\n    // If it's still running for some reason, exit and tell the user to kill it.\n    // It's fine if a different backend is running on these ports though since we'll\n    // pick new ones.\n    await ensureBackendStopped(ctx, {\n      ports: {\n        cloud: deployment.config.ports.cloud,\n      },\n      maxTimeSecs: 5,\n      deploymentName: deployment.deploymentName,\n      allowOtherDeployments: true,\n    });\n  } else {\n    instanceSecret = generateInstanceSecret();\n    const data = await bigBrainGenerateAdminKeyForAnonymousDeployment(ctx, {\n      instanceName: deployment.deploymentName,\n      instanceSecret,\n    });\n    adminKey = data.adminKey;\n  }\n\n  const [cloudPort, sitePort] = await choosePorts(ctx, {\n    count: 2,\n    startPort: 3210,\n    requestedPorts: [options.ports?.cloud ?? null, options.ports?.site ?? null],\n  });\n  const onActivity = async (isOffline: boolean, _wasOffline: boolean) => {\n    await ensureBackendRunning(ctx, {\n      cloudPort,\n      deploymentName: deployment.deploymentName,\n      maxTimeSecs: 5,\n    });\n    if (isOffline) {\n      return;\n    }\n  };\n\n  const { cleanupHandle } = await handlePotentialUpgrade(ctx, {\n    deploymentName: deployment.deploymentName,\n    deploymentKind: \"anonymous\",\n    oldVersion:\n      deployment.kind === \"existing\" ? deployment.config.backendVersion : null,\n    newBinaryPath: binaryPath,\n    newVersion: version,\n    ports: { cloud: cloudPort, site: sitePort },\n    adminKey,\n    instanceSecret,\n    forceUpgrade: options.forceUpgrade,\n  });\n\n  const cleanupFunc = ctx.removeCleanup(cleanupHandle);\n  ctx.registerCleanup(async (exitCode, err) => {\n    if (cleanupFunc !== null) {\n      await cleanupFunc(exitCode, err);\n    }\n  });\n\n  if (deployment.kind === \"new\") {\n    await doInitConvexFolder(ctx);\n    const { configPath, projectConfig } = await readProjectConfig(ctx);\n    const convexDir = path.resolve(functionsDir(configPath, projectConfig));\n    const projectDir = path.resolve(path.dirname(configPath));\n    await maybeSetupAiFiles({ ctx, convexDir, projectDir });\n  }\n  return {\n    adminKey,\n    deploymentName: deployment.deploymentName,\n    deploymentUrl: localDeploymentUrl(cloudPort),\n    onActivity,\n  };\n}\n\nexport async function loadAnonymousDeployment(\n  ctx: Context,\n  deploymentName: string,\n): Promise<LocalDeploymentConfig> {\n  const config = loadDeploymentConfig(ctx, \"anonymous\", deploymentName);\n  if (config === null) {\n    return ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: `Could not find deployment with name ${deploymentName}!`,\n    });\n  }\n  return config;\n}\n\n/**\n * List legacy anonymous deployments from the home directory.\n * These are deployments stored in ~/.convex/anonymous-convex-backend-state/\n */\nexport function listLegacyAnonymousDeployments(ctx: Context): Array<{\n  deploymentName: string;\n  config: LocalDeploymentConfig;\n}> {\n  const deployments: Array<{\n    deploymentName: string;\n    config: LocalDeploymentConfig;\n  }> = [];\n\n  const dir = rootDeploymentStateDir(\"anonymous\");\n  if (ctx.fs.exists(dir)) {\n    const deploymentNames = ctx.fs\n      .listDir(dir)\n      .map((d) => d.name)\n      .filter((d) => isAnonymousDeployment(d));\n    for (const deploymentName of deploymentNames) {\n      const legacyDir = legacyDeploymentStateDir(\"anonymous\", deploymentName);\n      const config = loadDeploymentConfigFromDir(ctx, legacyDir);\n      if (config !== null) {\n        deployments.push({ deploymentName, config });\n      }\n    }\n  }\n\n  return deployments;\n}\n\nexport async function listExistingAnonymousDeployments(ctx: Context): Promise<\n  Array<{\n    deploymentName: string;\n    config: LocalDeploymentConfig;\n  }>\n> {\n  const deployments: Array<{\n    deploymentName: string;\n    config: LocalDeploymentConfig;\n  }> = [];\n\n  // Check project-local storage first\n  const projectLocal = loadProjectLocalConfig(ctx);\n  if (\n    projectLocal !== null &&\n    isAnonymousDeployment(projectLocal.deploymentName)\n  ) {\n    deployments.push(projectLocal);\n  }\n\n  // Check legacy home directory, avoiding duplicates\n  for (const legacy of listLegacyAnonymousDeployments(ctx)) {\n    if (!deployments.some((d) => d.deploymentName === legacy.deploymentName)) {\n      deployments.push(legacy);\n    }\n  }\n\n  return deployments;\n}\n\nasync function chooseDeployment(\n  ctx: Context,\n  options: {\n    deploymentName: string | null;\n    chosenConfiguration: \"new\" | \"existing\" | \"ask\" | null;\n  },\n): Promise<\n  | {\n      kind: \"existing\";\n      deploymentName: string;\n      config: LocalDeploymentConfig;\n    }\n  | {\n      kind: \"new\";\n      deploymentName: string;\n    }\n  | {\n      kind: \"first\";\n      deploymentName: string;\n    }\n> {\n  // Check for existing project-local deployment first - use it if it exists\n  const projectLocal = loadProjectLocalConfig(ctx);\n  if (projectLocal !== null) {\n    if (isAnonymousDeployment(projectLocal.deploymentName)) {\n      // Already an anonymous deployment - use it as-is\n      return {\n        kind: \"existing\",\n        deploymentName: projectLocal.deploymentName,\n        config: projectLocal.config,\n      };\n    }\n    // Project-local has data from a different deployment type (e.g., \"local-*\")\n    // Create a new anonymous deployment that will reuse this data and update the config\n    logVerbose(\n      `Project-local has ${projectLocal.deploymentName}, switching to anonymous`,\n    );\n    return { deploymentName: generateDeploymentName(), kind: \"new\" };\n  }\n\n  // Check if a specific deployment name was requested (legacy support)\n  if (options.deploymentName !== null && options.chosenConfiguration === null) {\n    const deployments = await listExistingAnonymousDeployments(ctx);\n    const existing = deployments.find(\n      (d) => d.deploymentName === options.deploymentName,\n    );\n    if (existing === undefined) {\n      logWarning(`Could not find project with name ${options.deploymentName}!`);\n    } else {\n      return {\n        kind: \"existing\",\n        deploymentName: existing.deploymentName,\n        config: existing.config,\n      };\n    }\n  }\n\n  // Handle agent mode - use fixed name since there's one deployment per project\n  if (process.env.CONVEX_AGENT_MODE === \"anonymous\") {\n    const deploymentName = \"anonymous-agent\";\n    logVerbose(`Deployment name: ${deploymentName}`);\n    return {\n      kind: \"new\",\n      deploymentName,\n    };\n  }\n\n  // No project-local data - check for legacy deployments in home directory\n  const legacyDeployments = listLegacyAnonymousDeployments(ctx);\n\n  // No legacy deployments - auto-create a new project without prompting\n  if (legacyDeployments.length === 0) {\n    logMessage(\"Setting up a new project...\");\n    return { deploymentName: generateDeploymentName(), kind: \"first\" };\n  }\n\n  // User explicitly wants a new deployment - create without prompting for name\n  if (options.chosenConfiguration === \"new\") {\n    return { deploymentName: generateDeploymentName(), kind: \"new\" };\n  }\n\n  // Legacy deployments exist - prompt user to choose\n  const newOrExisting = await promptSearch(ctx, {\n    message: \"Which project would you like to use?\",\n    choices: [\n      ...(options.chosenConfiguration === \"existing\"\n        ? []\n        : [\n            {\n              name: \"Create a new one\",\n              value: \"new\",\n            },\n          ]),\n      ...legacyDeployments.map((d) => ({\n        name: d.deploymentName,\n        value: d.deploymentName,\n      })),\n    ],\n  });\n\n  if (newOrExisting !== \"new\") {\n    const existingDeployment = legacyDeployments.find(\n      (d) => d.deploymentName === newOrExisting,\n    );\n    if (existingDeployment === undefined) {\n      return ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: `Could not find project with name ${newOrExisting}!`,\n      });\n    }\n    return {\n      kind: \"existing\",\n      deploymentName: existingDeployment.deploymentName,\n      config: existingDeployment.config,\n    };\n  }\n\n  // User chose to create a new one - no name prompt needed\n  return { deploymentName: generateDeploymentName(), kind: \"new\" };\n}\n\n/**\n * Returns a name for a new anonymous deployment.\n */\nfunction generateDeploymentName() {\n  const baseName = path.basename(process.cwd());\n  const deploymentName = `anonymous-${baseName}`;\n  logVerbose(`Deployment name: ${deploymentName}`);\n  return deploymentName;\n}\n\n/**\n * This takes an \"anonymous\" deployment and makes it a \"local\" deployment\n * that is associated with a project in the given team.\n */\nexport async function handleLinkToProject(\n  ctx: Context,\n  args: {\n    deploymentName: string;\n    teamSlug: string;\n    projectSlug: string | null;\n  },\n): Promise<{\n  deploymentName: string;\n  deploymentUrl: string;\n  projectSlug: string;\n}> {\n  logVerbose(\n    `Linking ${args.deploymentName} to a project in team ${args.teamSlug}`,\n  );\n  const config = loadDeploymentConfig(ctx, \"anonymous\", args.deploymentName);\n  if (config === null) {\n    return ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage:\n        \"Failed to load deployment config - try running `npx convex dev --configure`\",\n    });\n  }\n  await ensureBackendStopped(ctx, {\n    ports: {\n      cloud: config.ports.cloud,\n    },\n    deploymentName: args.deploymentName,\n    allowOtherDeployments: true,\n    maxTimeSecs: 5,\n  });\n  const projectName = removeAnonymousPrefix(args.deploymentName);\n  let projectSlug: string;\n  if (args.projectSlug !== null) {\n    projectSlug = args.projectSlug;\n  } else {\n    const { projectSlug: newProjectSlug } = await createProject(ctx, {\n      teamSlug: args.teamSlug,\n      projectName,\n      deploymentToProvision: null,\n    });\n    projectSlug = newProjectSlug;\n  }\n  logVerbose(`Creating local deployment in project ${projectSlug}`);\n  // Register it in big brain\n  const { deploymentName: localDeploymentName, adminKey } = await bigBrainStart(\n    ctx,\n    {\n      port: config.ports.cloud,\n      projectSlug,\n      teamSlug: args.teamSlug,\n      instanceName: null,\n    },\n  );\n  const localConfig = loadDeploymentConfig(ctx, \"local\", localDeploymentName);\n  if (localConfig !== null) {\n    return ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: `Project ${projectSlug} already has a local deployment, so we cannot link this anonymous local deployment to it.`,\n    });\n  }\n  logVerbose(`Moving ${args.deploymentName} to ${localDeploymentName}`);\n  await moveDeployment(\n    ctx,\n    {\n      deploymentKind: \"anonymous\",\n      deploymentName: args.deploymentName,\n    },\n    {\n      deploymentKind: \"local\",\n      deploymentName: localDeploymentName,\n    },\n  );\n  logVerbose(`Saving deployment config for ${localDeploymentName}`);\n  saveDeploymentConfig(ctx, \"local\", localDeploymentName, {\n    adminKey,\n    backendVersion: config.backendVersion,\n    ports: config.ports,\n  });\n  await bigBrainPause(ctx, {\n    projectSlug,\n    teamSlug: args.teamSlug,\n  });\n  logFinishedStep(`Linked ${args.deploymentName} to project ${projectSlug}`);\n  return {\n    projectSlug,\n    deploymentName: localDeploymentName,\n    deploymentUrl: localDeploymentUrl(config.ports.cloud),\n  };\n}\n\nexport async function moveDeployment(\n  ctx: Context,\n  oldDeployment: {\n    deploymentKind: LocalDeploymentKind;\n    deploymentName: string;\n  },\n  newDeployment: {\n    deploymentKind: LocalDeploymentKind;\n    deploymentName: string;\n  },\n) {\n  const oldPath = deploymentStateDir(\n    ctx,\n    oldDeployment.deploymentKind,\n    oldDeployment.deploymentName,\n  );\n  const newPath = deploymentStateDir(\n    ctx,\n    newDeployment.deploymentKind,\n    newDeployment.deploymentName,\n  );\n\n  // If both paths are the same (project-local storage), no file movement needed.\n  // The config will be updated separately by saveDeploymentConfig.\n  if (oldPath === newPath) {\n    logVerbose(\n      `Source and destination are the same (${oldPath}), skipping file copy`,\n    );\n    return;\n  }\n\n  await recursivelyCopy(ctx, nodeFs, oldPath, newPath);\n  recursivelyDelete(ctx, oldPath);\n}\n", "import path from \"path\";\nimport { Context } from \"../../../bundler/context.js\";\nimport {\n  logFailure,\n  logFinishedStep,\n  logVerbose,\n} from \"../../../bundler/log.js\";\nimport { runSystemQuery } from \"../run.js\";\nimport {\n  LocalDeploymentKind,\n  deploymentStateDir,\n  loadDeploymentConfig,\n  saveDeploymentConfig,\n} from \"./filePaths.js\";\nimport {\n  ensureBackendStopped,\n  localDeploymentUrl,\n  runLocalBackend,\n} from \"./run.js\";\nimport {\n  downloadSnapshotExport,\n  startSnapshotExport,\n} from \"../convexExport.js\";\nimport { deploymentFetch, logAndHandleFetchError } from \"../utils/utils.js\";\nimport {\n  confirmImport,\n  uploadForImport,\n  waitForStableImportState,\n} from \"../convexImport.js\";\nimport { promptOptions, promptYesNo } from \"../utils/prompts.js\";\nimport { recursivelyDelete } from \"../fsUtils.js\";\nimport { LocalDeploymentError } from \"./errors.js\";\nimport { ensureBackendBinaryDownloaded } from \"./download.js\";\nexport async function handlePotentialUpgrade(\n  ctx: Context,\n  args: {\n    deploymentKind: LocalDeploymentKind;\n    deploymentName: string;\n    oldVersion: string | null;\n    newBinaryPath: string;\n    newVersion: string;\n    ports: {\n      cloud: number;\n      site: number;\n    };\n    adminKey: string;\n    instanceSecret: string;\n    forceUpgrade: boolean;\n  },\n): Promise<{ cleanupHandle: string }> {\n  const newConfig = {\n    ports: args.ports,\n    backendVersion: args.newVersion,\n    adminKey: args.adminKey,\n    instanceSecret: args.instanceSecret,\n  };\n  if (args.oldVersion === null || args.oldVersion === args.newVersion) {\n    // No upgrade needed. Save the current config and start running the backend.\n    saveDeploymentConfig(\n      ctx,\n      args.deploymentKind,\n      args.deploymentName,\n      newConfig,\n    );\n    return runLocalBackend(ctx, {\n      binaryPath: args.newBinaryPath,\n      deploymentKind: args.deploymentKind,\n      deploymentName: args.deploymentName,\n      ports: args.ports,\n      instanceSecret: args.instanceSecret,\n      isLatestVersion: true,\n    });\n  }\n  logVerbose(\n    `Considering upgrade from ${args.oldVersion} to ${args.newVersion}`,\n  );\n  const confirmed =\n    args.forceUpgrade ||\n    (await promptYesNo(ctx, {\n      message: `This deployment is using an older version of the Convex backend. Upgrade now?`,\n      default: true,\n    }));\n  if (!confirmed) {\n    const { binaryPath: oldBinaryPath } = await ensureBackendBinaryDownloaded(\n      ctx,\n      {\n        kind: \"version\",\n        version: args.oldVersion,\n      },\n    );\n    // Skipping upgrade, save the config with the old version and run.\n    saveDeploymentConfig(ctx, args.deploymentKind, args.deploymentName, {\n      ...newConfig,\n      backendVersion: args.oldVersion,\n    });\n    return runLocalBackend(ctx, {\n      binaryPath: oldBinaryPath,\n      ports: args.ports,\n      deploymentKind: args.deploymentKind,\n      deploymentName: args.deploymentName,\n      instanceSecret: args.instanceSecret,\n      isLatestVersion: false,\n    });\n  }\n  const choice = args.forceUpgrade\n    ? \"transfer\"\n    : await promptOptions(ctx, {\n        message: \"Transfer data from existing deployment?\",\n        default: \"transfer\",\n        choices: [\n          { name: \"transfer data\", value: \"transfer\" },\n          { name: \"start fresh\", value: \"reset\" },\n        ],\n      });\n  const deploymentStatePath = deploymentStateDir(\n    ctx,\n    args.deploymentKind,\n    args.deploymentName,\n  );\n  if (choice === \"reset\") {\n    recursivelyDelete(ctx, deploymentStatePath, { force: true });\n    saveDeploymentConfig(\n      ctx,\n      args.deploymentKind,\n      args.deploymentName,\n      newConfig,\n    );\n    return runLocalBackend(ctx, {\n      binaryPath: args.newBinaryPath,\n      deploymentKind: args.deploymentKind,\n      deploymentName: args.deploymentName,\n      ports: args.ports,\n      instanceSecret: args.instanceSecret,\n      isLatestVersion: true,\n    });\n  }\n  const newAdminKey = args.adminKey;\n  const oldAdminKey =\n    loadDeploymentConfig(ctx, args.deploymentKind, args.deploymentName)\n      ?.adminKey ?? args.adminKey;\n  return handleUpgrade(ctx, {\n    deploymentKind: args.deploymentKind,\n    deploymentName: args.deploymentName,\n    oldVersion: args.oldVersion!,\n    newBinaryPath: args.newBinaryPath,\n    newVersion: args.newVersion,\n    ports: args.ports,\n    oldAdminKey,\n    newAdminKey,\n    instanceSecret: args.instanceSecret,\n  });\n}\n\nasync function handleUpgrade(\n  ctx: Context,\n  args: {\n    deploymentName: string;\n    deploymentKind: LocalDeploymentKind;\n    oldVersion: string;\n    newBinaryPath: string;\n    newVersion: string;\n    ports: {\n      cloud: number;\n      site: number;\n    };\n    // In most of the cases the admin key is the same for the old and new version.\n    // This is helpful when we start generating new admin key formats that might\n    // be incompatible with older backend versions.\n    oldAdminKey: string;\n    newAdminKey: string;\n    instanceSecret: string;\n  },\n): Promise<{ cleanupHandle: string }> {\n  const { binaryPath: oldBinaryPath } = await ensureBackendBinaryDownloaded(\n    ctx,\n    {\n      kind: \"version\",\n      version: args.oldVersion,\n    },\n  );\n\n  logVerbose(\"Running backend on old version\");\n  const { cleanupHandle: oldCleanupHandle } = await runLocalBackend(ctx, {\n    binaryPath: oldBinaryPath,\n    ports: args.ports,\n    deploymentKind: args.deploymentKind,\n    deploymentName: args.deploymentName,\n    instanceSecret: args.instanceSecret,\n    isLatestVersion: false,\n  });\n\n  logVerbose(\"Downloading env vars\");\n  const deploymentUrl = localDeploymentUrl(args.ports.cloud);\n  const envs = (await runSystemQuery(ctx, {\n    deploymentUrl,\n    adminKey: args.oldAdminKey,\n    functionName: \"_system/cli/queryEnvironmentVariables\",\n    componentPath: undefined,\n    args: {},\n  })) as Array<{\n    name: string;\n    value: string;\n  }>;\n\n  logVerbose(\"Doing a snapshot export\");\n  const exportPath = path.join(\n    deploymentStateDir(ctx, args.deploymentKind, args.deploymentName),\n    \"export.zip\",\n  );\n  if (ctx.fs.exists(exportPath)) {\n    ctx.fs.unlink(exportPath);\n  }\n  const snaphsotExportState = await startSnapshotExport(ctx, {\n    deploymentUrl,\n    adminKey: args.oldAdminKey,\n    includeStorage: true,\n    inputPath: exportPath,\n  });\n  if (snaphsotExportState.state !== \"completed\") {\n    return ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: \"Failed to export snapshot\",\n    });\n  }\n  await downloadSnapshotExport(ctx, {\n    snapshotExportTs: snaphsotExportState.start_ts,\n    inputPath: exportPath,\n    adminKey: args.oldAdminKey,\n    deploymentUrl,\n  });\n\n  logVerbose(\"Stopping the backend on the old version\");\n  const oldCleanupFunc = ctx.removeCleanup(oldCleanupHandle);\n  if (oldCleanupFunc) {\n    await oldCleanupFunc(0);\n  }\n  await ensureBackendStopped(ctx, {\n    ports: args.ports,\n    maxTimeSecs: 5,\n    deploymentName: args.deploymentName,\n    allowOtherDeployments: false,\n  });\n\n  // TODO(ENG-7078) save old artifacts to backup files\n  logVerbose(\"Running backend on new version\");\n  const { cleanupHandle } = await runLocalBackend(ctx, {\n    binaryPath: args.newBinaryPath,\n    ports: args.ports,\n    deploymentKind: args.deploymentKind,\n    deploymentName: args.deploymentName,\n    instanceSecret: args.instanceSecret,\n    isLatestVersion: true,\n  });\n\n  logVerbose(\"Importing the env vars\");\n  if (envs.length > 0) {\n    const fetch = deploymentFetch(ctx, {\n      deploymentUrl,\n      adminKey: args.newAdminKey,\n    });\n    try {\n      await fetch(\"/api/update_environment_variables\", {\n        body: JSON.stringify({ changes: envs }),\n        method: \"POST\",\n      });\n    } catch (e) {\n      // TODO: this should ideally have a `LocalDeploymentError`\n      return await logAndHandleFetchError(ctx, e);\n    }\n  }\n\n  logVerbose(\"Doing a snapshot import\");\n  const importId = await uploadForImport(ctx, {\n    deploymentUrl,\n    adminKey: args.newAdminKey,\n    filePath: exportPath,\n    importArgs: { format: \"zip\", mode: \"replace\", tableName: undefined },\n    onImportFailed: async (e) => {\n      logFailure(`Failed to import snapshot: ${e}`);\n    },\n  });\n  logVerbose(`Snapshot import started`);\n  let status = await waitForStableImportState(ctx, {\n    importId,\n    deploymentUrl,\n    adminKey: args.newAdminKey,\n    onProgress: () => {\n      // do nothing for now\n      return 0;\n    },\n  });\n  if (status.state !== \"waiting_for_confirmation\") {\n    const message = \"Error while transferring data: Failed to upload snapshot\";\n    return ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: message,\n      errForSentry: new LocalDeploymentError(message),\n    });\n  }\n\n  await confirmImport(ctx, {\n    importId,\n    adminKey: args.newAdminKey,\n    deploymentUrl,\n    onError: async (e) => {\n      logFailure(`Failed to confirm import: ${e}`);\n    },\n  });\n  logVerbose(`Snapshot import confirmed`);\n  status = await waitForStableImportState(ctx, {\n    importId,\n    deploymentUrl,\n    adminKey: args.newAdminKey,\n    onProgress: () => {\n      // do nothing for now\n      return 0;\n    },\n  });\n  logVerbose(`Snapshot import status: ${status.state}`);\n  if (status.state !== \"completed\") {\n    const message = \"Error while transferring data: Failed to import snapshot\";\n    return ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: message,\n      errForSentry: new LocalDeploymentError(message),\n    });\n  }\n\n  logFinishedStep(\"Successfully upgraded to a new backend version\");\n  saveDeploymentConfig(ctx, args.deploymentKind, args.deploymentName, {\n    ports: args.ports,\n    backendVersion: args.newVersion,\n    adminKey: args.newAdminKey,\n    instanceSecret: args.instanceSecret,\n  });\n\n  return { cleanupHandle };\n}\n", "import { chalkStderr } from \"chalk\";\nimport util from \"util\";\nimport ws from \"ws\";\nimport { ConvexHttpClient } from \"../../browser/http_client.js\";\nimport { BaseConvexClient } from \"../../browser/index.js\";\nimport {\n  PaginationResult,\n  UserIdentityAttributes,\n  makeFunctionReference,\n} from \"../../server/index.js\";\nimport { Value, convexToJson, jsonToConvex } from \"../../values/value.js\";\nimport { Context, OneoffCtx } from \"../../bundler/context.js\";\nimport { logFinishedStep, logMessage, logOutput } from \"../../bundler/log.js\";\nimport { waitForever, waitUntilCalled } from \"./utils/utils.js\";\nimport JSON5 from \"json5\";\nimport path from \"path\";\nimport { readProjectConfig } from \"./config.js\";\nimport { watchAndPush } from \"./dev.js\";\nimport { Logger, DefaultLogger } from \"../../browser/logging.js\";\n\nexport async function runFunctionAndLog(\n  ctx: Context,\n  args: {\n    deploymentUrl: string;\n    adminKey: string;\n    functionName: string;\n    argsString: string;\n    identityString?: string | undefined;\n    componentPath?: string | undefined;\n    callbacks?:\n      | {\n          onSuccess?: () => void | undefined;\n        }\n      | undefined;\n  },\n) {\n  const client = new ConvexHttpClient(args.deploymentUrl, {\n    logger: instantiateStderrLogger(),\n  });\n  const identity = args.identityString\n    ? await getFakeIdentity(ctx, args.identityString)\n    : undefined;\n  client.setAdminAuth(args.adminKey, identity);\n\n  const functionArgs = await parseArgs(ctx, args.argsString);\n  const { projectConfig } = await readProjectConfig(ctx);\n  const parsedFunctionName = await parseFunctionName(\n    ctx,\n    args.functionName,\n    projectConfig.functions,\n  );\n  let result: Value;\n  try {\n    result = await client.function(\n      makeFunctionReference(parsedFunctionName),\n      args.componentPath,\n      functionArgs,\n    );\n  } catch (err) {\n    const errorMessage = (err as Error).toString().trim();\n\n    if (errorMessage.includes(\"Could not find function\")) {\n      const functions = (await runSystemQuery(ctx, {\n        deploymentUrl: args.deploymentUrl,\n        adminKey: args.adminKey,\n        functionName: \"_system/cli/modules:apiSpec\",\n        componentPath: args.componentPath,\n        args: {},\n      })) as (\n        | {\n            functionType: \"Query\" | \"Mutation\" | \"Action\";\n            identifier: string;\n          }\n        | {\n            functionType: \"HttpAction\";\n          }\n      )[];\n\n      const functionNames = functions\n        .filter(\n          (\n            fn,\n          ): fn is {\n            functionType: \"Query\" | \"Mutation\" | \"Action\";\n            identifier: string;\n          } => fn.functionType !== \"HttpAction\",\n        )\n        .map(({ identifier }) => {\n          const separatorPos = identifier.indexOf(\":\");\n\n          const path =\n            separatorPos === -1\n              ? \"\"\n              : identifier.substring(0, separatorPos).replace(/\\.js$/, \"\");\n          const name =\n            separatorPos === -1\n              ? identifier\n              : identifier.substring(separatorPos + 1);\n\n          return `\u2022 ${chalkStderr.gray(`${path}:`)}${name}`;\n        });\n\n      const availableFunctionsMessage =\n        functionNames.length > 0\n          ? `Available functions:\\n${functionNames.join(\"\\n\")}`\n          : \"No functions found.\";\n\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"invalid filesystem data\",\n        printedMessage: `Failed to run function \"${args.functionName}\":\\n${chalkStderr.red(errorMessage)}\\n\\n${availableFunctionsMessage}`,\n      });\n    }\n\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"invalid filesystem or env vars\",\n      printedMessage: `Failed to run function \"${args.functionName}\":\\n${chalkStderr.red(errorMessage)}`,\n    });\n  }\n\n  args.callbacks?.onSuccess?.();\n\n  // `null` is the default return type\n  if (result !== null) {\n    logOutput(formatValue(result));\n  }\n}\n\nasync function getFakeIdentity(ctx: Context, identityString: string) {\n  let identity: UserIdentityAttributes;\n  try {\n    identity = JSON5.parse(identityString);\n  } catch (err) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: `Failed to parse identity as JSON: \"${identityString}\"\\n${chalkStderr.red((err as Error).toString().trim())}`,\n    });\n  }\n  const subject = identity.subject ?? \"\" + simpleHash(JSON.stringify(identity));\n  const issuer = identity.issuer ?? \"https://convex.test\";\n  const tokenIdentifier =\n    identity.tokenIdentifier ?? `${issuer.toString()}|${subject.toString()}`;\n  return {\n    ...identity,\n    subject,\n    issuer,\n    tokenIdentifier,\n  };\n}\n\nexport async function parseArgs(ctx: Context, argsString: string) {\n  try {\n    const argsJson = JSON5.parse(argsString);\n    return jsonToConvex(argsJson) as Record<string, Value>;\n  } catch (err) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"invalid filesystem or env vars\",\n      printedMessage: `Failed to parse arguments as JSON: \"${argsString}\"\\n${chalkStderr.red((err as Error).toString().trim())}`,\n    });\n  }\n}\n\nexport async function parseFunctionName(\n  ctx: Context,\n  functionName: string,\n  // Usually `convex/` -- should contain trailing slash\n  functionDirName: string,\n) {\n  // api.foo.bar -> foo:bar\n  // foo/bar -> foo/bar:default\n  // foo/bar:baz -> foo/bar:baz\n  // convex/foo/bar -> foo/bar:default\n\n  // This is the `api.foo.bar` format\n  if (functionName.startsWith(\"api.\") || functionName.startsWith(\"internal.\")) {\n    const parts = functionName.split(\".\");\n    if (parts.length < 3) {\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: `Function name has too few parts: \"${functionName}\"`,\n      });\n    }\n    const exportName = parts.pop();\n    const parsedName = `${parts.slice(1).join(\"/\")}:${exportName}`;\n    return parsedName;\n  }\n\n  // This is the `foo/bar:baz` format\n\n  // This is something like `convex/foo/bar`, which could either be addressing `foo/bar:default` or `convex/foo/bar:default`\n  // if there's a directory with the same name as the functions directory nested directly underneath.\n  // We'll prefer the `convex/foo/bar:default` version, and check if the file exists, and otherwise treat this as a relative path from the project root.\n  const filePath = functionName.split(\":\")[0];\n  const possibleExtensions = [\n    \".ts\",\n    \".js\",\n    \".tsx\",\n    \".jsx\",\n    \".mts\",\n    \".mjs\",\n    \".cts\",\n    \".cjs\",\n  ];\n  let hasExtension = false;\n  let normalizedFilePath: string = filePath;\n  for (const extension of possibleExtensions) {\n    if (filePath.endsWith(extension)) {\n      normalizedFilePath = filePath.slice(0, -extension.length);\n      hasExtension = true;\n      break;\n    }\n  }\n\n  const exportName = functionName.split(\":\")[1] ?? \"default\";\n  const normalizedName = `${normalizedFilePath}:${exportName}`;\n\n  // This isn't a relative path from the project root\n  if (!filePath.startsWith(functionDirName)) {\n    return normalizedName;\n  }\n\n  const filePathWithoutPrefix = normalizedFilePath.slice(\n    functionDirName.length,\n  );\n  const functionNameWithoutPrefix = `${filePathWithoutPrefix}:${exportName}`;\n\n  if (hasExtension) {\n    if (ctx.fs.exists(path.join(functionDirName, filePath))) {\n      return normalizedName;\n    } else {\n      return functionNameWithoutPrefix;\n    }\n  } else {\n    const exists = possibleExtensions.some((extension) =>\n      ctx.fs.exists(path.join(functionDirName, filePath + extension)),\n    );\n    if (exists) {\n      return normalizedName;\n    } else {\n      return functionNameWithoutPrefix;\n    }\n  }\n}\n\nfunction simpleHash(string: string) {\n  let hash = 0;\n  for (let i = 0; i < string.length; i++) {\n    const char = string.charCodeAt(i);\n    hash = (hash << 5) - hash + char;\n    hash = hash & hash; // Convert to 32bit integer\n  }\n  return hash;\n}\n\nexport async function runSystemPaginatedQuery(\n  ctx: Context,\n  args: {\n    deploymentUrl: string;\n    adminKey: string;\n    functionName: string;\n    componentPath: string | undefined;\n    args: Record<string, Value>;\n    limit?: number;\n  },\n) {\n  const results = [];\n  let cursor = null;\n  let isDone = false;\n  while (!isDone && (args.limit === undefined || results.length < args.limit)) {\n    const paginationResult = (await runSystemQuery(ctx, {\n      ...args,\n      args: {\n        ...args.args,\n        paginationOpts: {\n          cursor,\n          numItems:\n            args.limit === undefined ? 10000 : args.limit - results.length,\n        },\n      },\n    })) as unknown as PaginationResult<Record<string, Value>>;\n    isDone = paginationResult.isDone;\n    cursor = paginationResult.continueCursor;\n    results.push(...paginationResult.page);\n  }\n  return results;\n}\n\nexport async function runSystemQuery(\n  ctx: Context,\n  args: {\n    deploymentUrl: string;\n    adminKey: string;\n    functionName: string;\n    componentPath: string | undefined;\n    args: Record<string, Value>;\n  },\n): Promise<Value> {\n  let onResult: (result: Value) => void;\n  const resultPromise = new Promise<Value>((resolve) => {\n    onResult = resolve;\n  });\n  const [donePromise, onDone] = waitUntilCalled();\n  await subscribe(ctx, {\n    ...args,\n    parsedFunctionName: args.functionName,\n    parsedFunctionArgs: args.args,\n    until: donePromise,\n    callbacks: {\n      onChange: (result) => {\n        onDone();\n        onResult(result);\n      },\n    },\n  });\n  return resultPromise;\n}\n\nexport function formatValue(value: Value) {\n  const json = convexToJson(value);\n  if (process.stdout.isTTY) {\n    // TODO (Tom) add JSON syntax highlighting like https://stackoverflow.com/a/51319962/398212\n    // until then, just spit out something that isn't quite JSON because it's easy\n    return util.inspect(value, { colors: true, depth: null });\n  } else {\n    return JSON.stringify(json, null, 2);\n  }\n}\n\nexport async function subscribeAndLog(\n  ctx: Context,\n  args: {\n    deploymentUrl: string;\n    adminKey: string;\n    functionName: string;\n    argsString: string;\n    identityString?: string | undefined;\n    componentPath: string | undefined;\n  },\n) {\n  const { projectConfig } = await readProjectConfig(ctx);\n\n  const parsedFunctionName = await parseFunctionName(\n    ctx,\n    args.functionName,\n    projectConfig.functions,\n  );\n  const identity = args.identityString\n    ? await getFakeIdentity(ctx, args.identityString)\n    : undefined;\n  const functionArgs = await parseArgs(ctx, args.argsString);\n  return subscribe(ctx, {\n    deploymentUrl: args.deploymentUrl,\n    adminKey: args.adminKey,\n    identity,\n    parsedFunctionName,\n    parsedFunctionArgs: functionArgs,\n    componentPath: args.componentPath,\n    until: waitForever(),\n    callbacks: {\n      onStart() {\n        logFinishedStep(\n          `Watching query ${args.functionName} on ${args.deploymentUrl}...`,\n        );\n      },\n      onChange(result) {\n        logOutput(formatValue(result));\n      },\n      onStop() {\n        logMessage(`Closing connection to ${args.deploymentUrl}...`);\n      },\n    },\n  });\n}\n\nexport async function subscribe(\n  _ctx: Context,\n  args: {\n    deploymentUrl: string;\n    adminKey: string;\n    identity?: UserIdentityAttributes | undefined;\n    parsedFunctionName: string;\n    parsedFunctionArgs: Record<string, Value>;\n    componentPath: string | undefined;\n    until: Promise<unknown>;\n    callbacks?:\n      | {\n          onStart?: () => void;\n          onChange?: (result: Value) => void;\n          onStop?: () => void;\n        }\n      | undefined;\n  },\n) {\n  const client = new BaseConvexClient(\n    args.deploymentUrl,\n    (updatedQueries) => {\n      for (const queryToken of updatedQueries) {\n        args.callbacks?.onChange?.(client.localQueryResultByToken(queryToken)!);\n      }\n    },\n    {\n      // pretend that a Node.js 'ws' library WebSocket is a browser WebSocket\n      webSocketConstructor: ws as unknown as typeof WebSocket,\n      unsavedChangesWarning: false,\n    },\n  );\n  client.setAdminAuth(args.adminKey, args.identity);\n  const { unsubscribe } = client.subscribe(\n    args.parsedFunctionName,\n    args.parsedFunctionArgs,\n    {\n      componentPath: args.componentPath,\n    },\n  );\n\n  args.callbacks?.onStart?.();\n\n  let done = false;\n  const [donePromise, onDone] = waitUntilCalled();\n  const stopWatching = () => {\n    if (done) {\n      return;\n    }\n    done = true;\n    unsubscribe();\n    void client.close();\n    process.off(\"SIGINT\", sigintListener);\n    onDone();\n    args.callbacks?.onStop?.();\n  };\n  function sigintListener() {\n    stopWatching();\n  }\n  process.on(\"SIGINT\", sigintListener);\n  void args.until.finally(stopWatching);\n  while (!done) {\n    // loops once per day (any large value < 2**31 would work)\n    const oneDay = 24 * 60 * 60 * 1000;\n    await Promise.race([\n      donePromise,\n      new Promise((resolve) => setTimeout(resolve, oneDay)),\n    ]);\n  }\n}\n\nexport async function runInDeployment(\n  ctx: OneoffCtx,\n  args: {\n    deploymentUrl: string;\n    adminKey: string;\n    deploymentName: string | null;\n    functionName: string;\n    argsString: string;\n    identityString?: string | undefined;\n    push: boolean;\n    watch: boolean;\n    typecheck: \"enable\" | \"try\" | \"disable\";\n    typecheckComponents: boolean;\n    codegen: boolean;\n    componentPath: string | undefined;\n    liveComponentSources: boolean;\n  },\n) {\n  if (args.push) {\n    await watchAndPush(\n      ctx,\n      {\n        url: args.deploymentUrl,\n        adminKey: args.adminKey,\n        deploymentName: args.deploymentName,\n        verbose: false,\n        dryRun: false,\n        typecheck: args.typecheck,\n        typecheckComponents: args.typecheckComponents,\n        debug: false,\n        debugNodeApis: false,\n        codegen: args.codegen,\n        liveComponentSources: args.liveComponentSources,\n        pushAllModules: false,\n        largeIndexDeletionCheck: \"no verification\", // `convex run` can\u2019t push to prod\n      },\n      {\n        once: true,\n        traceEvents: false,\n        untilSuccess: true,\n      },\n    );\n  }\n\n  if (args.watch) {\n    return await subscribeAndLog(ctx, args);\n  }\n  return await runFunctionAndLog(ctx, args);\n}\n\nfunction instantiateStderrLogger(): Logger {\n  const logger = new DefaultLogger({ verbose: false });\n  logger.addLogLineListener((_level, ...args) => {\n    // eslint-disable-next-line no-console\n    console.error(...args);\n  });\n  return logger;\n}\n", "/**\n * A symbol for accessing the name of a {@link FunctionReference} at runtime.\n */\nexport const functionName = Symbol.for(\"functionName\");\n", "import { functionName } from \"../functionName.js\";\n\nexport const toReferencePath = Symbol.for(\"toReferencePath\");\n\n// Multiple instances of the same Symbol.for() are equal at runtime but not\n// at type-time, so `[toReferencePath]` properties aren't used in types.\n// Use this function to set the property invisibly.\nexport function setReferencePath<T>(obj: T, value: string) {\n  (obj as any)[toReferencePath] = value;\n}\n\nexport function extractReferencePath(reference: any): string | null {\n  return reference[toReferencePath] ?? null;\n}\n\nexport function isFunctionHandle(s: string): boolean {\n  return s.startsWith(\"function://\");\n}\n\nexport function getFunctionAddress(functionReference: any) {\n  // The `run*` syscalls expect either a UDF path at \"name\" or a serialized\n  // reference at \"reference\". Dispatch on `functionReference` to coerce\n  // it to one or the other.\n  let functionAddress;\n\n  // Legacy path for passing in UDF paths directly as function references.\n  if (typeof functionReference === \"string\") {\n    if (isFunctionHandle(functionReference)) {\n      functionAddress = { functionHandle: functionReference };\n    } else {\n      functionAddress = { name: functionReference };\n    }\n  }\n  // Path for passing in a `FunctionReference`, either from `api` or directly\n  // created from a UDF path with `makeFunctionReference`.\n  else if (functionReference[functionName]) {\n    functionAddress = { name: functionReference[functionName] };\n  }\n  // Reference to a component's function derived from `app` or `component`.\n  else {\n    const referencePath = extractReferencePath(functionReference);\n    if (!referencePath) {\n      throw new Error(`${functionReference} is not a functionReference`);\n    }\n    functionAddress = { reference: referencePath };\n  }\n  return functionAddress;\n}\n", "import {\n  EmptyObject,\n  DefaultFunctionArgs,\n  FunctionVisibility,\n  RegisteredAction,\n  RegisteredMutation,\n  RegisteredQuery,\n} from \"./registration.js\";\nimport { Expand, UnionToIntersection } from \"../type_utils.js\";\nimport { PaginationOptions, PaginationResult } from \"./pagination.js\";\nimport { functionName } from \"./functionName.js\";\nimport { getFunctionAddress } from \"./components/paths.js\";\n\n/**\n * The type of a Convex function.\n *\n * @public\n */\nexport type FunctionType = \"query\" | \"mutation\" | \"action\";\n\n/**\n * A reference to a registered Convex function.\n *\n * You can create a {@link FunctionReference} using the generated `api` utility:\n * ```js\n * import { api } from \"../convex/_generated/api\";\n *\n * const reference = api.myModule.myFunction;\n * ```\n *\n * If you aren't using code generation, you can create references using\n * {@link anyApi}:\n * ```js\n * import { anyApi } from \"convex/server\";\n *\n * const reference = anyApi.myModule.myFunction;\n * ```\n *\n * Function references can be used to invoke functions from the client. For\n * example, in React you can pass references to the {@link react.useQuery} hook:\n * ```js\n * const result = useQuery(api.myModule.myFunction);\n * ```\n *\n * @typeParam Type - The type of the function (\"query\", \"mutation\", or \"action\").\n * @typeParam Visibility - The visibility of the function (\"public\" or \"internal\").\n * @typeParam Args - The arguments to this function. This is an object mapping\n * argument names to their types.\n * @typeParam ReturnType - The return type of this function.\n * @public\n */\nexport type FunctionReference<\n  Type extends FunctionType,\n  Visibility extends FunctionVisibility = \"public\",\n  Args extends DefaultFunctionArgs = any,\n  ReturnType = any,\n  ComponentPath = string | undefined,\n> = {\n  _type: Type;\n  _visibility: Visibility;\n  _args: Args;\n  _returnType: ReturnType;\n  _componentPath: ComponentPath;\n};\n\n/**\n * Get the name of a function from a {@link FunctionReference}.\n *\n * The name is a string like \"myDir/myModule:myFunction\". If the exported name\n * of the function is `\"default\"`, the function name is omitted\n * (e.g. \"myDir/myModule\").\n *\n * @param functionReference - A {@link FunctionReference} to get the name of.\n * @returns A string of the function's name.\n *\n * @public\n */\nexport function getFunctionName(\n  functionReference: AnyFunctionReference,\n): string {\n  const address = getFunctionAddress(functionReference);\n\n  if (address.name === undefined) {\n    if (address.functionHandle !== undefined) {\n      throw new Error(\n        `Expected function reference like \"api.file.func\" or \"internal.file.func\", but received function handle ${address.functionHandle}`,\n      );\n    } else if (address.reference !== undefined) {\n      throw new Error(\n        `Expected function reference in the current component like \"api.file.func\" or \"internal.file.func\", but received reference ${address.reference}`,\n      );\n    }\n    throw new Error(\n      `Expected function reference like \"api.file.func\" or \"internal.file.func\", but received ${JSON.stringify(address)}`,\n    );\n  }\n  // Both a legacy thing and also a convenience for interactive use:\n  // the types won't check but a string is always allowed at runtime.\n  if (typeof functionReference === \"string\") return functionReference;\n\n  // Two different runtime values for FunctionReference implement this\n  // interface: api objects returned from `createApi()` and standalone\n  // function reference objects returned from makeFunctionReference.\n  const name = (functionReference as any)[functionName];\n  if (!name) {\n    throw new Error(`${functionReference as any} is not a functionReference`);\n  }\n  return name;\n}\n\n/**\n * FunctionReferences generally come from generated code, but in custom clients\n * it may be useful to be able to build one manually.\n *\n * Real function references are empty objects at runtime, but the same interface\n * can be implemented with an object for tests and clients which don't use\n * code generation.\n *\n * @param name - The identifier of the function. E.g. `path/to/file:functionName`\n * @public\n */\nexport function makeFunctionReference<\n  type extends FunctionType,\n  args extends DefaultFunctionArgs = any,\n  ret = any,\n>(name: string): FunctionReference<type, \"public\", args, ret> {\n  return { [functionName]: name } as unknown as FunctionReference<\n    type,\n    \"public\",\n    args,\n    ret\n  >;\n}\n\n/**\n * Create a runtime API object that implements {@link AnyApi}.\n *\n * This allows accessing any path regardless of what directories, modules,\n * or functions are defined.\n *\n * @param pathParts - The path to the current node in the API.\n * @returns An {@link AnyApi}\n * @public\n */\nfunction createApi(pathParts: string[] = []): AnyApi {\n  const handler: ProxyHandler<object> = {\n    get(_, prop: string | symbol) {\n      if (typeof prop === \"string\") {\n        const newParts = [...pathParts, prop];\n        return createApi(newParts);\n      } else if (prop === functionName) {\n        if (pathParts.length < 2) {\n          const found = [\"api\", ...pathParts].join(\".\");\n          throw new Error(\n            `API path is expected to be of the form \\`api.moduleName.functionName\\`. Found: \\`${found}\\``,\n          );\n        }\n        const path = pathParts.slice(0, -1).join(\"/\");\n        const exportName = pathParts[pathParts.length - 1];\n        if (exportName === \"default\") {\n          return path;\n        } else {\n          return path + \":\" + exportName;\n        }\n      } else if (prop === Symbol.toStringTag) {\n        return \"FunctionReference\";\n      } else {\n        return undefined;\n      }\n    },\n  };\n\n  return new Proxy({}, handler);\n}\n\n/**\n * Given an export from a module, convert it to a {@link FunctionReference}\n * if it is a Convex function.\n */\nexport type FunctionReferenceFromExport<Export> =\n  Export extends RegisteredQuery<\n    infer Visibility,\n    infer Args,\n    infer ReturnValue\n  >\n    ? FunctionReference<\n        \"query\",\n        Visibility,\n        Args,\n        ConvertReturnType<ReturnValue>\n      >\n    : Export extends RegisteredMutation<\n          infer Visibility,\n          infer Args,\n          infer ReturnValue\n        >\n      ? FunctionReference<\n          \"mutation\",\n          Visibility,\n          Args,\n          ConvertReturnType<ReturnValue>\n        >\n      : Export extends RegisteredAction<\n            infer Visibility,\n            infer Args,\n            infer ReturnValue\n          >\n        ? FunctionReference<\n            \"action\",\n            Visibility,\n            Args,\n            ConvertReturnType<ReturnValue>\n          >\n        : never;\n\n/**\n * Given a module, convert all the Convex functions into\n * {@link FunctionReference}s and remove the other exports.\n *\n * BE CAREFUL WHEN EDITING THIS!\n *\n * This is written carefully to preserve jumping to function definitions using\n * cmd+click. If you edit it, please test that cmd+click still works.\n */\ntype FunctionReferencesInModule<Module extends Record<string, any>> = {\n  -readonly [ExportName in keyof Module as Module[ExportName][\"isConvexFunction\"] extends true\n    ? ExportName\n    : never]: FunctionReferenceFromExport<Module[ExportName]>;\n};\n\n/**\n * Given a path to a module and it's type, generate an API type for this module.\n *\n * This is a nested object according to the module's path.\n */\ntype ApiForModule<\n  ModulePath extends string,\n  Module extends object,\n> = ModulePath extends `${infer First}/${infer Second}`\n  ? {\n      [_ in First]: ApiForModule<Second, Module>;\n    }\n  : { [_ in ModulePath]: FunctionReferencesInModule<Module> };\n\n/**\n * Given the types of all modules in the `convex/` directory, construct the type\n * of `api`.\n *\n * `api` is a utility for constructing {@link FunctionReference}s.\n *\n * @typeParam AllModules - A type mapping module paths (like `\"dir/myModule\"`) to\n * the types of the modules.\n * @public\n */\nexport type ApiFromModules<AllModules extends Record<string, object>> =\n  FilterApi<\n    ApiFromModulesAllowEmptyNodes<AllModules>,\n    FunctionReference<any, any, any, any>\n  >;\n\ntype ApiFromModulesAllowEmptyNodes<AllModules extends Record<string, object>> =\n  ExpandModulesAndDirs<\n    UnionToIntersection<\n      {\n        [ModulePath in keyof AllModules]: ApiForModule<\n          ModulePath & string,\n          AllModules[ModulePath]\n        >;\n      }[keyof AllModules]\n    >\n  >;\n\ntype FilterKeysInApi<key, API, Predicate> = API extends Predicate\n  ? key\n  : API extends FunctionReference<any, any, any, any>\n    ? never\n    : FilterApi<API, Predicate> extends Record<string, never>\n      ? never\n      : key;\n\n/**\n * @public\n *\n * Filter a Convex deployment api object for functions which meet criteria,\n * for example all public queries.\n */\nexport type FilterApi<API, Predicate> = Expand<{\n  [mod in keyof API as FilterKeysInApi<\n    mod,\n    API[mod],\n    Predicate\n  >]: API[mod] extends Predicate ? API[mod] : FilterApi<API[mod], Predicate>;\n}>;\n\n/**\n * Given an api of type API and a FunctionReference subtype, return an api object\n * containing only the function references that match.\n *\n * ```ts\n * const q = filterApi<typeof api, FunctionReference<\"query\">>(api)\n * ```\n *\n * @public\n */\nexport function filterApi<API, Predicate>(api: API): FilterApi<API, Predicate> {\n  return api as any;\n}\n\n// These just* API filter helpers require no type parameters so are useable from JavaScript.\n/** @public */\nexport function justInternal<API>(\n  api: API,\n): FilterApi<API, FunctionReference<any, \"internal\", any, any>> {\n  return api as any;\n}\n\n/** @public */\nexport function justPublic<API>(\n  api: API,\n): FilterApi<API, FunctionReference<any, \"public\", any, any>> {\n  return api as any;\n}\n\n/** @public */\nexport function justQueries<API>(\n  api: API,\n): FilterApi<API, FunctionReference<\"query\", any, any, any>> {\n  return api as any;\n}\n\n/** @public */\nexport function justMutations<API>(\n  api: API,\n): FilterApi<API, FunctionReference<\"mutation\", any, any, any>> {\n  return api as any;\n}\n\n/** @public */\nexport function justActions<API>(\n  api: API,\n): FilterApi<API, FunctionReference<\"action\", any, any, any>> {\n  return api as any;\n}\n\n/** @public */\nexport function justPaginatedQueries<API>(\n  api: API,\n): FilterApi<\n  API,\n  FunctionReference<\n    \"query\",\n    any,\n    { paginationOpts: PaginationOptions },\n    PaginationResult<any>\n  >\n> {\n  return api as any;\n}\n\n/** @public */\nexport function justSchedulable<API>(\n  api: API,\n): FilterApi<API, FunctionReference<\"mutation\" | \"action\", any, any, any>> {\n  return api as any;\n}\n\n/**\n * Like {@link Expand}, this simplifies how TypeScript displays object types.\n * The differences are:\n * 1. This version is recursive.\n * 2. This stops recursing when it hits a {@link FunctionReference}.\n */\ntype ExpandModulesAndDirs<ObjectType> = ObjectType extends AnyFunctionReference\n  ? ObjectType\n  : {\n      [Key in keyof ObjectType]: ExpandModulesAndDirs<ObjectType[Key]>;\n    };\n\n/**\n * A {@link FunctionReference} of any type and any visibility with any\n * arguments and any return type.\n *\n * @public\n */\nexport type AnyFunctionReference = FunctionReference<any, any>;\n\ntype AnyModuleDirOrFunc = {\n  [key: string]: AnyModuleDirOrFunc;\n} & AnyFunctionReference;\n\n/**\n * The type that Convex api objects extend. If you were writing an api from\n * scratch it should extend this type.\n *\n * @public\n */\nexport type AnyApi = Record<string, Record<string, AnyModuleDirOrFunc>>;\n\n/**\n * Recursive partial API, useful for defining a subset of an API when mocking\n * or building custom api objects.\n *\n * @public\n */\nexport type PartialApi<API> = {\n  [mod in keyof API]?: API[mod] extends FunctionReference<any, any, any, any>\n    ? API[mod]\n    : PartialApi<API[mod]>;\n};\n\n/**\n * A utility for constructing {@link FunctionReference}s in projects that\n * are not using code generation.\n *\n * You can create a reference to a function like:\n * ```js\n * const reference = anyApi.myModule.myFunction;\n * ```\n *\n * This supports accessing any path regardless of what directories and modules\n * are in your project. All function references are typed as\n * {@link AnyFunctionReference}.\n *\n *\n * If you're using code generation, use `api` from `convex/_generated/api`\n * instead. It will be more type-safe and produce better auto-complete\n * in your editor.\n *\n * @public\n */\nexport const anyApi: AnyApi = createApi() as any;\n\n/**\n * Given a {@link FunctionReference}, get the return type of the function.\n *\n * This is represented as an object mapping argument names to values.\n * @public\n */\nexport type FunctionArgs<FuncRef extends AnyFunctionReference> =\n  FuncRef[\"_args\"];\n\n/**\n * A tuple type of the (maybe optional) arguments to `FuncRef`.\n *\n * This type is used to make methods involving arguments type safe while allowing\n * skipping the arguments for functions that don't require arguments.\n *\n * @public\n */\nexport type OptionalRestArgs<FuncRef extends AnyFunctionReference> =\n  FuncRef[\"_args\"] extends EmptyObject\n    ? [args?: EmptyObject]\n    : [args: FuncRef[\"_args\"]];\n\n/**\n * A tuple type of the (maybe optional) arguments to `FuncRef`, followed by an options\n * object of type `Options`.\n *\n * This type is used to make methods like `useQuery` type-safe while allowing\n * 1. Skipping arguments for functions that don't require arguments.\n * 2. Skipping the options object.\n * @public\n */\nexport type ArgsAndOptions<\n  FuncRef extends AnyFunctionReference,\n  Options,\n> = FuncRef[\"_args\"] extends EmptyObject\n  ? [args?: EmptyObject, options?: Options]\n  : [args: FuncRef[\"_args\"], options?: Options];\n\n/**\n * Given a {@link FunctionReference}, get the return type of the function.\n *\n * @public\n */\nexport type FunctionReturnType<FuncRef extends AnyFunctionReference> =\n  FuncRef[\"_returnType\"];\n\ntype UndefinedToNull<T> = T extends void ? null : T;\n\ntype NullToUndefinedOrNull<T> = T extends null ? T | undefined | void : T;\n\n/**\n * Convert the return type of a function to it's client-facing format.\n *\n * This means:\n * - Converting `undefined` and `void` to `null`\n * - Removing all `Promise` wrappers\n */\nexport type ConvertReturnType<T> = UndefinedToNull<Awaited<T>>;\n\nexport type ValidatorTypeToReturnType<T> =\n  | Promise<NullToUndefinedOrNull<T>>\n  | NullToUndefinedOrNull<T>;\n", "import type { Value } from \"../values/value.js\";\n\n/**\n * Validate that the arguments to a Convex function are an object, defaulting\n * `undefined` to `{}`.\n */\nexport function parseArgs(\n  args: Record<string, Value> | undefined,\n): Record<string, Value> {\n  if (args === undefined) {\n    return {};\n  }\n  if (!isSimpleObject(args)) {\n    throw new Error(\n      `The arguments to a Convex function must be an object. Received: ${\n        args as any\n      }`,\n    );\n  }\n  return args;\n}\n\nexport function validateDeploymentUrl(deploymentUrl: string) {\n  // Don't use things like `new URL(deploymentUrl).hostname` since these aren't\n  // supported by React Native's JS environment\n  if (typeof deploymentUrl === \"undefined\") {\n    throw new Error(\n      `Client created with undefined deployment address. If you used an environment variable, check that it's set.`,\n    );\n  }\n  if (typeof deploymentUrl !== \"string\") {\n    throw new Error(\n      `Invalid deployment address: found ${deploymentUrl as any}\".`,\n    );\n  }\n  if (\n    !(deploymentUrl.startsWith(\"http:\") || deploymentUrl.startsWith(\"https:\"))\n  ) {\n    throw new Error(\n      `Invalid deployment address: Must start with \"https://\" or \"http://\". Found \"${deploymentUrl}\".`,\n    );\n  }\n\n  // Most clients should connect to \".convex.cloud\". But we also support localhost and\n  // custom custom. We validate the deployment url is a valid url, which is the most\n  // common failure pattern.\n  try {\n    new URL(deploymentUrl);\n  } catch {\n    throw new Error(\n      `Invalid deployment address: \"${deploymentUrl}\" is not a valid URL. If you believe this URL is correct, use the \\`skipConvexDeploymentUrlCheck\\` option to bypass this.`,\n    );\n  }\n\n  // If a user uses .convex.site, this is very likely incorrect.\n  if (deploymentUrl.endsWith(\".convex.site\")) {\n    throw new Error(\n      `Invalid deployment address: \"${deploymentUrl}\" ends with .convex.site, which is used for HTTP Actions. Convex deployment URLs typically end with .convex.cloud? If you believe this URL is correct, use the \\`skipConvexDeploymentUrlCheck\\` option to bypass this.`,\n    );\n  }\n}\n\n/**\n * Check whether a value is a plain old JavaScript object.\n */\nexport function isSimpleObject(value: unknown) {\n  const isObject = typeof value === \"object\";\n  const prototype = Object.getPrototypeOf(value);\n  const isSimple =\n    prototype === null ||\n    prototype === Object.prototype ||\n    // Objects generated from other contexts (e.g. across Node.js `vm` modules) will not satisfy the previous\n    // conditions but are still simple objects.\n    prototype?.constructor?.name === \"Object\";\n  return isObject && isSimple;\n}\n", "/*\nhttps://github.com/beatgammit/base64-js/blob/88957c9943c7e2a0f03cdf73e71d579e433627d3/index.js\nCopyright (c) 2014 Jameson Little\nThe MIT License (MIT)\n*/\n\n// Vendored because this library has no ESM build, and some environments\n// (SvelteKit) are happiest when all dependencies are ESM.\n\nvar lookup: string[] = [];\nvar revLookup: number[] = [];\nvar Arr = Uint8Array;\n\nvar code = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\nfor (var i = 0, len = code.length; i < len; ++i) {\n  lookup[i] = code[i];\n  revLookup[code.charCodeAt(i)] = i;\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup[\"-\".charCodeAt(0)] = 62;\nrevLookup[\"_\".charCodeAt(0)] = 63;\n\nfunction getLens(b64: string) {\n  var len = b64.length;\n\n  if (len % 4 > 0) {\n    throw new Error(\"Invalid string. Length must be a multiple of 4\");\n  }\n\n  // Trim off extra bytes after placeholder bytes are found\n  // See: https://github.com/beatgammit/base64-js/issues/42\n  var validLen = b64.indexOf(\"=\");\n  if (validLen === -1) validLen = len;\n\n  var placeHoldersLen = validLen === len ? 0 : 4 - (validLen % 4);\n\n  return [validLen, placeHoldersLen];\n}\n\n// base64 is 4/3 + up to two characters of the original data\n/** @public */\nexport function byteLength(b64: string): number {\n  var lens = getLens(b64);\n  var validLen = lens[0];\n  var placeHoldersLen = lens[1];\n  return ((validLen + placeHoldersLen) * 3) / 4 - placeHoldersLen;\n}\n\nfunction _byteLength(_b64: string, validLen: number, placeHoldersLen: number) {\n  return ((validLen + placeHoldersLen) * 3) / 4 - placeHoldersLen;\n}\n\n/** @public */\nexport function toByteArray(b64: string): Uint8Array {\n  var tmp;\n  var lens = getLens(b64);\n  var validLen = lens[0];\n  var placeHoldersLen = lens[1];\n\n  var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen));\n\n  var curByte = 0;\n\n  // if there are placeholders, only get up to the last complete 4 chars\n  var len = placeHoldersLen > 0 ? validLen - 4 : validLen;\n\n  var i;\n  for (i = 0; i < len; i += 4) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 18) |\n      (revLookup[b64.charCodeAt(i + 1)] << 12) |\n      (revLookup[b64.charCodeAt(i + 2)] << 6) |\n      revLookup[b64.charCodeAt(i + 3)];\n    arr[curByte++] = (tmp >> 16) & 0xff;\n    arr[curByte++] = (tmp >> 8) & 0xff;\n    arr[curByte++] = tmp & 0xff;\n  }\n\n  if (placeHoldersLen === 2) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 2) |\n      (revLookup[b64.charCodeAt(i + 1)] >> 4);\n    arr[curByte++] = tmp & 0xff;\n  }\n\n  if (placeHoldersLen === 1) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 10) |\n      (revLookup[b64.charCodeAt(i + 1)] << 4) |\n      (revLookup[b64.charCodeAt(i + 2)] >> 2);\n    arr[curByte++] = (tmp >> 8) & 0xff;\n    arr[curByte++] = tmp & 0xff;\n  }\n\n  return arr;\n}\n\nfunction tripletToBase64(num: number) {\n  return (\n    lookup[(num >> 18) & 0x3f] +\n    lookup[(num >> 12) & 0x3f] +\n    lookup[(num >> 6) & 0x3f] +\n    lookup[num & 0x3f]\n  );\n}\n\nfunction encodeChunk(uint8: Uint8Array, start: number, end: number) {\n  var tmp;\n  var output = [];\n  for (var i = start; i < end; i += 3) {\n    tmp =\n      ((uint8[i] << 16) & 0xff0000) +\n      ((uint8[i + 1] << 8) & 0xff00) +\n      (uint8[i + 2] & 0xff);\n    output.push(tripletToBase64(tmp));\n  }\n  return output.join(\"\");\n}\n\n/** @public */\nexport function fromByteArray(uint8: Uint8Array): string {\n  var tmp;\n  var len = uint8.length;\n  var extraBytes = len % 3; // if we have 1 byte left, pad 2 bytes\n  var parts = [];\n  var maxChunkLength = 16383; // must be multiple of 3\n\n  // go through the array every three bytes, we'll deal with trailing stuff later\n  for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n    parts.push(\n      encodeChunk(\n        uint8,\n        i,\n        i + maxChunkLength > len2 ? len2 : i + maxChunkLength,\n      ),\n    );\n  }\n\n  // pad the end with zeros, but make sure to not forget the extra bytes\n  if (extraBytes === 1) {\n    tmp = uint8[len - 1];\n    parts.push(lookup[tmp >> 2] + lookup[(tmp << 4) & 0x3f] + \"==\");\n  } else if (extraBytes === 2) {\n    tmp = (uint8[len - 2] << 8) + uint8[len - 1];\n    parts.push(\n      lookup[tmp >> 10] +\n        lookup[(tmp >> 4) & 0x3f] +\n        lookup[(tmp << 2) & 0x3f] +\n        \"=\",\n    );\n  }\n\n  return parts.join(\"\");\n}\n\nexport function fromByteArrayUrlSafeNoPadding(uint8: Uint8Array): string {\n  return fromByteArray(uint8)\n    .replace(/\\+/g, \"-\")\n    .replace(/\\//g, \"_\")\n    .replace(/=/g, \"\");\n}\n", "/**\n * Utilities for working with values stored in Convex.\n *\n * You can see the full set of supported types at\n * [Types](https://docs.convex.dev/using/types).\n * @module\n */\nimport * as Base64 from \"./base64.js\";\nimport { isSimpleObject } from \"../common/index.js\";\n\nconst LITTLE_ENDIAN = true;\n// This code is used by code that may not have bigint literals.\nconst MIN_INT64 = BigInt(\"-9223372036854775808\");\nconst MAX_INT64 = BigInt(\"9223372036854775807\");\nconst ZERO = BigInt(\"0\");\nconst EIGHT = BigInt(\"8\");\nconst TWOFIFTYSIX = BigInt(\"256\");\n\n/**\n * The type of JavaScript values serializable to JSON.\n *\n * @public\n */\nexport type JSONValue =\n  | null\n  | boolean\n  | number\n  | string\n  | JSONValue[]\n  | { [key: string]: JSONValue };\n\n/**\n * An identifier for a document in Convex.\n *\n * Convex documents are uniquely identified by their `Id`, which is accessible\n * on the `_id` field. To learn more, see [Document IDs](https://docs.convex.dev/database/document-ids).\n *\n * Documents can be loaded using `db.get(tableName, id)` in query and mutation functions.\n *\n * IDs are base 32 encoded strings which are URL safe.\n *\n * IDs are just strings at runtime, but this type can be used to distinguish them from other\n * strings at compile time.\n *\n * If you're using code generation, use the `Id` type generated for your data model in\n * `convex/_generated/dataModel.d.ts`.\n *\n * @typeParam TableName - A string literal type of the table name (like \"users\").\n *\n * @public\n */\nexport type Id<TableName extends string> = string & { __tableName: TableName };\n\n/**\n * A value supported by Convex.\n *\n * Values can be:\n * - stored inside of documents.\n * - used as arguments and return types to queries and mutation functions.\n *\n * You can see the full set of supported types at\n * [Types](https://docs.convex.dev/using/types).\n *\n * @public\n */\nexport type Value =\n  | null\n  | bigint\n  | number\n  | boolean\n  | string\n  | ArrayBuffer\n  | Value[]\n  | { [key: string]: undefined | Value };\n\n/**\n * The types of {@link Value} that can be used to represent numbers.\n *\n * @public\n */\nexport type NumericValue = bigint | number;\n\nfunction isSpecial(n: number) {\n  return Number.isNaN(n) || !Number.isFinite(n) || Object.is(n, -0);\n}\n\nexport function slowBigIntToBase64(value: bigint): string {\n  // the conversion is easy if we pretend it's unsigned\n  if (value < ZERO) {\n    value -= MIN_INT64 + MIN_INT64;\n  }\n  let hex = value.toString(16);\n  if (hex.length % 2 === 1) hex = \"0\" + hex;\n\n  const bytes = new Uint8Array(new ArrayBuffer(8));\n  let i = 0;\n  for (const hexByte of hex.match(/.{2}/g)!.reverse()) {\n    bytes.set([parseInt(hexByte, 16)], i++);\n    value >>= EIGHT;\n  }\n  return Base64.fromByteArray(bytes);\n}\n\nexport function slowBase64ToBigInt(encoded: string): bigint {\n  const integerBytes = Base64.toByteArray(encoded);\n  if (integerBytes.byteLength !== 8) {\n    throw new Error(\n      `Received ${integerBytes.byteLength} bytes, expected 8 for $integer`,\n    );\n  }\n  let value = ZERO;\n  let power = ZERO;\n  for (const byte of integerBytes) {\n    value += BigInt(byte) * TWOFIFTYSIX ** power;\n    power++;\n  }\n  if (value > MAX_INT64) {\n    value += MIN_INT64 + MIN_INT64;\n  }\n  return value;\n}\n\nexport function modernBigIntToBase64(value: bigint): string {\n  if (value < MIN_INT64 || MAX_INT64 < value) {\n    throw new Error(\n      `BigInt ${value} does not fit into a 64-bit signed integer.`,\n    );\n  }\n  const buffer = new ArrayBuffer(8);\n  new DataView(buffer).setBigInt64(0, value, true);\n  return Base64.fromByteArray(new Uint8Array(buffer));\n}\n\nexport function modernBase64ToBigInt(encoded: string): bigint {\n  const integerBytes = Base64.toByteArray(encoded);\n  if (integerBytes.byteLength !== 8) {\n    throw new Error(\n      `Received ${integerBytes.byteLength} bytes, expected 8 for $integer`,\n    );\n  }\n  const intBytesView = new DataView(integerBytes.buffer);\n  return intBytesView.getBigInt64(0, true);\n}\n\n// Fall back to a slower version on Safari 14 which lacks these APIs.\nexport const bigIntToBase64 = (DataView.prototype as any).setBigInt64\n  ? modernBigIntToBase64\n  : slowBigIntToBase64;\nexport const base64ToBigInt = (DataView.prototype as any).getBigInt64\n  ? modernBase64ToBigInt\n  : slowBase64ToBigInt;\n\nconst MAX_IDENTIFIER_LEN = 1024;\n\nfunction validateObjectField(k: string) {\n  if (k.length > MAX_IDENTIFIER_LEN) {\n    throw new Error(\n      `Field name ${k} exceeds maximum field name length ${MAX_IDENTIFIER_LEN}.`,\n    );\n  }\n  if (k.startsWith(\"$\")) {\n    throw new Error(`Field name ${k} starts with a '$', which is reserved.`);\n  }\n  for (let i = 0; i < k.length; i += 1) {\n    const charCode = k.charCodeAt(i);\n    // Non-control ASCII characters\n    if (charCode < 32 || charCode >= 127) {\n      throw new Error(\n        `Field name ${k} has invalid character '${k[i]}': Field names can only contain non-control ASCII characters`,\n      );\n    }\n  }\n}\n\n/**\n * Parse a Convex value from its JSON representation.\n *\n * This function will deserialize serialized Int64s to `BigInt`s, Bytes to `ArrayBuffer`s etc.\n *\n * To learn more about Convex values, see [Types](https://docs.convex.dev/using/types).\n *\n * @param value - The JSON representation of a Convex value previously created with {@link convexToJson}.\n * @returns The JavaScript representation of the Convex value.\n *\n * @public\n */\nexport function jsonToConvex(value: JSONValue): Value {\n  if (value === null) {\n    return value;\n  }\n  if (typeof value === \"boolean\") {\n    return value;\n  }\n  if (typeof value === \"number\") {\n    return value;\n  }\n  if (typeof value === \"string\") {\n    return value;\n  }\n  if (Array.isArray(value)) {\n    return value.map((value) => jsonToConvex(value));\n  }\n  if (typeof value !== \"object\") {\n    throw new Error(`Unexpected type of ${value as any}`);\n  }\n  const entries = Object.entries(value);\n  if (entries.length === 1) {\n    const key = entries[0][0];\n    if (key === \"$bytes\") {\n      if (typeof value.$bytes !== \"string\") {\n        throw new Error(`Malformed $bytes field on ${value as any}`);\n      }\n      return Base64.toByteArray(value.$bytes).buffer;\n    }\n    if (key === \"$integer\") {\n      if (typeof value.$integer !== \"string\") {\n        throw new Error(`Malformed $integer field on ${value as any}`);\n      }\n      return base64ToBigInt(value.$integer);\n    }\n    if (key === \"$float\") {\n      if (typeof value.$float !== \"string\") {\n        throw new Error(`Malformed $float field on ${value as any}`);\n      }\n      const floatBytes = Base64.toByteArray(value.$float);\n      if (floatBytes.byteLength !== 8) {\n        throw new Error(\n          `Received ${floatBytes.byteLength} bytes, expected 8 for $float`,\n        );\n      }\n      const floatBytesView = new DataView(floatBytes.buffer);\n      const float = floatBytesView.getFloat64(0, LITTLE_ENDIAN);\n      if (!isSpecial(float)) {\n        throw new Error(`Float ${float} should be encoded as a number`);\n      }\n      return float;\n    }\n    if (key === \"$set\") {\n      throw new Error(\n        `Received a Set which is no longer supported as a Convex type.`,\n      );\n    }\n    if (key === \"$map\") {\n      throw new Error(\n        `Received a Map which is no longer supported as a Convex type.`,\n      );\n    }\n  }\n  const out: { [key: string]: Value } = {};\n  for (const [k, v] of Object.entries(value)) {\n    validateObjectField(k);\n    out[k] = jsonToConvex(v);\n  }\n  return out;\n}\n\nconst MAX_VALUE_FOR_ERROR_LEN = 16384;\n\nexport function stringifyValueForError(value: any) {\n  const str = JSON.stringify(value, (_key, value) => {\n    if (value === undefined) {\n      // By default `JSON.stringify` converts undefined, functions, symbols,\n      // Infinity, and NaN to null which produces a confusing error message.\n      // We deal with `undefined` specifically because it's the most common.\n      // Ideally we'd use a pretty-printing library that prints `undefined`\n      // (no quotes), but it might not be worth the bundle size cost.\n      return \"undefined\";\n    }\n    if (typeof value === \"bigint\") {\n      // `JSON.stringify` throws on bigints by default.\n      return `${value.toString()}n`;\n    }\n    return value;\n  });\n  if (str.length > MAX_VALUE_FOR_ERROR_LEN) {\n    const rest = \"[...truncated]\";\n    let truncateAt = MAX_VALUE_FOR_ERROR_LEN - rest.length;\n    const codePoint = str.codePointAt(truncateAt - 1);\n    if (codePoint !== undefined && codePoint > 0xffff) {\n      // don't split a surrogate pair in half\n      truncateAt -= 1;\n    }\n    return str.substring(0, truncateAt) + rest;\n  }\n  return str;\n}\n\nfunction convexToJsonInternal(\n  value: Value,\n  originalValue: Value,\n  context: string,\n  includeTopLevelUndefined: boolean,\n): JSONValue {\n  if (value === undefined) {\n    const contextText =\n      context &&\n      ` (present at path ${context} in original object ${stringifyValueForError(\n        originalValue,\n      )})`;\n    throw new Error(\n      `undefined is not a valid Convex value${contextText}. To learn about Convex's supported types, see https://docs.convex.dev/using/types.`,\n    );\n  }\n  if (value === null) {\n    return value;\n  }\n  if (typeof value === \"bigint\") {\n    if (value < MIN_INT64 || MAX_INT64 < value) {\n      throw new Error(\n        `BigInt ${value} does not fit into a 64-bit signed integer.`,\n      );\n    }\n    return { $integer: bigIntToBase64(value) };\n  }\n  if (typeof value === \"number\") {\n    if (isSpecial(value)) {\n      const buffer = new ArrayBuffer(8);\n      new DataView(buffer).setFloat64(0, value, LITTLE_ENDIAN);\n      return { $float: Base64.fromByteArray(new Uint8Array(buffer)) };\n    } else {\n      return value;\n    }\n  }\n  if (typeof value === \"boolean\") {\n    return value;\n  }\n  if (typeof value === \"string\") {\n    return value;\n  }\n  if (value instanceof ArrayBuffer) {\n    return { $bytes: Base64.fromByteArray(new Uint8Array(value)) };\n  }\n  if (Array.isArray(value)) {\n    return value.map((value, i) =>\n      convexToJsonInternal(value, originalValue, context + `[${i}]`, false),\n    );\n  }\n  if (value instanceof Set) {\n    throw new Error(\n      errorMessageForUnsupportedType(context, \"Set\", [...value], originalValue),\n    );\n  }\n  if (value instanceof Map) {\n    throw new Error(\n      errorMessageForUnsupportedType(context, \"Map\", [...value], originalValue),\n    );\n  }\n\n  if (!isSimpleObject(value)) {\n    const theType = value?.constructor?.name;\n    const typeName = theType ? `${theType} ` : \"\";\n    throw new Error(\n      errorMessageForUnsupportedType(context, typeName, value, originalValue),\n    );\n  }\n\n  const out: { [key: string]: JSONValue } = {};\n  const entries = Object.entries(value);\n  entries.sort(([k1, _v1], [k2, _v2]) => (k1 === k2 ? 0 : k1 < k2 ? -1 : 1));\n  for (const [k, v] of entries) {\n    if (v !== undefined) {\n      validateObjectField(k);\n      out[k] = convexToJsonInternal(v, originalValue, context + `.${k}`, false);\n    } else if (includeTopLevelUndefined) {\n      validateObjectField(k);\n      out[k] = convexOrUndefinedToJsonInternal(\n        v,\n        originalValue,\n        context + `.${k}`,\n      );\n    }\n  }\n  return out;\n}\n\nfunction errorMessageForUnsupportedType(\n  context: string,\n  typeName: string,\n  value: any,\n  originalValue: any,\n) {\n  if (context) {\n    return `${typeName}${stringifyValueForError(\n      value,\n    )} is not a supported Convex type (present at path ${context} in original object ${stringifyValueForError(\n      originalValue,\n    )}). To learn about Convex's supported types, see https://docs.convex.dev/using/types.`;\n  } else {\n    return `${typeName}${stringifyValueForError(\n      value,\n    )} is not a supported Convex type.`;\n  }\n}\n\n// convexOrUndefinedToJsonInternal wrapper exists so we can pipe through the\n// `originalValue` and `context` through for better error messaging.\nfunction convexOrUndefinedToJsonInternal(\n  value: Value | undefined,\n  originalValue: Value | undefined,\n  context: string,\n): JSONValue {\n  if (value === undefined) {\n    return { $undefined: null };\n  } else {\n    if (originalValue === undefined) {\n      // This should not happen.\n      throw new Error(\n        `Programming error. Current value is ${stringifyValueForError(\n          value,\n        )} but original value is undefined`,\n      );\n    }\n    return convexToJsonInternal(value, originalValue, context, false);\n  }\n}\n\n/**\n * Convert a Convex value to its JSON representation.\n *\n * Use {@link jsonToConvex} to recreate the original value.\n *\n * To learn more about Convex values, see [Types](https://docs.convex.dev/using/types).\n *\n * @param value - A Convex value to convert into JSON.\n * @returns The JSON representation of `value`.\n *\n * @public\n */\nexport function convexToJson(value: Value): JSONValue {\n  return convexToJsonInternal(value, value, \"\", false);\n}\n\n// Convert a Convex value or `undefined` into its JSON representation.\n// `undefined` is used in filters to represent a missing object field.\nexport function convexOrUndefinedToJson(value: Value | undefined): JSONValue {\n  return convexOrUndefinedToJsonInternal(value, value, \"\");\n}\n\n/**\n * Similar to convexToJson but also serializes top level undefined fields\n * using convexOrUndefinedToJson().\n *\n * @param value - A Convex value to convert into JSON.\n * @returns The JSON representation of `value`.\n */\nexport function patchValueToJson(value: Value): JSONValue {\n  return convexToJsonInternal(value, value, \"\", true);\n}\n", "import { Value, stringifyValueForError } from \"./value.js\";\n\nconst IDENTIFYING_FIELD = Symbol.for(\"ConvexError\");\n\nexport class ConvexError<TData extends Value> extends Error {\n  name = \"ConvexError\";\n  data: TData;\n  [IDENTIFYING_FIELD] = true;\n\n  constructor(data: TData) {\n    super(typeof data === \"string\" ? data : stringifyValueForError(data));\n    this.data = data;\n  }\n}\n", "/* eslint-disable no-console */ // This is the one file where we can `console.log` for the default logger implementation.\nimport { ConvexError, Value } from \"../values/index.js\";\nimport { FunctionFailure } from \"./sync/function_result.js\";\n\n// This is blue #9 from https://www.radix-ui.com/docs/colors/palette-composition/the-scales\n// It must look good in both light and dark mode.\nconst INFO_COLOR = \"color:rgb(0, 145, 255)\";\n\nexport type UdfType = \"query\" | \"mutation\" | \"action\" | \"any\";\n\nfunction prefix_for_source(source: UdfType) {\n  switch (source) {\n    case \"query\":\n      return \"Q\";\n    case \"mutation\":\n      return \"M\";\n    case \"action\":\n      return \"A\";\n    case \"any\":\n      return \"?\";\n  }\n}\n\nexport type LogLevel = \"debug\" | \"info\" | \"warn\" | \"error\";\n\n/**\n * A logger that can be used to log messages. By default, this is a wrapper\n * around `console`, but can be configured to not log at all or to log somewhere\n * else.\n */\nexport type Logger = {\n  logVerbose(...args: any[]): void;\n  log(...args: any[]): void;\n  warn(...args: any[]): void;\n  error(...args: any[]): void;\n};\n\nexport class DefaultLogger implements Logger {\n  private _onLogLineFuncs: Record<\n    string,\n    (level: LogLevel, ...args: any[]) => void\n  >;\n  private _verbose: boolean;\n\n  constructor(options: { verbose: boolean }) {\n    this._onLogLineFuncs = {};\n    this._verbose = options.verbose;\n  }\n\n  addLogLineListener(\n    func: (level: LogLevel, ...args: any[]) => void,\n  ): () => void {\n    let id = Math.random().toString(36).substring(2, 15);\n    for (let i = 0; i < 10; i++) {\n      if (this._onLogLineFuncs[id] === undefined) {\n        break;\n      }\n      id = Math.random().toString(36).substring(2, 15);\n    }\n    this._onLogLineFuncs[id] = func;\n    return () => {\n      delete this._onLogLineFuncs[id];\n    };\n  }\n\n  logVerbose(...args: any[]) {\n    if (this._verbose) {\n      for (const func of Object.values(this._onLogLineFuncs)) {\n        func(\"debug\", `${new Date().toISOString()}`, ...args);\n      }\n    }\n  }\n\n  log(...args: any[]) {\n    for (const func of Object.values(this._onLogLineFuncs)) {\n      func(\"info\", ...args);\n    }\n  }\n\n  warn(...args: any[]) {\n    for (const func of Object.values(this._onLogLineFuncs)) {\n      func(\"warn\", ...args);\n    }\n  }\n\n  error(...args: any[]) {\n    for (const func of Object.values(this._onLogLineFuncs)) {\n      func(\"error\", ...args);\n    }\n  }\n}\n\nexport function instantiateDefaultLogger(options: {\n  verbose: boolean;\n}): Logger {\n  const logger = new DefaultLogger(options);\n  logger.addLogLineListener((level, ...args) => {\n    switch (level) {\n      case \"debug\":\n        console.debug(...args);\n        break;\n      case \"info\":\n        console.log(...args);\n        break;\n      case \"warn\":\n        console.warn(...args);\n        break;\n      case \"error\":\n        console.error(...args);\n        break;\n      default: {\n        level satisfies never;\n        console.log(...args);\n      }\n    }\n  });\n  return logger;\n}\n\nexport function instantiateNoopLogger(options: { verbose: boolean }): Logger {\n  return new DefaultLogger(options);\n}\n\nexport function logForFunction(\n  logger: Logger,\n  type: \"info\" | \"error\",\n  source: UdfType,\n  udfPath: string,\n  message: string | { errorData: Value },\n) {\n  const prefix = prefix_for_source(source);\n\n  if (typeof message === \"object\") {\n    message = `ConvexError ${JSON.stringify(message.errorData, null, 2)}`;\n  }\n  if (type === \"info\") {\n    const match = message.match(/^\\[.*?\\] /);\n    if (match === null) {\n      logger.error(\n        `[CONVEX ${prefix}(${udfPath})] Could not parse console.log`,\n      );\n      return;\n    }\n    const level = message.slice(1, match[0].length - 2);\n    const args = message.slice(match[0].length);\n\n    logger.log(`%c[CONVEX ${prefix}(${udfPath})] [${level}]`, INFO_COLOR, args);\n  } else {\n    logger.error(`[CONVEX ${prefix}(${udfPath})] ${message}`);\n  }\n}\n\nexport function logFatalError(logger: Logger, message: string): Error {\n  const errorMessage = `[CONVEX FATAL ERROR] ${message}`;\n  logger.error(errorMessage);\n  return new Error(errorMessage);\n}\n\nexport function createHybridErrorStacktrace(\n  source: UdfType,\n  udfPath: string,\n  result: FunctionFailure,\n): string {\n  const prefix = prefix_for_source(source);\n  return `[CONVEX ${prefix}(${udfPath})] ${result.errorMessage}\\n  Called by client`;\n}\n\nexport function forwardData(\n  result: FunctionFailure,\n  error: ConvexError<string>,\n) {\n  (error as ConvexError<any>).data = result.errorData;\n  return error;\n}\n", "import {\n  FunctionReference,\n  FunctionReturnType,\n  OptionalRestArgs,\n  getFunctionName,\n} from \"../server/api.js\";\nimport { parseArgs, validateDeploymentUrl } from \"../common/index.js\";\nimport { version } from \"../index.js\";\nimport {\n  ConvexError,\n  JSONValue,\n  convexToJson,\n  jsonToConvex,\n} from \"../values/index.js\";\nimport {\n  instantiateDefaultLogger,\n  instantiateNoopLogger,\n  logForFunction,\n  Logger,\n} from \"./logging.js\";\nimport {\n  ArgsAndOptions,\n  FunctionArgs,\n  UserIdentityAttributes,\n} from \"../server/index.js\";\n\nexport const STATUS_CODE_OK = 200;\nexport const STATUS_CODE_BAD_REQUEST = 400;\n// Special custom 5xx HTTP status code to mean that the UDF returned an error.\n//\n// Must match the constant of the same name in the backend.\nexport const STATUS_CODE_UDF_FAILED = 560;\n\n// Allow fetch to be shimmed in for Node.js < 18\nlet specifiedFetch: typeof globalThis.fetch | undefined = undefined;\nexport function setFetch(f: typeof globalThis.fetch) {\n  specifiedFetch = f;\n}\n\nexport type HttpMutationOptions = {\n  /**\n   * Skip the default queue of mutations and run this immediately.\n   *\n   * This allows the same HttpConvexClient to be used to request multiple\n   * mutations in parallel, something not possible with WebSocket-based clients.\n   */\n  skipQueue: boolean;\n};\n\n/**\n * A Convex client that runs queries and mutations over HTTP.\n *\n * This client is stateful (it has user credentials and queues mutations)\n * so take care to avoid sharing it between requests in a server.\n *\n * This is appropriate for server-side code (like Netlify Lambdas) or non-reactive\n * webapps.\n *\n * @public\n */\nexport class ConvexHttpClient {\n  private readonly address: string;\n  private auth: string | undefined;\n  private adminAuth: string | undefined;\n  private encodedTsPromise?: Promise<string>;\n  private debug: boolean;\n  private fetchOptions?: FetchOptions;\n  private fetch?: typeof globalThis.fetch | undefined;\n  private logger: Logger;\n  private mutationQueue: Array<{\n    mutation: FunctionReference<\"mutation\">;\n    args: FunctionArgs<any>;\n    resolve: (value: any) => void;\n    reject: (error: any) => void;\n  }> = [];\n  private isProcessingQueue: boolean = false;\n\n  /**\n   * Create a new {@link ConvexHttpClient}.\n   *\n   * @param address - The url of your Convex deployment, often provided\n   * by an environment variable. E.g. `https://small-mouse-123.convex.cloud`.\n   * @param options - An object of options.\n   * - `skipConvexDeploymentUrlCheck` - Skip validating that the Convex deployment URL looks like\n   * `https://happy-animal-123.convex.cloud` or localhost. This can be useful if running a self-hosted\n   * Convex backend that uses a different URL.\n   * - `logger` - A logger or a boolean. If not provided, logs to the console.\n   * You can construct your own logger to customize logging to log elsewhere\n   * or not log at all, or use `false` as a shorthand for a no-op logger.\n   * A logger is an object with 4 methods: log(), warn(), error(), and logVerbose().\n   * These methods can receive multiple arguments of any types, like console.log().\n   * - `auth` - A JWT containing identity claims accessible in Convex functions.\n   * This identity may expire so it may be necessary to call `setAuth()` later,\n   * but for short-lived clients it's convenient to specify this value here.\n   * - `fetch` - A custom fetch implementation to use for all HTTP requests made by this client.\n   */\n  constructor(\n    address: string,\n    options?: {\n      skipConvexDeploymentUrlCheck?: boolean;\n      logger?: Logger | boolean;\n      auth?: string;\n      fetch?: typeof globalThis.fetch;\n    },\n  ) {\n    if (typeof options === \"boolean\") {\n      throw new Error(\n        \"skipConvexDeploymentUrlCheck as the second argument is no longer supported. Please pass an options object, `{ skipConvexDeploymentUrlCheck: true }`.\",\n      );\n    }\n    const opts = options ?? {};\n    if (opts.skipConvexDeploymentUrlCheck !== true) {\n      validateDeploymentUrl(address);\n    }\n    this.logger =\n      options?.logger === false\n        ? instantiateNoopLogger({ verbose: false })\n        : options?.logger !== true && options?.logger\n          ? options.logger\n          : instantiateDefaultLogger({ verbose: false });\n    this.address = address;\n    this.debug = true;\n    this.auth = undefined;\n    this.adminAuth = undefined;\n    this.fetch = options?.fetch;\n    if (options?.auth) {\n      this.setAuth(options.auth);\n    }\n  }\n\n  /**\n   * Obtain the {@link ConvexHttpClient}'s URL to its backend.\n   * @deprecated Use url, which returns the url without /api at the end.\n   *\n   * @returns The URL to the Convex backend, including the client's API version.\n   */\n  backendUrl(): string {\n    return `${this.address}/api`;\n  }\n\n  /**\n   * Return the address for this client, useful for creating a new client.\n   *\n   * Not guaranteed to match the address with which this client was constructed:\n   * it may be canonicalized.\n   */\n  get url() {\n    return this.address;\n  }\n\n  /**\n   * Set the authentication token to be used for subsequent queries and mutations.\n   *\n   * Should be called whenever the token changes (i.e. due to expiration and refresh).\n   *\n   * @param value - JWT-encoded OpenID Connect identity token.\n   */\n  setAuth(value: string) {\n    this.clearAuth();\n    this.auth = value;\n  }\n\n  /**\n   * Set admin auth token to allow calling internal queries, mutations, and actions\n   * and acting as an identity.\n   *\n   * @internal\n   */\n  setAdminAuth(token: string, actingAsIdentity?: UserIdentityAttributes) {\n    this.clearAuth();\n    if (actingAsIdentity !== undefined) {\n      // Encode the identity to a base64 string\n      const bytes = new TextEncoder().encode(JSON.stringify(actingAsIdentity));\n      const actingAsIdentityEncoded = btoa(String.fromCodePoint(...bytes));\n      this.adminAuth = `${token}:${actingAsIdentityEncoded}`;\n    } else {\n      this.adminAuth = token;\n    }\n  }\n\n  /**\n   * Clear the current authentication token if set.\n   */\n  clearAuth() {\n    this.auth = undefined;\n    this.adminAuth = undefined;\n  }\n\n  /**\n   * Sets whether the result log lines should be printed on the console or not.\n   *\n   * @internal\n   */\n  setDebug(debug: boolean) {\n    this.debug = debug;\n  }\n\n  /**\n   * Used to customize the fetch behavior in some runtimes.\n   *\n   * @internal\n   */\n  setFetchOptions(fetchOptions: FetchOptions) {\n    this.fetchOptions = fetchOptions;\n  }\n\n  /**\n   * This API is experimental: it may change or disappear.\n   *\n   * Execute a Convex query function at the same timestamp as every other\n   * consistent query execution run by this HTTP client.\n   *\n   * This doesn't make sense for long-lived ConvexHttpClients as Convex\n   * backends can read a limited amount into the past: beyond 30 seconds\n   * in the past may not be available.\n   *\n   * Create a new client to use a consistent time.\n   *\n   * @param name - The name of the query.\n   * @param args - The arguments object for the query. If this is omitted,\n   * the arguments will be `{}`.\n   * @returns A promise of the query's result.\n   *\n   * @deprecated This API is experimental: it may change or disappear.\n   */\n  async consistentQuery<Query extends FunctionReference<\"query\">>(\n    query: Query,\n    ...args: OptionalRestArgs<Query>\n  ): Promise<FunctionReturnType<Query>> {\n    const queryArgs = parseArgs(args[0]);\n\n    const timestampPromise = this.getTimestamp();\n    return await this.queryInner(query, queryArgs, { timestampPromise });\n  }\n\n  private async getTimestamp() {\n    if (this.encodedTsPromise) {\n      return this.encodedTsPromise;\n    }\n    return (this.encodedTsPromise = this.getTimestampInner());\n  }\n\n  private async getTimestampInner() {\n    const localFetch = this.fetch || specifiedFetch || fetch;\n\n    const headers: Record<string, string> = {\n      \"Content-Type\": \"application/json\",\n      \"Convex-Client\": `npm-${version}`,\n    };\n    const response = await localFetch(`${this.address}/api/query_ts`, {\n      ...this.fetchOptions,\n      method: \"POST\",\n      headers: headers,\n    });\n    if (!response.ok) {\n      throw new Error(await response.text());\n    }\n    const { ts } = (await response.json()) as { ts: string };\n    return ts;\n  }\n\n  /**\n   * Execute a Convex query function.\n   *\n   * @param name - The name of the query.\n   * @param args - The arguments object for the query. If this is omitted,\n   * the arguments will be `{}`.\n   * @returns A promise of the query's result.\n   */\n  async query<Query extends FunctionReference<\"query\">>(\n    query: Query,\n    ...args: OptionalRestArgs<Query>\n  ): Promise<FunctionReturnType<Query>> {\n    const queryArgs = parseArgs(args[0]);\n    return await this.queryInner(query, queryArgs, {});\n  }\n\n  private async queryInner<Query extends FunctionReference<\"query\">>(\n    query: Query,\n    queryArgs: FunctionArgs<Query>,\n    options: { timestampPromise?: Promise<string> },\n  ): Promise<FunctionReturnType<Query>> {\n    const name = getFunctionName(query);\n    const args = [convexToJson(queryArgs)];\n    const headers: Record<string, string> = {\n      \"Content-Type\": \"application/json\",\n      \"Convex-Client\": `npm-${version}`,\n    };\n    if (this.adminAuth) {\n      headers[\"Authorization\"] = `Convex ${this.adminAuth}`;\n    } else if (this.auth) {\n      headers[\"Authorization\"] = `Bearer ${this.auth}`;\n    }\n    const localFetch = this.fetch || specifiedFetch || fetch;\n\n    const timestamp = options.timestampPromise\n      ? await options.timestampPromise\n      : undefined;\n\n    const body = JSON.stringify({\n      path: name,\n      format: \"convex_encoded_json\",\n      args,\n      ...(timestamp ? { ts: timestamp } : {}),\n    });\n    const endpoint = timestamp\n      ? `${this.address}/api/query_at_ts`\n      : `${this.address}/api/query`;\n\n    const response = await localFetch(endpoint, {\n      ...this.fetchOptions,\n      body,\n      method: \"POST\",\n      headers: headers,\n    });\n    if (!response.ok && response.status !== STATUS_CODE_UDF_FAILED) {\n      throw new Error(await response.text());\n    }\n    const respJSON = await response.json();\n\n    if (this.debug) {\n      for (const line of respJSON.logLines ?? []) {\n        logForFunction(this.logger, \"info\", \"query\", name, line);\n      }\n    }\n    switch (respJSON.status) {\n      case \"success\":\n        return jsonToConvex(respJSON.value);\n      case \"error\":\n        if (respJSON.errorData !== undefined) {\n          throw forwardErrorData(\n            respJSON.errorData,\n            new ConvexError(respJSON.errorMessage),\n          );\n        }\n        throw new Error(respJSON.errorMessage);\n      default:\n        throw new Error(`Invalid response: ${JSON.stringify(respJSON)}`);\n    }\n  }\n\n  private async mutationInner<Mutation extends FunctionReference<\"mutation\">>(\n    mutation: Mutation,\n    mutationArgs: FunctionArgs<Mutation>,\n  ): Promise<FunctionReturnType<Mutation>> {\n    const name = getFunctionName(mutation);\n    const body = JSON.stringify({\n      path: name,\n      format: \"convex_encoded_json\",\n      args: [convexToJson(mutationArgs)],\n    });\n    const headers: Record<string, string> = {\n      \"Content-Type\": \"application/json\",\n      \"Convex-Client\": `npm-${version}`,\n    };\n    if (this.adminAuth) {\n      headers[\"Authorization\"] = `Convex ${this.adminAuth}`;\n    } else if (this.auth) {\n      headers[\"Authorization\"] = `Bearer ${this.auth}`;\n    }\n    const localFetch = this.fetch || specifiedFetch || fetch;\n    const response = await localFetch(`${this.address}/api/mutation`, {\n      ...this.fetchOptions,\n      body,\n      method: \"POST\",\n      headers: headers,\n    });\n    if (!response.ok && response.status !== STATUS_CODE_UDF_FAILED) {\n      throw new Error(await response.text());\n    }\n    const respJSON = await response.json();\n    if (this.debug) {\n      for (const line of respJSON.logLines ?? []) {\n        logForFunction(this.logger, \"info\", \"mutation\", name, line);\n      }\n    }\n    switch (respJSON.status) {\n      case \"success\":\n        return jsonToConvex(respJSON.value);\n      case \"error\":\n        if (respJSON.errorData !== undefined) {\n          throw forwardErrorData(\n            respJSON.errorData,\n            new ConvexError(respJSON.errorMessage),\n          );\n        }\n        throw new Error(respJSON.errorMessage);\n      default:\n        throw new Error(`Invalid response: ${JSON.stringify(respJSON)}`);\n    }\n  }\n\n  private async processMutationQueue() {\n    if (this.isProcessingQueue) {\n      return;\n    }\n\n    this.isProcessingQueue = true;\n    while (this.mutationQueue.length > 0) {\n      const { mutation, args, resolve, reject } = this.mutationQueue.shift()!;\n      try {\n        const result = await this.mutationInner(mutation, args);\n        resolve(result);\n      } catch (error) {\n        reject(error);\n      }\n    }\n    this.isProcessingQueue = false;\n  }\n\n  private enqueueMutation<Mutation extends FunctionReference<\"mutation\">>(\n    mutation: Mutation,\n    args: FunctionArgs<Mutation>,\n  ): Promise<FunctionReturnType<Mutation>> {\n    return new Promise((resolve, reject) => {\n      this.mutationQueue.push({ mutation, args, resolve, reject });\n      void this.processMutationQueue();\n    });\n  }\n\n  /**\n   * Execute a Convex mutation function. Mutations are queued by default.\n   *\n   * @param name - The name of the mutation.\n   * @param args - The arguments object for the mutation. If this is omitted,\n   * the arguments will be `{}`.\n   * @param options - An optional object containing\n   * @returns A promise of the mutation's result.\n   */\n  async mutation<Mutation extends FunctionReference<\"mutation\">>(\n    mutation: Mutation,\n    ...args: ArgsAndOptions<Mutation, HttpMutationOptions>\n  ): Promise<FunctionReturnType<Mutation>> {\n    const [fnArgs, options] = args;\n    const mutationArgs = parseArgs(fnArgs);\n    const queued = !options?.skipQueue;\n\n    if (queued) {\n      return await this.enqueueMutation(mutation, mutationArgs);\n    } else {\n      return await this.mutationInner(mutation, mutationArgs);\n    }\n  }\n\n  /**\n   * Execute a Convex action function. Actions are not queued.\n   *\n   * @param name - The name of the action.\n   * @param args - The arguments object for the action. If this is omitted,\n   * the arguments will be `{}`.\n   * @returns A promise of the action's result.\n   */\n  async action<Action extends FunctionReference<\"action\">>(\n    action: Action,\n    ...args: OptionalRestArgs<Action>\n  ): Promise<FunctionReturnType<Action>> {\n    const actionArgs = parseArgs(args[0]);\n    const name = getFunctionName(action);\n    const body = JSON.stringify({\n      path: name,\n      format: \"convex_encoded_json\",\n      args: [convexToJson(actionArgs)],\n    });\n    const headers: Record<string, string> = {\n      \"Content-Type\": \"application/json\",\n      \"Convex-Client\": `npm-${version}`,\n    };\n    if (this.adminAuth) {\n      headers[\"Authorization\"] = `Convex ${this.adminAuth}`;\n    } else if (this.auth) {\n      headers[\"Authorization\"] = `Bearer ${this.auth}`;\n    }\n    const localFetch = this.fetch || specifiedFetch || fetch;\n    const response = await localFetch(`${this.address}/api/action`, {\n      ...this.fetchOptions,\n      body,\n      method: \"POST\",\n      headers: headers,\n    });\n    if (!response.ok && response.status !== STATUS_CODE_UDF_FAILED) {\n      throw new Error(await response.text());\n    }\n    const respJSON = await response.json();\n    if (this.debug) {\n      for (const line of respJSON.logLines ?? []) {\n        logForFunction(this.logger, \"info\", \"action\", name, line);\n      }\n    }\n    switch (respJSON.status) {\n      case \"success\":\n        return jsonToConvex(respJSON.value);\n      case \"error\":\n        if (respJSON.errorData !== undefined) {\n          throw forwardErrorData(\n            respJSON.errorData,\n            new ConvexError(respJSON.errorMessage),\n          );\n        }\n        throw new Error(respJSON.errorMessage);\n      default:\n        throw new Error(`Invalid response: ${JSON.stringify(respJSON)}`);\n    }\n  }\n\n  /**\n   * Execute a Convex function of an unknown type. These function calls are not queued.\n   *\n   * @param name - The name of the function.\n   * @param args - The arguments object for the function. If this is omitted,\n   * the arguments will be `{}`.\n   * @returns A promise of the function's result.\n   *\n   * @internal\n   */\n  async function<\n    AnyFunction extends FunctionReference<\"query\" | \"mutation\" | \"action\">,\n  >(\n    anyFunction: AnyFunction | string,\n    componentPath?: string,\n    ...args: OptionalRestArgs<AnyFunction>\n  ): Promise<FunctionReturnType<AnyFunction>> {\n    const functionArgs = parseArgs(args[0]);\n    const name =\n      typeof anyFunction === \"string\"\n        ? anyFunction\n        : getFunctionName(anyFunction);\n    const body = JSON.stringify({\n      componentPath: componentPath,\n      path: name,\n      format: \"convex_encoded_json\",\n      args: convexToJson(functionArgs),\n    });\n    const headers: Record<string, string> = {\n      \"Content-Type\": \"application/json\",\n      \"Convex-Client\": `npm-${version}`,\n    };\n    if (this.adminAuth) {\n      headers[\"Authorization\"] = `Convex ${this.adminAuth}`;\n    } else if (this.auth) {\n      headers[\"Authorization\"] = `Bearer ${this.auth}`;\n    }\n    const localFetch = this.fetch || specifiedFetch || fetch;\n    const response = await localFetch(`${this.address}/api/function`, {\n      ...this.fetchOptions,\n      body,\n      method: \"POST\",\n      headers: headers,\n    });\n    if (!response.ok && response.status !== STATUS_CODE_UDF_FAILED) {\n      throw new Error(await response.text());\n    }\n    const respJSON = await response.json();\n    if (this.debug) {\n      for (const line of respJSON.logLines ?? []) {\n        logForFunction(this.logger, \"info\", \"any\", name, line);\n      }\n    }\n    switch (respJSON.status) {\n      case \"success\":\n        return jsonToConvex(respJSON.value);\n      case \"error\":\n        if (respJSON.errorData !== undefined) {\n          throw forwardErrorData(\n            respJSON.errorData,\n            new ConvexError(respJSON.errorMessage),\n          );\n        }\n        throw new Error(respJSON.errorMessage);\n      default:\n        throw new Error(`Invalid response: ${JSON.stringify(respJSON)}`);\n    }\n  }\n}\n\nfunction forwardErrorData(errorData: JSONValue, error: ConvexError<string>) {\n  (error as ConvexError<any>).data = jsonToConvex(errorData);\n  return error;\n}\n\n/**\n * @internal\n */\ntype FetchOptions = { cache: \"force-cache\" | \"no-store\" };\n", "import { convexToJson, Value } from \"../../values/index.js\";\n\nexport function canonicalizeUdfPath(udfPath: string): string {\n  const pieces = udfPath.split(\":\");\n  let moduleName: string;\n  let functionName: string;\n  if (pieces.length === 1) {\n    moduleName = pieces[0];\n    functionName = \"default\";\n  } else {\n    moduleName = pieces.slice(0, pieces.length - 1).join(\":\");\n    functionName = pieces[pieces.length - 1];\n  }\n  if (moduleName.endsWith(\".js\")) {\n    moduleName = moduleName.slice(0, -3);\n  }\n  return `${moduleName}:${functionName}`;\n}\n\n/**\n * The serialization here is not stable, these strings never make it outside the client.\n */\n\n/**\n * A string representing the name and arguments of a query.\n *\n * This is used by the {@link BaseConvexClient}.\n *\n * @public\n */\nexport type QueryToken = string & { __queryToken: true };\n\n/**\n * A string representing the name and arguments of a paginated query.\n *\n * This is a specialized form of QueryToken used for paginated queries.\n */\nexport type PaginatedQueryToken = QueryToken & { __paginatedQueryToken: true };\n\nexport function serializePathAndArgs(\n  udfPath: string,\n  args: Record<string, Value>,\n): QueryToken {\n  return JSON.stringify({\n    udfPath: canonicalizeUdfPath(udfPath),\n    args: convexToJson(args),\n  }) as QueryToken;\n}\n\nexport function serializePaginatedPathAndArgs(\n  udfPath: string,\n  args: Record<string, Value>, // args WITHOUT paginationOpts\n  options: { initialNumItems: number; id: number },\n): PaginatedQueryToken {\n  const { initialNumItems, id } = options;\n  const result = JSON.stringify({\n    type: \"paginated\",\n    udfPath: canonicalizeUdfPath(udfPath),\n    args: convexToJson(args),\n    options: convexToJson({ initialNumItems, id }),\n  }) as PaginatedQueryToken;\n  return result;\n}\n\nexport function serializedQueryTokenIsPaginated(\n  token: QueryToken | PaginatedQueryToken,\n): token is PaginatedQueryToken {\n  return JSON.parse(token).type === \"paginated\";\n}\n", "/**\n * The local state of the client:\n * - which queries are subscribed to\n * - the \"Query Set Version,\" used to produce QuerySetModification messages\n * - the current auth token and \"Identity Version\"\n *\n * Local state does not include:\n * - query results (see RemoteQuerySet)\n * - locally made \"optimistic update\" modifications to query results (see OptimisticQueryResults)\n * - any query results at all\n **/\n\nimport { convexToJson, Value } from \"../../values/index.js\";\nimport {\n  AddQuery,\n  RemoveQuery,\n  QueryId,\n  QuerySetModification,\n  QuerySetVersion,\n  IdentityVersion,\n  Authenticate,\n  QueryJournal,\n  Transition,\n  AdminAuthentication,\n  UserIdentityAttributes,\n} from \"./protocol.js\";\nimport {\n  canonicalizeUdfPath,\n  QueryToken,\n  serializePathAndArgs,\n} from \"./udf_path_utils.js\";\n\ntype LocalQuery = {\n  id: QueryId;\n  canonicalizedUdfPath: string;\n  args: Record<string, Value>;\n  numSubscribers: number;\n  journal?: QueryJournal | undefined;\n  componentPath?: string | undefined;\n};\n\nexport type AuthState =\n  | {\n      tokenType: \"User\";\n      value: string;\n    }\n  | {\n      tokenType: \"Admin\";\n      value: string;\n      impersonating?: UserIdentityAttributes | undefined;\n    };\n\nexport class LocalSyncState {\n  private nextQueryId: QueryId;\n  private querySetVersion: QuerySetVersion;\n  private readonly querySet: Map<QueryToken, LocalQuery>;\n  private readonly queryIdToToken: Map<QueryId, QueryToken>;\n  private identityVersion: IdentityVersion;\n  private auth: AuthState | undefined;\n  private readonly outstandingQueriesOlderThanRestart: Set<QueryId>;\n  private outstandingAuthOlderThanRestart: boolean;\n  private paused: boolean;\n  private pendingQuerySetModifications: Map<QueryId, AddQuery | RemoveQuery>;\n\n  constructor() {\n    this.nextQueryId = 0;\n    this.querySetVersion = 0;\n    this.identityVersion = 0;\n    this.querySet = new Map();\n    this.queryIdToToken = new Map();\n    this.outstandingQueriesOlderThanRestart = new Set();\n    this.outstandingAuthOlderThanRestart = false;\n    this.paused = false;\n    this.pendingQuerySetModifications = new Map();\n  }\n\n  hasSyncedPastLastReconnect(): boolean {\n    return (\n      this.outstandingQueriesOlderThanRestart.size === 0 &&\n      !this.outstandingAuthOlderThanRestart\n    );\n  }\n\n  markAuthCompletion() {\n    this.outstandingAuthOlderThanRestart = false;\n  }\n\n  subscribe(\n    udfPath: string,\n    args: Record<string, Value>,\n    journal?: QueryJournal | undefined,\n    componentPath?: string | undefined,\n  ): {\n    queryToken: QueryToken;\n    modification: QuerySetModification | null;\n    unsubscribe: () => QuerySetModification | null;\n  } {\n    const canonicalizedUdfPath = canonicalizeUdfPath(udfPath);\n    const queryToken = serializePathAndArgs(canonicalizedUdfPath, args);\n\n    const existingEntry = this.querySet.get(queryToken);\n\n    if (existingEntry !== undefined) {\n      existingEntry.numSubscribers += 1;\n      return {\n        queryToken,\n        modification: null,\n        unsubscribe: () => this.removeSubscriber(queryToken),\n      };\n    } else {\n      const queryId = this.nextQueryId++;\n      const query: LocalQuery = {\n        id: queryId,\n        canonicalizedUdfPath,\n        args,\n        numSubscribers: 1,\n        journal,\n        componentPath,\n      };\n      this.querySet.set(queryToken, query);\n      this.queryIdToToken.set(queryId, queryToken);\n\n      const baseVersion = this.querySetVersion;\n      const newVersion = this.querySetVersion + 1;\n\n      const add: AddQuery = {\n        type: \"Add\",\n        queryId,\n        udfPath: canonicalizedUdfPath,\n        args: [convexToJson(args)],\n        journal,\n        componentPath,\n      };\n\n      if (this.paused) {\n        this.pendingQuerySetModifications.set(queryId, add);\n      } else {\n        this.querySetVersion = newVersion;\n      }\n\n      const modification: QuerySetModification = {\n        type: \"ModifyQuerySet\",\n        baseVersion,\n        newVersion,\n        modifications: [add],\n      };\n      return {\n        queryToken,\n        modification,\n        unsubscribe: () => this.removeSubscriber(queryToken),\n      };\n    }\n  }\n\n  transition(transition: Transition) {\n    for (const modification of transition.modifications) {\n      switch (modification.type) {\n        case \"QueryUpdated\":\n        case \"QueryFailed\": {\n          this.outstandingQueriesOlderThanRestart.delete(modification.queryId);\n          const journal = modification.journal;\n          if (journal !== undefined) {\n            const queryToken = this.queryIdToToken.get(modification.queryId);\n            // We may have already unsubscribed to this query by the time the server\n            // sends us the journal. If so, just ignore it.\n            if (queryToken !== undefined) {\n              this.querySet.get(queryToken)!.journal = journal;\n            }\n          }\n\n          break;\n        }\n        case \"QueryRemoved\": {\n          this.outstandingQueriesOlderThanRestart.delete(modification.queryId);\n          break;\n        }\n        default: {\n          // Enforce that the switch-case is exhaustive.\n          modification satisfies never;\n          throw new Error(`Invalid modification ${(modification as any).type}`);\n        }\n      }\n    }\n  }\n\n  queryId(udfPath: string, args: Record<string, Value>): QueryId | null {\n    const canonicalizedUdfPath = canonicalizeUdfPath(udfPath);\n    const queryToken = serializePathAndArgs(canonicalizedUdfPath, args);\n    const existingEntry = this.querySet.get(queryToken);\n    if (existingEntry !== undefined) {\n      return existingEntry.id;\n    }\n    return null;\n  }\n\n  isCurrentOrNewerAuthVersion(version: IdentityVersion): boolean {\n    return version >= this.identityVersion;\n  }\n\n  getAuth(): AuthState | undefined {\n    return this.auth;\n  }\n\n  setAuth(value: string): Authenticate {\n    this.auth = {\n      tokenType: \"User\" as const,\n      value: value,\n    };\n    const baseVersion = this.identityVersion;\n    if (!this.paused) {\n      this.identityVersion = baseVersion + 1;\n    }\n    return {\n      type: \"Authenticate\",\n      baseVersion: baseVersion,\n      ...this.auth,\n    };\n  }\n\n  setAdminAuth(\n    value: string,\n    actingAs?: UserIdentityAttributes,\n  ): AdminAuthentication {\n    const auth: typeof this.auth & {\n      tokenType: \"Admin\";\n    } = {\n      tokenType: \"Admin\",\n      value,\n      impersonating: actingAs,\n    };\n    this.auth = auth;\n    const baseVersion = this.identityVersion;\n    if (!this.paused) {\n      this.identityVersion = baseVersion + 1;\n    }\n    return {\n      type: \"Authenticate\",\n      baseVersion: baseVersion,\n      ...auth,\n    };\n  }\n\n  clearAuth(): Authenticate {\n    this.auth = undefined;\n    this.markAuthCompletion();\n    const baseVersion = this.identityVersion;\n    if (!this.paused) {\n      this.identityVersion = baseVersion + 1;\n    }\n    return {\n      type: \"Authenticate\",\n      tokenType: \"None\",\n      baseVersion: baseVersion,\n    };\n  }\n\n  hasAuth(): boolean {\n    return !!this.auth;\n  }\n\n  isNewAuth(value: string): boolean {\n    return this.auth?.value !== value;\n  }\n\n  queryPath(queryId: QueryId): string | null {\n    const pathAndArgs = this.queryIdToToken.get(queryId);\n    if (pathAndArgs) {\n      return this.querySet.get(pathAndArgs)!.canonicalizedUdfPath;\n    }\n    return null;\n  }\n\n  queryArgs(queryId: QueryId): Record<string, Value> | null {\n    const pathAndArgs = this.queryIdToToken.get(queryId);\n    if (pathAndArgs) {\n      return this.querySet.get(pathAndArgs)!.args;\n    }\n    return null;\n  }\n\n  queryToken(queryId: QueryId): QueryToken | null {\n    return this.queryIdToToken.get(queryId) ?? null;\n  }\n\n  queryJournal(queryToken: QueryToken): QueryJournal | undefined {\n    return this.querySet.get(queryToken)?.journal;\n  }\n\n  restart(): [QuerySetModification, (Authenticate | undefined)?] {\n    // Restart works whether we are paused or unpaused.\n    // The `this.pendingQuerySetModifications` is not used\n    // when restarting as the AddQuery and RemoveQuery are computed\n    // from scratch, based on the old remote query results, here.\n    this.unpause();\n\n    this.outstandingQueriesOlderThanRestart.clear();\n    const modifications = [];\n    for (const localQuery of this.querySet.values()) {\n      const add: AddQuery = {\n        type: \"Add\",\n        queryId: localQuery.id,\n        udfPath: localQuery.canonicalizedUdfPath,\n        args: [convexToJson(localQuery.args)],\n        journal: localQuery.journal,\n        componentPath: localQuery.componentPath,\n      };\n      modifications.push(add);\n\n      // Track all re-sent queries as outstanding so the backoff retry\n      // counter doesn't reset until the server has re-confirmed results\n      // for every active query.\n      this.outstandingQueriesOlderThanRestart.add(localQuery.id);\n    }\n    this.querySetVersion = 1;\n    const querySet: QuerySetModification = {\n      type: \"ModifyQuerySet\",\n      baseVersion: 0,\n      newVersion: 1,\n      modifications,\n    };\n    // If there's no auth, no need to send an update as the server will also start with an unknown identity.\n    if (!this.auth) {\n      this.identityVersion = 0;\n      return [querySet, undefined];\n    }\n    this.outstandingAuthOlderThanRestart = true;\n    const authenticate: Authenticate = {\n      type: \"Authenticate\",\n      baseVersion: 0,\n      ...this.auth,\n    };\n    this.identityVersion = 1;\n    return [querySet, authenticate];\n  }\n\n  pause() {\n    this.paused = true;\n  }\n\n  resume(): [QuerySetModification | undefined, Authenticate | undefined] {\n    const querySet: QuerySetModification | undefined =\n      this.pendingQuerySetModifications.size > 0\n        ? {\n            type: \"ModifyQuerySet\",\n            baseVersion: this.querySetVersion,\n            newVersion: ++this.querySetVersion,\n            modifications: Array.from(\n              this.pendingQuerySetModifications.values(),\n            ),\n          }\n        : undefined;\n    const authenticate: Authenticate | undefined =\n      this.auth !== undefined\n        ? {\n            type: \"Authenticate\",\n            baseVersion: this.identityVersion++,\n            ...this.auth,\n          }\n        : undefined;\n\n    this.unpause();\n\n    return [querySet, authenticate];\n  }\n\n  private unpause() {\n    this.paused = false;\n    this.pendingQuerySetModifications.clear();\n  }\n\n  private removeSubscriber(\n    queryToken: QueryToken,\n  ): QuerySetModification | null {\n    const localQuery = this.querySet.get(queryToken)!;\n\n    if (localQuery.numSubscribers > 1) {\n      localQuery.numSubscribers -= 1;\n      return null;\n    } else {\n      this.querySet.delete(queryToken);\n      this.queryIdToToken.delete(localQuery.id);\n      this.outstandingQueriesOlderThanRestart.delete(localQuery.id);\n      const baseVersion = this.querySetVersion;\n      const newVersion = this.querySetVersion + 1;\n      const remove: RemoveQuery = {\n        type: \"Remove\",\n        queryId: localQuery.id,\n      };\n      if (this.paused) {\n        if (this.pendingQuerySetModifications.has(localQuery.id)) {\n          this.pendingQuerySetModifications.delete(localQuery.id);\n        } else {\n          this.pendingQuerySetModifications.set(localQuery.id, remove);\n        }\n      } else {\n        this.querySetVersion = newVersion;\n      }\n      return {\n        type: \"ModifyQuerySet\",\n        baseVersion,\n        newVersion,\n        modifications: [remove],\n      };\n    }\n  }\n}\n", "import { jsonToConvex } from \"../../values/index.js\";\nimport { logForFunction, Logger } from \"../logging.js\";\nimport { Long } from \"../../vendor/long.js\";\nimport { FunctionResult } from \"./function_result.js\";\nimport {\n  ActionRequest,\n  ActionResponse,\n  ClientMessage,\n  MutationRequest,\n  MutationResponse,\n  RequestId,\n} from \"./protocol.js\";\n\ntype RequestStatus =\n  | {\n      status: \"Requested\" | \"NotSent\";\n      onResult: (result: FunctionResult) => void;\n      requestedAt: Date;\n    }\n  | {\n      status: \"Completed\";\n      result: FunctionResult;\n      onResolve: () => void;\n      ts: Long;\n    };\n\nexport class RequestManager {\n  private inflightRequests: Map<\n    RequestId,\n    {\n      message: MutationRequest | ActionRequest;\n      status: RequestStatus;\n    }\n  >;\n  private requestsOlderThanRestart: Set<RequestId>;\n  private inflightMutationsCount: number = 0;\n  private inflightActionsCount: number = 0;\n  constructor(\n    private readonly logger: Logger,\n    private readonly markConnectionStateDirty: () => void,\n  ) {\n    this.inflightRequests = new Map();\n    this.requestsOlderThanRestart = new Set();\n  }\n\n  request(\n    message: MutationRequest | ActionRequest,\n    sent: boolean,\n  ): Promise<FunctionResult> {\n    const result = new Promise<FunctionResult>((resolve) => {\n      const status = sent ? \"Requested\" : \"NotSent\";\n      this.inflightRequests.set(message.requestId, {\n        message,\n        status: { status, requestedAt: new Date(), onResult: resolve },\n      });\n\n      if (message.type === \"Mutation\") {\n        this.inflightMutationsCount++;\n      } else if (message.type === \"Action\") {\n        this.inflightActionsCount++;\n      }\n    });\n\n    this.markConnectionStateDirty();\n    return result;\n  }\n\n  /**\n   * Update the state after receiving a response.\n   *\n   * @returns A RequestId if the request is complete and its optimistic update\n   * can be dropped, null otherwise.\n   */\n  onResponse(\n    response: MutationResponse | ActionResponse,\n  ): { requestId: RequestId; result: FunctionResult } | null {\n    const requestInfo = this.inflightRequests.get(response.requestId);\n    if (requestInfo === undefined) {\n      // Annoyingly we can occasionally get responses to mutations that we're no\n      // longer tracking. One flow where this happens is:\n      // 1. Client sends mutation 1\n      // 2. Client gets response for mutation 1. The sever says that it was committed at ts=10.\n      // 3. Client is disconnected\n      // 4. Client reconnects and re-issues queries and this mutation.\n      // 5. Server sends transition message to ts=20\n      // 6. Client drops mutation because it's already been observed.\n      // 7. Client receives a second response for mutation 1 but doesn't know about it anymore.\n\n      // The right fix for this is probably to add a reconciliation phase on\n      // reconnection where we receive responses to all the mutations before\n      // the transition message so this flow could never happen (CX-1513).\n\n      // For now though, we can just ignore this message.\n      return null;\n    }\n\n    // Because `.restart()` re-requests completed requests, we may get some\n    // responses for requests that are already in the \"Completed\" state.\n    // We can safely ignore those because we've already notified the UI about\n    // their results.\n    if (requestInfo.status.status === \"Completed\") {\n      return null;\n    }\n\n    const udfType =\n      requestInfo.message.type === \"Mutation\" ? \"mutation\" : \"action\";\n    const udfPath = requestInfo.message.udfPath;\n\n    for (const line of response.logLines) {\n      logForFunction(this.logger, \"info\", udfType, udfPath, line);\n    }\n\n    const status = requestInfo.status;\n    let result: FunctionResult;\n    let onResolve;\n    if (response.success) {\n      result = {\n        success: true,\n        logLines: response.logLines,\n        value: jsonToConvex(response.result),\n      };\n      onResolve = () => status.onResult(result);\n    } else {\n      const errorMessage = response.result as string;\n      const { errorData } = response;\n      logForFunction(this.logger, \"error\", udfType, udfPath, errorMessage);\n      result = {\n        success: false,\n        errorMessage,\n        errorData:\n          errorData !== undefined ? jsonToConvex(errorData) : undefined,\n        logLines: response.logLines,\n      };\n      onResolve = () => status.onResult(result);\n    }\n\n    // We can resolve Mutation failures immediately since they don't have any\n    // side effects. Actions are intentionally decoupled from\n    // queries/mutations here on the sync protocol since they have different\n    // guarantees.\n    if (response.type === \"ActionResponse\" || !response.success) {\n      onResolve();\n      this.inflightRequests.delete(response.requestId);\n      this.requestsOlderThanRestart.delete(response.requestId);\n\n      if (requestInfo.message.type === \"Action\") {\n        this.inflightActionsCount--;\n      } else if (requestInfo.message.type === \"Mutation\") {\n        this.inflightMutationsCount--;\n      }\n\n      this.markConnectionStateDirty();\n      return { requestId: response.requestId, result };\n    }\n\n    // We have to wait to resolve the request promise until after we transition\n    // past this timestamp so clients can read their own writes.\n    requestInfo.status = {\n      status: \"Completed\",\n      result,\n      ts: response.ts,\n      onResolve,\n    };\n\n    return null;\n  }\n\n  // Remove and returns completed requests.\n  removeCompleted(ts: Long): Map<RequestId, FunctionResult> {\n    const completeRequests: Map<RequestId, FunctionResult> = new Map();\n    for (const [requestId, requestInfo] of this.inflightRequests.entries()) {\n      const status = requestInfo.status;\n      if (status.status === \"Completed\" && status.ts.lessThanOrEqual(ts)) {\n        status.onResolve();\n        completeRequests.set(requestId, status.result);\n\n        if (requestInfo.message.type === \"Mutation\") {\n          this.inflightMutationsCount--;\n        } else if (requestInfo.message.type === \"Action\") {\n          this.inflightActionsCount--;\n        }\n\n        this.inflightRequests.delete(requestId);\n        this.requestsOlderThanRestart.delete(requestId);\n      }\n    }\n    if (completeRequests.size > 0) {\n      this.markConnectionStateDirty();\n    }\n    return completeRequests;\n  }\n\n  restart(): ClientMessage[] {\n    // When we reconnect to the backend, re-request all requests that are safe\n    // to be resend.\n\n    this.requestsOlderThanRestart = new Set(this.inflightRequests.keys());\n    const allMessages = [];\n    for (const [requestId, value] of this.inflightRequests) {\n      if (value.status.status === \"NotSent\") {\n        value.status.status = \"Requested\";\n        allMessages.push(value.message);\n        continue;\n      }\n\n      if (value.message.type === \"Mutation\") {\n        // This includes ones that have already been completed because we still\n        // want to tell the backend to transition the client past the completed\n        // timestamp. This is safe since mutations are idempotent.\n        allMessages.push(value.message);\n      } else if (value.message.type === \"Action\") {\n        // Unlike mutations, actions are not idempotent. When we reconnect to the\n        // backend, we don't know if it is safe to resend in-flight actions, so we\n        // cancel them and consider them failed.\n        this.inflightRequests.delete(requestId);\n        this.requestsOlderThanRestart.delete(requestId);\n        this.inflightActionsCount--;\n        if (value.status.status === \"Completed\") {\n          throw new Error(\"Action should never be in 'Completed' state\");\n        }\n        value.status.onResult({\n          success: false,\n          errorMessage: \"Connection lost while action was in flight\",\n          logLines: [],\n        });\n      }\n    }\n    this.markConnectionStateDirty();\n    return allMessages;\n  }\n\n  resume(): ClientMessage[] {\n    const allMessages = [];\n    for (const [, value] of this.inflightRequests) {\n      if (value.status.status === \"NotSent\") {\n        value.status.status = \"Requested\";\n        allMessages.push(value.message);\n        continue;\n      }\n    }\n    return allMessages;\n  }\n\n  /**\n   * @returns true if there are any requests that have been requested but have\n   * not be completed yet.\n   */\n  hasIncompleteRequests(): boolean {\n    for (const requestInfo of this.inflightRequests.values()) {\n      if (requestInfo.status.status === \"Requested\") {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  /**\n   * @returns true if there are any inflight requests, including ones that have\n   * completed on the server, but have not been applied.\n   */\n  hasInflightRequests(): boolean {\n    return this.inflightRequests.size > 0;\n  }\n\n  /**\n   * @returns true if there are any inflight requests, that have been hanging around\n   * since prior to the most recent restart.\n   */\n  hasSyncedPastLastReconnect(): boolean {\n    return this.requestsOlderThanRestart.size === 0;\n  }\n\n  timeOfOldestInflightRequest(): Date | null {\n    if (this.inflightRequests.size === 0) {\n      return null;\n    }\n    let oldestInflightRequest = Date.now();\n    for (const request of this.inflightRequests.values()) {\n      if (request.status.status !== \"Completed\") {\n        if (request.status.requestedAt.getTime() < oldestInflightRequest) {\n          oldestInflightRequest = request.status.requestedAt.getTime();\n        }\n      }\n    }\n    return new Date(oldestInflightRequest);\n  }\n\n  /**\n   * @returns The number of mutations currently in flight.\n   */\n  inflightMutations(): number {\n    return this.inflightMutationsCount;\n  }\n\n  /**\n   * @returns The number of actions currently in flight.\n   */\n  inflightActions(): number {\n    return this.inflightActionsCount;\n  }\n}\n", "import {\n  FunctionArgs,\n  FunctionReference,\n  FunctionReturnType,\n  OptionalRestArgs,\n  getFunctionName,\n} from \"../../server/api.js\";\nimport { parseArgs } from \"../../common/index.js\";\nimport { Value } from \"../../values/index.js\";\nimport { createHybridErrorStacktrace, forwardData } from \"../logging.js\";\nimport { FunctionResult } from \"./function_result.js\";\nimport { OptimisticLocalStore } from \"./optimistic_updates.js\";\nimport { RequestId } from \"./protocol.js\";\nimport {\n  canonicalizeUdfPath,\n  QueryToken,\n  serializePathAndArgs,\n} from \"./udf_path_utils.js\";\nimport { ConvexError } from \"../../values/errors.js\";\n\n/**\n * An optimistic update function that has been curried over its arguments.\n */\ntype WrappedOptimisticUpdate = (locaQueryStore: OptimisticLocalStore) => void;\n\n/**\n * The implementation of `OptimisticLocalStore`.\n *\n * This class provides the interface for optimistic updates to modify query results.\n */\nclass OptimisticLocalStoreImpl implements OptimisticLocalStore {\n  // A references of the query results in OptimisticQueryResults\n  private readonly queryResults: QueryResultsMap;\n\n  // All of the queries modified by this class\n  readonly modifiedQueries: QueryToken[];\n\n  constructor(queryResults: QueryResultsMap) {\n    this.queryResults = queryResults;\n    this.modifiedQueries = [];\n  }\n\n  getQuery<Query extends FunctionReference<\"query\">>(\n    query: Query,\n    ...args: OptionalRestArgs<Query>\n  ): undefined | FunctionReturnType<Query> {\n    const queryArgs = parseArgs(args[0]);\n    const name = getFunctionName(query);\n    const queryResult = this.queryResults.get(\n      serializePathAndArgs(name, queryArgs),\n    );\n    if (queryResult === undefined) {\n      return undefined;\n    }\n    return OptimisticLocalStoreImpl.queryValue(queryResult.result);\n  }\n\n  getAllQueries<Query extends FunctionReference<\"query\">>(\n    query: Query,\n  ): {\n    args: FunctionArgs<Query>;\n    value: undefined | FunctionReturnType<Query>;\n  }[] {\n    const queriesWithName: {\n      args: FunctionArgs<Query>;\n      value: undefined | FunctionReturnType<Query>;\n    }[] = [];\n    const name = getFunctionName(query);\n    for (const queryResult of this.queryResults.values()) {\n      if (queryResult.udfPath === canonicalizeUdfPath(name)) {\n        queriesWithName.push({\n          args: queryResult.args as FunctionArgs<Query>,\n          value: OptimisticLocalStoreImpl.queryValue(queryResult.result),\n        });\n      }\n    }\n    return queriesWithName;\n  }\n\n  setQuery<QueryReference extends FunctionReference<\"query\">>(\n    queryReference: QueryReference,\n    args: FunctionArgs<QueryReference>,\n    value: undefined | FunctionReturnType<QueryReference>,\n  ): void {\n    const queryArgs = parseArgs(args);\n    const name = getFunctionName(queryReference);\n    const queryToken = serializePathAndArgs(name, queryArgs);\n\n    let result: FunctionResult | undefined;\n    if (value === undefined) {\n      result = undefined;\n    } else {\n      result = {\n        success: true,\n        value,\n        // It's an optimistic update, so there are no function logs to show.\n        logLines: [],\n      };\n    }\n    const query: Query = {\n      udfPath: name,\n      args: queryArgs,\n      result,\n    };\n    this.queryResults.set(queryToken, query);\n    this.modifiedQueries.push(queryToken);\n  }\n\n  private static queryValue(\n    result: FunctionResult | undefined,\n  ): Value | undefined {\n    if (result === undefined) {\n      return undefined;\n    } else if (result.success) {\n      return result.value;\n    } else {\n      // If the query is an error state, just return `undefined` as though\n      // it's loading. Optimistic updates should already handle `undefined` well\n      // and there isn't a need to break the whole update because it tried\n      // to load a single query that errored.\n      return undefined;\n    }\n  }\n}\n\ntype OptimisticUpdateAndId = {\n  update: WrappedOptimisticUpdate;\n  mutationId: RequestId;\n};\n\ntype Query = {\n  // undefined means the query was set to be loading (undefined) in an optimistic update.\n  // Note that we can also have queries not present in the QueryResultMap\n  // at all because they are still loading from the server and have no optimistic update\n  // setting an optimistic value in advance.\n  result: FunctionResult | undefined;\n  udfPath: string;\n  args: Record<string, Value>;\n};\nexport type QueryResultsMap = Map<QueryToken, Query>;\n\ntype ChangedQueries = QueryToken[];\n\n/**\n * A view of all of our query results with optimistic updates applied on top.\n */\nexport class OptimisticQueryResults {\n  private queryResults: QueryResultsMap;\n  private optimisticUpdates: OptimisticUpdateAndId[];\n\n  constructor() {\n    this.queryResults = new Map();\n    this.optimisticUpdates = [];\n  }\n\n  /**\n   * Apply all optimistic updates on top of server query results\n   */\n  ingestQueryResultsFromServer(\n    serverQueryResults: QueryResultsMap,\n    optimisticUpdatesToDrop: Set<RequestId>,\n  ): ChangedQueries {\n    this.optimisticUpdates = this.optimisticUpdates.filter((updateAndId) => {\n      return !optimisticUpdatesToDrop.has(updateAndId.mutationId);\n    });\n\n    const oldQueryResults = this.queryResults;\n    this.queryResults = new Map(serverQueryResults);\n    const localStore = new OptimisticLocalStoreImpl(this.queryResults);\n    for (const updateAndId of this.optimisticUpdates) {\n      updateAndId.update(localStore);\n    }\n\n    // To find the changed queries, just do a shallow comparison\n    // TODO(CX-733): Change this so we avoid unnecessary rerenders\n    const changedQueries: ChangedQueries = [];\n    for (const [queryToken, query] of this.queryResults) {\n      const oldQuery = oldQueryResults.get(queryToken);\n      if (oldQuery === undefined || oldQuery.result !== query.result) {\n        changedQueries.push(queryToken);\n      }\n    }\n\n    return changedQueries;\n  }\n\n  applyOptimisticUpdate(\n    update: WrappedOptimisticUpdate,\n    mutationId: RequestId,\n  ): ChangedQueries {\n    // Apply the update to our store\n    this.optimisticUpdates.push({\n      update,\n      mutationId,\n    });\n    const localStore = new OptimisticLocalStoreImpl(this.queryResults);\n    update(localStore);\n\n    // Notify about any query results that changed\n    // TODO(CX-733): Change this so we avoid unnecessary rerenders\n    return localStore.modifiedQueries;\n  }\n\n  /**\n   * \"Raw\" with respect to errors vs values, but query results still have\n   * optimistic updates applied.\n   *\n   * @internal\n   */\n  rawQueryResult(queryToken: QueryToken): FunctionResult | undefined {\n    const query = this.queryResults.get(queryToken);\n    if (query === undefined) {\n      return undefined;\n    }\n    return query.result;\n  }\n\n  queryResult(queryToken: QueryToken): Value | undefined {\n    const query = this.queryResults.get(queryToken);\n    if (query === undefined) {\n      return undefined;\n    }\n    const result = query.result;\n    if (result === undefined) {\n      return undefined;\n    } else if (result.success) {\n      return result.value;\n    } else {\n      if (result.errorData !== undefined) {\n        throw forwardData(\n          result,\n          new ConvexError(\n            createHybridErrorStacktrace(\"query\", query.udfPath, result),\n          ),\n        );\n      }\n      throw new Error(\n        createHybridErrorStacktrace(\"query\", query.udfPath, result),\n      );\n    }\n  }\n\n  hasQueryResult(queryToken: QueryToken): boolean {\n    return this.queryResults.get(queryToken) !== undefined;\n  }\n\n  /**\n   * @internal\n   */\n  queryLogs(queryToken: QueryToken): string[] | undefined {\n    const query = this.queryResults.get(queryToken);\n    return query?.result?.logLines;\n  }\n}\n", "// Implements an unsigned long.\n// This is a subset of https://github.com/dcodeIO/Long.js,\n// vendored to decrease bundle size.\n// Copyright Daniel Wirtz <dcode@dcode.io>\n// License: Apache Version 2.0\n/*\n\n                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright 2023 Daniel Wirtz <dcode@dcode.io>\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       http://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// This works... but don't try to compare one to a real Long.js Long!\n// For internal use only.\n// `| 0` assures the runtime that we are using integer arithmetic\nexport class Long {\n  low: number;\n  high: number;\n  __isUnsignedLong__: boolean;\n\n  static isLong(obj: Long) {\n    return (obj && obj.__isUnsignedLong__) === true;\n  }\n\n  constructor(low: number, high: number) {\n    this.low = low | 0;\n    this.high = high | 0;\n    this.__isUnsignedLong__ = true;\n  }\n\n  // prettier-ignore\n  static fromBytesLE(bytes: number[]): Long {\n    return new Long(\n      bytes[0] |\n      bytes[1] << 8 |\n      bytes[2] << 16 |\n      bytes[3] << 24,\n      bytes[4] |\n      bytes[5] << 8 |\n      bytes[6] << 16 |\n      bytes[7] << 24,\n    );\n  }\n\n  // prettier-ignore\n  toBytesLE() {\n    const hi = this.high;\n    const lo = this.low;\n    return [\n      lo & 0xff,\n      lo >>> 8 & 0xff,\n      lo >>> 16 & 0xff,\n      lo >>> 24,\n      hi & 0xff,\n      hi >>> 8 & 0xff,\n      hi >>> 16 & 0xff,\n      hi >>> 24\n    ];\n  }\n\n  static fromNumber(value: number) {\n    if (isNaN(value)) return UZERO;\n    if (value < 0) return UZERO;\n    if (value >= TWO_PWR_64_DBL) return MAX_UNSIGNED_VALUE;\n    return new Long(value % TWO_PWR_32_DBL | 0, (value / TWO_PWR_32_DBL) | 0);\n  }\n\n  toString() {\n    return (\n      BigInt(this.high) * BigInt(TWO_PWR_32_DBL) +\n      BigInt(this.low)\n    ).toString();\n  }\n\n  equals(other: Long) {\n    if (!Long.isLong(other)) other = Long.fromValue(other);\n    if (this.high >>> 31 === 1 && other.high >>> 31 === 1) return false;\n    return this.high === other.high && this.low === other.low;\n  }\n\n  notEquals(other: Long) {\n    return !this.equals(other);\n  }\n\n  comp(other: Long) {\n    if (!Long.isLong(other)) other = Long.fromValue(other);\n    if (this.equals(other)) return 0;\n    return other.high >>> 0 > this.high >>> 0 ||\n      (other.high === this.high && other.low >>> 0 > this.low >>> 0)\n      ? -1\n      : 1;\n  }\n\n  lessThanOrEqual(other: Long) {\n    return this.comp(/* validates */ other) <= 0;\n  }\n\n  static fromValue(val: any) {\n    if (typeof val === \"number\") return Long.fromNumber(val);\n    // Throws for non-objects, converts non-instanceof Long:\n    return new Long(val.low, val.high);\n  }\n}\n\nconst UZERO = new Long(0, 0);\nconst TWO_PWR_16_DBL = 1 << 16;\nconst TWO_PWR_32_DBL = TWO_PWR_16_DBL * TWO_PWR_16_DBL;\nconst TWO_PWR_64_DBL = TWO_PWR_32_DBL * TWO_PWR_32_DBL;\nconst MAX_UNSIGNED_VALUE = new Long(0xffffffff | 0, 0xffffffff | 0);\n", "import { jsonToConvex } from \"../../values/index.js\";\nimport { Long } from \"../../vendor/long.js\";\nimport { logForFunction, Logger } from \"../logging.js\";\nimport { QueryId, StateVersion, Transition } from \"./protocol.js\";\nimport { FunctionResult } from \"./function_result.js\";\n\n/**\n * A represention of the query results we've received on the current WebSocket\n * connection.\n *\n * Queries you won't find here include:\n * - queries which have been requested, but no query transition has been received yet for\n * - queries which are populated only though active optimistic updates, but are not subscribed to\n * - queries which have already been removed by the server (which it shouldn't do unless that's\n *   been requested by the client)\n */\nexport class RemoteQuerySet {\n  private version: StateVersion;\n  private readonly remoteQuerySet: Map<QueryId, FunctionResult>;\n  private readonly queryPath: (queryId: QueryId) => string | null;\n  private readonly logger: Logger;\n\n  constructor(queryPath: (queryId: QueryId) => string | null, logger: Logger) {\n    this.version = { querySet: 0, ts: Long.fromNumber(0), identity: 0 };\n    this.remoteQuerySet = new Map();\n    this.queryPath = queryPath;\n    this.logger = logger;\n  }\n\n  transition(transition: Transition): void {\n    const start = transition.startVersion;\n    if (\n      this.version.querySet !== start.querySet ||\n      this.version.ts.notEquals(start.ts) ||\n      this.version.identity !== start.identity\n    ) {\n      throw new Error(\n        `Invalid start version: ${start.ts.toString()}:${start.querySet}:${start.identity}, transitioning from ${this.version.ts.toString()}:${this.version.querySet}:${this.version.identity}`,\n      );\n    }\n    for (const modification of transition.modifications) {\n      switch (modification.type) {\n        case \"QueryUpdated\": {\n          const queryPath = this.queryPath(modification.queryId);\n          if (queryPath) {\n            for (const line of modification.logLines) {\n              logForFunction(this.logger, \"info\", \"query\", queryPath, line);\n            }\n          }\n          const value = jsonToConvex(modification.value ?? null);\n          this.remoteQuerySet.set(modification.queryId, {\n            success: true,\n            value,\n            logLines: modification.logLines,\n          });\n          break;\n        }\n        case \"QueryFailed\": {\n          const queryPath = this.queryPath(modification.queryId);\n          if (queryPath) {\n            for (const line of modification.logLines) {\n              logForFunction(this.logger, \"info\", \"query\", queryPath, line);\n            }\n          }\n          const { errorData } = modification;\n          this.remoteQuerySet.set(modification.queryId, {\n            success: false,\n            errorMessage: modification.errorMessage,\n            errorData:\n              errorData !== undefined ? jsonToConvex(errorData) : undefined,\n            logLines: modification.logLines,\n          });\n          break;\n        }\n        case \"QueryRemoved\": {\n          this.remoteQuerySet.delete(modification.queryId);\n          break;\n        }\n        default: {\n          // Enforce that the switch-case is exhaustive.\n          modification satisfies never;\n          throw new Error(`Invalid modification ${(modification as any).type}`);\n        }\n      }\n    }\n    this.version = transition.endVersion;\n  }\n\n  remoteQueryResults(): Map<QueryId, FunctionResult> {\n    return this.remoteQuerySet;\n  }\n\n  timestamp(): Long {\n    return this.version.ts;\n  }\n}\n", "import type { UserIdentityAttributes } from \"../../server/authentication.js\";\nexport type { UserIdentityAttributes } from \"../../server/authentication.js\";\nimport { JSONValue, Base64 } from \"../../values/index.js\";\nimport { Long } from \"../../vendor/long.js\";\n\n/**\n * Shared schema\n */\n\nexport function u64ToLong(encoded: EncodedU64): U64 {\n  const integerBytes = Base64.toByteArray(encoded);\n  return Long.fromBytesLE(Array.from(integerBytes));\n}\n\nexport function longToU64(raw: U64): EncodedU64 {\n  const integerBytes = new Uint8Array(raw.toBytesLE());\n  return Base64.fromByteArray(integerBytes);\n}\n\nexport function parseServerMessage(\n  encoded: EncodedServerMessage,\n): WireServerMessage {\n  switch (encoded.type) {\n    case \"FatalError\":\n    case \"AuthError\":\n    case \"ActionResponse\":\n    case \"TransitionChunk\":\n    case \"Ping\": {\n      return { ...encoded };\n    }\n    case \"MutationResponse\": {\n      if (encoded.success) {\n        return { ...encoded, ts: u64ToLong(encoded.ts) };\n      } else {\n        return { ...encoded };\n      }\n    }\n    case \"Transition\": {\n      return {\n        ...encoded,\n        startVersion: {\n          ...encoded.startVersion,\n          ts: u64ToLong(encoded.startVersion.ts),\n        },\n        endVersion: {\n          ...encoded.endVersion,\n          ts: u64ToLong(encoded.endVersion.ts),\n        },\n      };\n    }\n    default: {\n      encoded satisfies never;\n    }\n  }\n  return undefined as never;\n}\n\nexport function encodeClientMessage(\n  message: ClientMessage,\n): EncodedClientMessage {\n  switch (message.type) {\n    case \"Authenticate\":\n    case \"ModifyQuerySet\":\n    case \"Mutation\":\n    case \"Action\":\n    case \"Event\": {\n      return { ...message };\n    }\n    case \"Connect\": {\n      if (message.maxObservedTimestamp !== undefined) {\n        return {\n          ...message,\n          maxObservedTimestamp: longToU64(message.maxObservedTimestamp),\n        };\n      } else {\n        return { ...message, maxObservedTimestamp: undefined };\n      }\n    }\n    default: {\n      message satisfies never;\n    }\n  }\n  return undefined as never;\n}\n\ntype U64 = Long;\ntype EncodedU64 = string;\n\n/**\n * Unique nonnegative integer identifying a single query.\n */\nexport type QueryId = number; // nonnegative int\n\nexport type QuerySetVersion = number; // nonnegative int\n\nexport type RequestId = number; // nonnegative int\n\nexport type IdentityVersion = number; // nonnegative int\n\n/**\n * A serialized representation of decisions made during a query's execution.\n *\n * A journal is produced when a query function first executes and is re-used\n * when a query is re-executed.\n *\n * Currently this is used to store pagination end cursors to ensure\n * that pages of paginated queries will always end at the same cursor. This\n * enables gapless, reactive pagination.\n *\n * `null` is used to represent empty journals.\n * @public\n */\nexport type QueryJournal = string | null;\n\n/**\n * Client message schema\n */\n\ntype Connect = {\n  type: \"Connect\";\n  sessionId: string;\n  connectionCount: number;\n  lastCloseReason: string | null;\n  maxObservedTimestamp?: TS | undefined;\n  clientTs: number;\n};\n\nexport type AddQuery = {\n  type: \"Add\";\n  queryId: QueryId;\n  udfPath: string;\n  args: JSONValue[];\n  journal?: QueryJournal | undefined;\n  /**\n   * @internal\n   */\n  componentPath?: string | undefined;\n};\n\nexport type RemoveQuery = {\n  type: \"Remove\";\n  queryId: QueryId;\n};\n\nexport type QuerySetModification = {\n  type: \"ModifyQuerySet\";\n  baseVersion: QuerySetVersion;\n  newVersion: QuerySetVersion;\n  modifications: (AddQuery | RemoveQuery)[];\n};\n\nexport type MutationRequest = {\n  type: \"Mutation\";\n  requestId: RequestId;\n  udfPath: string;\n  args: JSONValue[];\n  // Execute the mutation on a specific component.\n  // Only admin auth is allowed to run mutations on non-root components.\n  componentPath?: string | undefined;\n};\n\nexport type ActionRequest = {\n  type: \"Action\";\n  requestId: RequestId;\n  udfPath: string;\n  args: JSONValue[];\n  // Execute the action on a specific component.\n  // Only admin auth is allowed to run actions on non-root components.\n  componentPath?: string | undefined;\n};\n\nexport type AdminAuthentication = {\n  type: \"Authenticate\";\n  tokenType: \"Admin\";\n  value: string;\n  baseVersion: IdentityVersion;\n  impersonating?: UserIdentityAttributes | undefined;\n};\n\nexport type Authenticate =\n  | AdminAuthentication\n  | {\n      type: \"Authenticate\";\n      tokenType: \"User\";\n      value: string;\n      baseVersion: IdentityVersion;\n    }\n  | {\n      type: \"Authenticate\";\n      tokenType: \"None\";\n      baseVersion: IdentityVersion;\n    };\n\nexport type Event = {\n  type: \"Event\";\n  eventType: string;\n  event: any;\n};\nexport type ClientMessage =\n  | Connect\n  | Authenticate\n  | QuerySetModification\n  | MutationRequest\n  | ActionRequest\n  | Event;\n\ntype EncodedConnect = Omit<Connect, \"maxObservedTimestamp\"> & {\n  maxObservedTimestamp?: EncodedTS | undefined;\n};\n\n// It's not a big deal to add `| undefined` to any optional properties here because\n// these messages are bound for JSON.stringify() serialization, which removes properties\n// that are undefined.\ntype EncodedClientMessage =\n  | EncodedConnect\n  | Authenticate\n  | QuerySetModification\n  | MutationRequest\n  | ActionRequest\n  | Event;\n\n/**\n * Server message schema\n */\nexport type TS = U64;\ntype EncodedTS = EncodedU64;\ntype LogLines = string[];\n\nexport type StateVersion = {\n  querySet: QuerySetVersion;\n  ts: TS;\n  identity: IdentityVersion;\n};\ntype EncodedStateVersion = Omit<StateVersion, \"ts\"> & { ts: EncodedTS };\n\ntype StateModification =\n  | {\n      type: \"QueryUpdated\";\n      queryId: QueryId;\n      value: JSONValue;\n      logLines: LogLines;\n      journal: QueryJournal;\n    }\n  | {\n      type: \"QueryFailed\";\n      queryId: QueryId;\n      errorMessage: string;\n      logLines: LogLines;\n      errorData: JSONValue;\n      journal: QueryJournal;\n    }\n  | {\n      type: \"QueryRemoved\";\n      queryId: QueryId;\n    };\n\nexport type Transition = {\n  type: \"Transition\";\n  startVersion: StateVersion;\n  endVersion: StateVersion;\n  modifications: StateModification[];\n  clientClockSkew?: number;\n  serverTs?: number;\n};\n\nexport type TransitionChunk = {\n  type: \"TransitionChunk\";\n  chunk: string;\n  partNumber: number;\n  totalParts: number;\n  transitionId: string;\n};\n\ntype MutationSuccess = {\n  type: \"MutationResponse\";\n  requestId: RequestId;\n  success: true;\n  result: JSONValue;\n  ts: TS;\n  logLines: LogLines;\n};\ntype MutationFailed = {\n  type: \"MutationResponse\";\n  requestId: RequestId;\n  success: false;\n  result: string;\n  logLines: LogLines;\n  errorData?: JSONValue;\n};\nexport type MutationResponse = MutationSuccess | MutationFailed;\ntype ActionSuccess = {\n  type: \"ActionResponse\";\n  requestId: RequestId;\n  success: true;\n  result: JSONValue;\n  logLines: LogLines;\n};\ntype ActionFailed = {\n  type: \"ActionResponse\";\n  requestId: RequestId;\n  success: false;\n  result: string;\n  logLines: LogLines;\n  errorData?: JSONValue;\n};\nexport type ActionResponse = ActionSuccess | ActionFailed;\nexport type AuthError = {\n  type: \"AuthError\";\n  error: string;\n  baseVersion: IdentityVersion;\n  // True if this error is in response to processing a new `Authenticate` message.\n  // Other AuthErrors may occur due to executing a function with expired auth and\n  // should be handled differently.\n  authUpdateAttempted: boolean;\n};\ntype FatalError = {\n  type: \"FatalError\";\n  error: string;\n};\ntype Ping = {\n  type: \"Ping\";\n};\n\n// Server Messages without the messages only visible to WebSocketManager\nexport type ServerMessage =\n  | Transition\n  | MutationResponse\n  | ActionResponse\n  | FatalError\n  | AuthError;\n\nexport type WireServerMessage =\n  | Transition\n  | TransitionChunk\n  | MutationResponse\n  | ActionResponse\n  | FatalError\n  | AuthError\n  | Ping;\n\ntype EncodedTransition = Omit<Transition, \"startVersion\" | \"endVersion\"> & {\n  startVersion: EncodedStateVersion;\n  endVersion: EncodedStateVersion;\n};\ntype EncodedMutationSuccess = Omit<MutationSuccess, \"ts\"> & { ts: EncodedTS };\ntype EncodedMutationResponse = MutationFailed | EncodedMutationSuccess;\n\ntype EncodedServerMessage =\n  | EncodedTransition\n  | TransitionChunk\n  | EncodedMutationResponse\n  | ActionResponse\n  | FatalError\n  | AuthError\n  | Ping;\n", "import { Logger } from \"../logging.js\";\nimport {\n  ClientMessage,\n  encodeClientMessage,\n  parseServerMessage,\n  ServerMessage,\n  Transition,\n  TransitionChunk,\n} from \"./protocol.js\";\n\nconst CLOSE_NORMAL = 1000;\nconst CLOSE_GOING_AWAY = 1001;\nconst CLOSE_NO_STATUS = 1005;\n/** Convex-specific close code representing a \"404 Not Found\".\n * The edge Onramp accepts websocket upgrades before confirming that the\n * intended destination exists, so this code is sent once we've discovered that\n * the destination does not exist.\n */\nconst CLOSE_NOT_FOUND = 4040;\n\n/**\n * The various states our WebSocket can be in:\n *\n * - \"disconnected\": We don't have a WebSocket, but plan to create one.\n * - \"connecting\": We have created the WebSocket and are waiting for the\n *   `onOpen` callback.\n * - \"ready\": We have an open WebSocket.\n * - \"stopped\": The WebSocket was closed and a new one can be created via `.restart()`.\n * - \"terminated\": We have closed the WebSocket and will never create a new one.\n *\n *\n * WebSocket State Machine\n * -----------------------\n * initialState: disconnected\n * validTransitions:\n *   disconnected:\n *     new WebSocket() -> connecting\n *     terminate() -> terminated\n *   connecting:\n *     onopen -> ready\n *     close() -> disconnected\n *     terminate() -> terminated\n *   ready:\n *     close() -> disconnected\n *     stop() -> stopped\n *     terminate() -> terminated\n *   stopped:\n *     restart() -> connecting\n *     terminate() -> terminated\n * terminalStates:\n *   terminated\n *\n *\n *\n *                                        \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n *                \u250C\u2500\u2500\u2500\u2500terminate()\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2502  disconnected  \u2502\u25C0\u2500\u2510\n *                \u2502                       \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518  \u2502\n *                \u25BC                            \u2502       \u25B2      \u2502\n *       \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510           new WebSocket()  \u2502      \u2502\n *    \u250C\u2500\u25B6\u2502   terminated   \u2502\u25C0\u2500\u2500\u2500\u2500\u2500\u2500\u2510            \u2502       \u2502      \u2502\n *    \u2502  \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518       \u2502            \u2502       \u2502      \u2502\n *    \u2502           \u25B2          terminate()       \u2502    close() close()\n *    \u2502      terminate()          \u2502            \u2502       \u2502      \u2502\n *    \u2502           \u2502               \u2502            \u25BC       \u2502      \u2502\n *    \u2502  \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510       \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510  \u2502\n *    \u2502  \u2502    stopped     \u2502\u2500\u2500restart()\u2500\u2500\u2500\u25B6\u2502   connecting   \u2502  \u2502\n *    \u2502  \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518               \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518  \u2502\n *    \u2502           \u25B2                                \u2502          \u2502\n *    \u2502           \u2502                               onopen      \u2502\n *    \u2502           \u2502                                \u2502          \u2502\n *    \u2502           \u2502                                \u25BC          \u2502\n * terminate()    \u2502                       \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510  \u2502\n *    \u2502           \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500stop()\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2502     ready      \u2502\u2500\u2500\u2518\n *    \u2502                                   \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n *    \u2502                                            \u2502\n *    \u2502                                            \u2502\n *    \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n *\n * The `connecting` and `ready` state have a sub-state-machine for pausing.\n */\n\ntype Socket =\n  | { state: \"disconnected\" }\n  | { state: \"connecting\"; ws: WebSocket; paused: \"yes\" | \"no\" }\n  | { state: \"ready\"; ws: WebSocket; paused: \"yes\" | \"no\" | \"uninitialized\" }\n  | { state: \"stopped\" }\n  | { state: \"terminated\" };\n\nexport type ReconnectMetadata = {\n  connectionCount: number;\n  lastCloseReason: string | null;\n  clientTs: number;\n};\n\nexport type OnMessageResponse = {\n  hasSyncedPastLastReconnect: boolean;\n};\n\nlet firstTime: number | undefined;\nfunction monotonicMillis() {\n  if (firstTime === undefined) {\n    firstTime = Date.now();\n  }\n  if (typeof performance === \"undefined\" || !performance.now) {\n    return Date.now();\n  }\n  return Math.round(firstTime + performance.now());\n}\n\nfunction prettyNow() {\n  return `t=${Math.round((monotonicMillis() - firstTime!) / 100) / 10}s`;\n}\n\nconst serverDisconnectErrors = {\n  // A known error, e.g. during a restart or push\n  InternalServerError: { timeout: 1000 },\n  // ErrorMetadata::overloaded() messages that we realy should back off\n  SubscriptionsWorkerFullError: { timeout: 3000 },\n  TooManyConcurrentRequests: { timeout: 3000 },\n  CommitterFullError: { timeout: 3000 },\n  AwsTooManyRequestsException: { timeout: 3000 },\n  ExecuteFullError: { timeout: 3000 },\n  SystemTimeoutError: { timeout: 3000 },\n  ExpiredInQueue: { timeout: 3000 },\n  // ErrorMetadata::feature_temporarily_unavailable() that typically indicate a deploy just happened\n  VectorIndexesUnavailable: { timeout: 1000 },\n  SearchIndexesUnavailable: { timeout: 1000 },\n  TableSummariesUnavailable: { timeout: 1000 },\n  // More ErrorMetadata::overloaded()\n  VectorIndexTooLarge: { timeout: 3000 },\n  SearchIndexTooLarge: { timeout: 3000 },\n  TooManyWritesInTimePeriod: { timeout: 3000 },\n} as const satisfies Record<string, { timeout: number }>;\n\ntype ServerDisconnectError = keyof typeof serverDisconnectErrors | \"Unknown\";\n\nfunction classifyDisconnectError(s?: string): ServerDisconnectError {\n  if (s === undefined) return \"Unknown\";\n  // startsWith so more info could be at the end (although currently there isn't)\n\n  for (const prefix of Object.keys(\n    serverDisconnectErrors,\n  ) as ServerDisconnectError[]) {\n    if (s.startsWith(prefix)) {\n      return prefix;\n    }\n  }\n  return \"Unknown\";\n}\n\n/**\n * A wrapper around a websocket that handles errors, reconnection, and message\n * parsing.\n */\nexport class WebSocketManager {\n  private socket: Socket;\n\n  private connectionCount: number;\n  private _hasEverConnected: boolean = false;\n  private lastCloseReason:\n    | \"InitialConnect\"\n    | \"OnCloseInvoked\"\n    | (string & {}) // a full serverErrorReason (not just the prefix) or a new one\n    | null;\n\n  // State for assembling the split-up Transition currently being received.\n  private transitionChunkBuffer: {\n    chunks: string[];\n    totalParts: number;\n    transitionId: string;\n  } | null = null;\n\n  /** Upon HTTPS/WSS failure, the first jittered backoff duration, in ms. */\n  private readonly defaultInitialBackoff: number;\n\n  /** We backoff exponentially, but we need to cap that--this is the jittered max. */\n  private readonly maxBackoff: number;\n\n  /** How many times have we failed consecutively? */\n  private retries: number;\n\n  /** How long before lack of server response causes us to initiate a reconnect,\n   * in ms */\n  private readonly serverInactivityThreshold: number;\n\n  private reconnectDueToServerInactivityTimeout: ReturnType<\n    typeof setTimeout\n  > | null;\n\n  /** Scheduled reconnect state: timeout handle and timing info */\n  private scheduledReconnect: {\n    timeout: ReturnType<typeof setTimeout>;\n    scheduledAt: number;\n    backoffMs: number;\n  } | null = null;\n\n  private networkOnlineHandler: (() => void) | null = null;\n\n  /** Pending event to send after reconnecting due to network recovery */\n  private pendingNetworkRecoveryInfo: { timeSavedMs: number } | null = null;\n\n  private readonly uri: string;\n  private readonly onOpen: (reconnectMetadata: ReconnectMetadata) => void;\n  private readonly onResume: () => void;\n  private readonly onMessage: (message: ServerMessage) => OnMessageResponse;\n  private readonly webSocketConstructor: typeof WebSocket;\n  private readonly logger: Logger;\n  private readonly onServerDisconnectError:\n    | ((message: string) => void)\n    | undefined;\n\n  constructor(\n    uri: string,\n    callbacks: {\n      onOpen: (reconnectMetadata: ReconnectMetadata) => void;\n      onResume: () => void;\n      onMessage: (message: ServerMessage) => OnMessageResponse;\n      onServerDisconnectError?: ((message: string) => void) | undefined;\n    },\n    webSocketConstructor: typeof WebSocket,\n    logger: Logger,\n    private readonly markConnectionStateDirty: () => void,\n    private readonly debug: boolean,\n  ) {\n    this.webSocketConstructor = webSocketConstructor;\n    this.socket = { state: \"disconnected\" };\n    this.connectionCount = 0;\n    this.lastCloseReason = \"InitialConnect\";\n\n    // backoff for unknown errors\n    this.defaultInitialBackoff = 1000;\n    this.maxBackoff = 16000;\n    this.retries = 0;\n\n    // Ping messages (sync protocol Pings, not WebSocket protocol Pings) are\n    // sent every 15s in the absence of other messages. But a single large\n    // Transition or other downstream message can hog the line so this\n    // threshold is set higher to prevent clients from giving up.\n    this.serverInactivityThreshold = 60000;\n    this.reconnectDueToServerInactivityTimeout = null;\n\n    this.uri = uri;\n    this.onOpen = callbacks.onOpen;\n    this.onResume = callbacks.onResume;\n    this.onMessage = callbacks.onMessage;\n    this.onServerDisconnectError = callbacks.onServerDisconnectError;\n    this.logger = logger;\n\n    // Set up network online event listener\n    this.setupNetworkListener();\n\n    this.connect();\n  }\n\n  private setSocketState(state: Socket) {\n    this.socket = state;\n    this._logVerbose(\n      `socket state changed: ${this.socket.state}, paused: ${\n        \"paused\" in this.socket ? this.socket.paused : undefined\n      }`,\n    );\n    this.markConnectionStateDirty();\n  }\n\n  private setupNetworkListener() {\n    // Only set up listener if we're in a browser environment with addEventListener\n    // (React Native has window but not addEventListener)\n    if (\n      typeof window === \"undefined\" ||\n      typeof window.addEventListener !== \"function\"\n    ) {\n      return;\n    }\n    // Avoid registering duplicate listeners\n    if (this.networkOnlineHandler !== null) {\n      return;\n    }\n\n    this.networkOnlineHandler = () => {\n      this._logVerbose(\"network online event detected\");\n      this.tryReconnectImmediately();\n    };\n\n    window.addEventListener(\"online\", this.networkOnlineHandler);\n    this._logVerbose(\"network online event listener registered\");\n  }\n\n  private cleanupNetworkListener() {\n    if (\n      this.networkOnlineHandler &&\n      typeof window !== \"undefined\" &&\n      typeof window.removeEventListener === \"function\"\n    ) {\n      window.removeEventListener(\"online\", this.networkOnlineHandler);\n      this.networkOnlineHandler = null;\n      this._logVerbose(\"network online event listener removed\");\n    }\n  }\n\n  private assembleTransition(chunk: TransitionChunk): Transition | null {\n    if (\n      chunk.partNumber < 0 ||\n      chunk.partNumber >= chunk.totalParts ||\n      chunk.totalParts === 0 ||\n      (this.transitionChunkBuffer &&\n        (this.transitionChunkBuffer.totalParts !== chunk.totalParts ||\n          this.transitionChunkBuffer.transitionId !== chunk.transitionId))\n    ) {\n      // Throwing an error doesn't crash the client, so clear the buffer.\n      this.transitionChunkBuffer = null;\n      throw new Error(\"Invalid TransitionChunk\");\n    }\n\n    if (this.transitionChunkBuffer === null) {\n      this.transitionChunkBuffer = {\n        chunks: [],\n        totalParts: chunk.totalParts,\n        transitionId: chunk.transitionId,\n      };\n    }\n\n    if (chunk.partNumber !== this.transitionChunkBuffer.chunks.length) {\n      // Throwing an error doesn't crash the client, so clear the buffer.\n      const expectedLength = this.transitionChunkBuffer.chunks.length;\n      this.transitionChunkBuffer = null;\n      throw new Error(\n        `TransitionChunk received out of order: expected part ${expectedLength}, got ${chunk.partNumber}`,\n      );\n    }\n\n    this.transitionChunkBuffer.chunks.push(chunk.chunk);\n\n    if (this.transitionChunkBuffer.chunks.length === chunk.totalParts) {\n      const fullJson = this.transitionChunkBuffer.chunks.join(\"\");\n      this.transitionChunkBuffer = null;\n\n      const transition = parseServerMessage(JSON.parse(fullJson));\n      if (transition.type !== \"Transition\") {\n        throw new Error(\n          `Expected Transition, got ${transition.type} after assembling chunks`,\n        );\n      }\n      return transition;\n    }\n\n    return null;\n  }\n\n  private connect() {\n    if (this.socket.state === \"terminated\") {\n      return;\n    }\n    if (\n      this.socket.state !== \"disconnected\" &&\n      this.socket.state !== \"stopped\"\n    ) {\n      throw new Error(\n        \"Didn't start connection from disconnected state: \" + this.socket.state,\n      );\n    }\n\n    const ws = new this.webSocketConstructor(this.uri);\n    this._logVerbose(\"constructed WebSocket\");\n    this.setSocketState({\n      state: \"connecting\",\n      ws,\n      paused: \"no\",\n    });\n\n    // Kick off server inactivity timer before WebSocket connection is established\n    // so we can detect cases where handshake fails.\n    // The `onopen` event only fires after the connection is established:\n    // Source: https://datatracker.ietf.org/doc/html/rfc6455#page-19:~:text=_The%20WebSocket%20Connection%20is%20Established_,-and\n    this.resetServerInactivityTimeout();\n\n    ws.onopen = () => {\n      this.logger.logVerbose(\"begin ws.onopen\");\n      if (this.socket.state !== \"connecting\") {\n        throw new Error(\"onopen called with socket not in connecting state\");\n      }\n      this.setSocketState({\n        state: \"ready\",\n        ws,\n        paused: this.socket.paused === \"yes\" ? \"uninitialized\" : \"no\",\n      });\n      this.resetServerInactivityTimeout();\n      if (this.socket.paused === \"no\") {\n        this._hasEverConnected = true;\n        this.onOpen({\n          connectionCount: this.connectionCount,\n          lastCloseReason: this.lastCloseReason,\n          clientTs: monotonicMillis(),\n        });\n      }\n\n      if (this.lastCloseReason !== \"InitialConnect\") {\n        if (this.lastCloseReason) {\n          this.logger.log(\n            \"WebSocket reconnected at\",\n            prettyNow(),\n            \"after disconnect due to\",\n            this.lastCloseReason,\n          );\n        } else {\n          this.logger.log(\"WebSocket reconnected at\", prettyNow());\n        }\n      }\n\n      this.connectionCount += 1;\n      this.lastCloseReason = null;\n\n      // Send event for network recovery reconnect if applicable\n      if (this.pendingNetworkRecoveryInfo !== null) {\n        const { timeSavedMs } = this.pendingNetworkRecoveryInfo;\n        this.pendingNetworkRecoveryInfo = null;\n        this.sendMessage({\n          type: \"Event\",\n          eventType: \"NetworkRecoveryReconnect\",\n          event: { timeSavedMs },\n        });\n        this.logger.log(\n          `Network recovery reconnect saved ~${Math.round(timeSavedMs / 1000)}s of waiting`,\n        );\n      }\n    };\n    // NB: The WebSocket API calls `onclose` even if connection fails, so we can route all error paths through `onclose`.\n    ws.onerror = (error) => {\n      this.transitionChunkBuffer = null;\n      const message = (error as ErrorEvent).message;\n      if (message) {\n        this.logger.log(`WebSocket error message: ${message}`);\n      }\n    };\n    ws.onmessage = (message) => {\n      this.resetServerInactivityTimeout();\n      const messageLength = message.data.length;\n      let serverMessage = parseServerMessage(JSON.parse(message.data));\n      this._logVerbose(`received ws message with type ${serverMessage.type}`);\n\n      // Ping's only purpose is to reset the server inactivity timer.\n      if (serverMessage.type === \"Ping\") {\n        return;\n      }\n\n      // TransitionChunks never reach the main client logic.\n      if (serverMessage.type === \"TransitionChunk\") {\n        const transition = this.assembleTransition(serverMessage);\n        if (!transition) {\n          return;\n        }\n        serverMessage = transition;\n        this._logVerbose(\n          `assembled full ws message of type ${serverMessage.type}`,\n        );\n      }\n\n      if (this.transitionChunkBuffer !== null) {\n        this.transitionChunkBuffer = null;\n        this.logger.log(\n          `Received unexpected ${serverMessage.type} while buffering TransitionChunks`,\n        );\n      }\n\n      if (serverMessage.type === \"Transition\") {\n        this.reportLargeTransition({\n          messageLength,\n          transition: serverMessage,\n        });\n      }\n      const response = this.onMessage(serverMessage);\n      if (response.hasSyncedPastLastReconnect) {\n        // Reset backoff to 0 once all outstanding requests are complete.\n        this.retries = 0;\n        this.markConnectionStateDirty();\n      }\n    };\n    ws.onclose = (event) => {\n      this._logVerbose(\"begin ws.onclose\");\n      this.transitionChunkBuffer = null;\n      if (this.lastCloseReason === null) {\n        // event.reason is often an empty string\n        this.lastCloseReason = event.reason || `closed with code ${event.code}`;\n      }\n      if (\n        event.code !== CLOSE_NORMAL &&\n        event.code !== CLOSE_GOING_AWAY && // This commonly gets fired on mobile apps when the app is backgrounded\n        event.code !== CLOSE_NO_STATUS &&\n        event.code !== CLOSE_NOT_FOUND // Note that we want to retry on a 404, as it can be transient during a push.\n      ) {\n        let msg = `WebSocket closed with code ${event.code}`;\n        if (event.reason) {\n          msg += `: ${event.reason}`;\n        }\n        this.logger.log(msg);\n        if (this.onServerDisconnectError && event.reason) {\n          // This callback is a unstable API, InternalServerErrors in particular may be removed\n          // since they reflect expected temporary downtime. But until a quantitative measure\n          // of uptime is reported this unstable API errs on the inclusive side.\n          this.onServerDisconnectError(msg);\n        }\n      }\n      const reason = classifyDisconnectError(event.reason);\n      this.scheduleReconnect(reason);\n      return;\n    };\n  }\n\n  /**\n   * @returns The state of the {@link Socket}.\n   */\n  socketState(): string {\n    return this.socket.state;\n  }\n\n  /**\n   * @param message - A ClientMessage to send.\n   * @returns Whether the message (might have been) sent.\n   */\n  sendMessage(message: ClientMessage) {\n    const messageForLog = {\n      type: message.type,\n      ...(message.type === \"Authenticate\" && message.tokenType === \"User\"\n        ? {\n            value: `...${message.value.slice(-7)}`,\n          }\n        : {}),\n    };\n    if (this.socket.state === \"ready\" && this.socket.paused === \"no\") {\n      const encodedMessage = encodeClientMessage(message);\n      const request = JSON.stringify(encodedMessage);\n      let sent = false;\n      try {\n        this.socket.ws.send(request);\n        sent = true;\n      } catch (error: any) {\n        this.logger.log(\n          `Failed to send message on WebSocket, reconnecting: ${error}`,\n        );\n        this.closeAndReconnect(\"FailedToSendMessage\");\n      }\n      this._logVerbose(\n        `${sent ? \"sent\" : \"failed to send\"} message with type ${message.type}: ${JSON.stringify(\n          messageForLog,\n        )}`,\n      );\n      return true;\n    }\n    this._logVerbose(\n      `message not sent (socket state: ${this.socket.state}, paused: ${\"paused\" in this.socket ? this.socket.paused : undefined}): ${JSON.stringify(\n        messageForLog,\n      )}`,\n    );\n\n    return false;\n  }\n\n  private resetServerInactivityTimeout() {\n    if (this.socket.state === \"terminated\") {\n      // Don't reset any timers if we were trying to terminate.\n      return;\n    }\n    if (this.reconnectDueToServerInactivityTimeout !== null) {\n      clearTimeout(this.reconnectDueToServerInactivityTimeout);\n      this.reconnectDueToServerInactivityTimeout = null;\n    }\n    this.reconnectDueToServerInactivityTimeout = setTimeout(() => {\n      this.closeAndReconnect(\"InactiveServer\");\n    }, this.serverInactivityThreshold);\n  }\n\n  private scheduleReconnect(reason: \"client\" | ServerDisconnectError) {\n    // Cancel any existing scheduled reconnect to avoid multiple reconnects\n    if (this.scheduledReconnect) {\n      clearTimeout(this.scheduledReconnect.timeout);\n      this.scheduledReconnect = null;\n    }\n\n    this.socket = { state: \"disconnected\" };\n    const backoff = this.nextBackoff(reason);\n    this.markConnectionStateDirty();\n    this.logger.log(`Attempting reconnect in ${Math.round(backoff)}ms`);\n\n    const scheduledAt = monotonicMillis();\n    const timeoutId = setTimeout(() => {\n      // Only proceed if this timeout hasn't been cleared\n      if (this.scheduledReconnect?.timeout === timeoutId) {\n        this.scheduledReconnect = null;\n        this.connect();\n      }\n    }, backoff);\n\n    this.scheduledReconnect = {\n      timeout: timeoutId,\n      scheduledAt,\n      backoffMs: backoff,\n    };\n  }\n\n  /**\n   * Close the WebSocket and schedule a reconnect.\n   *\n   * This should be used when we hit an error and would like to restart the session.\n   */\n  private closeAndReconnect(closeReason: string) {\n    this._logVerbose(`begin closeAndReconnect with reason ${closeReason}`);\n    switch (this.socket.state) {\n      case \"disconnected\":\n      case \"terminated\":\n      case \"stopped\":\n        // Nothing to do if we don't have a WebSocket.\n        return;\n      case \"connecting\":\n      case \"ready\": {\n        this.lastCloseReason = closeReason;\n        // Close the old socket asynchronously, we'll open a new socket in reconnect.\n        void this.close();\n        this.scheduleReconnect(\"client\");\n        return;\n      }\n      default: {\n        // Enforce that the switch-case is exhaustive.\n        this.socket satisfies never;\n      }\n    }\n  }\n\n  /**\n   * Close the WebSocket, being careful to clear the onclose handler to avoid re-entrant\n   * calls. Use this instead of directly calling `ws.close()`\n   *\n   * It is the callers responsibility to update the state after this method is called so that the\n   * closed socket is not accessible or used again after this method is called\n   */\n  private close(): Promise<void> {\n    this.transitionChunkBuffer = null;\n    switch (this.socket.state) {\n      case \"disconnected\":\n      case \"terminated\":\n      case \"stopped\":\n        // Nothing to do if we don't have a WebSocket.\n        return Promise.resolve();\n      case \"connecting\": {\n        const ws = this.socket.ws;\n        // Messages can still be received after close but we're not interested.\n        ws.onmessage = (_message) => {\n          this._logVerbose(\"Ignoring message received after close\");\n        };\n        return new Promise((r) => {\n          ws.onclose = () => {\n            this._logVerbose(\"Closed after connecting\");\n            r();\n          };\n          ws.onopen = () => {\n            this._logVerbose(\"Opened after connecting\");\n            ws.close();\n          };\n        });\n      }\n      case \"ready\": {\n        this._logVerbose(\"ws.close called\");\n        const ws = this.socket.ws;\n        // Messages can still be received after close but we're not interested.\n        ws.onmessage = (_message) => {\n          this._logVerbose(\"Ignoring message received after close\");\n        };\n        const result: Promise<void> = new Promise((r) => {\n          ws.onclose = () => {\n            r();\n          };\n        });\n        ws.close();\n        return result;\n      }\n      default: {\n        // Enforce that the switch-case is exhaustive.\n        this.socket satisfies never;\n        return Promise.resolve();\n      }\n    }\n  }\n\n  /**\n   * Close the WebSocket and do not reconnect.\n   * @returns A Promise that resolves when the WebSocket `onClose` callback is called.\n   */\n  terminate(): Promise<void> {\n    if (this.reconnectDueToServerInactivityTimeout) {\n      clearTimeout(this.reconnectDueToServerInactivityTimeout);\n    }\n    if (this.scheduledReconnect) {\n      clearTimeout(this.scheduledReconnect.timeout);\n      this.scheduledReconnect = null;\n    }\n    this.cleanupNetworkListener();\n    switch (this.socket.state) {\n      case \"terminated\":\n      case \"stopped\":\n      case \"disconnected\":\n      case \"connecting\":\n      case \"ready\": {\n        const result = this.close();\n        this.setSocketState({ state: \"terminated\" });\n        return result;\n      }\n      default: {\n        // Enforce that the switch-case is exhaustive.\n        this.socket satisfies never;\n        throw new Error(\n          `Invalid websocket state: ${(this.socket as any).state}`,\n        );\n      }\n    }\n  }\n\n  stop(): Promise<void> {\n    switch (this.socket.state) {\n      case \"terminated\":\n        // If we're terminating we ignore stop\n        return Promise.resolve();\n      case \"connecting\":\n      case \"stopped\":\n      case \"disconnected\":\n      case \"ready\": {\n        this.cleanupNetworkListener();\n        const result = this.close();\n        this.socket = { state: \"stopped\" };\n        return result;\n      }\n      default: {\n        // Enforce that the switch-case is exhaustive.\n        this.socket satisfies never;\n        return Promise.resolve();\n      }\n    }\n  }\n\n  /**\n   * Create a new WebSocket after a previous `stop()`, unless `terminate()` was\n   * called before.\n   */\n  tryRestart(): void {\n    switch (this.socket.state) {\n      case \"stopped\":\n        break;\n      case \"terminated\":\n      case \"connecting\":\n      case \"ready\":\n      case \"disconnected\":\n        this.logger.logVerbose(\"Restart called without stopping first\");\n        return;\n      default: {\n        // Enforce that the switch-case is exhaustive.\n        this.socket satisfies never;\n      }\n    }\n    this.setupNetworkListener();\n    this.connect();\n  }\n\n  pause(): void {\n    switch (this.socket.state) {\n      case \"disconnected\":\n      case \"stopped\":\n      case \"terminated\":\n        // If already stopped or stopping ignore.\n        return;\n      case \"connecting\":\n      case \"ready\": {\n        this.socket = { ...this.socket, paused: \"yes\" };\n        return;\n      }\n      default: {\n        // Enforce that the switch-case is exhaustive.\n        this.socket satisfies never;\n        return;\n      }\n    }\n  }\n\n  /**\n   * Try to reconnect immediately, canceling any scheduled reconnect.\n   * This is useful when detecting network recovery.\n   * Only takes action if we're in disconnected state (waiting to reconnect).\n   */\n  tryReconnectImmediately(): void {\n    this._logVerbose(\"tryReconnectImmediately called\");\n\n    // Only reconnect if we're in disconnected state (waiting to reconnect)\n    if (this.socket.state !== \"disconnected\") {\n      this._logVerbose(\n        `tryReconnectImmediately called but socket state is ${this.socket.state}, no action taken`,\n      );\n      return;\n    }\n\n    // Track how much time we saved by reconnecting immediately\n    let timeSavedMs: number | null = null;\n    if (this.scheduledReconnect) {\n      const elapsed = monotonicMillis() - this.scheduledReconnect.scheduledAt;\n      timeSavedMs = Math.max(0, this.scheduledReconnect.backoffMs - elapsed);\n      this._logVerbose(\n        `would have waited ${Math.round(timeSavedMs)}ms more (backoff was ${Math.round(this.scheduledReconnect.backoffMs)}ms, elapsed ${Math.round(elapsed)}ms)`,\n      );\n      // Cancel the scheduled reconnect\n      clearTimeout(this.scheduledReconnect.timeout);\n      this.scheduledReconnect = null;\n      this._logVerbose(\"canceled scheduled reconnect\");\n    }\n\n    this.logger.log(\"Network recovery detected, reconnecting immediately\");\n    // Store the time saved to send as an event after we connect\n    this.pendingNetworkRecoveryInfo =\n      timeSavedMs !== null ? { timeSavedMs } : null;\n    this.connect();\n  }\n\n  /**\n   * Resume the state machine if previously paused.\n   */\n  resume(): void {\n    switch (this.socket.state) {\n      case \"connecting\":\n        this.socket = { ...this.socket, paused: \"no\" };\n        return;\n      case \"ready\":\n        if (this.socket.paused === \"uninitialized\") {\n          this.socket = { ...this.socket, paused: \"no\" };\n          this.onOpen({\n            connectionCount: this.connectionCount,\n            lastCloseReason: this.lastCloseReason,\n            clientTs: monotonicMillis(),\n          });\n        } else if (this.socket.paused === \"yes\") {\n          this.socket = { ...this.socket, paused: \"no\" };\n          this.onResume();\n        }\n        return;\n      case \"terminated\":\n      case \"stopped\":\n      case \"disconnected\":\n        // Ignore resume if not paused, perhaps we already resumed.\n        return;\n      default: {\n        // Enforce that the switch-case is exhaustive.\n        this.socket satisfies never;\n      }\n    }\n    this.connect();\n  }\n\n  connectionState(): {\n    isConnected: boolean;\n    hasEverConnected: boolean;\n    connectionCount: number;\n    connectionRetries: number;\n  } {\n    return {\n      isConnected: this.socket.state === \"ready\",\n      hasEverConnected: this._hasEverConnected,\n      connectionCount: this.connectionCount,\n      connectionRetries: this.retries,\n    };\n  }\n\n  private _logVerbose(message: string) {\n    this.logger.logVerbose(message);\n  }\n\n  private nextBackoff(reason: \"client\" | ServerDisconnectError): number {\n    const initialBackoff: number =\n      reason === \"client\"\n        ? 100 // There's no evidence of a server problem, retry quickly\n        : reason === \"Unknown\"\n          ? this.defaultInitialBackoff\n          : serverDisconnectErrors[reason].timeout;\n\n    const baseBackoff = initialBackoff * Math.pow(2, this.retries);\n    this.retries += 1;\n    const actualBackoff = Math.min(baseBackoff, this.maxBackoff);\n    const jitter = actualBackoff * (Math.random() - 0.5);\n    return actualBackoff + jitter;\n  }\n\n  private reportLargeTransition({\n    transition,\n    messageLength,\n  }: {\n    transition: Transition;\n    messageLength: number;\n  }) {\n    if (\n      transition.clientClockSkew === undefined ||\n      transition.serverTs === undefined\n    ) {\n      return;\n    }\n\n    const transitionTransitTime =\n      monotonicMillis() - // client time now\n      // clientClockSkew = (server time + upstream latency) - client time\n      // clientClockSkew is \"how many milliseconds behind (slow) is the client clock\"\n      // but the latency of the Connect message inflates this, making it appear further behind\n      transition.clientClockSkew -\n      transition.serverTs / 1_000_000; // server time when transition was sent\n    const prettyTransitionTime = `${Math.round(transitionTransitTime)}ms`;\n    const prettyMessageMB = `${Math.round(messageLength / 10_000) / 100}MB`;\n    const bytesPerSecond = messageLength / (transitionTransitTime / 1000);\n    const prettyBytesPerSecond = `${Math.round(bytesPerSecond / 10_000) / 100}MB per second`;\n    this._logVerbose(\n      `received ${prettyMessageMB} transition in ${prettyTransitionTime} at ${prettyBytesPerSecond}`,\n    );\n\n    // Warnings that will show up for *all users*, so don't be too aggressive.\n    // These can be silenced (along with reconnection messages) by setting `logger: false` in client options.\n    if (messageLength > 20_000_000) {\n      // Big enough that the developer should be made aware of this.\n      this.logger.log(\n        `received query results totaling more that 20MB (${prettyMessageMB}) which will take a long time to download on slower connections`,\n      );\n    } else if (transitionTransitTime > 20_000) {\n      // Long enough that a pattern of these should be interesting to a developer, but be aware that\n      // weak connections, putting clients to sleep, backgrounding etc. could all cause this too.\n      this.logger.log(\n        `received query results totaling ${prettyMessageMB} which took more than 20s to arrive (${prettyTransitionTime})`,\n      );\n    }\n\n    if (this.debug) {\n      // debug means \"reportDebugInfoToConvex\" is set so this can be aggressive.\n      this.sendMessage({\n        type: \"Event\",\n        eventType: \"ClientReceivedTransition\",\n        event: { transitionTransitTime, messageLength },\n      });\n    }\n  }\n}\n", "export function newSessionId() {\n  return uuidv4();\n}\n\n// From https://stackoverflow.com/a/2117523\nfunction uuidv4() {\n  return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, (c) => {\n    const r = (Math.random() * 16) | 0,\n      v = c === \"x\" ? r : (r & 0x3) | 0x8;\n    return v.toString(16);\n  });\n}\n", "export interface JwtDecodeOptions {\n  header?: boolean;\n}\n\nexport interface JwtHeader {\n  typ?: string;\n  alg?: string;\n  kid?: string;\n}\n\nexport interface JwtPayload {\n  iss?: string;\n  sub?: string;\n  aud?: string[] | string;\n  exp?: number;\n  nbf?: number;\n  iat?: number;\n  jti?: string;\n}\n\nexport class InvalidTokenError extends Error {}\n\nInvalidTokenError.prototype.name = \"InvalidTokenError\";\n\nfunction b64DecodeUnicode(str: string) {\n  return decodeURIComponent(\n    atob(str).replace(/(.)/g, (_m, p) => {\n      let code = (p as string).charCodeAt(0).toString(16).toUpperCase();\n      if (code.length < 2) {\n        code = \"0\" + code;\n      }\n      return \"%\" + code;\n    }),\n  );\n}\n\nfunction base64UrlDecode(str: string) {\n  let output = str.replace(/-/g, \"+\").replace(/_/g, \"/\");\n  switch (output.length % 4) {\n    case 0:\n      break;\n    case 2:\n      output += \"==\";\n      break;\n    case 3:\n      output += \"=\";\n      break;\n    default:\n      throw new Error(\"base64 string is not of the correct length\");\n  }\n\n  try {\n    return b64DecodeUnicode(output);\n  } catch {\n    return atob(output);\n  }\n}\n\nexport function jwtDecode<T = JwtHeader>(\n  token: string,\n  options: JwtDecodeOptions & { header: true },\n): T;\nexport function jwtDecode<T = JwtPayload>(\n  token: string,\n  options?: JwtDecodeOptions,\n): T;\nexport function jwtDecode<T = JwtHeader | JwtPayload>(\n  token: string,\n  options?: JwtDecodeOptions,\n): T {\n  if (typeof token !== \"string\") {\n    throw new InvalidTokenError(\"Invalid token specified: must be a string\");\n  }\n\n  options ||= {};\n\n  const pos = options.header === true ? 0 : 1;\n  const part = token.split(\".\")[pos];\n\n  if (typeof part !== \"string\") {\n    throw new InvalidTokenError(\n      `Invalid token specified: missing part #${pos + 1}`,\n    );\n  }\n\n  let decoded: string;\n  try {\n    decoded = base64UrlDecode(part);\n  } catch (e) {\n    throw new InvalidTokenError(\n      `Invalid token specified: invalid base64 for part #${pos + 1} (${(e as Error).message})`,\n    );\n  }\n\n  try {\n    return JSON.parse(decoded) as T;\n  } catch (e) {\n    throw new InvalidTokenError(\n      `Invalid token specified: invalid json for part #${pos + 1} (${(e as Error).message})`,\n    );\n  }\n}\n", "import { Logger } from \"../logging.js\";\nimport { LocalSyncState } from \"./local_state.js\";\nimport { AuthError, IdentityVersion, Transition } from \"./protocol.js\";\nimport { jwtDecode } from \"../../vendor/jwt-decode/index.js\";\n\n// setTimout uses 32 bit integer, so it can only\n// schedule about 24 days in the future.\nconst MAXIMUM_REFRESH_DELAY = 20 * 24 * 60 * 60 * 1000; // 20 days\n\nconst MAX_TOKEN_CONFIRMATION_ATTEMPTS = 2;\n\n/**\n * An async function returning a JWT. Depending on the auth providers\n * configured in convex/auth.config.ts, this may be a JWT-encoded OpenID\n * Connect Identity Token or a traditional JWT.\n *\n * `forceRefreshToken` is `true` if the server rejected a previously\n * returned token or the token is anticipated to expiring soon\n * based on its `exp` time.\n *\n * See {@link ConvexReactClient.setAuth}.\n *\n * @public\n */\nexport type AuthTokenFetcher = (args: {\n  forceRefreshToken: boolean;\n}) => Promise<string | null | undefined>;\n\n/**\n * What is provided to the client.\n */\ntype AuthConfig = {\n  fetchToken: AuthTokenFetcher;\n  onAuthChange: (isAuthenticated: boolean) => void;\n};\n\n/**\n * In general we take 3 steps:\n *   1. Fetch a possibly cached token\n *   2. Immediately fetch a fresh token without using a cache\n *   3. Repeat step 2 before the end of the fresh token's lifetime\n *\n * When we fetch without using a cache we know when the token\n * will expire, and can schedule refetching it.\n *\n * If we get an error before a scheduled refetch, we go back\n * to step 2.\n */\ntype AuthState =\n  | { state: \"noAuth\" }\n  | {\n      state: \"waitingForServerConfirmationOfCachedToken\";\n      config: AuthConfig;\n      hasRetried: boolean;\n    }\n  | {\n      state: \"initialRefetch\";\n      config: AuthConfig;\n    }\n  | {\n      state: \"waitingForServerConfirmationOfFreshToken\";\n      config: AuthConfig;\n      hadAuth: boolean;\n      token: string;\n    }\n  | {\n      state: \"waitingForScheduledRefetch\";\n      config: AuthConfig;\n      refetchTokenTimeoutId: ReturnType<typeof setTimeout>;\n    }\n  // Special/weird state when we got a valid token\n  // but could not fetch a new one.\n  | {\n      state: \"notRefetching\";\n      config: AuthConfig;\n    };\n\n/**\n * Handles the state transitions for auth. The server is the source\n * of truth.\n */\nexport class AuthenticationManager {\n  private authState: AuthState = { state: \"noAuth\" };\n  // Used to detect races involving `setConfig` calls\n  // while a token is being fetched.\n  private configVersion = 0;\n  // Shared by the BaseClient so that the auth manager can easily inspect it\n  private readonly syncState: LocalSyncState;\n  // Passed down by BaseClient, sends a message to the server\n  private readonly authenticate: (token: string) => IdentityVersion;\n  private readonly stopSocket: () => Promise<void>;\n  private readonly tryRestartSocket: () => void;\n  private readonly pauseSocket: () => void;\n  private readonly resumeSocket: () => void;\n  // Passed down by BaseClient, sends a message to the server\n  private readonly clearAuth: () => void;\n  private readonly logger: Logger;\n  private readonly refreshTokenLeewaySeconds: number;\n  // Number of times we have attempted to confirm the latest token. We retry up\n  // to `MAX_TOKEN_CONFIRMATION_ATTEMPTS` times.\n  private tokenConfirmationAttempts = 0;\n  constructor(\n    syncState: LocalSyncState,\n    callbacks: {\n      authenticate: (token: string) => IdentityVersion;\n      stopSocket: () => Promise<void>;\n      tryRestartSocket: () => void;\n      pauseSocket: () => void;\n      resumeSocket: () => void;\n      clearAuth: () => void;\n    },\n    config: {\n      refreshTokenLeewaySeconds: number;\n      logger: Logger;\n    },\n  ) {\n    this.syncState = syncState;\n    this.authenticate = callbacks.authenticate;\n    this.stopSocket = callbacks.stopSocket;\n    this.tryRestartSocket = callbacks.tryRestartSocket;\n    this.pauseSocket = callbacks.pauseSocket;\n    this.resumeSocket = callbacks.resumeSocket;\n    this.clearAuth = callbacks.clearAuth;\n    this.logger = config.logger;\n    this.refreshTokenLeewaySeconds = config.refreshTokenLeewaySeconds;\n  }\n\n  async setConfig(\n    fetchToken: AuthTokenFetcher,\n    onChange: (isAuthenticated: boolean) => void,\n  ) {\n    this.resetAuthState();\n    this._logVerbose(\"pausing WS for auth token fetch\");\n    this.pauseSocket();\n    const token = await this.fetchTokenAndGuardAgainstRace(fetchToken, {\n      forceRefreshToken: false,\n    });\n    if (token.isFromOutdatedConfig) {\n      return;\n    }\n    if (token.value) {\n      this.setAuthState({\n        state: \"waitingForServerConfirmationOfCachedToken\",\n        config: { fetchToken, onAuthChange: onChange },\n        hasRetried: false,\n      });\n      this.authenticate(token.value);\n    } else {\n      this.setAuthState({\n        state: \"initialRefetch\",\n        config: { fetchToken, onAuthChange: onChange },\n      });\n      // Try again with `forceRefreshToken: true`\n      await this.refetchToken();\n    }\n    this._logVerbose(\"resuming WS after auth token fetch\");\n    this.resumeSocket();\n  }\n\n  onTransition(serverMessage: Transition) {\n    if (\n      !this.syncState.isCurrentOrNewerAuthVersion(\n        serverMessage.endVersion.identity,\n      )\n    ) {\n      // This is a stale transition - client has moved on to\n      // a newer auth version.\n      return;\n    }\n    if (\n      serverMessage.endVersion.identity <= serverMessage.startVersion.identity\n    ) {\n      // This transition did not change auth - it is not a response to Authenticate.\n      return;\n    }\n\n    this._logVerbose(\n      `auth state is ${this.authState.state} when handling transition`,\n    );\n\n    // This transition advanced the auth version, which means the token used was valid\n    // and the client and server auth states are in sync.\n    this.syncState.markAuthCompletion();\n\n    if (this.authState.state === \"waitingForServerConfirmationOfCachedToken\") {\n      this._logVerbose(\"server confirmed auth token is valid\");\n      void this.refetchToken();\n      this.authState.config.onAuthChange(true);\n      return;\n    }\n    if (this.authState.state === \"waitingForServerConfirmationOfFreshToken\") {\n      this._logVerbose(\"server confirmed new auth token is valid\");\n      this.scheduleTokenRefetch(this.authState.token);\n      this.tokenConfirmationAttempts = 0;\n      if (!this.authState.hadAuth) {\n        this.authState.config.onAuthChange(true);\n      }\n    }\n  }\n\n  onAuthError(serverMessage: AuthError) {\n    // If the AuthError is not due to updating the token, and we're currently\n    // waiting on the result of a token update, ignore.\n    if (\n      serverMessage.authUpdateAttempted === false &&\n      (this.authState.state === \"waitingForServerConfirmationOfFreshToken\" ||\n        this.authState.state === \"waitingForServerConfirmationOfCachedToken\")\n    ) {\n      this._logVerbose(\"ignoring non-auth token expired error\");\n      return;\n    }\n    const { baseVersion } = serverMessage;\n    // Versioned AuthErrors are ignored if the client advanced to\n    // a newer auth identity\n    // Error are reporting the previous version, since the server\n    // didn't advance, hence `+ 1`.\n    if (!this.syncState.isCurrentOrNewerAuthVersion(baseVersion + 1)) {\n      this._logVerbose(\"ignoring auth error for previous auth attempt\");\n      return;\n    }\n    void this.tryToReauthenticate(serverMessage);\n    return;\n  }\n\n  // This is similar to `refetchToken` defined below, in fact we\n  // don't represent them as different states, but it is different\n  // in that we pause the WebSocket so that mutations\n  // don't retry with bad auth.\n  private async tryToReauthenticate(serverMessage: AuthError) {\n    this._logVerbose(`attempting to reauthenticate: ${serverMessage.error}`);\n    if (\n      // No way to fetch another token, kaboom\n      this.authState.state === \"noAuth\" ||\n      // We failed on a fresh token. After a small number of retries, we give up\n      // and clear the auth state to avoid infinite retries.\n      (this.authState.state === \"waitingForServerConfirmationOfFreshToken\" &&\n        this.tokenConfirmationAttempts >= MAX_TOKEN_CONFIRMATION_ATTEMPTS)\n    ) {\n      this.logger.error(\n        `Failed to authenticate: \"${serverMessage.error}\", check your server auth config`,\n      );\n      if (this.syncState.hasAuth()) {\n        this.syncState.clearAuth();\n      }\n      if (this.authState.state !== \"noAuth\") {\n        this.setAndReportAuthFailed(this.authState.config.onAuthChange);\n      }\n      return;\n    }\n    if (this.authState.state === \"waitingForServerConfirmationOfFreshToken\") {\n      this.tokenConfirmationAttempts++;\n      this._logVerbose(\n        `retrying reauthentication, ${MAX_TOKEN_CONFIRMATION_ATTEMPTS - this.tokenConfirmationAttempts} attempts remaining`,\n      );\n    }\n\n    await this.stopSocket();\n    const token = await this.fetchTokenAndGuardAgainstRace(\n      this.authState.config.fetchToken,\n      {\n        forceRefreshToken: true,\n      },\n    );\n    if (token.isFromOutdatedConfig) {\n      return;\n    }\n\n    if (token.value && this.syncState.isNewAuth(token.value)) {\n      this.authenticate(token.value);\n      this.setAuthState({\n        state: \"waitingForServerConfirmationOfFreshToken\",\n        config: this.authState.config,\n        token: token.value,\n        hadAuth:\n          this.authState.state === \"notRefetching\" ||\n          this.authState.state === \"waitingForScheduledRefetch\",\n      });\n    } else {\n      this._logVerbose(\"reauthentication failed, could not fetch a new token\");\n      if (this.syncState.hasAuth()) {\n        this.syncState.clearAuth();\n      }\n      this.setAndReportAuthFailed(this.authState.config.onAuthChange);\n    }\n    this.tryRestartSocket();\n  }\n\n  // Force refetch the token and schedule another refetch\n  // before the token expires - an active client should never\n  // need to reauthenticate.\n  private async refetchToken() {\n    if (this.authState.state === \"noAuth\") {\n      return;\n    }\n    this._logVerbose(\"refetching auth token\");\n    const token = await this.fetchTokenAndGuardAgainstRace(\n      this.authState.config.fetchToken,\n      {\n        forceRefreshToken: true,\n      },\n    );\n    if (token.isFromOutdatedConfig) {\n      return;\n    }\n\n    if (token.value) {\n      if (this.syncState.isNewAuth(token.value)) {\n        this.setAuthState({\n          state: \"waitingForServerConfirmationOfFreshToken\",\n          hadAuth: this.syncState.hasAuth(),\n          token: token.value,\n          config: this.authState.config,\n        });\n        this.authenticate(token.value);\n      } else {\n        this.setAuthState({\n          state: \"notRefetching\",\n          config: this.authState.config,\n        });\n      }\n    } else {\n      this._logVerbose(\"refetching token failed\");\n      if (this.syncState.hasAuth()) {\n        this.clearAuth();\n      }\n      this.setAndReportAuthFailed(this.authState.config.onAuthChange);\n    }\n    // Restart in case this refetch was triggered via schedule during\n    // a reauthentication attempt.\n    this._logVerbose(\n      \"restarting WS after auth token fetch (if currently stopped)\",\n    );\n    this.tryRestartSocket();\n  }\n\n  private scheduleTokenRefetch(token: string) {\n    if (this.authState.state === \"noAuth\") {\n      return;\n    }\n    const decodedToken = this.decodeToken(token);\n    if (!decodedToken) {\n      // This is no longer really possible, because\n      // we wait on server response before scheduling token refetch,\n      // and the server currently requires JWT tokens.\n      this.logger.error(\n        \"Auth token is not a valid JWT, cannot refetch the token\",\n      );\n      return;\n    }\n    // iat: issued at time, UTC seconds timestamp at which the JWT was issued\n    // exp: expiration time, UTC seconds timestamp at which the JWT will expire\n    const { iat, exp } = decodedToken as { iat?: number; exp?: number };\n    if (!iat || !exp) {\n      this.logger.error(\n        \"Auth token does not have required fields, cannot refetch the token\",\n      );\n      return;\n    }\n    // Because the client and server clocks may be out of sync,\n    // we only know that the token will expire after `exp - iat`,\n    // and since we just fetched a fresh one we know when that\n    // will happen.\n    const tokenValiditySeconds = exp - iat;\n    if (tokenValiditySeconds <= 2) {\n      this.logger.error(\n        \"Auth token does not live long enough, cannot refetch the token\",\n      );\n      return;\n    }\n    // Attempt to refresh the token `refreshTokenLeewaySeconds` before it expires,\n    // or immediately if the token is already expiring soon.\n    let delay = Math.min(\n      MAXIMUM_REFRESH_DELAY,\n      (tokenValiditySeconds - this.refreshTokenLeewaySeconds) * 1000,\n    );\n    if (delay <= 0) {\n      // Refetch immediately, but this might be due to configuring a `refreshTokenLeewaySeconds`\n      // that is too large compared to the token's actual lifetime.\n      this.logger.warn(\n        `Refetching auth token immediately, configured leeway ${this.refreshTokenLeewaySeconds}s is larger than the token's lifetime ${tokenValiditySeconds}s`,\n      );\n      delay = 0;\n    }\n    const refetchTokenTimeoutId = setTimeout(() => {\n      this._logVerbose(\"running scheduled token refetch\");\n      void this.refetchToken();\n    }, delay);\n    this.setAuthState({\n      state: \"waitingForScheduledRefetch\",\n      refetchTokenTimeoutId,\n      config: this.authState.config,\n    });\n    this._logVerbose(\n      `scheduled preemptive auth token refetching in ${delay}ms`,\n    );\n  }\n\n  // Protects against simultaneous calls to `setConfig`\n  // while we're fetching a token\n  private async fetchTokenAndGuardAgainstRace(\n    fetchToken: AuthTokenFetcher,\n    fetchArgs: {\n      forceRefreshToken: boolean;\n    },\n  ) {\n    const originalConfigVersion = ++this.configVersion;\n    this._logVerbose(\n      `fetching token with config version ${originalConfigVersion}`,\n    );\n    const token = await fetchToken(fetchArgs);\n    if (this.configVersion !== originalConfigVersion) {\n      // This is a stale config\n      this._logVerbose(\n        `stale config version, expected ${originalConfigVersion}, got ${this.configVersion}`,\n      );\n      return { isFromOutdatedConfig: true };\n    }\n    return { isFromOutdatedConfig: false, value: token };\n  }\n\n  stop() {\n    this.resetAuthState();\n    // Bump this in case we are mid-token-fetch when we get stopped\n    this.configVersion++;\n    this._logVerbose(`config version bumped to ${this.configVersion}`);\n  }\n\n  private setAndReportAuthFailed(\n    onAuthChange: (authenticated: boolean) => void,\n  ) {\n    onAuthChange(false);\n    this.resetAuthState();\n  }\n\n  private resetAuthState() {\n    this.setAuthState({ state: \"noAuth\" });\n  }\n\n  private setAuthState(newAuth: AuthState) {\n    const authStateForLog =\n      newAuth.state === \"waitingForServerConfirmationOfFreshToken\"\n        ? {\n            hadAuth: newAuth.hadAuth,\n            state: newAuth.state,\n            token: `...${newAuth.token.slice(-7)}`,\n          }\n        : { state: newAuth.state };\n    this._logVerbose(\n      `setting auth state to ${JSON.stringify(authStateForLog)}`,\n    );\n    switch (newAuth.state) {\n      case \"waitingForScheduledRefetch\":\n      case \"notRefetching\":\n      case \"noAuth\":\n        this.tokenConfirmationAttempts = 0;\n        break;\n      case \"waitingForServerConfirmationOfFreshToken\":\n      case \"waitingForServerConfirmationOfCachedToken\":\n      case \"initialRefetch\":\n        break;\n      default: {\n        newAuth satisfies never;\n      }\n    }\n    if (this.authState.state === \"waitingForScheduledRefetch\") {\n      // TODO: this side-effect would be better situated with scheduling refetch\n      clearTimeout(this.authState.refetchTokenTimeoutId);\n    }\n    this.authState = newAuth;\n  }\n\n  private decodeToken(token: string) {\n    try {\n      return jwtDecode(token);\n    } catch (e) {\n      this._logVerbose(\n        `Error decoding token: ${e instanceof Error ? e.message : \"Unknown error\"}`,\n      );\n      return null;\n    }\n  }\n\n  private _logVerbose(message: string) {\n    this.logger.logVerbose(`${message} [v${this.configVersion}]`);\n  }\n}\n", "// Marks share a global namespace with other developer code.\nconst markNames = [\n  \"convexClientConstructed\",\n  \"convexWebSocketOpen\",\n  \"convexFirstMessageReceived\",\n] as const;\nexport type MarkName = (typeof markNames)[number];\n\n// Mark details are not reported to the server.\ntype MarkDetail = {\n  sessionId: string;\n};\n\n// `PerformanceMark`s are efficient and show up in browser's performance\n// timeline. They can be cleared with `performance.clearMarks()`.\n// This is a memory leak, but a worthwhile one: automatic\n// cleanup would make in-browser debugging more difficult.\nexport function mark(name: MarkName, sessionId: string) {\n  const detail: MarkDetail = { sessionId };\n  // `performance` APIs exists in browsers, Node.js, Deno, and more but it\n  // is not required by the Convex client.\n  if (typeof performance === \"undefined\" || !performance.mark) return;\n  performance.mark(name, { detail });\n}\n\n// `PerfomanceMark` has a built-in toJSON() but the return type varies\n// between implementations, e.g. Node.js returns details but Chrome does not.\nfunction performanceMarkToJson(mark: PerformanceMark): MarkJson {\n  // Remove \"convex\" prefix\n  let name = mark.name.slice(\"convex\".length);\n  // lowercase the first letter\n  name = name.charAt(0).toLowerCase() + name.slice(1);\n  return {\n    name,\n    startTime: mark.startTime,\n  };\n}\n\n// Similar to the return type of `PerformanceMark.toJson()`.\nexport type MarkJson = {\n  name: string;\n  // `startTime` is in milliseconds since the time origin like `performance.now()`.\n  // https://developer.mozilla.org/en-US/docs/Web/API/DOMHighResTimeStamp#the_time_origin\n  startTime: number;\n};\n\nexport function getMarksReport(sessionId: string): MarkJson[] {\n  if (typeof performance === \"undefined\" || !performance.getEntriesByName) {\n    return [];\n  }\n  const allMarks: PerformanceMark[] = [];\n  for (const name of markNames) {\n    const marks = (\n      performance\n        .getEntriesByName(name)\n        .filter((entry) => entry.entryType === \"mark\") as PerformanceMark[]\n    ).filter((mark) => mark.detail.sessionId === sessionId);\n    allMarks.push(...marks);\n  }\n  return allMarks.map(performanceMarkToJson);\n}\n", "/**\n * BaseConvexClient should not be used directly and does not provide a stable\n * interface. It is a \"Base\" client not because it expects to be inherited from\n * but because other clients are built around it.\n *\n * BaseConvexClient is not Convex Function type-aware: it deals\n * with queries as functions that return Value, not the specific value.\n * Use a higher-level library to get types.\n */\nimport { version } from \"../../index.js\";\nimport { convexToJson, Value } from \"../../values/index.js\";\nimport {\n  createHybridErrorStacktrace,\n  forwardData,\n  instantiateDefaultLogger,\n  instantiateNoopLogger,\n  logFatalError,\n  Logger,\n} from \"../logging.js\";\nimport { LocalSyncState } from \"./local_state.js\";\nimport { RequestManager } from \"./request_manager.js\";\nimport {\n  OptimisticLocalStore,\n  OptimisticUpdate,\n} from \"./optimistic_updates.js\";\nimport {\n  OptimisticQueryResults,\n  QueryResultsMap,\n} from \"./optimistic_updates_impl.js\";\nimport {\n  ActionRequest,\n  MutationRequest,\n  QueryId,\n  QueryJournal,\n  ServerMessage,\n  RequestId,\n  TS,\n  UserIdentityAttributes,\n} from \"./protocol.js\";\nimport { RemoteQuerySet } from \"./remote_query_set.js\";\nimport { QueryToken, serializePathAndArgs } from \"./udf_path_utils.js\";\nimport { ReconnectMetadata, WebSocketManager } from \"./web_socket_manager.js\";\nimport { newSessionId } from \"./session.js\";\nimport { FunctionResult } from \"./function_result.js\";\nimport {\n  AuthenticationManager,\n  AuthTokenFetcher,\n} from \"./authentication_manager.js\";\nexport { type AuthTokenFetcher } from \"./authentication_manager.js\";\nimport { getMarksReport, mark, MarkName } from \"./metrics.js\";\nimport { parseArgs, validateDeploymentUrl } from \"../../common/index.js\";\nimport { ConvexError } from \"../../values/errors.js\";\nimport { jwtDecode } from \"../../vendor/jwt-decode/index.js\";\n\n/**\n * Options for {@link BaseConvexClient}.\n *\n * @public\n */\nexport interface BaseConvexClientOptions {\n  /**\n   * Whether to prompt the user if they have unsaved changes pending\n   * when navigating away or closing a web page.\n   *\n   * This is only possible when the `window` object exists, i.e. in a browser.\n   *\n   * The default value is `true` in browsers.\n   */\n  unsavedChangesWarning?: boolean;\n  /**\n   * Specifies an alternate\n   * [WebSocket](https://developer.mozilla.org/en-US/docs/Web/API/WebSocket)\n   * constructor to use for client communication with the Convex cloud.\n   * The default behavior is to use `WebSocket` from the global environment.\n   */\n  webSocketConstructor?: typeof WebSocket;\n  /**\n   * Adds additional logging for debugging purposes.\n   *\n   * The default value is `false`.\n   */\n  verbose?: boolean;\n  /**\n   * A logger, `true`, or `false`. If not provided or `true`, logs to the console.\n   * If `false`, logs are not printed anywhere.\n   *\n   * You can construct your own logger to customize logging to log elsewhere.\n   * A logger is an object with 4 methods: log(), warn(), error(), and logVerbose().\n   * These methods can receive multiple arguments of any types, like console.log().\n   */\n  logger?: Logger | boolean;\n  /**\n   * Sends additional metrics to Convex for debugging purposes.\n   *\n   * The default value is `false`.\n   */\n  reportDebugInfoToConvex?: boolean;\n  /**\n   * This API is experimental: it may change or disappear.\n   *\n   * A function to call on receiving abnormal WebSocket close messages from the\n   * connected Convex deployment. The content of these messages is not stable,\n   * it is an implementation detail that may change.\n   *\n   * Consider this API an observability stopgap until higher level codes with\n   * recommendations on what to do are available, which could be a more stable\n   * interface instead of `string`.\n   *\n   * Check `connectionState` for more quantitative metrics about connection status.\n   */\n  onServerDisconnectError?: (message: string) => void;\n  /**\n   * Skip validating that the Convex deployment URL looks like\n   * `https://happy-animal-123.convex.cloud` or localhost.\n   *\n   * This can be useful if running a self-hosted Convex backend that uses a different\n   * URL.\n   *\n   * The default value is `false`\n   */\n  skipConvexDeploymentUrlCheck?: boolean;\n  /**\n   * If using auth, the number of seconds before a token expires that we should refresh it.\n   *\n   * The default value is `10`.\n   */\n  authRefreshTokenLeewaySeconds?: number;\n  /**\n   * This API is experimental: it may change or disappear.\n   *\n   * Whether query, mutation, and action requests should be held back\n   * until the first auth token can be sent.\n   *\n   * Opting into this behavior works well for pages that should\n   * only be viewed by authenticated clients.\n   *\n   * Defaults to false, not waiting for an auth token.\n   */\n  expectAuth?: boolean;\n}\n\n/**\n * State describing the client's connection with the Convex backend.\n *\n * @public\n */\nexport type ConnectionState = {\n  hasInflightRequests: boolean;\n  isWebSocketConnected: boolean;\n  timeOfOldestInflightRequest: Date | null;\n  /**\n   * True if the client has ever opened a WebSocket to the \"ready\" state.\n   */\n  hasEverConnected: boolean;\n  /**\n   * The number of times this client has connected to the Convex backend.\n   *\n   * A number of things can cause the client to reconnect -- server errors,\n   * bad internet, auth expiring. But this number being high is an indication\n   * that the client is having trouble keeping a stable connection.\n   */\n  connectionCount: number;\n  /**\n   * The number of times this client has tried (and failed) to connect to the Convex backend.\n   */\n  connectionRetries: number;\n  /**\n   * The number of mutations currently in flight.\n   */\n  inflightMutations: number;\n  /**\n   * The number of actions currently in flight.\n   */\n  inflightActions: number;\n};\n\n/**\n * Options for {@link BaseConvexClient.subscribe}.\n *\n * @public\n */\nexport interface SubscribeOptions {\n  /**\n   * An (optional) journal produced from a previous execution of this query\n   * function.\n   *\n   * If there is an existing subscription to a query function with the same\n   * name and arguments, this journal will have no effect.\n   */\n  journal?: QueryJournal;\n\n  /**\n   * @internal\n   */\n  componentPath?: string | undefined;\n}\n\n/**\n * Options for {@link BaseConvexClient.mutation}.\n *\n * @public\n */\nexport interface MutationOptions {\n  /**\n   * An optimistic update to apply along with this mutation.\n   *\n   * An optimistic update locally updates queries while a mutation is pending.\n   * Once the mutation completes, the update will be rolled back.\n   */\n  optimisticUpdate?: OptimisticUpdate<any> | undefined;\n}\n\n/**\n * Type describing updates to a query within a `Transition`.\n *\n * @public\n */\nexport type QueryModification =\n  // `undefined` generally comes from an optimistic update setting the query to be loading\n  { kind: \"Updated\"; result: FunctionResult | undefined } | { kind: \"Removed\" };\n\n/**\n * Object describing a transition passed into the `onTransition` handler.\n *\n * These can be from receiving a transition from the server, or from applying an\n * optimistic update locally.\n *\n * @public\n */\nexport type Transition = {\n  queries: Array<{ token: QueryToken; modification: QueryModification }>;\n  reflectedMutations: Array<{ requestId: RequestId; result: FunctionResult }>;\n  timestamp: TS;\n};\n\n/**\n * Low-level client for directly integrating state management libraries\n * with Convex.\n *\n * Most developers should use higher level clients, like\n * the {@link ConvexHttpClient} or the React hook based {@link react.ConvexReactClient}.\n *\n * @public\n */\nexport class BaseConvexClient {\n  private readonly address: string;\n  private readonly state: LocalSyncState;\n  private readonly requestManager: RequestManager;\n  private readonly webSocketManager: WebSocketManager;\n  private readonly authenticationManager: AuthenticationManager;\n  private remoteQuerySet: RemoteQuerySet;\n  private readonly optimisticQueryResults: OptimisticQueryResults;\n  private _transitionHandlerCounter = 0;\n  private _nextRequestId: RequestId;\n  private _onTransitionFns: Map<number, (transition: Transition) => void> =\n    new Map();\n  private readonly _sessionId: string;\n  private firstMessageReceived = false;\n  private readonly debug: boolean;\n  private readonly logger: Logger;\n  private maxObservedTimestamp: TS | undefined;\n  private connectionStateSubscribers = new Map<\n    number,\n    (connectionState: ConnectionState) => void\n  >();\n  private nextConnectionStateSubscriberId: number = 0;\n  private _lastPublishedConnectionState: ConnectionState | undefined;\n\n  /**\n   * @param address - The url of your Convex deployment, often provided\n   * by an environment variable. E.g. `https://small-mouse-123.convex.cloud`.\n   * @param onTransition - A callback receiving an array of query tokens\n   * corresponding to query results that have changed -- additional handlers\n   * can be added via `addOnTransitionHandler`.\n   * @param options - See {@link BaseConvexClientOptions} for a full description.\n   */\n  constructor(\n    address: string,\n    onTransition: (updatedQueries: QueryToken[]) => void,\n    options?: BaseConvexClientOptions,\n  ) {\n    if (typeof address === \"object\") {\n      throw new Error(\n        \"Passing a ClientConfig object is no longer supported. Pass the URL of the Convex deployment as a string directly.\",\n      );\n    }\n    if (options?.skipConvexDeploymentUrlCheck !== true) {\n      validateDeploymentUrl(address);\n    }\n    options = { ...options };\n    const authRefreshTokenLeewaySeconds =\n      options.authRefreshTokenLeewaySeconds ?? 10;\n    let webSocketConstructor = options.webSocketConstructor;\n    if (!webSocketConstructor && typeof WebSocket === \"undefined\") {\n      throw new Error(\n        \"No WebSocket global variable defined! To use Convex in an environment without WebSocket try the HTTP client: https://docs.convex.dev/api/classes/browser.ConvexHttpClient\",\n      );\n    }\n    webSocketConstructor = webSocketConstructor || WebSocket;\n    this.debug = options.reportDebugInfoToConvex ?? false;\n    this.address = address;\n    this.logger =\n      options.logger === false\n        ? instantiateNoopLogger({ verbose: options.verbose ?? false })\n        : options.logger !== true && options.logger\n          ? options.logger\n          : instantiateDefaultLogger({ verbose: options.verbose ?? false });\n    // Substitute http(s) with ws(s)\n    const i = address.search(\"://\");\n    if (i === -1) {\n      throw new Error(\"Provided address was not an absolute URL.\");\n    }\n    const origin = address.substring(i + 3); // move past the double slash\n    const protocol = address.substring(0, i);\n    let wsProtocol;\n    if (protocol === \"http\") {\n      wsProtocol = \"ws\";\n    } else if (protocol === \"https\") {\n      wsProtocol = \"wss\";\n    } else {\n      throw new Error(`Unknown parent protocol ${protocol}`);\n    }\n    const wsUri = `${wsProtocol}://${origin}/api/${version}/sync`;\n\n    this.state = new LocalSyncState();\n    this.remoteQuerySet = new RemoteQuerySet(\n      (queryId) => this.state.queryPath(queryId),\n      this.logger,\n    );\n    this.requestManager = new RequestManager(\n      this.logger,\n      this.markConnectionStateDirty,\n    );\n\n    // This is a callback for AuthenticationManager (which can't call\n    // this synchronously, the callback wouldn't work) so the initial\n    // pause for expectAuth we call it at the end of this constructor.\n    const pauseSocket = () => {\n      this.webSocketManager.pause();\n      this.state.pause();\n    };\n    this.authenticationManager = new AuthenticationManager(\n      this.state,\n      {\n        authenticate: (token) => {\n          const message = this.state.setAuth(token);\n          this.webSocketManager.sendMessage(message);\n          return message.baseVersion;\n        },\n        stopSocket: () => this.webSocketManager.stop(),\n        tryRestartSocket: () => this.webSocketManager.tryRestart(),\n        pauseSocket,\n        resumeSocket: () => this.webSocketManager.resume(),\n        clearAuth: () => {\n          this.clearAuth();\n        },\n      },\n      {\n        logger: this.logger,\n        refreshTokenLeewaySeconds: authRefreshTokenLeewaySeconds,\n      },\n    );\n    this.optimisticQueryResults = new OptimisticQueryResults();\n    this.addOnTransitionHandler((transition) => {\n      onTransition(transition.queries.map((q) => q.token));\n    });\n    this._nextRequestId = 0;\n    this._sessionId = newSessionId();\n\n    const { unsavedChangesWarning } = options;\n    if (\n      typeof window === \"undefined\" ||\n      typeof window.addEventListener === \"undefined\"\n    ) {\n      if (unsavedChangesWarning === true) {\n        throw new Error(\n          \"unsavedChangesWarning requested, but window.addEventListener not found! Remove {unsavedChangesWarning: true} from Convex client options.\",\n        );\n      }\n    } else if (unsavedChangesWarning !== false) {\n      // Listen for tab close events and notify the user on unsaved changes.\n      window.addEventListener(\"beforeunload\", (e) => {\n        if (this.requestManager.hasIncompleteRequests()) {\n          // There are 3 different ways to trigger this pop up so just try all of\n          // them.\n\n          e.preventDefault();\n          // This confirmation message doesn't actually appear in most modern\n          // browsers but we tried.\n          const confirmationMessage =\n            \"Are you sure you want to leave? Your changes may not be saved.\";\n          // Recommended method for legacy (IE) browsers.\n          // casts to avoid deprecation notices\n          ((e || (window as any).event) as any).returnValue =\n            confirmationMessage;\n          return confirmationMessage;\n        }\n      });\n    }\n\n    this.webSocketManager = new WebSocketManager(\n      wsUri,\n      {\n        onOpen: (reconnectMetadata: ReconnectMetadata) => {\n          // We have a new WebSocket!\n          this.mark(\"convexWebSocketOpen\");\n          this.webSocketManager.sendMessage({\n            ...reconnectMetadata,\n            type: \"Connect\",\n            sessionId: this._sessionId,\n            maxObservedTimestamp: this.maxObservedTimestamp,\n          });\n\n          // Throw out our remote query, reissue queries\n          // and outstanding mutations, and reauthenticate.\n          this.remoteQuerySet = new RemoteQuerySet(\n            (queryId) => this.state.queryPath(queryId),\n            this.logger,\n          );\n          const [querySetModification, authModification] = this.state.restart();\n          if (authModification) {\n            this.webSocketManager.sendMessage(authModification);\n          }\n          this.webSocketManager.sendMessage(querySetModification);\n          for (const message of this.requestManager.restart()) {\n            this.webSocketManager.sendMessage(message);\n          }\n        },\n        onResume: () => {\n          const [querySetModification, authModification] = this.state.resume();\n          if (authModification) {\n            this.webSocketManager.sendMessage(authModification);\n          }\n          if (querySetModification) {\n            this.webSocketManager.sendMessage(querySetModification);\n          }\n          for (const message of this.requestManager.resume()) {\n            this.webSocketManager.sendMessage(message);\n          }\n        },\n        onMessage: (serverMessage: ServerMessage) => {\n          // Metrics events grow linearly with reconnection attempts so this\n          // conditional prevents n^2 metrics reporting.\n          if (!this.firstMessageReceived) {\n            this.firstMessageReceived = true;\n            this.mark(\"convexFirstMessageReceived\");\n            this.reportMarks();\n          }\n          switch (serverMessage.type) {\n            case \"Transition\": {\n              this.observedTimestamp(serverMessage.endVersion.ts);\n              this.authenticationManager.onTransition(serverMessage);\n              this.remoteQuerySet.transition(serverMessage);\n              this.state.transition(serverMessage);\n              const completedRequests = this.requestManager.removeCompleted(\n                this.remoteQuerySet.timestamp(),\n              );\n              this.notifyOnQueryResultChanges(completedRequests);\n              break;\n            }\n            case \"MutationResponse\": {\n              if (serverMessage.success) {\n                this.observedTimestamp(serverMessage.ts);\n              }\n              const completedMutationInfo =\n                this.requestManager.onResponse(serverMessage);\n              if (completedMutationInfo !== null) {\n                this.notifyOnQueryResultChanges(\n                  new Map([\n                    [\n                      completedMutationInfo.requestId,\n                      completedMutationInfo.result,\n                    ],\n                  ]),\n                );\n              }\n              break;\n            }\n            case \"ActionResponse\": {\n              this.requestManager.onResponse(serverMessage);\n              break;\n            }\n            case \"AuthError\": {\n              this.authenticationManager.onAuthError(serverMessage);\n              break;\n            }\n            case \"FatalError\": {\n              const error = logFatalError(this.logger, serverMessage.error);\n              void this.webSocketManager.terminate();\n              throw error;\n            }\n            default: {\n              serverMessage satisfies never;\n            }\n          }\n\n          return {\n            hasSyncedPastLastReconnect: this.hasSyncedPastLastReconnect(),\n          };\n        },\n        onServerDisconnectError: options.onServerDisconnectError,\n      },\n      webSocketConstructor,\n      this.logger,\n      this.markConnectionStateDirty,\n      this.debug,\n    );\n    this.mark(\"convexClientConstructed\");\n\n    // Begin client in a paused state waiting for an auth token.\n    if (options.expectAuth) {\n      pauseSocket();\n    }\n  }\n\n  /**\n   * Return true if there is outstanding work from prior to the time of the most recent restart.\n   * This indicates that the client has not proven itself to have gotten past the issue that\n   * potentially led to the restart. Use this to influence when to reset backoff after a failure.\n   */\n  private hasSyncedPastLastReconnect() {\n    const hasSyncedPastLastReconnect =\n      this.requestManager.hasSyncedPastLastReconnect() &&\n      this.state.hasSyncedPastLastReconnect();\n    return hasSyncedPastLastReconnect;\n  }\n\n  private observedTimestamp(observedTs: TS) {\n    if (\n      this.maxObservedTimestamp === undefined ||\n      this.maxObservedTimestamp.lessThanOrEqual(observedTs)\n    ) {\n      this.maxObservedTimestamp = observedTs;\n    }\n  }\n\n  getMaxObservedTimestamp() {\n    return this.maxObservedTimestamp;\n  }\n\n  /**\n   * Compute the current query results based on the remoteQuerySet and the\n   * current optimistic updates and call `onTransition` for all the changed\n   * queries.\n   *\n   * @param completedMutations - A set of mutation IDs whose optimistic updates\n   * are no longer needed.\n   */\n  private notifyOnQueryResultChanges(\n    completedRequests: Map<RequestId, FunctionResult>,\n  ) {\n    const remoteQueryResults: Map<QueryId, FunctionResult> =\n      this.remoteQuerySet.remoteQueryResults();\n    const queryTokenToValue: QueryResultsMap = new Map();\n    for (const [queryId, result] of remoteQueryResults) {\n      const queryToken = this.state.queryToken(queryId);\n      // It's possible that we've already unsubscribed to this query but\n      // the server hasn't learned about that yet. If so, ignore this one.\n\n      if (queryToken !== null) {\n        const query = {\n          result,\n          udfPath: this.state.queryPath(queryId)!,\n          args: this.state.queryArgs(queryId)!,\n        };\n        queryTokenToValue.set(queryToken, query);\n      }\n    }\n\n    // Query tokens that are new (because of new server results or new local optimistic updates)\n    // or differ from old values (because of changes from local optimistic updates or new results\n    // from the server).\n    const changedQueryTokens =\n      this.optimisticQueryResults.ingestQueryResultsFromServer(\n        queryTokenToValue,\n        new Set(completedRequests.keys()),\n      );\n\n    this.handleTransition({\n      queries: changedQueryTokens.map((token) => {\n        const optimisticResult =\n          this.optimisticQueryResults.rawQueryResult(token);\n        return {\n          token,\n          modification: {\n            kind: \"Updated\" as const,\n            result: optimisticResult,\n          },\n        };\n      }),\n      reflectedMutations: Array.from(completedRequests).map(\n        ([requestId, result]) => ({\n          requestId,\n          result,\n        }),\n      ),\n      timestamp: this.remoteQuerySet.timestamp(),\n    });\n  }\n\n  private handleTransition(transition: Transition) {\n    for (const fn of this._onTransitionFns.values()) {\n      fn(transition);\n    }\n  }\n\n  /**\n   * Add a handler that will be called on a transition.\n   *\n   * Any external side effects (e.g. setting React state) should be handled here.\n   *\n   * @param fn\n   *\n   * @returns\n   */\n  addOnTransitionHandler(fn: (transition: Transition) => void) {\n    const id = this._transitionHandlerCounter++;\n    this._onTransitionFns.set(id, fn);\n    return () => this._onTransitionFns.delete(id);\n  }\n\n  /**\n   * Get the current JWT auth token and decoded claims.\n   */\n  getCurrentAuthClaims():\n    | { token: string; decoded: Record<string, any> }\n    | undefined {\n    const authToken = this.state.getAuth();\n    let decoded: Record<string, any> = {};\n    if (authToken && authToken.tokenType === \"User\") {\n      try {\n        decoded = authToken ? jwtDecode(authToken.value) : {};\n      } catch {\n        decoded = {};\n      }\n    } else {\n      return undefined;\n    }\n    return { token: authToken.value, decoded };\n  }\n\n  /**\n   * Set the authentication token to be used for subsequent queries and mutations.\n   * `fetchToken` will be called automatically again if a token expires.\n   * `fetchToken` should return `null` if the token cannot be retrieved, for example\n   * when the user's rights were permanently revoked.\n   * @param fetchToken - an async function returning the JWT-encoded OpenID Connect Identity Token\n   * @param onChange - a callback that will be called when the authentication status changes\n   */\n  setAuth(\n    fetchToken: AuthTokenFetcher,\n    onChange: (isAuthenticated: boolean) => void,\n  ) {\n    void this.authenticationManager.setConfig(fetchToken, onChange);\n  }\n\n  hasAuth() {\n    return this.state.hasAuth();\n  }\n\n  /** @internal */\n  setAdminAuth(value: string, fakeUserIdentity?: UserIdentityAttributes) {\n    const message = this.state.setAdminAuth(value, fakeUserIdentity);\n    this.webSocketManager.sendMessage(message);\n  }\n\n  clearAuth() {\n    const message = this.state.clearAuth();\n    this.webSocketManager.sendMessage(message);\n  }\n\n  /**\n   * Subscribe to a query function.\n   *\n   * Whenever this query's result changes, the `onTransition` callback\n   * passed into the constructor will be called.\n   *\n   * @param name - The name of the query.\n   * @param args - An arguments object for the query. If this is omitted, the\n   * arguments will be `{}`.\n   * @param options - A {@link SubscribeOptions} options object for this query.\n\n   * @returns An object containing a {@link QueryToken} corresponding to this\n   * query and an `unsubscribe` callback.\n   */\n  subscribe(\n    name: string,\n    args?: Record<string, Value>,\n    options?: SubscribeOptions,\n  ): { queryToken: QueryToken; unsubscribe: () => void } {\n    const argsObject = parseArgs(args);\n\n    const { modification, queryToken, unsubscribe } = this.state.subscribe(\n      name,\n      argsObject,\n      options?.journal,\n      options?.componentPath,\n    );\n    if (modification !== null) {\n      this.webSocketManager.sendMessage(modification);\n    }\n    return {\n      queryToken,\n      unsubscribe: () => {\n        const modification = unsubscribe();\n        if (modification) {\n          this.webSocketManager.sendMessage(modification);\n        }\n      },\n    };\n  }\n\n  /**\n   * A query result based only on the current, local state.\n   *\n   * The only way this will return a value is if we're already subscribed to the\n   * query or its value has been set optimistically.\n   */\n  localQueryResult(\n    udfPath: string,\n    args?: Record<string, Value>,\n  ): Value | undefined {\n    const argsObject = parseArgs(args);\n    const queryToken = serializePathAndArgs(udfPath, argsObject);\n    return this.optimisticQueryResults.queryResult(queryToken);\n  }\n\n  /**\n   * Get query result by query token based on current, local state\n   *\n   * The only way this will return a value is if we're already subscribed to the\n   * query or its value has been set optimistically.\n   *\n   * @internal\n   */\n  localQueryResultByToken(queryToken: QueryToken): Value | undefined {\n    return this.optimisticQueryResults.queryResult(queryToken);\n  }\n\n  /**\n   * Whether local query result is available for a token.\n   *\n   * This method does not throw if the result is an error.\n   *\n   * @internal\n   */\n  hasLocalQueryResultByToken(queryToken: QueryToken): boolean {\n    return this.optimisticQueryResults.hasQueryResult(queryToken);\n  }\n\n  /**\n   * @internal\n   */\n  localQueryLogs(\n    udfPath: string,\n    args?: Record<string, Value>,\n  ): string[] | undefined {\n    const argsObject = parseArgs(args);\n    const queryToken = serializePathAndArgs(udfPath, argsObject);\n    return this.optimisticQueryResults.queryLogs(queryToken);\n  }\n\n  /**\n   * Retrieve the current {@link QueryJournal} for this query function.\n   *\n   * If we have not yet received a result for this query, this will be `undefined`.\n   *\n   * @param name - The name of the query.\n   * @param args - The arguments object for this query.\n   * @returns The query's {@link QueryJournal} or `undefined`.\n   */\n  queryJournal(\n    name: string,\n    args?: Record<string, Value>,\n  ): QueryJournal | undefined {\n    const argsObject = parseArgs(args);\n    const queryToken = serializePathAndArgs(name, argsObject);\n    return this.state.queryJournal(queryToken);\n  }\n\n  /**\n   * Get the current {@link ConnectionState} between the client and the Convex\n   * backend.\n   *\n   * @returns The {@link ConnectionState} with the Convex backend.\n   */\n  connectionState(): ConnectionState {\n    const wsConnectionState = this.webSocketManager.connectionState();\n    return {\n      hasInflightRequests: this.requestManager.hasInflightRequests(),\n      isWebSocketConnected: wsConnectionState.isConnected,\n      hasEverConnected: wsConnectionState.hasEverConnected,\n      connectionCount: wsConnectionState.connectionCount,\n      connectionRetries: wsConnectionState.connectionRetries,\n      timeOfOldestInflightRequest:\n        this.requestManager.timeOfOldestInflightRequest(),\n      inflightMutations: this.requestManager.inflightMutations(),\n      inflightActions: this.requestManager.inflightActions(),\n    };\n  }\n\n  /**\n   * Call this whenever the connection state may have changed in a way that could\n   * require publishing it. Schedules a possibly update.\n   */\n  private markConnectionStateDirty = () => {\n    void Promise.resolve().then(() => {\n      const curConnectionState = this.connectionState();\n      if (\n        JSON.stringify(curConnectionState) !==\n        JSON.stringify(this._lastPublishedConnectionState)\n      ) {\n        this._lastPublishedConnectionState = curConnectionState;\n        for (const cb of this.connectionStateSubscribers.values()) {\n          // One of these callback throwing will prevent other callbacks\n          // from running but will not leave the client in a undefined state.\n          cb(curConnectionState);\n        }\n      }\n    });\n  };\n\n  /**\n   * Subscribe to the {@link ConnectionState} between the client and the Convex\n   * backend, calling a callback each time it changes.\n   *\n   * Subscribed callbacks will be called when any part of ConnectionState changes.\n   * ConnectionState may grow in future versions (e.g. to provide a array of\n   * inflight requests) in which case callbacks would be called more frequently.\n   *\n   * @returns An unsubscribe function to stop listening.\n   */\n  subscribeToConnectionState(\n    cb: (connectionState: ConnectionState) => void,\n  ): () => void {\n    const id = this.nextConnectionStateSubscriberId++;\n    this.connectionStateSubscribers.set(id, cb);\n    return () => {\n      this.connectionStateSubscribers.delete(id);\n    };\n  }\n\n  /**\n   * Execute a mutation function.\n   *\n   * @param name - The name of the mutation.\n   * @param args - An arguments object for the mutation. If this is omitted,\n   * the arguments will be `{}`.\n   * @param options - A {@link MutationOptions} options object for this mutation.\n\n   * @returns - A promise of the mutation's result.\n   */\n  async mutation(\n    name: string,\n    args?: Record<string, Value>,\n    options?: MutationOptions,\n  ): Promise<any> {\n    const result = await this.mutationInternal(name, args, options);\n    if (!result.success) {\n      if (result.errorData !== undefined) {\n        throw forwardData(\n          result,\n          new ConvexError(\n            createHybridErrorStacktrace(\"mutation\", name, result),\n          ),\n        );\n      }\n      throw new Error(createHybridErrorStacktrace(\"mutation\", name, result));\n    }\n    return result.value;\n  }\n\n  /**\n   * @internal\n   */\n  async mutationInternal(\n    udfPath: string,\n    args?: Record<string, Value>,\n    options?: MutationOptions,\n    componentPath?: string,\n  ): Promise<FunctionResult> {\n    const { mutationPromise } = this.enqueueMutation(\n      udfPath,\n      args,\n      options,\n      componentPath,\n    );\n    return mutationPromise;\n  }\n\n  /**\n   * @internal\n   */\n  enqueueMutation(\n    udfPath: string,\n    args?: Record<string, Value>,\n    options?: MutationOptions,\n    componentPath?: string,\n  ): { requestId: RequestId; mutationPromise: Promise<FunctionResult> } {\n    const mutationArgs = parseArgs(args);\n    this.tryReportLongDisconnect();\n    const requestId = this.nextRequestId;\n    this._nextRequestId++;\n\n    if (options !== undefined) {\n      const optimisticUpdate = options.optimisticUpdate;\n      if (optimisticUpdate !== undefined) {\n        const wrappedUpdate = (localQueryStore: OptimisticLocalStore) => {\n          const result: unknown = optimisticUpdate(\n            localQueryStore,\n            mutationArgs,\n          );\n          if (result instanceof Promise) {\n            this.logger.warn(\n              \"Optimistic update handler returned a Promise. Optimistic updates should be synchronous.\",\n            );\n          }\n        };\n\n        const changedQueryTokens =\n          this.optimisticQueryResults.applyOptimisticUpdate(\n            wrappedUpdate,\n            requestId,\n          );\n\n        const changedQueries = changedQueryTokens.map((token) => {\n          const localResult = this.localQueryResultByToken(token);\n          return {\n            token,\n            modification: {\n              kind: \"Updated\" as const,\n              result:\n                localResult === undefined\n                  ? undefined\n                  : {\n                      success: true as const,\n                      value: localResult,\n                      logLines: [],\n                    },\n            },\n          };\n        });\n        this.handleTransition({\n          queries: changedQueries,\n          reflectedMutations: [],\n          timestamp: this.remoteQuerySet.timestamp(),\n        });\n      }\n    }\n\n    const message: MutationRequest = {\n      type: \"Mutation\",\n      requestId,\n      udfPath,\n      componentPath,\n      args: [convexToJson(mutationArgs)],\n    };\n    const mightBeSent = this.webSocketManager.sendMessage(message);\n    const mutationPromise = this.requestManager.request(message, mightBeSent);\n    return {\n      requestId,\n      mutationPromise,\n    };\n  }\n\n  /**\n   * Execute an action function.\n   *\n   * @param name - The name of the action.\n   * @param args - An arguments object for the action. If this is omitted,\n   * the arguments will be `{}`.\n   * @returns A promise of the action's result.\n   */\n  async action(name: string, args?: Record<string, Value>): Promise<any> {\n    const result = await this.actionInternal(name, args);\n    if (!result.success) {\n      if (result.errorData !== undefined) {\n        throw forwardData(\n          result,\n          new ConvexError(createHybridErrorStacktrace(\"action\", name, result)),\n        );\n      }\n      throw new Error(createHybridErrorStacktrace(\"action\", name, result));\n    }\n    return result.value;\n  }\n\n  /**\n   * @internal\n   */\n  async actionInternal(\n    udfPath: string,\n    args?: Record<string, Value>,\n    componentPath?: string,\n  ): Promise<FunctionResult> {\n    const actionArgs = parseArgs(args);\n    const requestId = this.nextRequestId;\n    this._nextRequestId++;\n    this.tryReportLongDisconnect();\n\n    const message: ActionRequest = {\n      type: \"Action\",\n      requestId,\n      udfPath,\n      componentPath,\n      args: [convexToJson(actionArgs)],\n    };\n\n    const mightBeSent = this.webSocketManager.sendMessage(message);\n    return this.requestManager.request(message, mightBeSent);\n  }\n\n  /**\n   * Close any network handles associated with this client and stop all subscriptions.\n   *\n   * Call this method when you're done with an {@link BaseConvexClient} to\n   * dispose of its sockets and resources.\n   *\n   * @returns A `Promise` fulfilled when the connection has been completely closed.\n   */\n  async close(): Promise<void> {\n    this.authenticationManager.stop();\n    return this.webSocketManager.terminate();\n  }\n\n  /**\n   * Return the address for this client, useful for creating a new client.\n   *\n   * Not guaranteed to match the address with which this client was constructed:\n   * it may be canonicalized.\n   */\n  get url() {\n    return this.address;\n  }\n\n  /**\n   * @internal\n   */\n  get nextRequestId() {\n    return this._nextRequestId;\n  }\n\n  /**\n   * @internal\n   */\n  get sessionId() {\n    return this._sessionId;\n  }\n\n  // Instance property so that `mark()` doesn't need to be called as a method.\n  private mark = (name: MarkName) => {\n    if (this.debug) {\n      mark(name, this.sessionId);\n    }\n  };\n\n  /**\n   * Reports performance marks to the server. This should only be called when\n   * we have a functional websocket.\n   */\n  private reportMarks() {\n    if (this.debug) {\n      const report = getMarksReport(this.sessionId);\n      this.webSocketManager.sendMessage({\n        type: \"Event\",\n        eventType: \"ClientConnect\",\n        event: report,\n      });\n    }\n  }\n\n  private tryReportLongDisconnect() {\n    if (!this.debug) {\n      return;\n    }\n    const timeOfOldestRequest =\n      this.connectionState().timeOfOldestInflightRequest;\n    if (\n      timeOfOldestRequest === null ||\n      Date.now() - timeOfOldestRequest.getTime() <= 60 * 1000\n    ) {\n      return;\n    }\n    const endpoint = `${this.address}/api/debug_event`;\n    fetch(endpoint, {\n      method: \"POST\",\n      headers: {\n        \"Content-Type\": \"application/json\",\n        \"Convex-Client\": `npm-${version}`,\n      },\n      body: JSON.stringify({ event: \"LongWebsocketDisconnect\" }),\n    })\n      .then((response) => {\n        if (!response.ok) {\n          this.logger.warn(\n            \"Analytics request failed with response:\",\n            response.body,\n          );\n        }\n      })\n      .catch((error) => {\n        this.logger.warn(\"Analytics response failed with error:\", error);\n      });\n  }\n}\n", "import path from \"path\";\nimport { Context } from \"../../bundler/context.js\";\nimport {\n  changeSpinner,\n  logFinishedStep,\n  logMessage,\n} from \"../../bundler/log.js\";\nimport {\n  ProjectConfig,\n  configFromProjectConfig,\n  debugIsolateEndpointBundles,\n  getFunctionsDirectoryPath,\n  readProjectConfig,\n  pullConfig,\n  diffConfig,\n} from \"./config.js\";\nimport {\n  finishPush,\n  reportPushCompleted,\n  startPush,\n  waitForSchema,\n} from \"./deploy2.js\";\nimport { version } from \"../version.js\";\nimport { ensureHasConvexDependency, functionsDir } from \"./utils/utils.js\";\nimport {\n  bundleDefinitions,\n  bundleImplementations,\n  componentGraph,\n} from \"./components/definition/bundle.js\";\nimport { isComponentDirectory } from \"./components/definition/directoryStructure.js\";\nimport {\n  doFinalComponentCodegen,\n  doInitialComponentCodegen,\n  CodegenOptions,\n  doInitConvexFolder,\n  doCodegen,\n} from \"./codegen.js\";\nimport {\n  AppDefinitionConfig,\n  ComponentDefinitionConfig,\n} from \"./deployApi/definitionConfig.js\";\nimport { typeCheckFunctionsInMode, TypeCheckMode } from \"./typecheck.js\";\nimport { withTmpDir } from \"../../bundler/fs.js\";\nimport { handleDebugBundlePath } from \"./debugBundlePath.js\";\nimport { chalkStderr } from \"chalk\";\nimport { StartPushRequest, StartPushResponse } from \"./deployApi/startPush.js\";\nimport { loadSelectedDeploymentCredentials } from \"./api.js\";\nimport { FinishPushDiff } from \"./deployApi/finishPush.js\";\nimport { Reporter, Span } from \"./tracing.js\";\nimport { DEFINITION_FILENAME_TS } from \"./components/constants.js\";\nimport { DeploymentSelection } from \"./deploymentSelection.js\";\nimport { DeploymentType } from \"./api.js\";\nimport { deploymentDashboardUrlPage } from \"./dashboard.js\";\nimport { formatIndex, LargeIndexDeletionCheck } from \"./indexes.js\";\nimport { checkForLargeIndexDeletion } from \"./checkForLargeIndexDeletion.js\";\nimport { LogManager } from \"./logs.js\";\nimport { createHash } from \"crypto\";\nimport { Bundle, BundleHash } from \"../../bundler/index.js\";\nimport { ModuleHashConfig } from \"./deployApi/modules.js\";\n\nexport type PushOptions = {\n  adminKey: string;\n  verbose: boolean;\n  dryRun: boolean;\n  typecheck: \"enable\" | \"try\" | \"disable\";\n  typecheckComponents: boolean;\n  debug: boolean;\n  debugBundlePath?: string | undefined;\n  debugNodeApis: boolean;\n  codegen: boolean;\n  url: string;\n  deploymentName: string | null;\n  deploymentType?: DeploymentType;\n  writePushRequest?: string | undefined;\n  liveComponentSources: boolean;\n  pushAllModules: boolean;\n  logManager?: LogManager | undefined;\n  largeIndexDeletionCheck: LargeIndexDeletionCheck;\n};\n\nexport async function runCodegen(\n  ctx: Context,\n  deploymentSelection: DeploymentSelection,\n  options: CodegenOptions,\n) {\n  // This also ensures the current directory is the project root.\n  await ensureHasConvexDependency(ctx, \"codegen\");\n\n  const { configPath, projectConfig } = await readProjectConfig(ctx);\n  const functionsDirectoryPath = functionsDir(configPath, projectConfig);\n\n  if (options.init) {\n    await doInitConvexFolder(ctx, functionsDirectoryPath, {\n      dryRun: options.dryRun,\n      debug: options.debug,\n    });\n  }\n\n  if (!options.systemUdfs) {\n    // Early exit for a better error message trying to use a preview key.\n    if (deploymentSelection.kind === \"preview\") {\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"invalid filesystem data\",\n        printedMessage: `Codegen requires an existing deployment so doesn't support CONVEX_DEPLOY_KEY.\\nGenerate code in dev and commit it to the repo instead.\\nhttps://docs.convex.dev/understanding/best-practices/other-recommendations#check-generated-code-into-version-control`,\n      });\n    }\n\n    const credentials = await loadSelectedDeploymentCredentials(\n      ctx,\n      deploymentSelection,\n    );\n\n    await startComponentsPushAndCodegen(\n      ctx,\n      Span.noop(),\n      projectConfig,\n      configPath,\n      {\n        ...options,\n        deploymentName: credentials.deploymentFields?.deploymentName ?? null,\n        ...(credentials.deploymentFields?.deploymentType !== undefined\n          ? { deploymentType: credentials.deploymentFields.deploymentType }\n          : {}),\n        url: credentials.url,\n        adminKey: credentials.adminKey,\n        generateCommonJSApi: options.commonjs,\n        verbose: !!process.env.CONVEX_VERBOSE,\n        codegen: true,\n        liveComponentSources: options.liveComponentSources,\n        typecheckComponents: false,\n        debugNodeApis: options.debugNodeApis,\n      },\n    );\n  } else {\n    if (options.typecheck !== \"disable\") {\n      logMessage(chalkStderr.gray(\"Running TypeScript typecheck\u2026\"));\n    }\n\n    await doCodegen(ctx, functionsDirectoryPath, options.typecheck, {\n      dryRun: options.dryRun,\n      debug: options.debug,\n      generateCommonJSApi: options.commonjs,\n    });\n  }\n}\n\nexport async function runPush(ctx: Context, options: PushOptions) {\n  const { configPath, projectConfig } = await readProjectConfig(ctx);\n  await runComponentsPush(ctx, options, configPath, projectConfig);\n}\n\nexport function hash(bundle: Bundle) {\n  return createHash(\"sha256\")\n    .update(bundle.source)\n    .update(bundle.sourceMap || \"\")\n    .digest(\"hex\");\n}\n\nfunction isModuleTheSame(newBundle: Bundle, oldBundleHash: BundleHash) {\n  return (\n    newBundle.environment === oldBundleHash.environment &&\n    hash(newBundle) === oldBundleHash.hash\n  );\n}\n\nexport function partitionModulesByChanges(\n  functions: Bundle[],\n  remoteHashesByPath: Map<string, BundleHash>,\n): {\n  unchangedModuleHashes: ModuleHashConfig[];\n  changedModules: Bundle[];\n} {\n  // Partition modules based on whether they match the existing modules\n  const unchangedModuleHashes = functions\n    .filter((newBundle) => {\n      const oldBundleHash = remoteHashesByPath.get(newBundle.path);\n      return oldBundleHash && isModuleTheSame(newBundle, oldBundleHash);\n    })\n    .map((func) => ({\n      path: func.path,\n      environment: func.environment,\n      sha256: hash(func),\n    }));\n  const changedModules = functions.filter((newBundle) => {\n    const oldBundleHash = remoteHashesByPath.get(newBundle.path);\n    return !oldBundleHash || !isModuleTheSame(newBundle, oldBundleHash);\n  });\n  return { unchangedModuleHashes, changedModules };\n}\n\nasync function getUnchangedModuleHashesFromServer(\n  ctx: Context,\n  appImplementation: { functions: Bundle[] },\n  options: { url: string; adminKey: string },\n): Promise<{\n  unchangedModuleHashes: ModuleHashConfig[];\n  changedModules: Bundle[];\n}> {\n  const remoteConfigWithModuleHashes = await pullConfig(\n    ctx,\n    undefined,\n    undefined,\n    options.url,\n    options.adminKey,\n  );\n  const remoteHashesByPath = new Map(\n    remoteConfigWithModuleHashes.moduleHashes.map((moduleHash) => [\n      moduleHash.path,\n      moduleHash,\n    ]),\n  );\n  return partitionModulesByChanges(\n    appImplementation.functions,\n    remoteHashesByPath,\n  );\n}\n\nasync function startComponentsPushAndCodegen(\n  ctx: Context,\n  parentSpan: Span,\n  projectConfig: ProjectConfig,\n  configPath: string,\n  options: {\n    typecheck: TypeCheckMode;\n    typecheckComponents: boolean;\n    adminKey: string;\n    url: string;\n    deploymentName: string | null;\n    deploymentType?: DeploymentType;\n    verbose: boolean;\n    debugBundlePath?: string | undefined;\n    dryRun: boolean;\n    generateCommonJSApi?: boolean;\n    debug: boolean;\n    writePushRequest?: string | undefined;\n    codegen: boolean;\n    liveComponentSources?: boolean;\n    pushAllModules?: boolean;\n    debugNodeApis: boolean;\n    largeIndexDeletionCheck: LargeIndexDeletionCheck;\n    codegenOnlyThisComponent?: string | undefined;\n  },\n): Promise<StartPushResponse | null> {\n  const convexDir = await getFunctionsDirectoryPath(ctx);\n\n  // '.' means use the process current working directory, it's the default behavior.\n  // Spelling it out here to be explicit for a future where this code can run\n  // from other directories.\n  // In esbuild the working directory is used to print error messages and resolving\n  // relatives paths passed to it. It generally doesn't matter for resolving imports,\n  // imports are resolved from the file where they are written.\n  const absWorkingDir = path.resolve(\".\");\n  const isComponent = isComponentDirectory(ctx, convexDir, true);\n  if (isComponent.kind === \"err\") {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"invalid filesystem data\",\n      printedMessage: `Invalid component root directory (${isComponent.why}): ${convexDir}`,\n    });\n  }\n\n  let rootComponent = isComponent.component;\n  if (options.codegenOnlyThisComponent) {\n    const absolutePath = path.resolve(options.codegenOnlyThisComponent);\n    let componentConfigPath: string;\n\n    // Must be a directory containing a convex.config.ts\n    componentConfigPath = path.join(absolutePath, DEFINITION_FILENAME_TS);\n    if (!ctx.fs.exists(componentConfigPath)) {\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"invalid filesystem data\",\n        printedMessage: `Only directories with convex.config.ts files are supported, this directory does not: ${absolutePath}`,\n      });\n    }\n\n    const syntheticConfigPath = path.join(\n      rootComponent.path,\n      DEFINITION_FILENAME_TS,\n    );\n    rootComponent = {\n      isRoot: true,\n      path: rootComponent.path,\n      definitionPath: syntheticConfigPath,\n      isRootWithoutConfig: false,\n      syntheticComponentImport: componentConfigPath,\n    };\n  }\n\n  changeSpinner(\"Finding component definitions...\");\n  // Create a list of relevant component directories. These are just for knowing\n  // while directories to bundle in bundleDefinitions and bundleImplementations.\n  // This produces a bundle in memory as a side effect but it's thrown away.\n  const { components, dependencyGraph } = await parentSpan.enterAsync(\n    \"componentGraph\",\n    () =>\n      componentGraph(\n        ctx,\n        absWorkingDir,\n        rootComponent,\n        !!options.liveComponentSources,\n        options.verbose,\n      ),\n  );\n\n  // Initial codegen is everything we need to get code runnable:\n  // root components and other components need a basic _generated/api.ts etc.\n  // just to make the code bundleable and runnable so we can analyze.\n  if (options.codegen) {\n    changeSpinner(\"Generating server code...\");\n    await parentSpan.enterAsync(\"doInitialComponentCodegen\", () =>\n      withTmpDir(async (tmpDir) => {\n        // Skip the root in component cases\n        if (!rootComponent.syntheticComponentImport) {\n          // Do root first so if a component fails, we'll at least have a working root.\n          await doInitialComponentCodegen(ctx, tmpDir, rootComponent, options);\n        }\n        for (const directory of components.values()) {\n          if (directory.isRoot) {\n            continue;\n          }\n          // When --component-dir is used, only generate code for the target component\n          if (\n            rootComponent.syntheticComponentImport &&\n            directory.definitionPath !== rootComponent.syntheticComponentImport\n          ) {\n            continue;\n          }\n          await doInitialComponentCodegen(ctx, tmpDir, directory, options);\n        }\n      }),\n    );\n  }\n\n  changeSpinner(\"Bundling component definitions...\");\n  // This bundles everything but the actual function definitions\n  const {\n    appDefinitionSpecWithoutImpls,\n    componentDefinitionSpecsWithoutImpls,\n  } = await parentSpan.enterAsync(\"bundleDefinitions\", () =>\n    bundleDefinitions(\n      ctx,\n      absWorkingDir,\n      dependencyGraph,\n      rootComponent,\n      // Note that this *includes* the root component.\n      [...components.values()],\n      !!options.liveComponentSources,\n      options.verbose,\n    ),\n  );\n\n  if (options.debugNodeApis) {\n    await debugIsolateEndpointBundles(ctx, projectConfig, configPath);\n    logFinishedStep(\n      \"All non-'use node' entry points successfully bundled. Skipping rest of push.\",\n    );\n    return null;\n  }\n\n  changeSpinner(\"Bundling component schemas and implementations...\");\n  const { appImplementation, componentImplementations } =\n    await parentSpan.enterAsync(\"bundleImplementations\", () =>\n      bundleImplementations({\n        ctx,\n        rootComponentDirectory: rootComponent,\n        // When running codegen for a specific component, don't bundle the root.\n        componentDirectories: [...components.values()].filter(\n          (dir) => !dir.isRoot && !dir.syntheticComponentImport,\n        ),\n        nodeExternalPackages: projectConfig.node.externalPackages,\n        extraConditions: options.liveComponentSources\n          ? [\"@convex-dev/component-source\"]\n          : [],\n        verbose: options.verbose,\n        includeSourcesContent:\n          projectConfig.bundler?.includeSourcesContent ?? false,\n      }),\n    );\n  if (options.debugBundlePath) {\n    const { config: localConfig } = await configFromProjectConfig(\n      ctx,\n      projectConfig,\n      configPath,\n      options.verbose,\n    );\n    // TODO(ENG-6972): Actually write the bundles for components.\n    await handleDebugBundlePath(ctx, options.debugBundlePath, localConfig);\n    logMessage(\n      `Wrote bundle and metadata for modules in the root to ${options.debugBundlePath}. Skipping rest of push.`,\n    );\n    return null;\n  }\n\n  // We're just using the version this CLI is running with for now.\n  // This could be different than the version of `convex` the app runs with\n  // if the CLI is installed globally.\n  // TODO: This should be the version of the `convex` package used by each\n  // component, and may be different for each component.\n  const udfServerVersion = version;\n\n  const { unchangedModuleHashes, changedModules } = options.pushAllModules\n    ? {\n        unchangedModuleHashes: [],\n        changedModules: appImplementation.functions,\n      }\n    : await parentSpan.enterAsync(\"getUnchangedModuleHashesFromServer\", () =>\n        getUnchangedModuleHashesFromServer(ctx, appImplementation, options),\n      );\n\n  const appDefinition: AppDefinitionConfig = {\n    ...appDefinitionSpecWithoutImpls,\n    schema: appImplementation.schema,\n    changedModules,\n    unchangedModuleHashes,\n    udfServerVersion,\n  };\n\n  const componentDefinitions: ComponentDefinitionConfig[] = [];\n  for (const componentDefinition of componentDefinitionSpecsWithoutImpls) {\n    const impl = componentImplementations.filter(\n      (impl) => impl.definitionPath === componentDefinition.definitionPath,\n    )[0];\n    if (!impl) {\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: `missing! couldn't find ${componentDefinition.definitionPath} in ${componentImplementations.map((impl) => impl.definitionPath).toString()}`,\n      });\n    }\n    componentDefinitions.push({\n      ...componentDefinition,\n      ...impl,\n      udfServerVersion,\n    });\n  }\n  const startPushRequest = {\n    adminKey: options.adminKey,\n    dryRun: options.dryRun,\n    functions: projectConfig.functions,\n    appDefinition,\n    componentDefinitions,\n    nodeDependencies: appImplementation.externalNodeDependencies,\n    nodeVersion: projectConfig.node.nodeVersion,\n  };\n  if (options.writePushRequest) {\n    const pushRequestPath = path.resolve(options.writePushRequest);\n    ctx.fs.writeUtf8File(\n      `${pushRequestPath}.json`,\n      JSON.stringify(startPushRequest),\n    );\n    return null;\n  }\n  logStartPushSizes(parentSpan, startPushRequest);\n\n  if (options.largeIndexDeletionCheck !== \"no verification\") {\n    await parentSpan.enterAsync(\"checkForLargeIndexDeletion\", (span) =>\n      checkForLargeIndexDeletion({\n        ctx,\n        span,\n        request: startPushRequest,\n        options,\n        askForConfirmation:\n          options.largeIndexDeletionCheck === \"ask for confirmation\",\n      }),\n    );\n  }\n\n  changeSpinner(\"Uploading functions to Convex...\");\n  const startPushResponse = await parentSpan.enterAsync(\"startPush\", (span) =>\n    startPush(ctx, span, startPushRequest, options),\n  );\n\n  if (options.verbose) {\n    logMessage(\"startPush: \" + JSON.stringify(startPushResponse, null, 2));\n  }\n\n  if (options.codegen) {\n    changeSpinner(\"Generating TypeScript bindings...\");\n    await parentSpan.enterAsync(\"doFinalComponentCodegen\", () =>\n      withTmpDir(async (tmpDir) => {\n        // TODO generating code for the root component last might be better DX\n        // When running codegen for a specific component, don't generate types for the root\n        if (!rootComponent.syntheticComponentImport) {\n          // Do the root first\n          await doFinalComponentCodegen(\n            ctx,\n            tmpDir,\n            rootComponent,\n            rootComponent,\n            startPushResponse,\n            components,\n            options,\n          );\n        }\n        for (const directory of components.values()) {\n          if (directory.isRoot) {\n            continue;\n          }\n          // When --component-dir is used, only generate code for the target component\n          if (\n            rootComponent.syntheticComponentImport &&\n            directory.definitionPath !== rootComponent.syntheticComponentImport\n          ) {\n            continue;\n          }\n          await doFinalComponentCodegen(\n            ctx,\n            tmpDir,\n            rootComponent,\n            directory,\n            startPushResponse,\n            components,\n            options,\n          );\n        }\n      }),\n    );\n  }\n\n  changeSpinner(\"Running TypeScript...\");\n  await parentSpan.enterAsync(\"typeCheckFunctionsInMode\", async () => {\n    // When running codegen for a specific component, don't typecheck the root\n    if (!rootComponent.syntheticComponentImport) {\n      await typeCheckFunctionsInMode(\n        ctx,\n        options.typecheck,\n        rootComponent.path,\n      );\n    }\n    if (options.typecheckComponents) {\n      for (const directory of components.values()) {\n        if (!directory.isRoot) {\n          await typeCheckFunctionsInMode(\n            ctx,\n            options.typecheck,\n            directory.path,\n          );\n        }\n      }\n    } else if (rootComponent.syntheticComponentImport) {\n      // When running codegen for a specific component, only typecheck that component.\n      for (const directory of components.values()) {\n        if (\n          directory.isRoot ||\n          directory.definitionPath !== rootComponent.syntheticComponentImport\n        ) {\n          continue;\n        }\n        await typeCheckFunctionsInMode(ctx, options.typecheck, directory.path);\n      }\n    }\n  });\n\n  return startPushResponse;\n}\n\nfunction logStartPushSizes(span: Span, startPushRequest: StartPushRequest) {\n  let v8Size = 0;\n  let v8Count = 0;\n  let nodeSize = 0;\n  let nodeCount = 0;\n\n  for (const componentDefinition of startPushRequest.componentDefinitions) {\n    for (const module of componentDefinition.functions) {\n      if (module.environment === \"isolate\") {\n        v8Size += module.source.length + (module.sourceMap ?? \"\").length;\n        v8Count += 1;\n      } else if (module.environment === \"node\") {\n        nodeSize += module.source.length + (module.sourceMap ?? \"\").length;\n        nodeCount += 1;\n      }\n    }\n  }\n  span.setProperty(\"v8_size\", v8Size.toString());\n  span.setProperty(\"v8_count\", v8Count.toString());\n  span.setProperty(\"node_size\", nodeSize.toString());\n  span.setProperty(\"node_count\", nodeCount.toString());\n}\n\nexport async function runComponentsPush(\n  ctx: Context,\n  options: PushOptions,\n  configPath: string,\n  projectConfig: ProjectConfig,\n) {\n  const reporter = new Reporter();\n  const pushSpan = Span.root(reporter, \"runComponentsPush\");\n  pushSpan.setProperty(\"cli_version\", version);\n  const verbose = options.verbose || options.dryRun;\n\n  await ensureHasConvexDependency(ctx, \"push\");\n\n  const startPushResponse = await pushSpan.enterAsync(\n    \"startComponentsPushAndCodegen\",\n    (span) =>\n      startComponentsPushAndCodegen(\n        ctx,\n        span,\n        projectConfig,\n        configPath,\n        options,\n      ),\n  );\n  if (!startPushResponse) {\n    return;\n  }\n\n  await pushSpan.enterAsync(\"waitForSchema\", (span) =>\n    waitForSchema(ctx, span, startPushResponse, options),\n  );\n\n  if (verbose) {\n    const remoteConfigWithModuleHashes = await pullConfig(\n      ctx,\n      undefined,\n      undefined,\n      options.url,\n      options.adminKey,\n    );\n\n    const { config: localConfig } = await configFromProjectConfig(\n      ctx,\n      projectConfig,\n      configPath,\n      options.verbose,\n    );\n\n    changeSpinner(\"Diffing local code and deployment state...\");\n    const { diffString } = diffConfig(\n      remoteConfigWithModuleHashes,\n      localConfig,\n    );\n\n    logFinishedStep(\n      `Remote config ${\n        options.dryRun ? \"would\" : \"will\"\n      } be overwritten with the following changes:\\n  ` +\n        diffString.replace(/\\n/g, \"\\n  \"),\n    );\n  }\n\n  const finishPushResponse = await pushSpan.enterAsync(\"finishPush\", (span) =>\n    finishPush(ctx, span, startPushResponse, options),\n  );\n  printDiff(startPushResponse, finishPushResponse, options);\n  pushSpan.end();\n\n  // Asynchronously report that the push completed.\n  if (!options.dryRun) {\n    void reportPushCompleted(ctx, options.adminKey, options.url, reporter);\n  }\n}\n\nfunction printDiff(\n  startPushResponse: StartPushResponse,\n  finishPushResponse: FinishPushDiff,\n  opts: { verbose: boolean; dryRun: boolean; deploymentName: string | null },\n) {\n  if (opts.verbose) {\n    const diffString = JSON.stringify(finishPushResponse, null, 2);\n    logMessage(diffString);\n    return;\n  }\n  const indexDiffs = startPushResponse.schemaChange.indexDiffs;\n  const { componentDiffs } = finishPushResponse;\n\n  // Print out index diffs for the root component.\n  let rootDiff = indexDiffs?.[\"\"] || componentDiffs[\"\"]?.indexDiff;\n  if (rootDiff) {\n    if (rootDiff.removed_indexes.length > 0) {\n      let msg = `${opts.dryRun ? \"Would delete\" : \"Deleted\"} table indexes:\\n`;\n      for (const index of rootDiff.removed_indexes) {\n        msg += `  [-] ${formatIndex(index)}\\n`;\n      }\n      msg = msg.slice(0, -1); // strip last new line\n      logFinishedStep(msg);\n    }\n\n    const addedEnabled = rootDiff.added_indexes.filter((i) => !i.staged);\n    if (addedEnabled.length > 0) {\n      let msg = `${opts.dryRun ? \"Would add\" : \"Added\"} table indexes:\\n`;\n      for (const index of addedEnabled) {\n        msg += `  [+] ${formatIndex(index)}\\n`;\n      }\n      msg = msg.slice(0, -1); // strip last new line\n      logFinishedStep(msg);\n    }\n\n    const addedStaged = rootDiff.added_indexes.filter((i) => i.staged);\n    if (addedStaged.length > 0) {\n      let msg = `${opts.dryRun ? \"Would add\" : \"Added\"} staged table indexes:\\n`;\n      for (const index of addedStaged) {\n        const table = index.name.split(\".\")[0];\n        const progressLink = deploymentDashboardUrlPage(\n          opts.deploymentName,\n          `/data?table=${table}&showIndexes=true`,\n        );\n        msg += `  [+] ${formatIndex(index)}\\n`;\n        msg += `      See progress: ${progressLink}\\n`;\n      }\n      msg = msg.slice(0, -1); // strip last new line\n      logFinishedStep(msg);\n    }\n\n    if (rootDiff.enabled_indexes && rootDiff.enabled_indexes.length > 0) {\n      let msg = opts.dryRun\n        ? `These indexes would be enabled:\\n`\n        : `These indexes are now enabled:\\n`;\n      for (const index of rootDiff.enabled_indexes) {\n        msg += `  [*] ${formatIndex(index)}\\n`;\n      }\n      msg = msg.slice(0, -1); // strip last new line\n      logFinishedStep(msg);\n    }\n\n    if (rootDiff.disabled_indexes && rootDiff.disabled_indexes.length > 0) {\n      let msg = opts.dryRun\n        ? `These indexes would be staged:\\n`\n        : `These indexes are now staged:\\n`;\n      for (const index of rootDiff.disabled_indexes) {\n        msg += `  [*] ${formatIndex(index)}\\n`;\n      }\n      msg = msg.slice(0, -1); // strip last new line\n      logFinishedStep(msg);\n    }\n  }\n\n  // Only show component level diffs for other components.\n  for (const [componentPath, componentDiff] of Object.entries(componentDiffs)) {\n    if (componentPath === \"\") {\n      continue;\n    }\n    if (componentDiff.diffType.type === \"create\") {\n      logFinishedStep(`Installed component ${componentPath}.`);\n    }\n    if (componentDiff.diffType.type === \"unmount\") {\n      logFinishedStep(`Unmounted component ${componentPath}.`);\n    }\n    if (componentDiff.diffType.type === \"remount\") {\n      logFinishedStep(`Remounted component ${componentPath}.`);\n    }\n  }\n}\n", "import { Context } from \"../../bundler/context.js\";\nimport {\n  changeSpinner,\n  logError,\n  logFailure,\n  logFinishedStep,\n  logVerbose,\n  showSpinner,\n} from \"../../bundler/log.js\";\nimport { spawnSync } from \"child_process\";\nimport { deploymentFetch, logAndHandleFetchError } from \"./utils/utils.js\";\nimport {\n  EvaluatePushResponse,\n  evaluatePushResponse,\n  schemaStatus,\n  SchemaStatus,\n  StartPushRequest,\n  startPushResponse,\n  StartPushResponse,\n} from \"./deployApi/startPush.js\";\nimport {\n  AppDefinitionConfig,\n  ComponentDefinitionConfig,\n} from \"./deployApi/definitionConfig.js\";\nimport { chalkStderr } from \"chalk\";\nimport { finishPushDiff, FinishPushDiff } from \"./deployApi/finishPush.js\";\nimport { Reporter, Span } from \"./tracing.js\";\nimport { promisify } from \"node:util\";\nimport zlib from \"node:zlib\";\nimport { PushOptions } from \"./components.js\";\nimport { DeploymentType } from \"./api.js\";\nimport { runPush } from \"./components.js\";\nimport { suggestedEnvVarNames } from \"./envvars.js\";\nimport { runSystemQuery } from \"./run.js\";\nimport {\n  handlePushConfigError,\n  readProjectConfig,\n  getAuthKitConfig,\n} from \"./config.js\";\nimport { deploymentDashboardUrlPage } from \"./dashboard.js\";\nimport { addProgressLinkIfSlow } from \"./indexes.js\";\nimport { ensureAuthKitProvisionedBeforeBuild } from \"./workos/workos.js\";\nimport { fetchDeploymentCanonicalSiteUrl } from \"./env.js\";\n\nconst brotli = promisify(zlib.brotliCompress);\n\nasync function brotliCompress(ctx: Context, data: string): Promise<Buffer> {\n  const start = performance.now();\n  const result = await brotli(data, {\n    params: {\n      [zlib.constants.BROTLI_PARAM_MODE]: zlib.constants.BROTLI_MODE_TEXT,\n      [zlib.constants.BROTLI_PARAM_QUALITY]: 4,\n    },\n  });\n  const end = performance.now();\n  const duration = end - start;\n  logVerbose(\n    `Compressed ${(data.length / 1024).toFixed(2)}KiB to ${(result.length / 1024).toFixed(2)}KiB (${((result.length / data.length) * 100).toFixed(2)}%) in ${duration.toFixed(2)}ms`,\n  );\n  return result;\n}\n\n/** Push configuration2 to the given remote origin. */\nexport async function startPush(\n  ctx: Context,\n  span: Span,\n  request: StartPushRequest,\n  options: {\n    url: string;\n    deploymentName: string | null;\n    deploymentType?: DeploymentType;\n  },\n): Promise<StartPushResponse> {\n  const response = await pushCode(\n    ctx,\n    span,\n    request,\n    options,\n    \"/api/deploy2/start_push\",\n  );\n  return startPushResponse.parse(response);\n}\n\nexport async function evaluatePush(\n  ctx: Context,\n  span: Span,\n  request: StartPushRequest,\n  options: {\n    url: string;\n    deploymentName: string | null;\n    deploymentType?: DeploymentType;\n  },\n): Promise<EvaluatePushResponse> {\n  const response = await pushCode(\n    ctx,\n    span,\n    request,\n    options,\n    \"/api/deploy2/evaluate_push\",\n  );\n  return evaluatePushResponse.parse(response);\n}\n\nasync function pushCode(\n  ctx: Context,\n  span: Span,\n  request: StartPushRequest,\n  options: {\n    url: string;\n    deploymentName: string | null;\n    deploymentType?: DeploymentType;\n  },\n  endpoint: \"/api/deploy2/start_push\" | \"/api/deploy2/evaluate_push\",\n): Promise<unknown> {\n  // Log a summary of the push request instead of the full object\n  const unchangedModuleCount =\n    request.appDefinition?.unchangedModuleHashes?.length ?? 0;\n  const changedModuleCount = request.appDefinition?.changedModules?.length ?? 0;\n  const requestSummary = {\n    hasAppDefinition: request.appDefinition !== undefined,\n    appFunctionCount: unchangedModuleCount + changedModuleCount,\n    hasAppSchema: request.appDefinition?.schema !== null,\n    componentCount: request.componentDefinitions?.length ?? 0,\n    hasDependencies: request.nodeDependencies?.length > 0,\n    dryRun: request.dryRun,\n  };\n  logVerbose(`Push request summary: ${JSON.stringify(requestSummary)}`);\n  const onError = (err: any) => {\n    if (err.toString() === \"TypeError: fetch failed\") {\n      changeSpinner(`Fetch failed, is ${options.url} correct? Retrying...`);\n    }\n  };\n  const fetch = deploymentFetch(ctx, {\n    deploymentUrl: options.url,\n    adminKey: request.adminKey,\n    onError,\n  });\n  try {\n    const response = await fetch(endpoint, {\n      body: await brotliCompress(ctx, JSON.stringify(request)),\n      method: \"POST\",\n      headers: {\n        \"Content-Type\": \"application/json\",\n        \"Content-Encoding\": \"br\",\n        traceparent: span.encodeW3CTraceparent(),\n      },\n    });\n    return await response.json();\n  } catch (error: unknown) {\n    return await handlePushConfigError(\n      ctx,\n      error,\n      \"Error: Unable to start push to \" + options.url,\n      options.deploymentName,\n      {\n        adminKey: request.adminKey,\n        deploymentUrl: options.url,\n        deploymentNotice: \"\",\n      },\n      options.deploymentType,\n    );\n  }\n}\n\n// Long poll every 10s for progress on schema validation.\nconst SCHEMA_TIMEOUT_MS = 10_000;\n\nexport async function waitForSchema(\n  ctx: Context,\n  span: Span,\n  startPush: StartPushResponse,\n  options: {\n    adminKey: string;\n    url: string;\n    dryRun: boolean;\n    deploymentName: string | null;\n  },\n) {\n  const fetch = deploymentFetch(ctx, {\n    deploymentUrl: options.url,\n    adminKey: options.adminKey,\n  });\n\n  const start = Date.now();\n  changeSpinner(\"Pushing code to your Convex deployment...\");\n\n  while (true) {\n    let currentStatus: SchemaStatus;\n    try {\n      const response = await fetch(\"/api/deploy2/wait_for_schema\", {\n        body: JSON.stringify({\n          adminKey: options.adminKey,\n          schemaChange: startPush.schemaChange,\n          timeoutMs: SCHEMA_TIMEOUT_MS,\n          dryRun: options.dryRun,\n        }),\n        method: \"POST\",\n        headers: {\n          traceparent: span.encodeW3CTraceparent(),\n        },\n      });\n      currentStatus = schemaStatus.parse(await response.json());\n    } catch (error: unknown) {\n      logFailure(\"Error: Unable to wait for schema from \" + options.url);\n      return await logAndHandleFetchError(ctx, error);\n    }\n    switch (currentStatus.type) {\n      case \"inProgress\": {\n        let schemaDone = true;\n        let indexesComplete = 0;\n        let indexesTotal = 0;\n        for (const componentStatus of Object.values(currentStatus.components)) {\n          if (!componentStatus.schemaValidationComplete) {\n            schemaDone = false;\n          }\n          indexesComplete += componentStatus.indexesComplete;\n          indexesTotal += componentStatus.indexesTotal;\n        }\n        const indexesDone = indexesComplete === indexesTotal;\n        let msg: string;\n        if (!indexesDone && !schemaDone) {\n          msg = addProgressLinkIfSlow(\n            `Backfilling indexes (${indexesComplete}/${indexesTotal} ready) and checking that documents match your schema...`,\n            options.deploymentName,\n            start,\n          );\n        } else if (!indexesDone) {\n          msg = `Backfilling indexes (${indexesComplete}/${indexesTotal} ready)...`;\n          // Set a more specific message if the backfill is taking a long time\n          if (Date.now() - start > 10_000) {\n            const rootDiff = startPush.schemaChange.indexDiffs?.[\"\"];\n            const indexName = (\n              rootDiff?.added_indexes[0] || rootDiff?.enabled_indexes?.[0]\n            )?.name;\n            if (indexName) {\n              const table = indexName.split(\".\")[0];\n              const dashboardUrl = deploymentDashboardUrlPage(\n                options.deploymentName,\n                `/data?table=${table}&showIndexes=true`,\n              );\n              msg = `Backfilling index ${indexName} (${indexesComplete}/${indexesTotal} ready), see progress here: ${dashboardUrl}`;\n            }\n          }\n        } else {\n          msg = addProgressLinkIfSlow(\n            \"Checking that documents match your schema...\",\n            options.deploymentName,\n            start,\n          );\n        }\n        changeSpinner(msg);\n        break;\n      }\n      case \"failed\": {\n        // Schema validation failed. This could be either because the data\n        // is bad or the schema is wrong. Classify this as a filesystem error\n        // because adjusting `schema.ts` is the most normal next step.\n        let msg = \"Schema validation failed\";\n        if (currentStatus.componentPath) {\n          msg += ` in component \"${currentStatus.componentPath}\"`;\n        }\n        msg += \".\";\n        logFailure(msg);\n        logError(chalkStderr.red(`${currentStatus.error}`));\n        return await ctx.crash({\n          exitCode: 1,\n          errorType: {\n            \"invalid filesystem or db data\": currentStatus.tableName\n              ? {\n                  tableName: currentStatus.tableName,\n                  componentPath: currentStatus.componentPath,\n                }\n              : null,\n          },\n          printedMessage: null, // TODO - move logging into here\n        });\n      }\n      case \"raceDetected\": {\n        return await ctx.crash({\n          exitCode: 1,\n          errorType: \"fatal\",\n          printedMessage: `Schema was overwritten by another push.`,\n        });\n      }\n      case \"complete\": {\n        changeSpinner(\"Schema validation complete.\");\n        return;\n      }\n    }\n  }\n}\n\nexport async function finishPush(\n  ctx: Context,\n  span: Span,\n  startPush: StartPushResponse,\n  options: {\n    adminKey: string;\n    url: string;\n    dryRun: boolean;\n    verbose?: boolean;\n    deploymentName: string | null;\n    deploymentType?: DeploymentType;\n  },\n): Promise<FinishPushDiff> {\n  changeSpinner(\"Finalizing push...\");\n  const fetch = deploymentFetch(ctx, {\n    deploymentUrl: options.url,\n    adminKey: options.adminKey,\n  });\n  const request = {\n    adminKey: options.adminKey,\n    startPush,\n    dryRun: options.dryRun,\n  };\n  try {\n    const response = await fetch(\"/api/deploy2/finish_push\", {\n      body: await brotliCompress(ctx, JSON.stringify(request)),\n      method: \"POST\",\n      headers: {\n        \"Content-Type\": \"application/json\",\n        \"Content-Encoding\": \"br\",\n        traceparent: span.encodeW3CTraceparent(),\n      },\n    });\n    return finishPushDiff.parse(await response.json());\n  } catch (error: unknown) {\n    return await handlePushConfigError(\n      ctx,\n      error,\n      \"Error: Unable to finish push to \" + options.url,\n      options.deploymentName,\n      {\n        adminKey: options.adminKey,\n        deploymentUrl: options.url,\n        deploymentNotice: \"\",\n      },\n      options.deploymentType,\n    );\n  }\n}\n\nexport type ComponentDefinitionConfigWithoutImpls = Omit<\n  ComponentDefinitionConfig,\n  \"schema\" | \"functions\"\n>;\nexport type AppDefinitionConfigWithoutImpls = Omit<\n  AppDefinitionConfig,\n  \"schema\" | \"functions\" | \"auth\"\n>;\n\nexport async function reportPushCompleted(\n  ctx: Context,\n  adminKey: string,\n  url: string,\n  reporter: Reporter,\n) {\n  const fetch = deploymentFetch(ctx, {\n    deploymentUrl: url,\n    adminKey,\n  });\n  try {\n    const response = await fetch(\"/api/deploy2/report_push_completed\", {\n      body: JSON.stringify({\n        adminKey,\n        spans: reporter.spans,\n      }),\n      method: \"POST\",\n    });\n    await response.json();\n  } catch (error: unknown) {\n    logFailure(\n      \"Error: Unable to report push completed to \" + url + \": \" + error,\n    );\n  }\n}\n\nexport async function deployToDeployment(\n  ctx: Context,\n  credentials: {\n    url: string;\n    adminKey: string;\n    deploymentName: string | null;\n    deploymentType?: DeploymentType;\n  },\n  options: {\n    verbose?: boolean | undefined;\n    dryRun?: boolean | undefined;\n    yes?: boolean | undefined;\n    typecheck: \"enable\" | \"try\" | \"disable\";\n    typecheckComponents: boolean;\n    codegen: \"enable\" | \"disable\";\n    cmd?: string | undefined;\n    cmdUrlEnvVarName?: string | undefined;\n    pushAllModules?: boolean;\n\n    debugBundlePath?: string | undefined;\n    debug?: boolean | undefined;\n    writePushRequest?: string | undefined;\n    liveComponentSources?: boolean | undefined;\n    skipWorkosCheck?: boolean | undefined;\n    allowDeletingLargeIndexes: boolean;\n  },\n) {\n  const { url, adminKey } = credentials;\n\n  // Pre-flight check: Ensure AuthKit is provisioned before building client bundle\n  if (!options.skipWorkosCheck) {\n    const { projectConfig } = await readProjectConfig(ctx);\n    const authKitConfig = await getAuthKitConfig(ctx, projectConfig);\n\n    if (authKitConfig && credentials.deploymentName) {\n      // Only provision for cloud deployments (dev/preview/prod)\n      // Skip for local and anonymous deployments\n      const deploymentType = credentials.deploymentType;\n      if (\n        deploymentType === \"dev\" ||\n        deploymentType === \"preview\" ||\n        deploymentType === \"prod\"\n      ) {\n        await ensureAuthKitProvisionedBeforeBuild(\n          ctx,\n          credentials.deploymentName,\n          { deploymentUrl: url, adminKey },\n          deploymentType,\n        );\n      }\n    }\n  }\n\n  await runCommand(ctx, { ...options, url, adminKey });\n\n  const pushOptions: PushOptions = {\n    deploymentName: credentials.deploymentName,\n    adminKey,\n    verbose: !!options.verbose,\n    dryRun: !!options.dryRun,\n    typecheck: options.typecheck,\n    typecheckComponents: options.typecheckComponents,\n    debug: !!options.debug,\n    debugBundlePath: options.debugBundlePath,\n    debugNodeApis: false,\n    codegen: options.codegen === \"enable\",\n    url,\n    writePushRequest: options.writePushRequest,\n    liveComponentSources: !!options.liveComponentSources,\n    pushAllModules: !!options.pushAllModules,\n    largeIndexDeletionCheck: options.allowDeletingLargeIndexes\n      ? \"has confirmation\"\n      : \"ask for confirmation\",\n  };\n  showSpinner(`Deploying to ${url}...${options.dryRun ? \" [dry run]\" : \"\"}`);\n  await runPush(ctx, pushOptions);\n  logFinishedStep(\n    `${\n      options.dryRun ? \"Would have deployed\" : \"Deployed\"\n    } Convex functions to ${url}`,\n  );\n}\n\nexport async function runCommand(\n  ctx: Context,\n  options: {\n    cmdUrlEnvVarName?: string | undefined;\n    cmd?: string | undefined;\n    dryRun?: boolean | undefined;\n    url: string;\n    adminKey: string;\n  },\n) {\n  if (options.cmd === undefined) {\n    return;\n  }\n\n  const suggestedEnvVars = await suggestedEnvVarNames(ctx);\n  const urlVar = options.cmdUrlEnvVarName ?? suggestedEnvVars.convexUrlEnvVar;\n  const siteVar = suggestedEnvVars.convexSiteEnvVar;\n  showSpinner(\n    `Running '${options.cmd}' with environment variables \"${urlVar}\" and \"${siteVar}\" set...${\n      options.dryRun ? \" [dry run]\" : \"\"\n    }`,\n  );\n  if (!options.dryRun) {\n    const deployment = {\n      deploymentUrl: options.url,\n      adminKey: options.adminKey,\n    };\n    const canonicalCloudUrl = await fetchDeploymentCanonicalCloudUrl(\n      ctx,\n      deployment,\n    );\n    const canonicalSiteUrl = await fetchDeploymentCanonicalSiteUrl(\n      ctx,\n      deployment,\n    );\n\n    const env = { ...process.env };\n    env[urlVar] = canonicalCloudUrl;\n    env[siteVar] = canonicalSiteUrl;\n    const result = spawnSync(options.cmd, {\n      env,\n      stdio: \"inherit\",\n      shell: true,\n    });\n    if (result.status !== 0) {\n      await ctx.crash({\n        exitCode: 1,\n        errorType: \"invalid filesystem data\",\n        printedMessage: `'${options.cmd}' failed`,\n      });\n    }\n  }\n  logFinishedStep(\n    `${options.dryRun ? \"Would have run\" : \"Ran\"} \"${\n      options.cmd\n    }\" with environment variables \"${urlVar}\" and \"${siteVar}\" set`,\n  );\n}\n\nexport async function fetchDeploymentCanonicalCloudUrl(\n  ctx: Context,\n  options: { deploymentUrl: string; adminKey: string },\n): Promise<string> {\n  const result = await runSystemQuery(ctx, {\n    ...options,\n    functionName: \"_system/cli/convexUrl:cloudUrl\",\n    componentPath: undefined,\n    args: {},\n  });\n  if (typeof result !== \"string\") {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"invalid filesystem or env vars\",\n      printedMessage: \"Invalid process.env.CONVEX_CLOUD_URL\",\n    });\n  }\n  return result;\n}\n", "import { z } from \"zod\";\n\n/**\n * Convenience wrapper for z.object(...).passthrough().\n *\n * This object validator allows extra properties and passes them through.\n * This is useful for forwards compatibility if the server adds extra unknown\n * fields.\n */\nexport function looseObject<T extends z.ZodRawShape>(\n  shape: T,\n  params?: z.RawCreateParams,\n): z.ZodObject<\n  T,\n  \"passthrough\",\n  z.ZodTypeAny,\n  {\n    [k_1 in keyof z.objectUtil.addQuestionMarks<\n      z.baseObjectOutputType<T>,\n      {\n        [k in keyof z.baseObjectOutputType<T>]: undefined extends z.baseObjectOutputType<T>[k]\n          ? never\n          : k;\n      }[keyof T]\n    >]: z.objectUtil.addQuestionMarks<\n      z.baseObjectOutputType<T>,\n      {\n        [k in keyof z.baseObjectOutputType<T>]: undefined extends z.baseObjectOutputType<T>[k]\n          ? never\n          : k;\n      }[keyof T]\n    >[k_1];\n  },\n  { [k_2 in keyof z.baseObjectInputType<T>]: z.baseObjectInputType<T>[k_2] }\n> {\n  return z.object(shape, params).passthrough();\n}\n", "import { z } from \"zod\";\nimport { looseObject } from \"./utils.js\";\n\n// TODO share some of these types, to distinguish between encodedComponentDefinitionPaths etc.\nexport const componentDefinitionPath = z.string();\nexport type ComponentDefinitionPath = z.infer<typeof componentDefinitionPath>;\n\nexport const componentPath = z.string();\nexport type ComponentPath = z.infer<typeof componentPath>;\n\nexport const canonicalizedModulePath = z.string();\nexport type CanonicalizedModulePath = z.infer<typeof canonicalizedModulePath>;\n\nexport const componentFunctionPath = looseObject({\n  component: z.string(),\n  udfPath: z.string(),\n});\nexport type ComponentFunctionPath = z.infer<typeof componentFunctionPath>;\n", "import { z } from \"zod\";\nimport { looseObject } from \"./utils.js\";\n\nexport const moduleEnvironment = z.union([\n  z.literal(\"isolate\"),\n  z.literal(\"node\"),\n]);\nexport type ModuleEnvironment = z.infer<typeof moduleEnvironment>;\n\nexport const moduleConfig = looseObject({\n  path: z.string(),\n  source: z.string(),\n  sourceMap: z.optional(z.string()),\n  environment: moduleEnvironment,\n});\nexport type ModuleConfig = z.infer<typeof moduleConfig>;\n\nexport const moduleHashConfig = looseObject({\n  path: z.string(),\n  environment: moduleEnvironment,\n  sha256: z.string(),\n});\nexport type ModuleHashConfig = z.infer<typeof moduleHashConfig>;\n\nexport const nodeDependency = looseObject({\n  name: z.string(),\n  version: z.string(),\n});\nexport type NodeDependency = z.infer<typeof nodeDependency>;\n\nexport const udfConfig = looseObject({\n  serverVersion: z.string(),\n  // RNG seed encoded as Convex bytes in JSON.\n  importPhaseRngSeed: z.any(),\n  // Timestamp encoded as a Convex Int64 in JSON.\n  importPhaseUnixTimestamp: z.any(),\n});\nexport type UdfConfig = z.infer<typeof udfConfig>;\n\nexport const sourcePackage = z.any();\nexport type SourcePackage = z.infer<typeof sourcePackage>;\n\nexport const visibility = z.union([\n  looseObject({ kind: z.literal(\"public\") }),\n  looseObject({ kind: z.literal(\"internal\") }),\n]);\nexport type Visibility = z.infer<typeof visibility>;\n\nexport const analyzedFunction = looseObject({\n  name: z.string(),\n  pos: z.any(),\n  udfType: z.union([\n    z.literal(\"Query\"),\n    z.literal(\"Mutation\"),\n    z.literal(\"Action\"),\n  ]),\n  visibility: z.nullable(visibility),\n  args: z.nullable(z.string()),\n  returns: z.nullable(z.string()),\n});\nexport type AnalyzedFunction = z.infer<typeof analyzedFunction>;\n\nexport const analyzedModule = looseObject({\n  functions: z.array(analyzedFunction),\n  httpRoutes: z.any(),\n  cronSpecs: z.any(),\n  sourceMapped: z.any(),\n});\nexport type AnalyzedModule = z.infer<typeof analyzedModule>;\n", "import { z } from \"zod\";\n\nexport const reference = z.string();\nexport type Reference = z.infer<typeof reference>;\n\n// These validators parse the response from the backend so although\n// they roughly correspond with convex/auth.config.ts providers they\n// have been processed.\n\n// Passthrough so old CLIs can operate on new backend formats.\nconst Oidc = z\n  .object({\n    applicationID: z.string(),\n    domain: z.string(),\n  })\n  .passthrough();\nconst CustomJwt = z\n  .object({\n    type: z.literal(\"customJwt\"),\n    applicationID: z.string().nullable(),\n    issuer: z.string(),\n    jwks: z.string(),\n    algorithm: z.string(),\n  })\n  .passthrough();\n\nexport const authInfo = z.union([CustomJwt, Oidc]);\n\nexport type AuthInfo = z.infer<typeof authInfo>;\n\nexport const identifier = z.string();\nexport type Identifier = z.infer<typeof identifier>;\n", "import { z } from \"zod\";\nimport {\n  componentDefinitionPath,\n  componentFunctionPath,\n  ComponentDefinitionPath,\n  ComponentPath,\n  componentPath,\n} from \"./paths.js\";\nimport { Identifier, identifier } from \"./types.js\";\nimport { looseObject } from \"./utils.js\";\n\nexport const resource = z.union([\n  looseObject({ type: z.literal(\"value\"), value: z.string() }),\n  looseObject({\n    type: z.literal(\"function\"),\n    path: componentFunctionPath,\n  }),\n]);\nexport type Resource = z.infer<typeof resource>;\n\nexport type CheckedExport =\n  | { type: \"branch\"; children: Record<Identifier, CheckedExport> }\n  | { type: \"leaf\"; resource: Resource };\nexport const checkedExport: z.ZodType<CheckedExport> = z.lazy(() =>\n  z.union([\n    looseObject({\n      type: z.literal(\"branch\"),\n      children: z.record(identifier, checkedExport),\n    }),\n    looseObject({\n      type: z.literal(\"leaf\"),\n      resource,\n    }),\n  ]),\n);\n\nexport const httpActionRoute = looseObject({\n  method: z.string(),\n  path: z.string(),\n});\n\nexport const checkedHttpRoutes = looseObject({\n  httpModuleRoutes: z.nullable(z.array(httpActionRoute)),\n  mounts: z.array(z.string()),\n});\nexport type CheckedHttpRoutes = z.infer<typeof checkedHttpRoutes>;\n\nexport type CheckedComponent = {\n  definitionPath: ComponentDefinitionPath;\n  componentPath: ComponentPath;\n  args: Record<Identifier, Resource>;\n  childComponents: Record<Identifier, CheckedComponent>;\n};\nexport const checkedComponent: z.ZodType<CheckedComponent> = z.lazy(() =>\n  looseObject({\n    definitionPath: componentDefinitionPath,\n    componentPath,\n    args: z.record(identifier, resource),\n    childComponents: z.record(identifier, checkedComponent),\n    httpRoutes: checkedHttpRoutes,\n    exports: z.record(identifier, checkedExport),\n  }),\n);\n", "import { z } from \"zod\";\nimport { canonicalizedModulePath, componentDefinitionPath } from \"./paths.js\";\nimport { Identifier, Reference, identifier, reference } from \"./types.js\";\nimport { analyzedModule, udfConfig } from \"./modules.js\";\nimport { looseObject } from \"./utils.js\";\nimport { ConvexValidator } from \"./validator.js\";\n\nexport const componentArgumentValidator = looseObject({\n  type: z.literal(\"value\"),\n  // Validator serialized to JSON.\n  value: z.string(),\n});\n\nexport const componentDefinitionType = z.union([\n  looseObject({ type: z.literal(\"app\") }),\n  looseObject({\n    type: z.literal(\"childComponent\"),\n    name: identifier,\n    args: z.array(z.tuple([identifier, componentArgumentValidator])),\n  }),\n]);\n\nexport const componentArgument = looseObject({\n  type: z.literal(\"value\"),\n  // Value serialized to JSON.\n  value: z.string(),\n});\n\nexport const componentInstantiation = looseObject({\n  name: identifier,\n  path: componentDefinitionPath,\n  args: z.nullable(z.array(z.tuple([identifier, componentArgument]))),\n});\n\nexport type ComponentExports =\n  | { type: \"leaf\"; leaf: Reference }\n  | { type: \"branch\"; branch: [Identifier, ComponentExports][] };\n\nexport const componentExports: z.ZodType<ComponentExports> = z.lazy(() =>\n  z.union([\n    looseObject({\n      type: z.literal(\"leaf\"),\n      leaf: reference,\n    }),\n    looseObject({\n      type: z.literal(\"branch\"),\n      branch: z.array(z.tuple([identifier, componentExports])),\n    }),\n  ]),\n);\n\nexport const componentDefinitionMetadata = looseObject({\n  path: componentDefinitionPath,\n  definitionType: componentDefinitionType,\n  childComponents: z.array(componentInstantiation),\n  httpMounts: z.record(z.string(), reference),\n  exports: looseObject({\n    type: z.literal(\"branch\"),\n    branch: z.array(z.tuple([identifier, componentExports])),\n  }),\n});\n\nexport const indexSchema = looseObject({\n  indexDescriptor: z.string(),\n  fields: z.array(z.string()),\n});\n\nexport const vectorIndexSchema = looseObject({\n  indexDescriptor: z.string(),\n  vectorField: z.string(),\n  dimensions: z.number().optional(),\n  filterFields: z.array(z.string()),\n});\n\nexport const searchIndexSchema = looseObject({\n  indexDescriptor: z.string(),\n  searchField: z.string(),\n  filterFields: z.array(z.string()),\n});\n\nexport const tableDefinition = looseObject({\n  tableName: z.string(),\n  indexes: z.array(indexSchema),\n  searchIndexes: z.array(searchIndexSchema).optional().nullable(),\n  vectorIndexes: z.array(vectorIndexSchema).optional().nullable(),\n  // We don't validate validators because of performance issues and since this\n  // is a server returned value.\n  documentType: z.custom<ConvexValidator>(),\n});\nexport type TableDefinition = z.infer<typeof tableDefinition>;\n\nexport const analyzedSchema = looseObject({\n  tables: z.array(tableDefinition),\n  schemaValidation: z.boolean(),\n});\nexport type AnalyzedSchema = z.infer<typeof analyzedSchema>;\n\nexport const evaluatedComponentDefinition = looseObject({\n  definition: componentDefinitionMetadata,\n  schema: analyzedSchema.optional().nullable(),\n  functions: z.record(canonicalizedModulePath, analyzedModule),\n  udfConfig,\n});\nexport type EvaluatedComponentDefinition = z.infer<\n  typeof evaluatedComponentDefinition\n>;\n", "import { z } from \"zod\";\nimport { componentDefinitionPath } from \"./paths.js\";\nimport { moduleConfig, moduleHashConfig } from \"./modules.js\";\nimport { looseObject } from \"./utils.js\";\n\nexport const appDefinitionConfig = looseObject({\n  definition: z.nullable(moduleConfig),\n  dependencies: z.array(componentDefinitionPath),\n  schema: z.nullable(moduleConfig),\n  changedModules: z.array(moduleConfig),\n  unchangedModuleHashes: z.array(moduleHashConfig),\n  udfServerVersion: z.string(),\n});\nexport type AppDefinitionConfig = z.infer<typeof appDefinitionConfig>;\n\nexport const componentDefinitionConfig = looseObject({\n  definitionPath: componentDefinitionPath,\n  definition: moduleConfig,\n  dependencies: z.array(componentDefinitionPath),\n  schema: z.nullable(moduleConfig),\n  functions: z.array(moduleConfig),\n  udfServerVersion: z.string(),\n});\nexport type ComponentDefinitionConfig = z.infer<\n  typeof componentDefinitionConfig\n>;\n", "import { z } from \"zod\";\nimport { looseObject } from \"./utils.js\";\n\nexport const authDiff = looseObject({\n  added: z.array(z.string()),\n  removed: z.array(z.string()),\n});\nexport type AuthDiff = z.infer<typeof authDiff>;\n\nexport const componentDefinitionDiff = looseObject({});\nexport type ComponentDefinitionDiff = z.infer<typeof componentDefinitionDiff>;\n\nexport const componentDiffType = z.discriminatedUnion(\"type\", [\n  looseObject({\n    type: z.literal(\"create\"),\n  }),\n  looseObject({\n    type: z.literal(\"modify\"),\n  }),\n  looseObject({\n    type: z.literal(\"unmount\"),\n  }),\n  looseObject({\n    type: z.literal(\"remount\"),\n  }),\n]);\nexport type ComponentDiffType = z.infer<typeof componentDiffType>;\n\nexport const moduleDiff = looseObject({\n  added: z.array(z.string()),\n  removed: z.array(z.string()),\n});\nexport type ModuleDiff = z.infer<typeof moduleDiff>;\n\nexport const udfConfigDiff = looseObject({\n  previous_version: z.string(),\n  next_version: z.string(),\n});\nexport type UdfConfigDiff = z.infer<typeof udfConfigDiff>;\n\nexport const cronDiff = looseObject({\n  added: z.array(z.string()),\n  updated: z.array(z.string()),\n  deleted: z.array(z.string()),\n});\nexport type CronDiff = z.infer<typeof cronDiff>;\n\nconst developerIndexConfig = z.intersection(\n  z.discriminatedUnion(\"type\", [\n    looseObject({\n      name: z.string(),\n      type: z.literal(\"database\"),\n      fields: z.array(z.string()),\n    }),\n    looseObject({\n      name: z.string(),\n      type: z.literal(\"search\"),\n      searchField: z.string(),\n      filterFields: z.array(z.string()),\n    }),\n    looseObject({\n      name: z.string(),\n      type: z.literal(\"vector\"),\n      dimensions: z.number(),\n      vectorField: z.string(),\n      filterFields: z.array(z.string()),\n    }),\n  ]),\n  z.object({ staged: z.boolean().optional() }),\n);\nexport type DeveloperIndexConfig = z.infer<typeof developerIndexConfig>;\n\nexport const indexDiff = looseObject({\n  added_indexes: z.array(developerIndexConfig),\n  removed_indexes: z.array(developerIndexConfig),\n  enabled_indexes: z.array(developerIndexConfig).optional(),\n  disabled_indexes: z.array(developerIndexConfig).optional(),\n});\nexport type IndexDiff = z.infer<typeof indexDiff>;\n\nexport const schemaDiff = looseObject({\n  previous_schema: z.nullable(z.string()),\n  next_schema: z.nullable(z.string()),\n});\nexport type SchemaDiff = z.infer<typeof schemaDiff>;\n\nexport const componentDiff = looseObject({\n  diffType: componentDiffType,\n  moduleDiff,\n  udfConfigDiff: z.nullable(udfConfigDiff),\n  cronDiff,\n  indexDiff,\n  schemaDiff: z.nullable(schemaDiff),\n});\nexport type ComponentDiff = z.infer<typeof componentDiff>;\n\nexport const finishPushDiff = looseObject({\n  authDiff,\n  definitionDiffs: z.record(z.string(), componentDefinitionDiff),\n  componentDiffs: z.record(z.string(), componentDiff),\n});\nexport type FinishPushDiff = z.infer<typeof finishPushDiff>;\n", "import { z } from \"zod\";\nimport { componentDefinitionPath, componentPath } from \"./paths.js\";\nimport { nodeDependency, sourcePackage } from \"./modules.js\";\nimport { checkedComponent } from \"./checkedComponent.js\";\nimport { evaluatedComponentDefinition } from \"./componentDefinition.js\";\nimport {\n  appDefinitionConfig,\n  componentDefinitionConfig,\n} from \"./definitionConfig.js\";\nimport { authInfo } from \"./types.js\";\nimport { looseObject } from \"./utils.js\";\nimport { indexDiff } from \"./finishPush.js\";\n\nexport const startPushRequest = looseObject({\n  adminKey: z.string(),\n  dryRun: z.boolean(),\n\n  functions: z.string(),\n\n  appDefinition: appDefinitionConfig,\n  componentDefinitions: z.array(componentDefinitionConfig),\n\n  nodeDependencies: z.array(nodeDependency),\n\n  nodeVersion: z.optional(z.string()),\n});\nexport type StartPushRequest = z.infer<typeof startPushRequest>;\n\nexport const schemaChange = looseObject({\n  allocatedComponentIds: z.any(),\n  schemaIds: z.any(),\n  indexDiffs: z.record(componentDefinitionPath, indexDiff).optional(),\n});\nexport type SchemaChange = z.infer<typeof schemaChange>;\n\nexport const startPushResponse = looseObject({\n  environmentVariables: z.record(z.string(), z.string()),\n\n  externalDepsId: z.nullable(z.string()),\n  componentDefinitionPackages: z.record(componentDefinitionPath, sourcePackage),\n\n  appAuth: z.array(authInfo),\n  analysis: z.record(componentDefinitionPath, evaluatedComponentDefinition),\n\n  app: checkedComponent,\n\n  schemaChange,\n});\nexport type StartPushResponse = z.infer<typeof startPushResponse>;\n\nexport const evaluatePushResponse = looseObject({\n  schemaChange,\n});\nexport type EvaluatePushResponse = z.infer<typeof evaluatePushResponse>;\n\nexport const componentSchemaStatus = looseObject({\n  schemaValidationComplete: z.boolean(),\n  indexesComplete: z.number(),\n  indexesTotal: z.number(),\n});\nexport type ComponentSchemaStatus = z.infer<typeof componentSchemaStatus>;\n\nexport const schemaStatus = z.union([\n  looseObject({\n    type: z.literal(\"inProgress\"),\n    components: z.record(componentPath, componentSchemaStatus),\n  }),\n  looseObject({\n    type: z.literal(\"failed\"),\n    error: z.string(),\n    componentPath,\n    tableName: z.nullable(z.string()),\n  }),\n  looseObject({\n    type: z.literal(\"raceDetected\"),\n  }),\n  looseObject({\n    type: z.literal(\"complete\"),\n  }),\n]);\nexport type SchemaStatus = z.infer<typeof schemaStatus>;\n", "import { chalkStderr } from \"chalk\";\nimport { deploymentDashboardUrlPage } from \"./dashboard.js\";\nimport { DeveloperIndexConfig } from \"./deployApi/finishPush.js\";\n\nexport type IndexMetadata = {\n  table: string;\n  name: string;\n  fields:\n    | string[]\n    | {\n        searchField: string;\n        filterFields: string[];\n      }\n    | {\n        dimensions: number;\n        vectorField: string;\n        filterFields: string[];\n      };\n  backfill: {\n    state: \"in_progress\" | \"done\";\n  };\n  staged: boolean;\n};\n\nexport type LargeIndexDeletionCheck =\n  // Don\u2019t verify whether large indexes have been deleted\n  | \"no verification\"\n  // If large indexes are being deleted, ask for confirmation (and fail in non-interactive envs)\n  | \"ask for confirmation\"\n  // If large indexes are being deleted, confirm (the user has used --allow-deleting-large-indexes)\n  | \"has confirmation\";\n\nexport function addProgressLinkIfSlow(\n  msg: string,\n  deploymentName: string | null,\n  start: number,\n): string {\n  if (Date.now() - start > 10_000) {\n    const dashboardUrl = deploymentDashboardUrlPage(\n      deploymentName,\n      `/data?showSchema=true`,\n    );\n    msg = msg.concat(`\\nSee progress here: ${dashboardUrl}`);\n  }\n  return msg;\n}\n\nexport function formatIndex(index: DeveloperIndexConfig) {\n  const [tableName, indexName] = index.name.split(\".\");\n  return `${tableName}.${chalkStderr.bold(indexName)} ${chalkStderr.gray(formatIndexFields(index))}${index.staged ? chalkStderr.blue(\"  (staged)\") : \"\"}`;\n}\n\nfunction formatIndexFields(index: DeveloperIndexConfig) {\n  switch (index.type) {\n    case \"database\":\n      return (\n        \"  \" + index.fields.map((f) => chalkStderr.underline(f)).join(\", \")\n      );\n    case \"search\":\n      return `${chalkStderr.cyan(\"(text)\")}   ${chalkStderr.underline(index.searchField)}${formatFilterFields(index.filterFields)}`;\n    case \"vector\":\n      return `${chalkStderr.cyan(\"(vector)\")}   ${chalkStderr.underline(index.vectorField)} (${index.dimensions} dimensions)${formatFilterFields(index.filterFields)}`;\n    default:\n      index satisfies never;\n      return \"\";\n  }\n}\n\nfunction formatFilterFields(filterFields: string[]) {\n  if (filterFields.length === 0) {\n    return \"\";\n  }\n  return `, filter${filterFields.length === 1 ? \"\" : \"s\"} on ${filterFields.map((f) => chalkStderr.underline(f)).join(\", \")}`;\n}\n", "/**\n * Programatic provisioning of WorkOS environments and configuration of these environments.\n *\n * This WorkOS integration is subject to change while in development and may require upgrading the CLI\n * to use in the future.\n */\nimport crypto from \"crypto\";\nimport * as dotenv from \"dotenv\";\nimport { Context } from \"../../../bundler/context.js\";\nimport {\n  changeSpinner,\n  logFinishedStep,\n  logMessage,\n  logOutput,\n  logVerbose,\n  logWarning,\n  showSpinner,\n  stopSpinner,\n} from \"../../../bundler/log.js\";\nimport { getTeamAndProjectSlugForDeployment } from \"../api.js\";\nimport { callUpdateEnvironmentVariables, envGetInDeployment } from \"../env.js\";\nimport { deploymentDashboardUrlPage } from \"../dashboard.js\";\nimport { changedEnvVarFile, suggestedEnvVarNames } from \"../envvars.js\";\nimport { promptOptions, promptYesNo } from \"../utils/prompts.js\";\nimport {\n  createCORSOrigin,\n  createRedirectURI,\n  updateAppHomepageUrl,\n} from \"./environmentApi.js\";\nimport {\n  createAssociatedWorkosTeam,\n  createEnvironmentAndAPIKey,\n  getCandidateEmailsForWorkIntegration,\n  getDeploymentCanProvisionWorkOSEnvironments,\n} from \"./platformApi.js\";\nimport type {\n  AuthKitConfig,\n  AuthKitEnvironmentConfig,\n  AuthKitConfigureSettings,\n  ProjectConfig,\n} from \"../config.js\";\nimport { getAuthKitConfig, readProjectConfig } from \"../config.js\";\n\n// Helper function to query WorkOS environment variables from deployment\nasync function getWorkOSEnvVarsFromDeployment(\n  ctx: Context,\n  deployment: { deploymentUrl: string; adminKey: string },\n): Promise<{\n  clientId: string | null;\n  apiKey: string | null;\n  environmentId: string | null;\n}> {\n  const [clientId, apiKey, environmentId] = await Promise.all([\n    envGetInDeployment(ctx, deployment, \"WORKOS_CLIENT_ID\"),\n    envGetInDeployment(ctx, deployment, \"WORKOS_API_KEY\"),\n    envGetInDeployment(ctx, deployment, \"WORKOS_ENVIRONMENT_ID\"),\n  ]);\n  return { clientId, apiKey, environmentId };\n}\n\n// Helper to resolve WorkOS credentials from all available sources\nasync function resolveWorkOSCredentials(\n  ctx: Context,\n  deployment: { deploymentUrl: string; adminKey: string },\n  deploymentName: string,\n  authKitConfig: AuthKitConfig,\n  workosDeploymentType: \"dev\" | \"preview\" | \"prod\",\n): Promise<{\n  clientId: string | null;\n  apiKey: string | null;\n  environmentId: string | null;\n  deploymentEnvVars: {\n    clientId: string | null;\n    apiKey: string | null;\n    environmentId: string | null;\n  };\n}> {\n  const deploymentEnvVars = await getWorkOSEnvVarsFromDeployment(\n    ctx,\n    deployment,\n  );\n\n  let clientId: string | null;\n  let apiKey: string | null;\n  let environmentId: string | null;\n\n  if (workosDeploymentType === \"dev\") {\n    // For dev: build environment (.env.local) takes precedence so mismatches\n    // with the deployment are caught by ensureDeploymentHasWorkOSCredentials.\n    clientId =\n      process.env.WORKOS_CLIENT_ID || deploymentEnvVars.clientId || null;\n    apiKey = deploymentEnvVars.apiKey || null;\n    environmentId =\n      process.env.WORKOS_ENVIRONMENT_ID ||\n      deploymentEnvVars.environmentId ||\n      null;\n  } else {\n    // For prod/preview: deployment credentials are authoritative. This avoids\n    // .env.local dev values overriding prod credentials and triggering a\n    // spurious mismatch error during `npx convex deploy`.\n    clientId =\n      deploymentEnvVars.clientId || process.env.WORKOS_CLIENT_ID || null;\n    apiKey = deploymentEnvVars.apiKey || null;\n    environmentId =\n      deploymentEnvVars.environmentId ||\n      process.env.WORKOS_ENVIRONMENT_ID ||\n      null;\n  }\n\n  // 3. If still no credentials, try provisioning (if we have appropriate auth)\n  if (!clientId || !apiKey) {\n    const auth = ctx.bigBrainAuth();\n    const isUsingDeploymentKey = auth?.kind === \"deploymentKey\";\n\n    if (isUsingDeploymentKey) {\n      await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: buildDeploymentKeyError(\n          deploymentName,\n          workosDeploymentType,\n        ),\n      });\n    }\n\n    // We have user auth or project key, try to provision\n    showSpinner(\"Provisioning AuthKit environment...\");\n\n    try {\n      const result = await ensureWorkosEnvironmentProvisioned(\n        ctx,\n        deploymentName,\n        { ...deployment, deploymentNotice: \"\" },\n        authKitConfig,\n        workosDeploymentType,\n      );\n\n      if (result !== \"ready\") {\n        return await ctx.crash({\n          exitCode: 1,\n          errorType: \"fatal\",\n          printedMessage: \"Failed to provision WorkOS environment\",\n        });\n      }\n\n      // After provisioning, re-fetch the credentials\n      const provisionedEnvVars = await getWorkOSEnvVarsFromDeployment(\n        ctx,\n        deployment,\n      );\n      clientId = provisionedEnvVars.clientId;\n      apiKey = provisionedEnvVars.apiKey;\n      environmentId = provisionedEnvVars.environmentId;\n\n      if (!clientId || !apiKey) {\n        return await ctx.crash({\n          exitCode: 1,\n          errorType: \"fatal\",\n          printedMessage:\n            \"Failed to retrieve WorkOS credentials after provisioning\",\n        });\n      }\n    } catch (error: any) {\n      if (\n        error.message?.includes(\"permission\") ||\n        error.message?.includes(\"deploy key\") ||\n        error.message?.includes(\"UnexpectedAuthHeaderFormat\")\n      ) {\n        await ctx.crash({\n          exitCode: 1,\n          errorType: \"fatal\",\n          printedMessage:\n            `Cannot provision WorkOS environment with current authentication.\\n` +\n            `You need to manually set WORKOS_CLIENT_ID and WORKOS_API_KEY\\n` +\n            `environment variables in your build environment or deployment settings.`,\n        });\n      }\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: `Error provisioning WorkOS environment: ${error.message}`,\n      });\n    }\n  }\n\n  return { clientId, apiKey, environmentId, deploymentEnvVars };\n}\n\n// Helper function to build error message for deployment key restrictions\nfunction buildDeploymentKeyError(\n  deploymentName: string,\n  deploymentType: string,\n): string {\n  const integrationsUrl = deploymentDashboardUrlPage(\n    deploymentName,\n    \"/settings/integrations\",\n  );\n  return (\n    `AuthKit configuration in convex.json requires WorkOS credentials.\\n\\n` +\n    `Checked for credentials in:\\n` +\n    `  1. Build environment variables (WORKOS_CLIENT_ID, WORKOS_API_KEY)\\n` +\n    `  2. Deployment environment variables, see WorkOS integration at ${integrationsUrl}\\n\\n` +\n    `When using a deployment-specific key, you cannot automatically provision WorkOS environments.\\n` +\n    `You must provide these credentials in your build platform (e.g., Vercel, Netlify)\\n` +\n    `or set them in your deployment settings.\\n\\n` +\n    `Alternatively, remove the 'authKit.${deploymentType}' section from convex.json to skip\\n` +\n    `AuthKit configuration.`\n  );\n}\n\n// Helper function to ensure deployment has the correct WorkOS credentials\nasync function ensureDeploymentHasWorkOSCredentials(\n  ctx: Context,\n  deployment: { deploymentUrl: string; adminKey: string },\n  credentials: {\n    clientId: string;\n    apiKey: string;\n    environmentId: string | null;\n  },\n  deploymentEnvVars: {\n    clientId: string | null;\n    apiKey: string | null;\n    environmentId: string | null;\n  },\n): Promise<void> {\n  const mismatches: string[] = [];\n  if (\n    deploymentEnvVars.clientId &&\n    deploymentEnvVars.clientId !== credentials.clientId\n  ) {\n    mismatches.push(\n      `  WORKOS_CLIENT_ID: deployment has '${deploymentEnvVars.clientId}' but we need '${credentials.clientId}'`,\n    );\n  }\n  if (\n    deploymentEnvVars.apiKey &&\n    deploymentEnvVars.apiKey !== credentials.apiKey\n  ) {\n    mismatches.push(\n      `  WORKOS_API_KEY: deployment has different value than what we need`,\n    );\n  }\n  if (\n    deploymentEnvVars.environmentId &&\n    credentials.environmentId &&\n    deploymentEnvVars.environmentId !== credentials.environmentId\n  ) {\n    mismatches.push(\n      `  WORKOS_ENVIRONMENT_ID: deployment has '${deploymentEnvVars.environmentId}' but we need '${credentials.environmentId}'`,\n    );\n  }\n\n  if (mismatches.length > 0) {\n    await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage:\n        `WorkOS environment variable mismatch detected!\\n\\n` +\n        `The following environment variables in your Convex deployment don't match what's needed:\\n` +\n        mismatches.join(\"\\n\") +\n        \"\\n\\n\" +\n        `This would cause your auth configuration to use different credentials at runtime than during build.\\n\\n` +\n        `To fix this, remove the conflicting environment variables from your deployment:\\n` +\n        `  npx convex env remove WORKOS_CLIENT_ID\\n` +\n        `  npx convex env remove WORKOS_API_KEY\\n` +\n        `  npx convex env remove WORKOS_ENVIRONMENT_ID\\n\\n` +\n        `Or remove them from the Convex dashboard deployment settings.\\n\\n` +\n        `Then run your deployment command again.`,\n    });\n  }\n  const updates: Array<{ name: string; value: string }> = [];\n  if (!deploymentEnvVars.clientId && credentials.clientId) {\n    updates.push({ name: \"WORKOS_CLIENT_ID\", value: credentials.clientId });\n  }\n  if (!deploymentEnvVars.apiKey && credentials.apiKey) {\n    updates.push({ name: \"WORKOS_API_KEY\", value: credentials.apiKey });\n  }\n  if (!deploymentEnvVars.environmentId && credentials.environmentId) {\n    updates.push({\n      name: \"WORKOS_ENVIRONMENT_ID\",\n      value: credentials.environmentId,\n    });\n  }\n\n  if (updates.length > 0) {\n    changeSpinner(\"Setting WorkOS credentials in deployment...\");\n    await callUpdateEnvironmentVariables(\n      ctx,\n      { ...deployment, deploymentNotice: \"\" },\n      updates,\n    );\n    logVerbose(\n      `WorkOS credentials propagated to deployment: ${updates.map((u) => u.name).join(\", \")}`,\n    );\n  }\n}\n\n/**\n * Ensure the current deployment has the three expected WorkOS environment\n * variables defined with values corresponding to a valid WorkOS deployment.\n *\n * This may involve provisioning a WorkOS deployment or even (in interactive\n * terminals only) prompting to provision a new WorkOS team to be associated\n * with this Convex team.\n */\nexport async function ensureWorkosEnvironmentProvisioned(\n  ctx: Context,\n  deploymentName: string,\n  deployment: {\n    deploymentUrl: string;\n    adminKey: string;\n    deploymentNotice: string;\n  },\n  authKitConfig: AuthKitConfig | undefined,\n  deploymentType: \"dev\" | \"preview\" | \"prod\",\n): Promise<\"ready\" | \"choseNotToAssociatedTeam\"> {\n  const envConfig: AuthKitEnvironmentConfig | undefined =\n    authKitConfig?.[deploymentType];\n\n  // If no config, nothing to do\n  if (!envConfig) {\n    return \"choseNotToAssociatedTeam\";\n  }\n\n  showSpinner(\"Checking for associated AuthKit environment...\");\n  const existingEnvVars = await getExistingWorkosEnvVars(ctx, deployment);\n  if (\n    existingEnvVars.clientId &&\n    existingEnvVars.environmentId &&\n    existingEnvVars.apiKey\n  ) {\n    logOutput(\n      \"Deployment already has environment variables for a WorkOS environment configured for AuthKit.\",\n    );\n\n    if (\n      envConfig.localEnvVars !== undefined &&\n      envConfig.localEnvVars !== false\n    ) {\n      await updateEnvLocal(\n        ctx,\n        existingEnvVars.clientId,\n        existingEnvVars.apiKey,\n        existingEnvVars.environmentId,\n        envConfig.localEnvVars,\n      );\n    }\n\n    // Configure WorkOS environment if configured\n    if (envConfig.configure !== undefined && envConfig.configure !== false) {\n      if (!existingEnvVars.apiKey) {\n        // API key missing - warn and skip configuration\n        logWarning(\n          `Skipping WorkOS AuthKit environment configuration: WORKOS_API_KEY is not set.\\n` +\n            `To configure redirect URIs and CORS origins, you need to set this environment variable.\\n` +\n            `You can set it at: ${deployment.deploymentUrl.replace(/\\/$/, \"\")}/settings/environment-variables`,\n        );\n      } else {\n        await updateWorkosEnvironment(\n          ctx,\n          existingEnvVars.apiKey,\n          envConfig.configure,\n          {\n            clientId: existingEnvVars.clientId,\n            apiKey: existingEnvVars.apiKey,\n            environmentId: existingEnvVars.environmentId,\n          },\n        );\n      }\n    }\n\n    logFinishedStep(\"WorkOS AuthKit environment ready\");\n    return \"ready\";\n  }\n\n  // We need to provision an environment via Big Brain\n  const response = await getDeploymentCanProvisionWorkOSEnvironments(\n    ctx,\n    deploymentName,\n  );\n  const { hasAssociatedWorkosTeam, teamId } = response;\n\n  // In case this this becomes a legacy flow that no longer works.\n  if ((response as any).disabled) {\n    return \"choseNotToAssociatedTeam\";\n  }\n\n  if (!hasAssociatedWorkosTeam) {\n    // A WorkOS workspace needs to be created for provisioning to work\n    // We'll offer to create it interactively, or fail in non-interactive mode\n    const result = await tryToCreateAssociatedWorkosTeam(\n      ctx,\n      deploymentName,\n      teamId,\n      deploymentType,\n    );\n    if (result === \"choseNotToAssociatedTeam\") {\n      return \"choseNotToAssociatedTeam\";\n    }\n    result satisfies \"ready\";\n  }\n\n  // Determine WorkOS environment type\n  // Map config's \"development\"/\"staging\"/\"production\" to API's \"production\"/\"nonproduction\"\n  // Default: dev/preview -> nonproduction, prod -> production\n  // Override: use environmentType from config (only allowed in prod)\n  let workosEnvironmentType: \"production\" | \"nonproduction\" | undefined;\n  if (envConfig.environmentType) {\n    // User explicitly set it (only allowed in prod)\n    // Map: \"production\" -> \"production\", everything else -> \"nonproduction\"\n    workosEnvironmentType =\n      envConfig.environmentType === \"production\"\n        ? \"production\"\n        : \"nonproduction\";\n  } else {\n    // Default based on Convex deployment type\n    workosEnvironmentType =\n      deploymentType === \"prod\" ? \"production\" : \"nonproduction\";\n  }\n\n  const environmentResult = await createEnvironmentAndAPIKey(\n    ctx,\n    deploymentName,\n    workosEnvironmentType,\n  );\n\n  if (!environmentResult.success) {\n    if (\n      \"error\" in environmentResult &&\n      environmentResult.error === \"team_not_provisioned\"\n    ) {\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: `Team unexpectedly has no provisioned WorkOS team: ${environmentResult.message}`,\n      });\n    }\n    // For other error cases\n    const errorMessage =\n      \"message\" in environmentResult\n        ? environmentResult.message\n        : \"Failed to provision WorkOS environment\";\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: errorMessage,\n    });\n  }\n\n  const data = environmentResult.data;\n  if (data.newlyProvisioned) {\n    logMessage(\"New AuthKit environment provisioned\");\n  } else {\n    logMessage(\n      \"Using credentials from existing AuthKit environment already created for this deployment\",\n    );\n  }\n\n  changeSpinner(\"Setting WORKOS_* deployment environment variables...\");\n  await setConvexEnvVars(\n    ctx,\n    deployment,\n    data.clientId,\n    data.environmentId,\n    data.apiKey,\n  );\n\n  if (\n    envConfig.localEnvVars !== undefined &&\n    envConfig.localEnvVars !== false\n  ) {\n    showSpinner(\"Updating .env.local with WorkOS configuration\");\n    await updateEnvLocal(\n      ctx,\n      data.clientId,\n      data.apiKey,\n      data.environmentId,\n      envConfig.localEnvVars,\n    );\n  }\n\n  // Configure WorkOS environment if configured\n  if (envConfig.configure !== undefined && envConfig.configure !== false) {\n    await updateWorkosEnvironment(ctx, data.apiKey, envConfig.configure, {\n      clientId: data.clientId,\n      apiKey: data.apiKey,\n      environmentId: data.environmentId,\n    });\n  }\n  logFinishedStep(\"WorkOS AuthKit environment ready\");\n\n  return \"ready\";\n}\n\n/**\n * Interactive flow to provision a WorkOS team for a Convex team.\n * Handles ToS agreement, email selection, and retry logic.\n */\nexport async function provisionWorkosTeamInteractive(\n  ctx: Context,\n  deploymentName: string,\n  teamId: number,\n  deploymentType: \"dev\" | \"preview\" | \"prod\",\n  options: {\n    promptPrefix?: string;\n    promptMessage?: string;\n  } = {},\n): Promise<\n  | { success: true; workosTeamId: string; workosTeamName: string }\n  | { success: false; reason: \"cancelled\" }\n> {\n  const teamInfo = await getTeamAndProjectSlugForDeployment(ctx, {\n    deploymentName,\n  });\n  if (teamInfo === null) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: `Can't find Convex Cloud team for deployment ${deploymentName}`,\n    });\n  }\n  stopSpinner();\n\n  const defaultPrefix = `A WorkOS team needs to be created for your Convex team \"${teamInfo.teamSlug}\" in order to use AuthKit.\n\nYou and other members of this team will be able to create WorkOS environments for each Convex dev deployment for projects in this team.\n\nBy creating this account you agree to the WorkOS Terms of Service (https://workos.com/legal/terms-of-service) and Privacy Policy (https://workos.com/legal/privacy).\nAlternately, choose no and set WORKOS_CLIENT_ID for an existing WorkOS environment.\n\\n`;\n\n  const defaultMessage = `Create a WorkOS team and enable automatic AuthKit environment provisioning for team \"${teamInfo.teamSlug}\"?`;\n\n  const agree = await promptYesNo(ctx, {\n    prefix: options.promptPrefix ?? defaultPrefix,\n    message: options.promptMessage ?? defaultMessage,\n    nonInteractiveError: `Cannot provision WorkOS AuthKit in non-interactive mode.\n\nA WorkOS workspace needs to be associated with your Convex team to enable automatic environment provisioning.\n\nTo fix this, either:\n1. Run this command in an interactive terminal to set up WorkOS provisioning\n2. Remove the authKit.${deploymentType} section from convex.json and provide your own WorkOS credentials via the dashboard\n3. Set WORKOS_CLIENT_ID and WORKOS_API_KEY environment variables before deploying`,\n  });\n  if (!agree) {\n    logMessage(\"\\nGot it. We won't create your WorkOS account.\");\n    return { success: false, reason: \"cancelled\" };\n  }\n\n  const alreadyTried = new Map<string, string>();\n\n  let email;\n  while (true) {\n    let choice = \"refresh\";\n    while (choice === \"refresh\") {\n      const { availableEmails } =\n        await getCandidateEmailsForWorkIntegration(ctx);\n      choice = await promptOptions<string>(ctx, {\n        message:\n          availableEmails.length === 1\n            ? \"Create a new WorkOS team with this email address?\"\n            : \"Create a new WorkOS team with which email address?\",\n        suffix:\n          availableEmails.length === 0\n            ? \"\\nVisit https://dashboard.convex.dev/profile to add a verified email to use to provision a WorkOS account\"\n            : availableEmails.length === 1\n              ? \"\\nCreate a new WorkOS team with this email address?\"\n              : \"\\nTo use another email address visit https://dashboard.convex.dev/profile to add and verify, then choose 'refresh'\",\n        choices: [\n          ...availableEmails.map((email: string) => ({\n            name: `${email}${alreadyTried.has(email) ? ` (can't create, a WorkOS team already exists with this email)` : \"\"}`,\n            value: email,\n          })),\n          {\n            name: \"refresh (add an email at https://dashboard.convex.dev/profile)\",\n            value: \"refresh\",\n          } as const,\n          {\n            name: \"cancel (do not create a WorkOS account)\",\n            value: \"cancel\",\n          } as const,\n        ],\n      });\n    }\n    if (choice === \"cancel\") {\n      return { success: false, reason: \"cancelled\" };\n    }\n    email = choice;\n\n    const teamResult = await createAssociatedWorkosTeam(ctx, teamId, email);\n\n    if (teamResult.result === \"emailAlreadyUsed\") {\n      logMessage(teamResult.message);\n      alreadyTried.set(email, teamResult.message);\n      continue;\n    }\n    // Success!\n    return {\n      success: true,\n      workosTeamId: teamResult.workosTeamId,\n      workosTeamName: teamResult.workosTeamName,\n    };\n  }\n}\n\nexport async function tryToCreateAssociatedWorkosTeam(\n  ctx: Context,\n  deploymentName: string,\n  teamId: number,\n  deploymentType: \"dev\" | \"preview\" | \"prod\",\n): Promise<\"ready\" | \"choseNotToAssociatedTeam\"> {\n  const result = await provisionWorkosTeamInteractive(\n    ctx,\n    deploymentName,\n    teamId,\n    deploymentType,\n  );\n\n  if (!result.success) {\n    logMessage(\n      `To provide your own WorkOS environment credentials instead, set environment variables manually:\n\nnpx convex env set WORKOS_CLIENT_ID $YOUR_CLIENT_ID_HERE\nnpx convex env set WORKOS_API_KEY $YOUR_API_KEY_HERE`,\n    );\n    return \"choseNotToAssociatedTeam\";\n  }\n\n  logFinishedStep(\"WorkOS team created successfully\");\n  return \"ready\";\n}\n\n/**\n * Pre-flight check for AuthKit provisioning.\n * Called before building the client bundle to ensure .env.local has correct values.\n * This is the main provisioning path - the error path is kept for backwards compatibility.\n */\n/**\n * Ensures WorkOS AuthKit environment is ready before building.\n *\n * Flow:\n * 1. Get authKit configuration for the deployment type\n * 2. Resolve credentials (build env \u2192 deployment env \u2192 provision via Big Brain)\n * 3. Ensure deployment has the correct credentials\n * 4. Update local .env.local if configured (interactive only)\n * 5. Configure WorkOS environment settings if needed\n */\nexport async function ensureAuthKitProvisionedBeforeBuild(\n  ctx: Context,\n  deploymentName: string,\n  deployment: {\n    deploymentUrl: string;\n    adminKey: string;\n  },\n  deploymentType?: \"dev\" | \"preview\" | \"prod\",\n): Promise<void> {\n  // 1. Get configuration\n  const { projectConfig } = await readProjectConfig(ctx);\n  const authKitConfig = await getAuthKitConfig(ctx, projectConfig);\n  if (!authKitConfig) {\n    return;\n  }\n\n  const workosDeploymentType = deploymentType || \"dev\";\n  const envConfig = authKitConfig[workosDeploymentType];\n  if (!envConfig) {\n    return;\n  }\n\n  // 2. Resolve credentials from all sources\n  const { clientId, apiKey, environmentId, deploymentEnvVars } =\n    await resolveWorkOSCredentials(\n      ctx,\n      deployment,\n      deploymentName,\n      authKitConfig,\n      workosDeploymentType,\n    );\n\n  // 3. Ensure deployment has the correct credentials\n  if (clientId && apiKey) {\n    await ensureDeploymentHasWorkOSCredentials(\n      ctx,\n      deployment,\n      { clientId, apiKey, environmentId },\n      deploymentEnvVars,\n    );\n  }\n\n  // 4. Update local environment variables if configured (interactive mode only)\n  if (envConfig.localEnvVars && process.stdin.isTTY && clientId && apiKey) {\n    await updateEnvLocal(\n      ctx,\n      clientId,\n      apiKey,\n      environmentId || \"\",\n      envConfig.localEnvVars,\n    );\n  }\n\n  // 5. Configure WorkOS environment if needed\n  if (envConfig.configure && apiKey) {\n    const configValues: {\n      clientId?: string;\n      apiKey?: string;\n      environmentId?: string;\n    } = {\n      apiKey,\n    };\n    if (clientId) {\n      configValues.clientId = clientId;\n    }\n    if (environmentId) {\n      configValues.environmentId = environmentId;\n    }\n    await updateWorkosEnvironment(\n      ctx,\n      apiKey,\n      envConfig.configure,\n      configValues,\n    );\n  }\n}\n/**\n * Syncs WorkOS configuration and local env vars after a successful push.\n * This is called on every push in dev mode to keep WorkOS settings in sync\n * with changes to convex.json.\n *\n * @returns true if any updates were made, false if config unchanged\n */\nexport async function syncAuthKitConfigAfterPush(\n  ctx: Context,\n  projectConfig: ProjectConfig,\n  deployment: {\n    deploymentUrl: string;\n    adminKey: string;\n  },\n): Promise<boolean> {\n  // Get the authKit config (may include generated defaults for templates)\n  const authKitConfig = await getAuthKitConfig(ctx, projectConfig);\n  if (!authKitConfig) {\n    // No authKit config, nothing to sync\n    return false;\n  }\n\n  // We only sync the \"dev\" environment settings during dev mode\n  const devConfig = authKitConfig.dev;\n  if (!devConfig) {\n    return false;\n  }\n\n  // Get existing credentials from deployment\n  const [clientId, apiKey, environmentId] = await Promise.all([\n    envGetInDeployment(ctx, deployment, \"WORKOS_CLIENT_ID\"),\n    envGetInDeployment(ctx, deployment, \"WORKOS_API_KEY\"),\n    envGetInDeployment(ctx, deployment, \"WORKOS_ENVIRONMENT_ID\"),\n  ]);\n\n  // We need the API key to make WorkOS API calls\n  if (!apiKey) {\n    // Can't update WorkOS without an API key\n    return false;\n  }\n\n  // Update WorkOS environment configuration if specified\n  if (devConfig.configure !== undefined && devConfig.configure !== false) {\n    const provisionedValues: {\n      clientId?: string;\n      apiKey?: string;\n      environmentId?: string;\n    } = {\n      apiKey,\n    };\n    if (clientId) {\n      provisionedValues.clientId = clientId;\n    }\n    if (environmentId) {\n      provisionedValues.environmentId = environmentId;\n    }\n    await updateWorkosEnvironment(\n      ctx,\n      apiKey,\n      devConfig.configure,\n      provisionedValues,\n    );\n  }\n\n  // Note: We don't update .env.local during sync - that only happens during provisioning\n  // to ensure the client bundle build has the correct values\n\n  return true;\n}\n\n// Helpers\n\nasync function updateWorkosEnvironment(\n  ctx: Context,\n  workosApiKey: string,\n  configureSettings: AuthKitConfigureSettings,\n  provisioned?: { clientId?: string; apiKey?: string; environmentId?: string },\n): Promise<void> {\n  const isInteractive = process.stdin.isTTY;\n  const skippedConfigs: string[] = [];\n\n  // Log what we're about to configure\n  const configItems: string[] = [];\n  if (configureSettings.redirectUris?.length) {\n    configItems.push(\n      `${configureSettings.redirectUris.length} redirect URI(s)`,\n    );\n  }\n  if (configureSettings.appHomepageUrl) {\n    configItems.push(`app homepage URL`);\n  }\n  if (configureSettings.corsOrigins?.length) {\n    configItems.push(`${configureSettings.corsOrigins.length} CORS origin(s)`);\n  }\n\n  if (configItems.length > 0) {\n    logVerbose(\n      `Starting WorkOS AuthKit configuration: ${configItems.join(\", \")}`,\n    );\n  } else {\n    logVerbose(`No WorkOS AuthKit configuration settings to apply`);\n    return;\n  }\n\n  // Apply each redirect URI\n  if (configureSettings.redirectUris) {\n    for (const redirectUri of configureSettings.redirectUris) {\n      try {\n        // Resolve template with both env vars and provisioned values\n        const resolvedRedirectUri = resolveTemplate(redirectUri, provisioned);\n        const { modified: redirectUriAdded } = await createRedirectURI(\n          ctx,\n          workosApiKey,\n          resolvedRedirectUri,\n        );\n        if (redirectUriAdded) {\n          changeSpinner(\"Configuring AuthKit redirect URI...\");\n          logMessage(`AuthKit redirect URI added: ${resolvedRedirectUri}`);\n        } else {\n          logVerbose(\n            `AuthKit redirect URI already configured: ${resolvedRedirectUri}`,\n          );\n        }\n      } catch (error: any) {\n        if (\n          isInteractive &&\n          error.message?.includes(\"Cannot resolve template\")\n        ) {\n          // In interactive mode, log warning and continue\n          skippedConfigs.push(\n            `Redirect URI: ${redirectUri} - ${error.message}`,\n          );\n        } else {\n          // In non-interactive mode or for other errors, crash\n          return await ctx.crash({\n            exitCode: 1,\n            errorType: \"fatal\",\n            printedMessage: `Error configuring redirect URI: ${error.message}`,\n          });\n        }\n      }\n    }\n  }\n\n  // Apply app homepage URL (where users are redirected after logout)\n  if (configureSettings.appHomepageUrl) {\n    try {\n      // Resolve template with both env vars and provisioned values\n      const resolvedAppHomepageUrl = resolveTemplate(\n        configureSettings.appHomepageUrl,\n        provisioned,\n      );\n\n      const { modified: appHomepageUrlUpdated } = await updateAppHomepageUrl(\n        ctx,\n        workosApiKey,\n        resolvedAppHomepageUrl,\n      );\n\n      if (appHomepageUrlUpdated) {\n        changeSpinner(\"Configuring AuthKit app homepage URL...\");\n        logMessage(\n          `AuthKit app homepage URL updated: ${resolvedAppHomepageUrl}`,\n        );\n      } else {\n        logVerbose(\n          `AuthKit app homepage URL was not updated (may be invalid for WorkOS or already set)`,\n        );\n      }\n    } catch (error: any) {\n      if (isInteractive && error.message?.includes(\"Cannot resolve template\")) {\n        // In interactive mode, log warning and continue\n        skippedConfigs.push(\n          `App homepage URL: ${configureSettings.appHomepageUrl} - ${error.message}`,\n        );\n      } else {\n        // In non-interactive mode or for other errors, crash\n        return await ctx.crash({\n          exitCode: 1,\n          errorType: \"fatal\",\n          printedMessage: `Error configuring app homepage URL: ${error.message}`,\n        });\n      }\n    }\n  } else {\n    logVerbose(`No app homepage URL configured`);\n  }\n\n  // Apply each CORS origin\n  if (configureSettings.corsOrigins) {\n    for (const corsOrigin of configureSettings.corsOrigins) {\n      try {\n        // Resolve template with both env vars and provisioned values\n        const resolvedCorsOrigin = resolveTemplate(corsOrigin, provisioned);\n        const { modified: corsAdded } = await createCORSOrigin(\n          ctx,\n          workosApiKey,\n          resolvedCorsOrigin,\n        );\n        if (corsAdded) {\n          changeSpinner(\"Configuring AuthKit CORS origin...\");\n          logMessage(`AuthKit CORS origin added: ${resolvedCorsOrigin}`);\n        } else {\n          logVerbose(\n            `AuthKit CORS origin already configured: ${resolvedCorsOrigin}`,\n          );\n        }\n      } catch (error: any) {\n        if (\n          isInteractive &&\n          error.message?.includes(\"Cannot resolve template\")\n        ) {\n          // In interactive mode, log warning and continue\n          skippedConfigs.push(`CORS origin: ${corsOrigin} - ${error.message}`);\n        } else {\n          // In non-interactive mode or for other errors, crash\n          return await ctx.crash({\n            exitCode: 1,\n            errorType: \"fatal\",\n            printedMessage: `Error configuring CORS origin: ${error.message}`,\n          });\n        }\n      }\n    }\n  }\n\n  // Log completion summary\n  logVerbose(`WorkOS AuthKit configuration completed`);\n\n  // If we skipped any configurations in interactive mode, let the user know\n  if (skippedConfigs.length > 0) {\n    stopSpinner();\n    logWarning(\n      `Skipped some AuthKit configurations due to missing environment variables:\\n` +\n        skippedConfigs.map((s) => `  - ${s}`).join(\"\\n\"),\n    );\n  }\n}\n\n// Helper to resolve template strings with unified syntax:\n// - ${buildEnv.ENV_VAR} for build-time environment variables\n// - ${authEnv.WORKOS_CLIENT_ID} for provisioned client ID\n// - ${authEnv.WORKOS_API_KEY} for provisioned API key\n// - ${authEnv.WORKOS_ENVIRONMENT_ID} for provisioned environment ID\n/* eslint-disable no-restricted-syntax */\nexport function resolveTemplate(\n  str: string,\n  provisioned?: { clientId?: string; apiKey?: string; environmentId?: string },\n): string {\n  return str.replace(/\\$\\{([^}]+)\\}/g, (match, expression) => {\n    // Handle auth environment values (provisioned WorkOS credentials)\n    if (expression === \"authEnv.WORKOS_CLIENT_ID\") {\n      if (!provisioned?.clientId) {\n        throw new Error(\n          `Cannot resolve template ${match}: WORKOS_CLIENT_ID not available. ` +\n            `Ensure WorkOS environment is provisioned.`,\n        );\n      }\n      return provisioned.clientId;\n    }\n    if (expression === \"authEnv.WORKOS_API_KEY\") {\n      if (!provisioned?.apiKey) {\n        throw new Error(\n          `Cannot resolve template ${match}: WORKOS_API_KEY not available. ` +\n            `Ensure WorkOS environment is provisioned.`,\n        );\n      }\n      return provisioned.apiKey;\n    }\n    if (expression === \"authEnv.WORKOS_ENVIRONMENT_ID\") {\n      if (!provisioned?.environmentId) {\n        throw new Error(\n          `Cannot resolve template ${match}: WORKOS_ENVIRONMENT_ID not available. ` +\n            `Ensure WorkOS environment is provisioned.`,\n        );\n      }\n      return provisioned.environmentId;\n    }\n\n    // Handle build environment variables\n    if (expression.startsWith(\"buildEnv.\")) {\n      const varName = expression.substring(\"buildEnv.\".length);\n      const value = process.env[varName];\n      if (!value) {\n        throw new Error(\n          `Cannot resolve template ${match}: Environment variable ${varName} is not set.`,\n        );\n      }\n      return value;\n    }\n\n    // Unknown template expression - fail loudly\n    throw new Error(\n      `Unknown template expression: ${match}. ` +\n        `Use \\${buildEnv.VAR_NAME} for environment variables or ` +\n        `\\${authEnv.WORKOS_CLIENT_ID/WORKOS_API_KEY} for provisioned values.`,\n    );\n  });\n}\n/* eslint-enable no-restricted-syntax */\n\n// Update .env.local based on configured localEnvVars\nasync function updateEnvLocal(\n  ctx: Context,\n  clientId: string,\n  apiKey: string,\n  environmentId: string,\n  localEnvVarsConfig: Record<string, string>,\n) {\n  const envPath = \".env.local\";\n\n  let existingFileContent = ctx.fs.exists(envPath)\n    ? ctx.fs.readUtf8File(envPath)\n    : null;\n\n  // Build the changes based on localEnvVarsConfig\n  let suggestedChanges: Record<\n    string,\n    {\n      value: string;\n      commentAfterValue?: string;\n      commentOnPreviousLine?: string;\n    }\n  > = {};\n\n  const { detectedFramework } = await suggestedEnvVarNames(ctx);\n\n  // Parse existing .env.local to check what's already there\n  const existingEnvVars = existingFileContent\n    ? dotenv.parse(existingFileContent)\n    : {};\n\n  for (const [envVarName, templateValue] of Object.entries(\n    localEnvVarsConfig,\n  )) {\n    // Check if already set in .env.local\n    if (existingEnvVars[envVarName]) {\n      logVerbose(`Skipping ${envVarName} update - already in .env.local`);\n      continue;\n    }\n\n    // Check if already set in environment (but not from .env.local)\n    if (process.env[envVarName]) {\n      logVerbose(\n        `Skipping ${envVarName} update in .env.local - already set in environment`,\n      );\n      continue;\n    }\n\n    // Use unified template resolution for both syntaxes\n    const resolvedValue = resolveTemplate(templateValue, {\n      clientId,\n      apiKey,\n      environmentId,\n    });\n\n    // Add comment for first WorkOS var if it's a provisioned value\n    if (\n      Object.keys(suggestedChanges).length === 0 &&\n      (templateValue.includes(\"authEnv.WORKOS_CLIENT_ID\") ||\n        templateValue === \"${authEnv.WORKOS_CLIENT_ID}\")\n    ) {\n      suggestedChanges[envVarName] = {\n        value: resolvedValue,\n        commentOnPreviousLine: `# See this environment at ${workosUrl(environmentId, \"/authentication\")}`,\n      };\n    } else {\n      suggestedChanges[envVarName] = { value: resolvedValue };\n    }\n  }\n\n  // Special handling for WORKOS_COOKIE_PASSWORD for Next.js/TanStackStart\n  if (\n    (detectedFramework === \"Next.js\" ||\n      detectedFramework === \"TanStackStart\") &&\n    !process.env[\"WORKOS_COOKIE_PASSWORD\"] && // Don't override environment\n    (!existingFileContent ||\n      !existingFileContent.includes(\"WORKOS_COOKIE_PASSWORD\"))\n  ) {\n    suggestedChanges[\"WORKOS_COOKIE_PASSWORD\"] = {\n      value: crypto.randomBytes(32).toString(\"base64url\"),\n    };\n  }\n\n  for (const [\n    envVarName,\n    { value: envVarValue, commentOnPreviousLine, commentAfterValue },\n  ] of Object.entries(suggestedChanges) as [\n    string,\n    {\n      value: string;\n      commentOnPreviousLine?: string;\n      commentAfterValue?: string;\n    },\n  ][]) {\n    existingFileContent =\n      changedEnvVarFile({\n        existingFileContent,\n        envVarName,\n        envVarValue,\n        commentAfterValue: commentAfterValue ?? null,\n        commentOnPreviousLine: commentOnPreviousLine ?? null,\n      }) || existingFileContent;\n  }\n\n  if (\n    existingFileContent !== null &&\n    Object.keys(suggestedChanges).length > 0\n  ) {\n    ctx.fs.writeUtf8File(envPath, existingFileContent);\n    logMessage(\n      `Updated .env.local with ${Object.keys(suggestedChanges).join(\", \")}`,\n    );\n  }\n}\n\nasync function getExistingWorkosEnvVars(\n  ctx: Context,\n  deployment: {\n    deploymentUrl: string;\n    adminKey: string;\n  },\n): Promise<{\n  clientId: string | null;\n  environmentId: string | null;\n  apiKey: string | null;\n}> {\n  const [clientId, environmentId, apiKey] = await Promise.all([\n    envGetInDeployment(ctx, deployment, \"WORKOS_CLIENT_ID\"),\n    envGetInDeployment(ctx, deployment, \"WORKOS_ENVIRONMENT_ID\"),\n    envGetInDeployment(ctx, deployment, \"WORKOS_API_KEY\"),\n  ]);\n\n  return { clientId, environmentId, apiKey };\n}\n\nasync function setConvexEnvVars(\n  ctx: Context,\n  deployment: {\n    deploymentUrl: string;\n    adminKey: string;\n    deploymentNotice: string;\n  },\n  workosClientId: string,\n  workosEnvironmentId: string,\n  workosEnvironmentApiKey: string,\n) {\n  await callUpdateEnvironmentVariables(ctx, deployment, [\n    { name: \"WORKOS_CLIENT_ID\", value: workosClientId },\n    { name: \"WORKOS_ENVIRONMENT_ID\", value: workosEnvironmentId },\n    { name: \"WORKOS_API_KEY\", value: workosEnvironmentApiKey },\n  ]);\n}\n\ntype Subpaths = \"/authentication\" | \"/sessions\" | \"/redirects\" | \"/users\";\nfunction workosUrl(environmentId: string, subpath: Subpaths) {\n  return `https://dashboard.workos.com/${environmentId}${subpath}`;\n}\n", "import { chalkStderr } from \"chalk\";\nimport * as dotenv from \"dotenv\";\nimport { Context } from \"../../bundler/context.js\";\nimport {\n  logFailure,\n  logFinishedStep,\n  logMessage,\n  logOutput,\n} from \"../../bundler/log.js\";\nimport { runSystemQuery } from \"./run.js\";\nimport { deploymentFetch, logAndHandleFetchError } from \"./utils/utils.js\";\nimport { readFromStdin } from \"./utils/stdin.js\";\nimport { promptSecret } from \"./utils/prompts.js\";\nimport {\n  EXPECTED_CONVEX_URL_NAMES,\n  EXPECTED_SITE_URL_NAMES,\n} from \"./envvars.js\";\nimport { formatEnvValueForDotfile } from \"./formatEnvValueForDotfile.js\";\nimport {\n  CONVEX_DEPLOY_KEY_ENV_VAR_NAME,\n  CONVEX_DEPLOYMENT_ENV_VAR_NAME,\n  CONVEX_SELF_HOSTED_URL_VAR_NAME,\n  CONVEX_SELF_HOSTED_ADMIN_KEY_VAR_NAME,\n} from \"./utils/utils.js\";\n\nfunction formatList(items: string[]): string {\n  if (items.length === 0) return \"\";\n  if (items.length === 1) return items[0];\n  if (items.length === 2) return `${items[0]} and ${items[1]}`;\n  return `${items.slice(0, -1).join(\", \")}, and ${items[items.length - 1]}`;\n}\n\nexport async function envSetInDeployment(\n  ctx: Context,\n  deployment: {\n    deploymentUrl: string;\n    adminKey: string;\n    deploymentNotice: string;\n  },\n  originalName: string | undefined,\n  originalValue: string | undefined,\n  options?: {\n    fromFile?: string;\n    force?: boolean;\n    secret?: boolean;\n  },\n) {\n  const { fromFile, force = false } = options ?? {};\n  if (originalName) {\n    let name = originalName,\n      value: string;\n    const parsed = await allowEqualsSyntax(ctx, originalName, originalValue);\n    if (parsed) {\n      [name, value] = parsed;\n    } else if (fromFile) {\n      value = await getFileContents(ctx, fromFile);\n    } else if (!process.stdin.isTTY) {\n      value = await getStdIn(ctx);\n    } else {\n      value = await promptSecret(ctx, {\n        message: `Enter value for ${name}:`,\n      });\n    }\n    await callUpdateEnvironmentVariables(ctx, deployment, [{ name, value }]);\n    if (options?.secret) {\n      const formatted = /\\s/.test(value) ? `\"${value}\"` : value;\n      logFinishedStep(\n        `Successfully set ${chalkStderr.bold(name)} to ${chalkStderr.bold(formatted)}${deployment.deploymentNotice}`,\n      );\n    } else {\n      logFinishedStep(`Successfully set ${chalkStderr.bold(name)}`);\n    }\n    return true;\n  }\n  let content: string, source: string;\n  if (fromFile) {\n    content = await getFileContents(ctx, fromFile);\n    source = fromFile;\n  } else if (!process.stdin.isTTY) {\n    content = await getStdIn(ctx);\n    source = \"stdin\";\n  } else {\n    return false;\n  }\n  await envSetFromContentInDeployment(ctx, deployment, {\n    content,\n    source,\n    force,\n  });\n  return true;\n}\n\nasync function getFileContents(\n  ctx: Context,\n  filePath: string,\n): Promise<string> {\n  if (!ctx.fs.exists(filePath)) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: `error: file not found: ${filePath}`,\n    });\n  }\n  return ctx.fs.readUtf8File(filePath);\n}\n\nasync function getStdIn(ctx: Context): Promise<string> {\n  try {\n    return await readFromStdin();\n  } catch (error) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: `error: failed to read from stdin: ${error instanceof Error ? error.message : String(error)}`,\n    });\n  }\n}\n\nasync function envSetFromContentInDeployment(\n  ctx: Context,\n  deployment: {\n    deploymentUrl: string;\n    adminKey: string;\n    deploymentNotice: string;\n  },\n  options: {\n    content: string;\n    source: string;\n    force: boolean;\n  },\n) {\n  const { content, source, force } = options;\n  const parsedEnv = dotenv.parse(content);\n\n  // Filter out CLI-managed environment variables\n  const envVars = Object.entries(parsedEnv);\n  const filteredVars: string[] = [];\n\n  const envVarsToSet: [string, string][] = [];\n  const managedVars = new Set<string>([\n    CONVEX_DEPLOY_KEY_ENV_VAR_NAME,\n    CONVEX_DEPLOYMENT_ENV_VAR_NAME,\n    CONVEX_SELF_HOSTED_URL_VAR_NAME,\n    CONVEX_SELF_HOSTED_ADMIN_KEY_VAR_NAME,\n    ...EXPECTED_CONVEX_URL_NAMES,\n    ...EXPECTED_SITE_URL_NAMES,\n  ]);\n  for (const [name, value] of envVars) {\n    if (managedVars.has(name)) {\n      filteredVars.push(name);\n    } else {\n      envVarsToSet.push([name, value]);\n    }\n  }\n\n  if (filteredVars.length > 0) {\n    const varNames = filteredVars.map((n) => chalkStderr.bold(n));\n    const formattedNames = formatList(varNames);\n    logMessage(\n      `Skipping ${filteredVars.length} CLI-managed environment variable${filteredVars.length === 1 ? \"\" : \"s\"}: ${formattedNames}`,\n    );\n  }\n\n  if (envVarsToSet.length === 0) {\n    if (envVars.length === 0) {\n      logMessage(`No environment variables found in ${source}.`);\n    }\n    return;\n  }\n\n  // Fetch existing environment variables\n  const existingEnvVars = await getEnvVars(ctx, deployment);\n\n  const existingEnvMap = new Map(\n    existingEnvVars.map((env) => [env.name, env.value]),\n  );\n\n  // Categorize the environment variables\n  const newVars: [string, string][] = [];\n  const updatedVars: [string, string][] = [];\n  const unchangedVars: [string, string][] = [];\n  const conflicts: { name: string; existing: string; new: string }[] = [];\n\n  for (const [name, value] of envVarsToSet) {\n    const existingValue = existingEnvMap.get(name);\n    if (existingValue === undefined) {\n      newVars.push([name, value]);\n    } else if (existingValue === value) {\n      unchangedVars.push([name, value]);\n    } else if (force) {\n      updatedVars.push([name, value]);\n    } else {\n      conflicts.push({ name, existing: existingValue, new: value });\n    }\n  }\n\n  // Check for conflicts if not replacing\n  if (conflicts.length > 0) {\n    const varNames = conflicts.map((c) => chalkStderr.bold(c.name));\n    const formattedNames = formatList(varNames);\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage:\n        `error: environment variable${conflicts.length === 1 ? \"\" : \"s\"} ${formattedNames} already exist${conflicts.length === 1 ? \"s\" : \"\"} with different value${conflicts.length === 1 ? \"\" : \"s\"}.\\n\\n` +\n        `Use ${chalkStderr.bold(\"--force\")} to overwrite existing values.`,\n    });\n  }\n\n  // Build the changes: only new vars when not replacing, new + updated when replacing\n  const varsToUpdate = force ? [...newVars, ...updatedVars] : newVars;\n  const changes: EnvVarChange[] = varsToUpdate.map(([name, value]) => ({\n    name,\n    value,\n  }));\n\n  if (changes.length > 0) {\n    await callUpdateEnvironmentVariables(ctx, deployment, changes);\n  }\n\n  const newCount = newVars.length;\n  const updatedCount = updatedVars.length;\n  const unchangedCount = unchangedVars.length;\n\n  const parts = [];\n  if (newCount > 0) parts.push(`${newCount} new`);\n  if (updatedCount > 0) parts.push(`${updatedCount} updated`);\n  if (unchangedCount > 0) parts.push(`${unchangedCount} unchanged`);\n\n  const totalProcessed = newCount + updatedCount + unchangedCount;\n  if (changes.length === 0) {\n    logMessage(\n      `All ${totalProcessed} environment variable${totalProcessed === 1 ? \"\" : \"s\"} from ${chalkStderr.bold(source)} already set${deployment.deploymentNotice}`,\n    );\n  } else {\n    logFinishedStep(\n      `Successfully set ${changes.length} environment variable${changes.length === 1 ? \"\" : \"s\"} from ${chalkStderr.bold(source)} (${parts.join(\", \")})${deployment.deploymentNotice}`,\n    );\n  }\n}\n\nasync function allowEqualsSyntax(\n  ctx: Context,\n  name: string,\n  value: string | undefined,\n): Promise<[string, string] | null> {\n  if (/^[a-zA-Z][a-zA-Z0-9_]*=/.test(name)) {\n    const [n, ...values] = name.split(\"=\");\n    if (value === undefined) {\n      return [n, values.join(\"=\")];\n    } else {\n      await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: `When setting an environment variable, you can either set a value with 'NAME=value', or with NAME value, but not both. Are you missing quotes around the CLI argument? Try: \\n  npx convex env set '${name} ${value}'`,\n      });\n    }\n  }\n  if (value === undefined) return null;\n  return [name, value];\n}\n\nexport async function envGetInDeploymentAction(\n  ctx: Context,\n  deployment: {\n    deploymentUrl: string;\n    adminKey: string;\n  },\n  name: string,\n) {\n  const envVar = await envGetInDeployment(ctx, deployment, name);\n  if (envVar === null) {\n    logFailure(`Environment variable \"${name}\" not found.`);\n    return;\n  }\n  logOutput(`${envVar}`);\n}\n\nexport async function envGetInDeployment(\n  ctx: Context,\n  deployment: {\n    deploymentUrl: string;\n    adminKey: string;\n  },\n  name: string,\n): Promise<string | null> {\n  const envVar = (await runSystemQuery(ctx, {\n    ...deployment,\n    functionName: \"_system/cli/queryEnvironmentVariables:get\",\n    componentPath: undefined,\n    args: { name },\n  })) as EnvVar | null;\n  return envVar === null ? null : envVar.value;\n}\n\nexport async function envRemoveInDeployment(\n  ctx: Context,\n  deployment: {\n    deploymentUrl: string;\n    adminKey: string;\n    deploymentNotice: string;\n  },\n  name: string,\n) {\n  await callUpdateEnvironmentVariables(ctx, deployment, [{ name }]);\n  logFinishedStep(\n    `Successfully unset ${chalkStderr.bold(name)}${deployment.deploymentNotice}`,\n  );\n}\n\nasync function getEnvVars(\n  ctx: Context,\n  deployment: {\n    deploymentUrl: string;\n    adminKey: string;\n  },\n): Promise<EnvVar[]> {\n  return (await runSystemQuery(ctx, {\n    ...deployment,\n    functionName: \"_system/cli/queryEnvironmentVariables\",\n    componentPath: undefined,\n    args: {},\n  })) as EnvVar[];\n}\n\nexport async function envListInDeployment(\n  ctx: Context,\n  deployment: {\n    deploymentUrl: string;\n    adminKey: string;\n  },\n) {\n  const envs = await getEnvVars(ctx, deployment);\n  if (envs.length === 0) {\n    logMessage(\"No environment variables set.\");\n    return;\n  }\n  for (const { name, value } of envs) {\n    const { formatted, warning } = formatEnvValueForDotfile(value);\n    if (warning) {\n      logMessage(`Warning (${name}): ${warning}`);\n    }\n    logOutput(`${name}=${formatted}`);\n  }\n}\n\nexport type EnvVarChange = {\n  name: string;\n  value?: string;\n};\n\nexport type EnvVar = {\n  name: string;\n  value: string;\n};\n\nexport async function callUpdateEnvironmentVariables(\n  ctx: Context,\n  deployment: {\n    deploymentUrl: string;\n    adminKey: string;\n    deploymentNotice: string;\n  },\n  changes: EnvVarChange[],\n) {\n  const fetch = deploymentFetch(ctx, deployment);\n  try {\n    await fetch(\"/api/update_environment_variables\", {\n      body: JSON.stringify({ changes }),\n      method: \"POST\",\n    });\n  } catch (e) {\n    return await logAndHandleFetchError(ctx, e);\n  }\n}\n\nexport async function fetchDeploymentCanonicalSiteUrl(\n  ctx: Context,\n  options: { deploymentUrl: string; adminKey: string },\n): Promise<string> {\n  const result = await envGetInDeployment(ctx, options, \"CONVEX_SITE_URL\");\n  if (typeof result !== \"string\") {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"invalid filesystem or env vars\",\n      printedMessage: \"Invalid process.env.CONVEX_SITE_URL\",\n    });\n  }\n  return result;\n}\n", "export async function readFromStdin(): Promise<string> {\n  return new Promise((resolve, reject) => {\n    let data = \"\";\n\n    process.stdin.setEncoding(\"utf8\");\n\n    process.stdin.on(\"readable\", () => {\n      let chunk;\n      while (null !== (chunk = process.stdin.read())) {\n        data += chunk;\n      }\n    });\n\n    process.stdin.on(\"end\", () => {\n      // Remove trailing newline if present\n      resolve(data.replace(/\\n$/, \"\"));\n    });\n\n    process.stdin.on(\"error\", (err) => {\n      reject(err);\n    });\n  });\n}\n", "/**\n * NOTE: This file is intentionally duplicated in dashboard-common.\n * If you change this file, also update:\n * npm-packages/dashboard-common/src/features/settings/components/formatEnvValueForDotfile.ts\n * and keep the copied tests in sync.\n */\nexport function formatEnvValueForDotfile(value: string): {\n  formatted: string;\n  warning: string | undefined;\n} {\n  let formatted = value,\n    warning: string | undefined = undefined;\n\n  const containsNewline = value.includes(\"\\n\");\n  const containsSingleQuote = value.includes(\"'\");\n  const containsDoubleQuote = value.includes('\"');\n  const containsSlashN = value.includes(\"\\\\n\");\n  const commentWarning =\n    value.includes(\"#\") &&\n    `includes a '#' which may be interpreted as a comment if you save this value to a .env file, resulting in only reading a partial value.`;\n  if (containsNewline) {\n    if (!containsSingleQuote) {\n      formatted = `'${value}'`;\n    } else if (!containsSlashN) {\n      if (containsDoubleQuote && commentWarning) {\n        warning = commentWarning;\n      }\n      formatted = `\"${value.replaceAll(\"\\n\", \"\\\\n\")}\"`;\n    } else {\n      formatted = `'${value}'`;\n      warning = `includes single quotes, newlines and \"\\\\n\" in the value. If you save this value to a .env file, it may not round-trip.`;\n    }\n  } else if (\n    (value.startsWith('\"') && value.endsWith('\"')) ||\n    (value.startsWith(\"'\") && value.endsWith(\"'\")) ||\n    value.startsWith(\"`\") ||\n    value.endsWith(\"`\") ||\n    value.includes(\"\\f\") ||\n    value.includes(\"\\v\") ||\n    commentWarning\n  ) {\n    if (containsSingleQuote && !containsDoubleQuote && !containsSlashN) {\n      formatted = `\"${value}\"`;\n    } else {\n      formatted = `'${value}'`;\n      if (containsSingleQuote && commentWarning) {\n        warning = commentWarning;\n      }\n    }\n  }\n  if (value.includes(\"\\r\")) {\n    warning = warning ? `${warning} It also ` : \"\";\n    warning += `includes carriage return (\\\\r) which cannot be preserved in .env files (dotenv limitation)`;\n  }\n\n  return { formatted, warning };\n}\n", "import { Context } from \"../../../bundler/context.js\";\n\nexport interface RedirectUriResponse {\n  object: \"redirect_uri\";\n  id: string;\n  uri: string;\n  default: boolean;\n  created_at: string;\n  updated_at: string;\n}\n\nexport interface CorsOriginResponse {\n  object: \"cors_origin\";\n  id: string;\n  origin: string;\n  created_at: string;\n  updated_at: string;\n}\n\nexport async function createRedirectURI(\n  ctx: Context,\n  apiKey: string,\n  uri: string,\n): Promise<{ modified: boolean }> {\n  const response = await fetch(\n    \"https://api.workos.com/user_management/redirect_uris\",\n    {\n      method: \"POST\",\n      headers: {\n        \"Content-Type\": \"application/json\",\n        Authorization: `Bearer ${apiKey}`,\n      },\n      body: JSON.stringify({ uri }),\n    },\n  );\n\n  if (!response.ok) {\n    if (response.status === 422) {\n      const errorText = await response.text();\n      if (errorText.includes(\"already exists\")) {\n        // This redirect URI already exists.\n        return { modified: false };\n      }\n    }\n\n    const errorText = await response.text();\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: `Failed to create redirect URI: ${response.status} ${errorText}`,\n    });\n  }\n\n  return { modified: true };\n}\n\nexport async function updateAppHomepageUrl(\n  ctx: Context,\n  apiKey: string,\n  url: string,\n): Promise<{ modified: boolean; previousUrl?: string }> {\n  const response = await fetch(\n    \"https://api.workos.com/user_management/app_homepage_url\",\n    {\n      method: \"PUT\",\n      headers: {\n        \"Content-Type\": \"application/json\",\n        Authorization: `Bearer ${apiKey}`,\n      },\n      body: JSON.stringify({ url }),\n    },\n  );\n\n  if (!response.ok) {\n    const errorText = await response.text();\n\n    if (response.status === 422) {\n      // Validation error - likely localhost URL or other invalid format\n      // Don't crash, just return that we couldn't modify it\n      return { modified: false };\n    }\n\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: `Failed to update app homepage URL: ${response.status} ${errorText}`,\n    });\n  }\n\n  // Always returns modified: true since PUT always updates (or sets the same value)\n  return { modified: true };\n}\n\nexport async function createCORSOrigin(\n  ctx: Context,\n  apiKey: string,\n  origin: string,\n): Promise<{ modified: boolean }> {\n  const response = await fetch(\n    \"https://api.workos.com/user_management/cors_origins\",\n    {\n      method: \"POST\",\n      headers: {\n        \"Content-Type\": \"application/json\",\n        Authorization: `Bearer ${apiKey}`,\n      },\n      body: JSON.stringify({ origin }),\n    },\n  );\n\n  if (!response.ok) {\n    if (response.status === 409) {\n      const errorText = await response.text();\n      if (\n        errorText.includes(\"duplicate_cors_origin\") ||\n        errorText.includes(\"already exists\")\n      ) {\n        // This CORS origin already exists.\n        return { modified: false };\n      }\n    }\n\n    const errorText = await response.text();\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: `Failed to create CORS origin: ${response.status} ${errorText}`,\n    });\n  }\n  return { modified: true };\n}\n", "import { Context } from \"../../../bundler/context.js\";\nimport {\n  bigBrainAPI,\n  bigBrainAPIMaybeThrows,\n  ErrorData,\n  logAndHandleFetchError,\n  ThrowingFetchError,\n} from \"../utils/utils.js\";\nimport { components } from \"../../generatedApi.js\";\n\n// Re-export generated types for convenience\nexport type ProjectEnvironmentSummary =\n  components[\"schemas\"][\"ProjectEnvironmentSummary\"];\nexport type ProvisionProjectEnvironmentResponse =\n  components[\"schemas\"][\"ProvisionProjectEnvironmentResponse\"];\nexport type GetProjectEnvironmentResponse =\n  components[\"schemas\"][\"GetProjectEnvironmentResponse\"];\nexport type DeleteProjectEnvironmentResponse =\n  components[\"schemas\"][\"DeleteProjectEnvironmentResponse\"];\n\n/**\n * Verified emails for a user that aren't known to be an admin email for\n * another WorkOS integration.\n */\nexport async function getCandidateEmailsForWorkIntegration(\n  ctx: Context,\n): Promise<components[\"schemas\"][\"AvailableWorkOSTeamEmailsResponse\"]> {\n  return bigBrainAPI<\n    components[\"schemas\"][\"AvailableWorkOSTeamEmailsResponse\"]\n  >({\n    ctx,\n    method: \"GET\",\n    path: \"workos/available_workos_team_emails\",\n  });\n}\n\nexport async function getInvitationEligibleEmails(\n  ctx: Context,\n  teamId: number,\n): Promise<{\n  eligibleEmails: string[];\n  adminEmail?: string;\n}> {\n  return bigBrainAPI<{ eligibleEmails: string[]; adminEmail?: string }>({\n    ctx,\n    method: \"GET\",\n    path: `teams/${teamId}/workos_invitation_eligible_emails`,\n  });\n}\n\nexport async function getDeploymentCanProvisionWorkOSEnvironments(\n  ctx: Context,\n  deploymentName: string,\n): Promise<components[\"schemas\"][\"HasAssociatedWorkOSTeamResponse\"]> {\n  const request: components[\"schemas\"][\"HasAssociatedWorkOSTeamRequest\"] = {\n    deploymentName,\n  };\n  return bigBrainAPI<components[\"schemas\"][\"HasAssociatedWorkOSTeamResponse\"]>({\n    ctx,\n    method: \"POST\",\n    path: \"workos/has_associated_workos_team\",\n    data: request,\n  });\n}\n\nexport async function createEnvironmentAndAPIKey(\n  ctx: Context,\n  deploymentName: string,\n  environmentType?: \"production\" | \"nonproduction\",\n): Promise<\n  | {\n      success: true;\n      data: components[\"schemas\"][\"ProvisionEnvironmentResponse\"];\n    }\n  | {\n      success: false;\n      error: \"team_not_provisioned\";\n      message: string;\n    }\n> {\n  try {\n    const data = await bigBrainAPI<\n      components[\"schemas\"][\"ProvisionEnvironmentResponse\"]\n    >({\n      ctx,\n      method: \"POST\",\n      path: \"workos/get_or_provision_workos_environment\",\n      data: {\n        deploymentName,\n        environmentType,\n      },\n    });\n    return {\n      success: true,\n      data,\n    };\n  } catch (error: any) {\n    if (error?.message?.includes(\"WorkOSTeamNotProvisioned\")) {\n      return {\n        success: false,\n        error: \"team_not_provisioned\",\n        message: error.message,\n      };\n    }\n\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: `Error provisioning WorkOS environment: ${error}`,\n    });\n  }\n}\n\nexport async function createAssociatedWorkosTeam(\n  ctx: Context,\n  teamId: number,\n  email: string,\n): Promise<\n  | {\n      result: \"success\";\n      workosTeamId: string;\n      workosTeamName: string;\n    }\n  | {\n      result: \"emailAlreadyUsed\";\n      message: string;\n    }\n> {\n  try {\n    const request: components[\"schemas\"][\"ProvisionWorkOSTeamRequest\"] = {\n      teamId,\n      email,\n    };\n    const result = (await bigBrainAPIMaybeThrows({\n      ctx,\n      method: \"POST\",\n      path: \"workos/provision_associated_workos_team\",\n      data: JSON.stringify(request),\n    })) as components[\"schemas\"][\"ProvisionWorkOSTeamResponse\"];\n    return {\n      result: \"success\",\n      ...result,\n    };\n  } catch (error) {\n    const data: ErrorData | undefined =\n      error instanceof ThrowingFetchError ? error.serverErrorData : undefined;\n    if (data?.code === \"WorkosAccountAlreadyExistsWithThisEmail\") {\n      return {\n        result: \"emailAlreadyUsed\",\n        message:\n          data?.message || \"WorkOS account with this email already exists\",\n      };\n    }\n    return await logAndHandleFetchError(ctx, error);\n  }\n}\n\n/**\n * Check if the WorkOS team associated with a Convex team is still accessible.\n * Returns the team info if provisioned, or null if not provisioned.\n */\nexport async function getWorkosTeamHealth(\n  ctx: Context,\n  teamId: number,\n): Promise<components[\"schemas\"][\"WorkOSTeamInfo\"] | null> {\n  const response = await bigBrainAPI<\n    components[\"schemas\"][\"WorkOSTeamHealthResponse\"]\n  >({\n    ctx,\n    method: \"GET\",\n    path: `teams/${teamId}/workos_team_health`,\n  });\n\n  // Return the team info if provisioned, otherwise null\n  return response.teamProvisioned ? (response.teamInfo ?? null) : null;\n}\n\n/**\n * Check if the WorkOS environment associated with a deployment is still accessible.\n * Returns null if the environment is not provisioned or cannot be accessed.\n */\nexport async function getWorkosEnvironmentHealth(\n  ctx: Context,\n  deploymentName: string,\n): Promise<components[\"schemas\"][\"WorkOSEnvironmentHealthResponse\"] | null> {\n  try {\n    return (await bigBrainAPIMaybeThrows({\n      ctx,\n      method: \"GET\",\n      path: `deployments/${deploymentName}/workos_environment_health`,\n    })) as components[\"schemas\"][\"WorkOSEnvironmentHealthResponse\"];\n  } catch (error: any) {\n    if (error?.serverErrorData?.code === \"WorkOSEnvironmentNotProvisioned\") {\n      return null;\n    }\n    return await logAndHandleFetchError(ctx, error);\n  }\n}\n\nexport async function disconnectWorkOSTeam(\n  ctx: Context,\n  teamId: number,\n): Promise<\n  | {\n      success: true;\n      workosTeamId: string;\n      workosTeamName: string;\n    }\n  | {\n      success: false;\n      error: \"not_associated\" | \"other\";\n      message: string;\n    }\n> {\n  try {\n    const request: components[\"schemas\"][\"DisconnectWorkOSTeamRequest\"] = {\n      teamId,\n    };\n    const result = (await bigBrainAPIMaybeThrows({\n      ctx,\n      method: \"POST\",\n      path: \"workos/disconnect_workos_team\",\n      data: JSON.stringify(request),\n    })) as components[\"schemas\"][\"DisconnectWorkOSTeamResponse\"];\n    return {\n      success: true,\n      ...result,\n    };\n  } catch (error) {\n    const data: ErrorData | undefined =\n      error instanceof ThrowingFetchError ? error.serverErrorData : undefined;\n    if (data?.code === \"WorkOSTeamNotAssociated\") {\n      return {\n        success: false,\n        error: \"not_associated\",\n        message: data?.message || \"No WorkOS team is associated\",\n      };\n    }\n    return {\n      success: false,\n      error: \"other\",\n      message:\n        data?.message ||\n        (error instanceof Error ? error.message : String(error)),\n    };\n  }\n}\n\nexport async function inviteToWorkosTeam(\n  ctx: Context,\n  teamId: number,\n  email: string,\n): Promise<\n  | {\n      result: \"success\";\n      email: string;\n      roleSlug: string;\n    }\n  | {\n      result: \"teamNotProvisioned\";\n      message: string;\n    }\n  | {\n      result: \"alreadyInWorkspace\";\n      message: string;\n    }\n> {\n  try {\n    const result = await bigBrainAPIMaybeThrows({\n      ctx,\n      method: \"POST\",\n      path: \"workos/invite_team_member\",\n      data: JSON.stringify({ teamId, email }),\n    });\n    return { result: \"success\", ...result };\n  } catch (error) {\n    const data: ErrorData | undefined =\n      error instanceof ThrowingFetchError ? error.serverErrorData : undefined;\n    if (data?.code === \"WorkOSTeamNotProvisioned\") {\n      return {\n        result: \"teamNotProvisioned\",\n        message: data?.message || \"This team doesn't have a WorkOS team yet\",\n      };\n    }\n    if (data?.code === \"WorkosUserAlreadyInWorkspace\") {\n      return {\n        result: \"alreadyInWorkspace\",\n        message:\n          data?.message ||\n          \"This email is already a member of another WorkOS workspace\",\n      };\n    }\n    if (data?.code === \"WorkosUserAlreadyInvited\") {\n      return {\n        result: \"alreadyInWorkspace\", // Reuse same result type for UI consistency\n        message:\n          data?.message ||\n          \"This email has already been invited to the WorkOS team\",\n      };\n    }\n    if (data?.code === \"WorkosUserAlreadyInThisTeam\") {\n      return {\n        result: \"alreadyInWorkspace\",\n        message:\n          data?.message || \"This email is already a member of this WorkOS team\",\n      };\n    }\n    return await logAndHandleFetchError(ctx, error);\n  }\n}\n\n// Project environment API functions\nexport async function listProjectWorkOSEnvironments(\n  ctx: Context,\n  projectId: number,\n): Promise<ProjectEnvironmentSummary[]> {\n  const response = await bigBrainAPI<\n    components[\"schemas\"][\"GetProjectEnvironmentsResponse\"]\n  >({\n    ctx,\n    method: \"GET\",\n    path: `projects/${projectId}/workos_environments`,\n  });\n  return response.environments;\n}\n\nexport async function createProjectWorkOSEnvironment(\n  ctx: Context,\n  projectId: number,\n  environmentName: string,\n  isProduction?: boolean,\n): Promise<ProvisionProjectEnvironmentResponse> {\n  return bigBrainAPI<ProvisionProjectEnvironmentResponse>({\n    ctx,\n    method: \"POST\",\n    path: `projects/${projectId}/workos_environments`,\n    data: { environmentName, isProduction },\n  });\n}\n\nexport async function getProjectWorkOSEnvironment(\n  ctx: Context,\n  projectId: number,\n  clientId: string,\n): Promise<GetProjectEnvironmentResponse> {\n  return bigBrainAPI<GetProjectEnvironmentResponse>({\n    ctx,\n    method: \"GET\",\n    path: `projects/${projectId}/workos_environments/${clientId}`,\n  });\n}\n\nexport async function deleteProjectWorkOSEnvironment(\n  ctx: Context,\n  projectId: number,\n  clientId: string,\n): Promise<DeleteProjectEnvironmentResponse> {\n  return bigBrainAPI<DeleteProjectEnvironmentResponse>({\n    ctx,\n    method: \"POST\",\n    path: \"workos/delete_project_environment\",\n    data: { projectId, clientId },\n  });\n}\n", "import path from \"path\";\nimport {\n  ComponentDirectory,\n  ComponentDefinitionPath,\n  buildComponentDirectory,\n  isComponentDirectory,\n  qualifiedDefinitionPath,\n  toComponentDefinitionPath,\n} from \"./directoryStructure.js\";\nimport { Context } from \"../../../../bundler/context.js\";\nimport {\n  logMessage,\n  logWarning,\n  showSpinner,\n} from \"../../../../bundler/log.js\";\nimport esbuild, { BuildOptions, Metafile, OutputFile, Plugin } from \"esbuild\";\nimport { chalkStderr } from \"chalk\";\nimport {\n  AppDefinitionSpecWithoutImpls,\n  ComponentDefinitionSpecWithoutImpls,\n} from \"../../config.js\";\nimport {\n  Bundle,\n  bundle,\n  bundleAuthConfig,\n  bundleSchema,\n  entryPointsByEnvironment,\n} from \"../../../../bundler/index.js\";\nimport { NodeDependency } from \"../../deployApi/modules.js\";\n\nconst VIRTUAL_CONFIG_NAMESPACE = \"convex-virtual-config\";\nconst VIRTUAL_CONFIG_CONTENTS = `import { defineApp } from \"convex/server\";\\nconst app = defineApp();\\nexport default app;`;\n\n/**\n * An esbuild plugin to insert a virtual `convex.config.js` file into the bundle\n * when Convex project doesn't have one explicitly defined.\n *\n * This allows us to use the components push path even when the Convex project doesn't\n * have a config file defined.\n *\n * When importComponentPath is provided, the virtual config will import and use the\n * component found at that path.\n */\nfunction virtualConfig({\n  rootComponentDirectory,\n  importComponentPath,\n}: {\n  rootComponentDirectory: ComponentDirectory;\n  importComponentPath?: string;\n}): Plugin {\n  // Empty config with no components\n  let contents = VIRTUAL_CONFIG_CONTENTS;\n\n  if (importComponentPath) {\n    // Generate config that imports the specified component\n    const relativeImport = path.relative(\n      rootComponentDirectory.path,\n      importComponentPath,\n    );\n    let normalizedImport = relativeImport\n      .replace(/\\\\/g, \"/\")\n      .replace(/\\.ts$/, \".js\");\n\n    // We don't generate code for this synthetic root component so the name we\n    // use for the component doesn't matter.\n    contents = `import { defineApp } from \"convex/server\";\nimport component from \"${normalizedImport}\";\n\nconst app = defineApp();\napp.use(component, { name: \"exampleComponentInstance\" });\nexport default app;`;\n  }\n\n  return {\n    name: `convex-virtual-config`,\n    async setup(build) {\n      const filter = pathToRegexFilter(rootComponentDirectory);\n      build.onResolve({ filter }, async (args) => {\n        return { path: args.path, namespace: VIRTUAL_CONFIG_NAMESPACE };\n      });\n      build.onLoad(\n        { filter, namespace: VIRTUAL_CONFIG_NAMESPACE },\n        async (_args) => {\n          return {\n            contents,\n            resolveDir: rootComponentDirectory.path,\n          };\n        },\n      );\n    },\n  };\n}\n\nfunction pathToRegexFilter(root: ComponentDirectory) {\n  let path = qualifiedDefinitionPath(root);\n  const escaped = path\n    .replace(/\\\\/g, \"/\")\n    .replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n  return new RegExp(`^${escaped}$`);\n}\n\n/**\n * An esbuild plugin to mark component definitions external or return a list of\n * all component definitions.\n *\n * By default this plugin runs in \"bundle\" mode and marks all imported component\n * definition files as external, not traversing further.\n *\n * If \"discover\" mode is specified it traverses the entire tree.\n */\nfunction componentPlugin({\n  mode = \"bundle\",\n  rootComponentDirectory,\n  verbose,\n  ctx,\n}: {\n  mode: \"discover\" | \"bundle\";\n  rootComponentDirectory: ComponentDirectory;\n  verbose?: boolean;\n  ctx: Context;\n}): Plugin {\n  const components = new Map<string, ComponentDirectory>();\n  return {\n    name: `convex-${mode === \"discover\" ? \"discover-components\" : \"bundle-components\"}`,\n    async setup(build) {\n      // This regex can't be really precise since developers could import\n      // \"convex.config\", \"convex.config.js\", \"convex.config.ts\", etc.\n      build.onResolve({ filter: /.*convex.config.*/ }, async (args) => {\n        verbose && logMessage(\"esbuild resolving import:\", args);\n        if (\n          args.namespace !== \"file\" &&\n          args.namespace !== VIRTUAL_CONFIG_NAMESPACE\n        ) {\n          verbose && logMessage(\"  Not a file or virtual config.\");\n          return;\n        }\n        if (args.kind === \"entry-point\") {\n          verbose && logMessage(\"  -> Top-level entry-point.\");\n          const componentDirectory = await buildComponentDirectory(\n            ctx,\n            path.resolve(args.path),\n          );\n\n          // No attempt to resolve args.path is made for entry points so they\n          // must be relative or absolute file paths, not npm packages.\n          // Whether we're bundling or discovering, we're done.\n          if (components.get(args.path)) {\n            // We always invoke esbuild in a try/catch.\n            // eslint-disable-next-line no-restricted-syntax\n            throw new Error(\n              `Entry point component \"${args.path}\" already registered.`,\n            );\n          }\n          components.set(args.path, componentDirectory);\n          return;\n        }\n\n        const candidates = [args.path];\n        const ext = path.extname(args.path);\n        if (ext === \".js\") {\n          candidates.push(args.path.slice(0, -\".js\".length) + \".ts\");\n        }\n        if (ext !== \".js\" && ext !== \".ts\") {\n          candidates.push(args.path + \".js\");\n          candidates.push(args.path + \".ts\");\n        }\n        let resolvedPath = undefined;\n        for (const candidate of candidates) {\n          const result = await build.resolve(candidate, {\n            // We expect this to be \"import-statement\" but pass 'kind' through\n            // to say honest to normal esbuild behavior.\n            kind: args.kind,\n            resolveDir: args.resolveDir,\n          });\n          if (result.path) {\n            resolvedPath = result.path;\n            break;\n          }\n        }\n        if (resolvedPath === undefined) {\n          verbose && logMessage(`  -> ${args.path} not found.`);\n          return;\n        }\n\n        const parentDir = path.dirname(resolvedPath);\n        let imported = components.get(resolvedPath);\n        if (!imported) {\n          const isComponent = isComponentDirectory(ctx, parentDir, false);\n          if (isComponent.kind !== \"ok\") {\n            verbose && logMessage(\"  -> Not a component:\", isComponent);\n            return;\n          }\n          imported = isComponent.component;\n          components.set(resolvedPath, imported);\n        }\n\n        verbose &&\n          logMessage(\n            \"  -> Component import! Recording it.\",\n            args.path,\n            resolvedPath,\n          );\n\n        if (mode === \"discover\") {\n          return {\n            path: resolvedPath,\n          };\n        } else {\n          // In bundle mode, transform external imports to use componentPaths:\n          // import rateLimiter from \"convex_ratelimiter\";\n          // => import rateLimiter from `_componentDeps/${base64('../node_modules/convex_ratelimiter')}`;\n\n          // A componentPath is path from the root component to the directory\n          // of the this component's definition file.\n          const componentPath = toComponentDefinitionPath(\n            rootComponentDirectory,\n            imported,\n          );\n          const importPath = definitionImportPath(componentPath);\n          return {\n            path: importPath,\n            external: true,\n          };\n        }\n      });\n    },\n  };\n}\n\n/** The path on the deployment that identifier a component definition. */\nfunction definitionImportPath(componentPath: ComponentDefinitionPath): string {\n  return `./_componentDeps/${Buffer.from(componentPath).toString(\"base64url\")}`;\n}\n\n// Share configuration between the component definition discovery and bundling passes.\nfunction sharedEsbuildOptions({\n  liveComponentSources = false,\n}: {\n  liveComponentSources?: boolean;\n}) {\n  const options = {\n    bundle: true,\n    platform: \"browser\",\n    format: \"esm\",\n    target: \"esnext\",\n\n    conditions: [\"convex\", \"module\"] as string[],\n\n    // `false` is the default for splitting. It's simpler to evaluate these on\n    // the server as a single file.\n    // Splitting could be enabled for speed once the server supports it.\n    splitting: false,\n\n    // place output files in memory at their source locations\n    write: false,\n    outdir: path.parse(process.cwd()).root,\n    outbase: path.parse(process.cwd()).root,\n\n    minify: true, // Note that this implies NODE_ENV=\"production\".\n    keepNames: true,\n\n    metafile: true,\n  } as const satisfies BuildOptions;\n\n  // Link directly to component sources (usually .ts) in order to\n  // skip the build step. This also causes codegen to run for components\n  // loaded from npm packages.\n  if (liveComponentSources) {\n    options.conditions.push(\"@convex-dev/component-source\");\n  }\n  return options;\n}\n\n// Use the esbuild metafile to discover the dependency graph in which component\n// definitions are nodes.\nexport async function componentGraph(\n  ctx: Context,\n  absWorkingDir: string,\n  rootComponentDirectory: ComponentDirectory,\n  liveComponentSources: boolean,\n  verbose: boolean = true,\n): Promise<{\n  components: Map<string, ComponentDirectory>;\n  dependencyGraph: [ComponentDirectory, ComponentDirectory][];\n}> {\n  if (\n    rootComponentDirectory.isRootWithoutConfig &&\n    !rootComponentDirectory.syntheticComponentImport\n  ) {\n    return {\n      components: new Map([\n        [rootComponentDirectory.path, rootComponentDirectory],\n      ]),\n      dependencyGraph: [],\n    };\n  }\n  let result;\n  try {\n    result = await esbuild.build({\n      absWorkingDir, // This is mostly useful for formatting error messages.\n      entryPoints: [qualifiedDefinitionPath(rootComponentDirectory)],\n      plugins: [\n        componentPlugin({\n          ctx,\n          mode: \"discover\",\n          verbose,\n          rootComponentDirectory,\n        }),\n        ...(rootComponentDirectory.syntheticComponentImport\n          ? [\n              virtualConfig({\n                rootComponentDirectory,\n                importComponentPath:\n                  rootComponentDirectory.syntheticComponentImport,\n              }),\n            ]\n          : []),\n      ],\n      sourcemap: \"external\",\n      sourcesContent: false,\n\n      ...sharedEsbuildOptions({ liveComponentSources }),\n    });\n    await registerEsbuildReads(ctx, absWorkingDir, result.metafile);\n  } catch (err: any) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"invalid filesystem data\",\n      printedMessage: `esbuild failed: ${err}`,\n    });\n  }\n\n  if (result.errors.length) {\n    const message = result.errors.map((error) => error.text).join(\"\\n\");\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"invalid filesystem data\",\n      printedMessage: message,\n    });\n  }\n  for (const warning of result.warnings) {\n    logWarning(chalkStderr.yellow(`esbuild warning: ${warning.text}`));\n  }\n\n  if (rootComponentDirectory.syntheticComponentImport) {\n    // Virtual configs appear in the metafile with a namespace prefix\n    // and can't have ComponentDirectory objects built by reading the filesystem\n    // so swap in this rootComponentDirectory.\n    return await findComponentDependencies(ctx, result.metafile, {\n      [`${VIRTUAL_CONFIG_NAMESPACE}:${qualifiedDefinitionPath(rootComponentDirectory)}`]:\n        rootComponentDirectory,\n    });\n  }\n\n  return await findComponentDependencies(ctx, result.metafile);\n}\n\n/**\n * Get dependencies of a ComponenDirectory as ComponentPaths.\n *\n * Component paths are paths relative to the root component.\n */\nexport function getDeps(\n  rootComponent: ComponentDirectory,\n  dependencyGraph: [ComponentDirectory, ComponentDirectory][],\n  definitionPath: string,\n): ComponentDefinitionPath[] {\n  return dependencyGraph\n    .filter(\n      ([importer, _imported]) => importer.definitionPath === definitionPath,\n    )\n    .map(([_importer, imported]) =>\n      toComponentDefinitionPath(rootComponent, imported),\n    );\n}\n\n/**\n * The returned dependency graph is an array of tuples of [importer, imported]\n *\n * This doesn't work on just any esbuild metafile because it assumes input\n * imports have not been transformed. We run it on the metafile produced by\n * the esbuild invocation that uses the component plugin in \"discover\" mode.\n *\n * @param inputOverrides - ComponentDirectory objects to be used for metafile.inputs\n * keys, in case they don't exist (namely virtual configs via esbuild plugin namespaces).\n */\nasync function findComponentDependencies(\n  ctx: Context,\n  metafile: Metafile,\n  inputOverrides: Record<string, ComponentDirectory> = {},\n): Promise<{\n  components: Map<string, ComponentDirectory>;\n  dependencyGraph: [ComponentDirectory, ComponentDirectory][];\n}> {\n  const { inputs } = metafile;\n\n  const componentsByKey = new Map<string, ComponentDirectory>();\n  for (const inputPath of Object.keys(inputs)) {\n    if (!inputPath.includes(\".config.\")) continue;\n\n    const override: ComponentDirectory | undefined = inputOverrides[inputPath];\n    if (override) {\n      componentsByKey.set(inputPath, override);\n    } else {\n      // Normal component - build from filesystem\n      const component = await buildComponentDirectory(ctx, inputPath);\n      componentsByKey.set(path.resolve(inputPath), component);\n    }\n  }\n\n  const dependencyGraph: [ComponentDirectory, ComponentDirectory][] = [];\n\n  for (const inputPath of Object.keys(inputs)) {\n    if (!inputPath.includes(\".config.\")) continue;\n\n    // For overridden inputs, use the original key; for normal components, use resolved path\n    const importerKey =\n      inputPath in inputOverrides ? inputPath : path.resolve(inputPath);\n\n    const importer = componentsByKey.get(importerKey);\n    if (!importer) continue;\n\n    const { imports } = inputs[inputPath];\n    const componentImports = imports.filter((imp) =>\n      imp.path.includes(\".config.\"),\n    );\n\n    for (const imp of componentImports) {\n      const imported = componentsByKey.get(path.resolve(imp.path));\n      if (!imported) {\n        return await ctx.crash({\n          exitCode: 1,\n          errorType: \"invalid filesystem data\",\n          printedMessage: `Didn't find ${path.resolve(imp.path)} in ${[...componentsByKey.keys()].toString()}`,\n        });\n      }\n\n      // Grab the import specifier from the metafile (e.g. `@convex-dev/workpool/convex.config`) so\n      // we can use it to import component APIs\n      if (imp.original) {\n        const importSpecifier = imp.original;\n        const relativeSpecifier = importSpecifier.replace(\n          /\\/convex\\.config.*$/,\n          \"\",\n        );\n\n        imported.importSpecifier = relativeSpecifier;\n      }\n\n      dependencyGraph.push([importer, imported]);\n    }\n  }\n\n  const components = new Map<string, ComponentDirectory>();\n  for (const directory of componentsByKey.values()) {\n    components.set(directory.path, directory);\n  }\n\n  return { components, dependencyGraph };\n}\n\n// NB: If a directory linked to is not a member of the passed\n// componentDirectories array then there will be external links\n// with no corresponding definition bundle.\n// That could be made to throw an error but maybe those are already available\n// on the Convex definition filesystem somehow, e.g. builtin components.\n/** Bundle the component definitions listed. */\nexport async function bundleDefinitions(\n  ctx: Context,\n  absWorkingDir: string,\n  dependencyGraph: [ComponentDirectory, ComponentDirectory][],\n  rootComponentDirectory: ComponentDirectory,\n  componentDirectories: ComponentDirectory[],\n  liveComponentSources: boolean,\n  verbose: boolean = false,\n): Promise<{\n  appDefinitionSpecWithoutImpls: AppDefinitionSpecWithoutImpls;\n  componentDefinitionSpecsWithoutImpls: ComponentDefinitionSpecWithoutImpls[];\n}> {\n  let result;\n  try {\n    let plugins = [\n      componentPlugin({\n        ctx,\n        mode: \"bundle\",\n        verbose,\n        rootComponentDirectory,\n      }),\n    ];\n    if (\n      rootComponentDirectory.syntheticComponentImport ||\n      rootComponentDirectory.isRootWithoutConfig\n    ) {\n      // Use virtual config (either with a component import or empty)\n      plugins.push(\n        virtualConfig(\n          rootComponentDirectory.syntheticComponentImport\n            ? {\n                rootComponentDirectory,\n                importComponentPath:\n                  rootComponentDirectory.syntheticComponentImport,\n              }\n            : { rootComponentDirectory },\n        ),\n      );\n    }\n    result = await esbuild.build({\n      absWorkingDir,\n      entryPoints: componentDirectories.map((dir) =>\n        qualifiedDefinitionPath(dir),\n      ),\n      plugins,\n      sourcemap: true,\n      ...sharedEsbuildOptions({ liveComponentSources }),\n    });\n    await registerEsbuildReads(ctx, absWorkingDir, result.metafile);\n  } catch (err: any) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"invalid filesystem data\",\n      printedMessage: `esbuild failed: ${err}`,\n    });\n  }\n\n  if (result.errors.length) {\n    const message = result.errors.map((error) => error.text).join(\"\\n\");\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"invalid filesystem data\",\n      printedMessage: message,\n    });\n  }\n  for (const warning of result.warnings) {\n    logWarning(chalkStderr.yellow(`esbuild warning: ${warning.text}`));\n  }\n\n  const outputs: {\n    outputJs: OutputFile;\n    outputJsMap?: OutputFile;\n    directory: ComponentDirectory;\n  }[] = [];\n  for (const directory of componentDirectories) {\n    const absInput = path.resolve(absWorkingDir, directory.definitionPath);\n    const expectedOutputJs =\n      absInput.slice(0, absInput.lastIndexOf(\".\")) + \".js\";\n    const expectedOutputMap =\n      absInput.slice(0, absInput.lastIndexOf(\".\")) + \".js.map\";\n    const outputJs = result.outputFiles.filter(\n      (outputFile) => outputFile.path === expectedOutputJs,\n    )[0];\n    if (!outputJs) {\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: `no JS found matching ${expectedOutputJs} in ${result.outputFiles.map((x) => x.path).toString()}`,\n      });\n    }\n    const outputJsMap = result.outputFiles.filter(\n      (outputFile) => outputFile.path === expectedOutputMap,\n    )[0];\n    outputs.push({\n      outputJs,\n      outputJsMap,\n      directory,\n    });\n  }\n\n  const appBundles = outputs.filter(\n    (out) => out.directory.path === rootComponentDirectory.path,\n  );\n  if (appBundles.length !== 1) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: \"found wrong number of app bundles\",\n    });\n  }\n  const appBundle = appBundles[0];\n  const componentBundles = outputs.filter(\n    (out) => out.directory.path !== rootComponentDirectory.path,\n  );\n\n  const componentDefinitionSpecsWithoutImpls: ComponentDefinitionSpecWithoutImpls[] =\n    componentBundles.map(({ directory, outputJs, outputJsMap }) => ({\n      definitionPath: toComponentDefinitionPath(\n        rootComponentDirectory,\n        directory,\n      ),\n      definition: {\n        path: path.relative(directory.path, outputJs.path),\n        source: outputJs.text,\n        sourceMap: outputJsMap?.text,\n        environment: \"isolate\" as const,\n      },\n      dependencies: getDeps(\n        rootComponentDirectory,\n        dependencyGraph,\n        directory.definitionPath,\n      ),\n    }));\n  const appDeps = getDeps(\n    rootComponentDirectory,\n    dependencyGraph,\n    appBundle.directory.definitionPath,\n  );\n  const appDefinitionSpecWithoutImpls: AppDefinitionSpecWithoutImpls = {\n    definition: {\n      path: path.relative(rootComponentDirectory.path, appBundle.outputJs.path),\n      source: appBundle.outputJs.text,\n      sourceMap: appBundle.outputJsMap?.text,\n      environment: \"isolate\" as const,\n    },\n    dependencies: appDeps,\n  };\n  return {\n    appDefinitionSpecWithoutImpls,\n    componentDefinitionSpecsWithoutImpls,\n  };\n}\n\nexport async function bundleImplementations({\n  ctx,\n  rootComponentDirectory,\n  componentDirectories,\n  nodeExternalPackages,\n  extraConditions,\n  verbose = false,\n  includeSourcesContent = false,\n}: {\n  ctx: Context;\n  rootComponentDirectory: ComponentDirectory;\n  componentDirectories: ComponentDirectory[];\n  nodeExternalPackages: string[];\n  extraConditions: string[];\n  verbose: boolean;\n  includeSourcesContent?: boolean;\n}): Promise<{\n  appImplementation: {\n    schema: Bundle | null;\n    functions: Bundle[];\n    externalNodeDependencies: NodeDependency[];\n  };\n  componentImplementations: {\n    schema: Bundle | null;\n    functions: Bundle[];\n    definitionPath: ComponentDefinitionPath;\n  }[];\n}> {\n  let appImplementation;\n  const componentImplementations = [];\n\n  // For --component-dir flag, skip bundling root implementations (no real code to bundle)\n  const directoriesToBundle = rootComponentDirectory.syntheticComponentImport\n    ? componentDirectories\n    : [rootComponentDirectory, ...componentDirectories];\n\n  for (const directory of directoriesToBundle) {\n    const isRoot = directory.path === rootComponentDirectory.path;\n    const resolvedPath = path.resolve(\n      rootComponentDirectory.path,\n      directory.path,\n    );\n    let schema;\n    if (ctx.fs.exists(path.resolve(resolvedPath, \"schema.ts\"))) {\n      schema =\n        (await bundleSchema(ctx, resolvedPath, extraConditions))[0] || null;\n    } else if (ctx.fs.exists(path.resolve(resolvedPath, \"schema.js\"))) {\n      schema =\n        (await bundleSchema(ctx, resolvedPath, extraConditions))[0] || null;\n    } else {\n      schema = null;\n    }\n\n    const entryPoints = await entryPointsByEnvironment(ctx, resolvedPath);\n    const convexResult: {\n      modules: Bundle[];\n      externalDependencies: Map<string, string>;\n      bundledModuleNames: Set<string>;\n    } = await bundle({\n      ctx,\n      dir: resolvedPath,\n      entryPoints: entryPoints.isolate,\n      generateSourceMaps: true,\n      platform: \"browser\",\n      extraConditions,\n      includeSourcesContent,\n    });\n\n    if (convexResult.externalDependencies.size !== 0) {\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: \"external dependencies not supported\",\n      });\n    }\n    const functions = convexResult.modules;\n    if (isRoot) {\n      if (verbose) {\n        showSpinner(\"Bundling modules for Node.js runtime...\");\n      }\n      const nodeResult: {\n        modules: Bundle[];\n        externalDependencies: Map<string, string>;\n        bundledModuleNames: Set<string>;\n      } = await bundle({\n        ctx,\n        dir: resolvedPath,\n        entryPoints: entryPoints.node,\n        generateSourceMaps: true,\n        platform: \"node\",\n        chunksFolder: path.join(\"_deps\", \"node\"),\n        externalPackagesAllowList: nodeExternalPackages,\n        extraConditions,\n        includeSourcesContent,\n      });\n\n      const externalNodeDependencies: NodeDependency[] = [];\n      for (const [\n        moduleName,\n        moduleVersion,\n      ] of nodeResult.externalDependencies) {\n        externalNodeDependencies.push({\n          name: moduleName,\n          version: moduleVersion,\n        });\n      }\n      const authBundle = await bundleAuthConfig(ctx, resolvedPath);\n      appImplementation = {\n        schema,\n        functions: functions.concat(nodeResult.modules).concat(authBundle),\n        externalNodeDependencies,\n      };\n    } else {\n      // Reject push if components have node bundles in non-root directories.\n      if (directory.path !== rootComponentDirectory.path) {\n        const nodeResult: {\n          modules: Bundle[];\n          externalDependencies: Map<string, string>;\n          bundledModuleNames: Set<string>;\n        } = await bundle({\n          ctx,\n          dir: resolvedPath,\n          entryPoints: entryPoints.node,\n          generateSourceMaps: true,\n          platform: \"node\",\n          chunksFolder: path.join(\"_deps\", \"node\"),\n          externalPackagesAllowList: nodeExternalPackages,\n          extraConditions,\n          includeSourcesContent,\n        });\n        if (nodeResult.modules.length > 0) {\n          // TODO(ENG-7116) Remove error and bundle the component node actions when we are ready to support them.\n          await ctx.crash({\n            exitCode: 1,\n            errorType: \"invalid filesystem data\",\n            printedMessage: `\"use node\" directive is not supported in components. Remove it from the component at: ${resolvedPath}.`,\n          });\n        }\n      }\n      // definitionPath is the canonical form\n      const definitionPath = toComponentDefinitionPath(\n        rootComponentDirectory,\n        directory,\n      );\n      componentImplementations.push({ definitionPath, schema, functions });\n    }\n  }\n\n  if (!appImplementation) {\n    // For --component-dir flag, we don't bundle root implementations so provide an empty one\n    if (rootComponentDirectory.syntheticComponentImport) {\n      appImplementation = {\n        schema: null,\n        functions: [],\n        externalNodeDependencies: [],\n      };\n    } else {\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: \"No app implementation found\",\n      });\n    }\n  }\n\n  return { appImplementation, componentImplementations };\n}\n\nasync function registerEsbuildReads(\n  ctx: Context,\n  absWorkingDir: string,\n  metafile: Metafile,\n) {\n  for (const [relPath, input] of Object.entries(metafile.inputs)) {\n    if (\n      // We rewrite these files so this integrity check isn't useful.\n      path.basename(relPath).includes(\"convex.config\") ||\n      // TODO: esbuild outputs paths prefixed with \"(disabled)\" when bundling our internal\n      // udf-system package. The files do actually exist locally, though.\n      relPath.indexOf(\"(disabled):\") !== -1 ||\n      relPath.startsWith(\"wasm-binary:\") ||\n      relPath.startsWith(\"wasm-stub:\")\n    ) {\n      continue;\n    }\n    const absPath = path.resolve(absWorkingDir, relPath);\n    const st = ctx.fs.stat(absPath);\n    if (st.size !== input.bytes) {\n      // Consider this a transient error so we'll try again and hopefully\n      // no files change right after esbuild next time.\n      logWarning(\n        `Bundled file ${absPath} changed right after esbuild invocation`,\n      );\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"transient\",\n        printedMessage: null,\n      });\n    }\n    ctx.fs.registerPath(absPath, st);\n  }\n}\n", "import path from \"path\";\nimport { Context } from \"../../../../bundler/context.js\";\nimport {\n  DEFINITION_FILENAME_JS,\n  DEFINITION_FILENAME_TS,\n} from \"../constants.js\";\nimport { getFunctionsDirectoryPath } from \"../../config.js\";\n\n/**\n * A component definition's location on the local filesystem using absolute paths.\n *\n * For module resolution it would be useful to avoid resolving any symlinks:\n * node modules are often symlinked by e.g. pnpm but relative paths should generally be\n * understood from their symlink location. We don't currently do this though, it made\n * Windows harder to support.\n *\n * None of these properties are the import string, which might have been an unqualifed import\n * (e.g. 'convex-waitlist' instead of '../node_modules/convex-waitlist/convex.config.ts')\n */\nexport type ComponentDirectory = {\n  /**\n   * Is this component directory for the root component?\n   */\n  isRoot: boolean;\n\n  /**\n   * Absolute local filesystem path to the component definition's directory.\n   */\n  path: string;\n\n  /**\n   * Absolute local filesystem path to the `convex.config.{ts,js}` file within the component definition.\n   */\n  definitionPath: string;\n\n  /**\n   * Is this component a root without a config file?\n   */\n  isRootWithoutConfig: boolean;\n\n  /**\n   * The import specifier used to import this component, with `/convex.config.*` stripped.\n   * For example, if imported as `@convex-dev/workpool/convex.config`, this would be `@convex-dev/workpool`.\n   * For relative imports like `../examples/foo/convex.config.js`, this would be `../examples/foo`.\n   * This is undefined for components discovered through the filesystem (not through imports).\n   */\n  importSpecifier?: string;\n\n  /**\n   * For synthetic configs (used with --component-dir flag), the path to the component\n   * that should be imported in the virtual convex.config.ts.\n   */\n  syntheticComponentImport?: string;\n};\n\n/**\n * Qualify (ensure a leading dot) a path and make it relative to a working dir.\n * Qualifying a path clarifies to esbuild that it represents a local file system\n * path, not a remote path on the npm registry.\n *\n * If this path were made relative without resolving symlinks it would be a\n * prettier identifier for the component directory, but instead symlinks are\n * always resolved.\n */\nexport function qualifiedDefinitionPath(\n  directory: ComponentDirectory,\n  workingDir = \".\",\n) {\n  const definitionPath = path.relative(workingDir, directory.definitionPath);\n  const posixDefinitionPath = definitionPath\n    .split(path.sep)\n    .join(path.posix.sep);\n  return `./${posixDefinitionPath}`;\n}\n\n// NB: The process cwd will be used to resolve the directory specified in the constructor.\nexport function isComponentDirectory(\n  ctx: Context,\n  directory: string,\n  isRoot: boolean,\n):\n  | { kind: \"ok\"; component: ComponentDirectory }\n  | { kind: \"err\"; why: string } {\n  let isRootWithoutConfig = false;\n\n  // If the directory doesn't exist, we need to create one.\n  if (!ctx.fs.exists(directory)) {\n    return {\n      kind: \"ok\",\n      component: {\n        isRoot,\n        path: path.resolve(directory),\n        definitionPath: path.resolve(\n          path.join(directory, DEFINITION_FILENAME_TS),\n        ),\n        isRootWithoutConfig: true,\n      },\n    };\n  }\n  const dirStat = ctx.fs.stat(directory);\n  if (!dirStat.isDirectory()) {\n    return { kind: \"err\", why: `Not a directory` };\n  }\n\n  // Check that we have a definition file, defaulting to `.ts` but falling back to `.js`.\n  let filename = DEFINITION_FILENAME_TS;\n  let definitionPath = path.resolve(path.join(directory, filename));\n  if (!ctx.fs.exists(definitionPath)) {\n    filename = DEFINITION_FILENAME_JS;\n    definitionPath = path.resolve(path.join(directory, filename));\n  }\n  if (!ctx.fs.exists(definitionPath)) {\n    isRootWithoutConfig = true;\n  } else {\n    const definitionStat = ctx.fs.stat(definitionPath);\n    if (!definitionStat.isFile()) {\n      return {\n        kind: \"err\",\n        why: `Component definition ${filename} isn't a file`,\n      };\n    }\n  }\n  return {\n    kind: \"ok\",\n    component: {\n      isRoot,\n      path: path.resolve(directory),\n      definitionPath: definitionPath,\n      isRootWithoutConfig,\n    },\n  };\n}\n\nexport async function buildComponentDirectory(\n  ctx: Context,\n  definitionPath: string,\n): Promise<ComponentDirectory> {\n  const convexDir = path.resolve(await getFunctionsDirectoryPath(ctx));\n  const isRoot = path.dirname(path.resolve(definitionPath)) === convexDir;\n  const isComponent = isComponentDirectory(\n    ctx,\n    path.dirname(definitionPath),\n    isRoot,\n  );\n  if (isComponent.kind === \"err\") {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"invalid filesystem data\",\n      printedMessage: `Invalid component directory (${isComponent.why}): ${path.dirname(definitionPath)}`,\n    });\n  }\n  return isComponent.component;\n}\n\n/**\n * ComponentPath is the local path identifying a\n * component definition. It is the unqualified (it never starts with \"./\")\n * relative path from the convex directory of the app (root component)\n * to the directory where a component definition lives.\n *\n * Note the convex/ directory of the root component is not necessarily\n * the working directory. It is currently never the same as the working\n * directory since `npx convex` must be invoked from the package root instead.\n */\nexport type ComponentDefinitionPath = string & {\n  __brand: \"ComponentDefinitionPath\";\n};\n\nexport function toComponentDefinitionPath(\n  rootComponent: ComponentDirectory,\n  component: ComponentDirectory,\n): ComponentDefinitionPath {\n  // First, compute a file system relative path.\n  const relativePath: string = path.relative(\n    rootComponent.path,\n    component.path,\n  );\n\n  // Then, convert it to a ComponentDefinitionPath, which always uses POSIX conventions.\n  const definitionPath = relativePath.split(path.sep).join(path.posix.sep);\n\n  return definitionPath as ComponentDefinitionPath;\n}\n\nexport function toAbsolutePath(\n  rootComponent: ComponentDirectory,\n  componentDefinitionPath: ComponentDefinitionPath,\n) {\n  // Repeat the process from `toComponentDefinitionPath` in reverse: First\n  // convert to a relative local filesystem path, and then join it to\n  // the root component's absolute path.\n  const relativePath = componentDefinitionPath\n    .split(path.posix.sep)\n    .join(path.sep);\n  return path.normalize(path.join(rootComponent.path, relativePath));\n}\n", "export const DEFINITION_FILENAME_TS = \"convex.config.ts\";\nexport const DEFINITION_FILENAME_JS = \"convex.config.js\";\n", "import path from \"path\";\nimport prettier from \"prettier\";\nimport { withTmpDir, TempDir } from \"../../bundler/fs.js\";\nimport { entryPoints } from \"../../bundler/index.js\";\nimport { apiCodegen } from \"../codegen_templates/api.js\";\nimport { apiCjsCodegen } from \"../codegen_templates/api_cjs.js\";\nimport {\n  dynamicDataModelDTS,\n  dynamicDataModelTS,\n  noSchemaDataModelDTS,\n  noSchemaDataModelTS,\n  staticDataModelDTS,\n  staticDataModelTS,\n} from \"../codegen_templates/dataModel.js\";\nimport { readmeCodegen } from \"../codegen_templates/readme.js\";\nimport { serverCodegen } from \"../codegen_templates/server.js\";\nimport { tsconfigCodegen } from \"../codegen_templates/tsconfig.js\";\nimport { Context } from \"../../bundler/context.js\";\nimport {\n  logError,\n  logMessage,\n  logOutput,\n  logVerbose,\n} from \"../../bundler/log.js\";\nimport { typeCheckFunctionsInMode, TypeCheckMode } from \"./typecheck.js\";\nimport {\n  readProjectConfig,\n  usesTypeScriptCodegen,\n  usesComponentApiImports,\n} from \"./config.js\";\nimport { recursivelyDelete } from \"./fsUtils.js\";\nimport { componentServerTS } from \"../codegen_templates/component_server.js\";\nimport { ComponentDirectory } from \"./components/definition/directoryStructure.js\";\nimport { StartPushResponse } from \"./deployApi/startPush.js\";\nimport {\n  componentApiDTS,\n  componentApiJs,\n  componentApiStubDTS,\n  componentApiStubTS,\n  componentApiTSWithTypes,\n  componentTS,\n  rootComponentApiCJS,\n} from \"../codegen_templates/component_api.js\";\nimport { functionsDir } from \"./utils/utils.js\";\nimport { LargeIndexDeletionCheck } from \"./indexes.js\";\n\nconst PRESERVED_GENERATED_ENTRIES = new Set([\"ai\"]);\n\nexport function cleanupStaleGeneratedEntries(\n  ctx: Context,\n  codegenDir: string,\n  writtenFiles: string[],\n  opts?: { debug?: boolean; force?: boolean; dryRun?: boolean },\n) {\n  // Skip cleanup in debug mode since we don't actually write files in that mode.\n  if (opts?.debug) {\n    return;\n  }\n  for (const file of ctx.fs.listDir(codegenDir)) {\n    if (PRESERVED_GENERATED_ENTRIES.has(file.name)) {\n      continue;\n    }\n    if (!writtenFiles.includes(file.name)) {\n      recursivelyDelete(ctx, path.join(codegenDir, file.name), opts);\n    }\n  }\n}\n\nexport type CodegenOptions = {\n  url?: string | undefined;\n  adminKey?: string | undefined;\n  dryRun: boolean;\n  debug: boolean;\n  typecheck: TypeCheckMode;\n  init: boolean;\n  commonjs: boolean;\n  liveComponentSources: boolean;\n  debugNodeApis: boolean;\n  systemUdfs: boolean;\n  largeIndexDeletionCheck: LargeIndexDeletionCheck;\n  codegenOnlyThisComponent?: string | undefined;\n};\n\nexport async function doInitConvexFolder(\n  ctx: Context,\n  functionsFolder?: string,\n  opts?: {\n    dryRun?: boolean;\n    debug?: boolean;\n  },\n) {\n  const skipIfExists = true;\n  let folder: string;\n  if (functionsFolder) {\n    folder = functionsFolder;\n  } else {\n    const { projectConfig, configPath } = await readProjectConfig(ctx);\n    folder = functionsDir(configPath, projectConfig);\n  }\n  const { functionsDirExistedBeforeCodegen } = await prepareForCodegen(\n    ctx,\n    folder,\n    opts,\n  );\n  await withTmpDir(async (tmpDir) => {\n    await doReadmeCodegen(\n      ctx,\n      tmpDir,\n      folder,\n      skipIfExists && functionsDirExistedBeforeCodegen,\n      opts,\n    );\n    await doTsconfigCodegen(ctx, tmpDir, folder, skipIfExists, opts);\n  });\n}\n\nasync function prepareForCodegen(\n  ctx: Context,\n  functionsDir: string,\n  opts?: { dryRun?: boolean },\n) {\n  const functionsDirExistedBeforeCodegen = ctx.fs.exists(functionsDir);\n  // Delete the old _generated.ts because v0.1.2 used to put the react generated\n  // code there\n  const legacyCodegenPath = path.join(functionsDir, \"_generated.ts\");\n  if (ctx.fs.exists(legacyCodegenPath)) {\n    if (opts?.dryRun) {\n      logError(\n        `Command would delete legacy codegen file: ${legacyCodegenPath}}`,\n      );\n    } else {\n      logError(`Deleting legacy codegen file: ${legacyCodegenPath}}`);\n      ctx.fs.unlink(legacyCodegenPath);\n    }\n  }\n\n  // Create the codegen dir if it doesn't already exist.\n  const codegenDir = path.join(functionsDir, \"_generated\");\n  ctx.fs.mkdir(codegenDir, { allowExisting: true, recursive: true });\n  return { codegenDir, functionsDirExistedBeforeCodegen };\n}\n\n/** Codegen only for an application (a root component) */\nexport async function doCodegen(\n  ctx: Context,\n  functionsDir: string,\n  typeCheckMode: TypeCheckMode,\n  opts?: { dryRun?: boolean; generateCommonJSApi?: boolean; debug?: boolean },\n) {\n  const { projectConfig } = await readProjectConfig(ctx);\n  const { codegenDir } = await prepareForCodegen(ctx, functionsDir, opts);\n\n  await withTmpDir(async (tmpDir) => {\n    // Write files in dependency order so a watching dev server doesn't\n    // see inconsistent results where a file we write imports from a\n    // file that doesn't exist yet. We'll collect all the paths we write\n    // and then delete any remaining paths at the end.\n    const writtenFiles = [];\n\n    const useTypeScript = usesTypeScriptCodegen(projectConfig);\n    const generateCommonJSApi =\n      opts?.generateCommonJSApi || projectConfig.generateCommonJSApi;\n\n    // First, `dataModel.d.ts` imports from the developer's `schema.js` file.\n    const schemaFiles = await doDataModelCodegen(\n      ctx,\n      tmpDir,\n      functionsDir,\n      codegenDir,\n      useTypeScript,\n      opts,\n    );\n    writtenFiles.push(...schemaFiles);\n\n    // Next, the `server.d.ts` file imports from `dataModel.d.ts`.\n    const serverFiles = await writeServerFiles(\n      ctx,\n      tmpDir,\n      codegenDir,\n      useTypeScript,\n      opts,\n    );\n    writtenFiles.push(...serverFiles);\n\n    // The `api.d.ts` file imports from the developer's modules, which then\n    // import from `server.d.ts`. Note that there's a cycle here, since the\n    // developer's modules could also import from the `api.{js,d.ts}` files.\n    const apiFiles = await doApiCodegen(\n      ctx,\n      tmpDir,\n      functionsDir,\n      codegenDir,\n      useTypeScript,\n      generateCommonJSApi,\n      opts,\n    );\n    writtenFiles.push(...apiFiles);\n\n    // Cleanup any files that weren't written in this run.\n    cleanupStaleGeneratedEntries(ctx, codegenDir, writtenFiles, opts);\n\n    // Generated code is updated, typecheck the query and mutation functions.\n    await typeCheckFunctionsInMode(ctx, typeCheckMode, functionsDir);\n  });\n}\n\n// Just enough to be able to bundle code for analysis: we need an api proxy object\n// so that imports aren't broken, we need basics in server, we need something in\n// data model.\nexport async function doInitialComponentCodegen(\n  ctx: Context,\n  tmpDir: TempDir,\n  componentDirectory: ComponentDirectory,\n  opts?: {\n    dryRun?: boolean;\n    generateCommonJSApi?: boolean;\n    debug?: boolean;\n    verbose?: boolean;\n  },\n) {\n  const { projectConfig } = await readProjectConfig(ctx);\n\n  if (isPublishedPackage(componentDirectory)) {\n    if (opts?.verbose) {\n      logMessage(\n        `skipping initial codegen for installed package ${componentDirectory.path}`,\n      );\n    }\n    return;\n  }\n\n  const { codegenDir } = await prepareForCodegen(\n    ctx,\n    componentDirectory.path,\n    opts,\n  );\n\n  // Write files in dependency order so a watching dev server doesn't\n  // see inconsistent results where a file we write imports from a\n  // file that doesn't exist yet. We'll collect all the paths we write\n  // and then delete any remaining paths at the end.\n  const writtenFiles = [];\n\n  // Non-root components always use .ts files; root components respect the config\n  // But for initial (placeholder, stub) codegen we don't care, just use .d.ts and .js.\n  const useTypeScript =\n    !componentDirectory.isRoot || usesTypeScriptCodegen(projectConfig);\n\n  const generateCommonJSApi =\n    opts?.generateCommonJSApi || projectConfig.generateCommonJSApi;\n\n  // First, `dataModel.d.ts` imports from the developer's `schema.js` file.\n  const dataModelFiles = await doInitialComponentDataModelCodegen(\n    ctx,\n    tmpDir,\n    componentDirectory,\n    codegenDir,\n    useTypeScript,\n    opts,\n  );\n  writtenFiles.push(...dataModelFiles);\n\n  // Next, the `server.d.ts` file imports from `dataModel.d.ts`.\n  const serverFiles = await doInitialComponentServerCodegen(\n    ctx,\n    componentDirectory.isRoot,\n    tmpDir,\n    codegenDir,\n    useTypeScript,\n    opts,\n  );\n  writtenFiles.push(...serverFiles);\n\n  // The `api.d.ts` file imports from the developer's modules, which then\n  // import from `server.d.ts`. Note that there's a cycle here, since the\n  // developer's modules could also import from the `api.{js,d.ts}` files.\n  const apiFiles = await doInitialComponentApiCodegen(\n    ctx,\n    componentDirectory.isRoot,\n    tmpDir,\n    codegenDir,\n    useTypeScript,\n    generateCommonJSApi,\n    opts,\n  );\n  writtenFiles.push(...apiFiles);\n\n  // component.ts is generated in doFinalComponentCodegen, but don't delete\n  // if it already exists from a previous full codegen run.\n  if (!componentDirectory.isRoot) {\n    const componentTSPath = path.join(codegenDir, \"component.ts\");\n    if (ctx.fs.exists(componentTSPath)) {\n      writtenFiles.push(\"component.ts\");\n    }\n  }\n\n  // Cleanup any files that weren't written in this run.\n  cleanupStaleGeneratedEntries(ctx, codegenDir, writtenFiles, opts);\n}\n\n/* This component defined in a dist directory; it is probably in a node_module\n * directory, installed from a package. It is stuck with the files it has.\n * Heuristics for this:\n * - component definition has a dist/ directory as an ancestor\n * - component definition is a .js file\n * - presence of .js.map files\n * We may improve this heuristic.\n */\nexport function isPublishedPackage(componentDirectory: ComponentDirectory) {\n  return (\n    componentDirectory.definitionPath.endsWith(\".js\") &&\n    !componentDirectory.isRoot\n  );\n}\n\n// Handles root and non-root components; it's \"component\" codegen because\n// it's not the old legacy path.\nexport async function doFinalComponentCodegen(\n  ctx: Context,\n  tmpDir: TempDir,\n  rootComponent: ComponentDirectory,\n  componentDirectory: ComponentDirectory,\n  startPushResponse: StartPushResponse,\n  componentsMap: Map<string, ComponentDirectory>,\n  opts?: {\n    dryRun?: boolean;\n    debug?: boolean;\n    generateCommonJSApi?: boolean;\n  },\n) {\n  const { projectConfig } = await readProjectConfig(ctx);\n\n  const isPublishedPackage =\n    componentDirectory.definitionPath.endsWith(\".js\") &&\n    !componentDirectory.isRoot;\n  // We never codegen for a published package (you need to link to the convex.config.ts file instead).\n  if (isPublishedPackage) {\n    return;\n  }\n\n  const codegenDir = path.join(componentDirectory.path, \"_generated\");\n  ctx.fs.mkdir(codegenDir, { allowExisting: true, recursive: true });\n\n  // Non-root components always use .ts files; root components respect the config\n  const useTypeScript =\n    !componentDirectory.isRoot || usesTypeScriptCodegen(projectConfig);\n\n  // `dataModel` and `api` files depend on analyze results so will get replaced\n  // in the later post-analysis codegen phase,  but `server` files don't need\n  // analysis info so the stubs from initial codegen are sufficient.\n\n  // dataModel\n  const hasSchemaFile = schemaFileExists(ctx, componentDirectory.path);\n  let dataModelContents: string;\n  if (hasSchemaFile) {\n    if (projectConfig.codegen.staticDataModel) {\n      dataModelContents = useTypeScript\n        ? await staticDataModelTS(\n            ctx,\n            startPushResponse,\n            rootComponent,\n            componentDirectory,\n          )\n        : await staticDataModelDTS(\n            ctx,\n            startPushResponse,\n            rootComponent,\n            componentDirectory,\n          );\n    } else {\n      dataModelContents = useTypeScript\n        ? dynamicDataModelTS()\n        : dynamicDataModelDTS();\n    }\n  } else {\n    dataModelContents = useTypeScript\n      ? noSchemaDataModelTS()\n      : noSchemaDataModelDTS();\n  }\n  const dataModelPath = path.join(\n    codegenDir,\n    useTypeScript ? \"dataModel.ts\" : \"dataModel.d.ts\",\n  );\n  await writeFormattedFile(\n    ctx,\n    tmpDir,\n    dataModelContents,\n    \"typescript\",\n    dataModelPath,\n    opts,\n  );\n\n  // component.ts\n  if (!componentDirectory.isRoot) {\n    const componentTSPath = path.join(codegenDir, \"component.ts\");\n    const componentTSContents = await componentTS(\n      ctx,\n      startPushResponse,\n      rootComponent,\n      componentDirectory,\n    );\n    await writeFormattedFile(\n      ctx,\n      tmpDir,\n      componentTSContents,\n      \"typescript\",\n      componentTSPath,\n      opts,\n    );\n  }\n\n  // server.ts - regenerate it in final codegen for consistency, even though\n  // the stub from initial codegen would be sufficient.\n  await writeServerFilesForComponent(\n    ctx,\n    componentDirectory.isRoot,\n    tmpDir,\n    codegenDir,\n    useTypeScript,\n    opts,\n  );\n\n  // api\n  if (!useTypeScript) {\n    const apiDTSPath = path.join(codegenDir, \"api.d.ts\");\n    const apiContents = await componentApiDTS(\n      ctx,\n      startPushResponse,\n      rootComponent,\n      componentDirectory,\n      componentsMap,\n      {\n        staticApi: projectConfig.codegen.staticApi,\n        useComponentApiImports: usesComponentApiImports(projectConfig),\n      },\n    );\n    await writeFormattedFile(\n      ctx,\n      tmpDir,\n      apiContents,\n      \"typescript\",\n      apiDTSPath,\n      opts,\n    );\n\n    if (opts?.generateCommonJSApi || projectConfig.generateCommonJSApi) {\n      const apiCjsDTSPath = path.join(codegenDir, \"api_cjs.d.cts\");\n      await writeFormattedFile(\n        ctx,\n        tmpDir,\n        apiContents,\n        \"typescript\",\n        apiCjsDTSPath,\n        opts,\n      );\n    }\n  } else {\n    const apiTSPath = path.join(codegenDir, \"api.ts\");\n    const apiContents = await componentApiTSWithTypes(\n      ctx,\n      startPushResponse,\n      rootComponent,\n      componentDirectory,\n      componentsMap,\n      {\n        staticApi: projectConfig.codegen.staticApi,\n        useComponentApiImports: usesComponentApiImports(projectConfig),\n      },\n    );\n    await writeFormattedFile(\n      ctx,\n      tmpDir,\n      apiContents,\n      \"typescript\",\n      apiTSPath,\n      opts,\n    );\n  }\n}\n\nasync function doReadmeCodegen(\n  ctx: Context,\n  tmpDir: TempDir,\n  functionsDir: string,\n  skip: boolean,\n  opts?: { dryRun?: boolean; debug?: boolean },\n) {\n  const readmePath = path.join(functionsDir, \"README.md\");\n  if (skip) {\n    logVerbose(`Not overwriting README.md.`);\n    return;\n  }\n  await writeFormattedFile(\n    ctx,\n    tmpDir,\n    readmeCodegen(),\n    \"markdown\",\n    readmePath,\n    opts,\n  );\n}\n\nasync function doTsconfigCodegen(\n  ctx: Context,\n  tmpDir: TempDir,\n  functionsDir: string,\n  skipIfExists: boolean,\n  opts?: { dryRun?: boolean; debug?: boolean },\n) {\n  const tsconfigPath = path.join(functionsDir, \"tsconfig.json\");\n  if (skipIfExists && ctx.fs.exists(tsconfigPath)) {\n    logVerbose(`Not overwriting tsconfig.json.`);\n    return;\n  }\n  await writeFormattedFile(\n    ctx,\n    tmpDir,\n    tsconfigCodegen(),\n    \"json\",\n    tsconfigPath,\n    opts,\n  );\n}\n\nfunction schemaFileExists(ctx: Context, functionsDir: string) {\n  let schemaPath = path.join(functionsDir, \"schema.ts\");\n  let hasSchemaFile = ctx.fs.exists(schemaPath);\n  if (!hasSchemaFile) {\n    schemaPath = path.join(functionsDir, \"schema.js\");\n    hasSchemaFile = ctx.fs.exists(schemaPath);\n  }\n  return hasSchemaFile;\n}\n\nasync function doDataModelCodegen(\n  ctx: Context,\n  tmpDir: TempDir,\n  functionsDir: string,\n  codegenDir: string,\n  useTypeScript: boolean,\n  opts?: { dryRun?: boolean; debug?: boolean },\n) {\n  const hasSchemaFile = schemaFileExists(ctx, functionsDir);\n  const schemaContent = hasSchemaFile\n    ? useTypeScript\n      ? dynamicDataModelTS()\n      : dynamicDataModelDTS()\n    : useTypeScript\n      ? noSchemaDataModelTS()\n      : noSchemaDataModelDTS();\n\n  const filename = useTypeScript ? \"dataModel.ts\" : \"dataModel.d.ts\";\n  await writeFormattedFile(\n    ctx,\n    tmpDir,\n    schemaContent,\n    \"typescript\",\n    path.join(codegenDir, filename),\n    opts,\n  );\n  return [filename];\n}\n\n/**\n * Write server.ts/.js/.d.ts files for root components.\n * Returns list of filenames written.\n */\nasync function writeServerFiles(\n  ctx: Context,\n  tmpDir: TempDir,\n  codegenDir: string,\n  useTypeScript: boolean,\n  opts?: { dryRun?: boolean; debug?: boolean },\n): Promise<string[]> {\n  if (!useTypeScript) {\n    const serverContent = serverCodegen({ useTypeScript: false });\n    await writeFormattedFile(\n      ctx,\n      tmpDir,\n      serverContent.JS!,\n      \"typescript\",\n      path.join(codegenDir, \"server.js\"),\n      opts,\n    );\n\n    await writeFormattedFile(\n      ctx,\n      tmpDir,\n      serverContent.DTS!,\n      \"typescript\",\n      path.join(codegenDir, \"server.d.ts\"),\n      opts,\n    );\n\n    return [\"server.js\", \"server.d.ts\"];\n  } else {\n    const serverContent = serverCodegen({ useTypeScript: true });\n    await writeFormattedFile(\n      ctx,\n      tmpDir,\n      serverContent.TS!,\n      \"typescript\",\n      path.join(codegenDir, \"server.ts\"),\n      opts,\n    );\n\n    return [\"server.ts\"];\n  }\n}\n\n/**\n * Write server.ts file for non-root components.\n * Returns list of filenames written.\n */\nasync function writeComponentServerFile(\n  ctx: Context,\n  tmpDir: TempDir,\n  codegenDir: string,\n  opts?: { dryRun?: boolean; debug?: boolean },\n): Promise<string[]> {\n  const serverTSPath = path.join(codegenDir, \"server.ts\");\n  const serverTSContents = componentServerTS(false);\n  await writeFormattedFile(\n    ctx,\n    tmpDir,\n    serverTSContents,\n    \"typescript\",\n    serverTSPath,\n    opts,\n  );\n  return [\"server.ts\"];\n}\n\n/**\n * Write server files for either root or non-root components.\n * Root components get server.ts/server.js/server.d.ts based on useTypeScript.\n * Non-root components always get server.ts.\n * Returns list of filenames written.\n */\nasync function writeServerFilesForComponent(\n  ctx: Context,\n  isRoot: boolean,\n  tmpDir: TempDir,\n  codegenDir: string,\n  useTypeScript: boolean,\n  opts?: { dryRun?: boolean; debug?: boolean },\n): Promise<string[]> {\n  if (isRoot) {\n    return await writeServerFiles(ctx, tmpDir, codegenDir, useTypeScript, opts);\n  } else {\n    return await writeComponentServerFile(ctx, tmpDir, codegenDir, opts);\n  }\n}\n\nasync function doInitialComponentServerCodegen(\n  ctx: Context,\n  isRoot: boolean,\n  tmpDir: TempDir,\n  codegenDir: string,\n  useTypeScript: boolean,\n  opts?: { dryRun?: boolean; debug?: boolean },\n) {\n  return await writeServerFilesForComponent(\n    ctx,\n    isRoot,\n    tmpDir,\n    codegenDir,\n    useTypeScript,\n    opts,\n  );\n}\n\nasync function doInitialComponentDataModelCodegen(\n  ctx: Context,\n  tmpDir: TempDir,\n  componentDirectory: ComponentDirectory,\n  codegenDir: string,\n  useTypeScript: boolean,\n  opts?: { dryRun?: boolean; debug?: boolean },\n) {\n  const hasSchemaFile = schemaFileExists(ctx, componentDirectory.path);\n  const dataModelContent = hasSchemaFile\n    ? useTypeScript\n      ? dynamicDataModelTS()\n      : dynamicDataModelDTS()\n    : useTypeScript\n      ? noSchemaDataModelTS()\n      : noSchemaDataModelDTS();\n  const filename = useTypeScript ? \"dataModel.ts\" : \"dataModel.d.ts\";\n  const dataModelPath = path.join(codegenDir, filename);\n\n  // Don't write our stub if the file already exists, since it may have\n  // better type information from `doFinalComponentDataModelCodegen`.\n  if (!ctx.fs.exists(dataModelPath)) {\n    await writeFormattedFile(\n      ctx,\n      tmpDir,\n      dataModelContent,\n      \"typescript\",\n      dataModelPath,\n      opts,\n    );\n  }\n  return [filename];\n}\n\nasync function doInitialComponentApiCodegen(\n  ctx: Context,\n  isRoot: boolean,\n  tmpDir: TempDir,\n  codegenDir: string,\n  useTypeScript: boolean,\n  generateCommonJSApi: boolean,\n  opts?: { dryRun?: boolean; debug?: boolean },\n) {\n  const writtenFiles: string[] = [];\n\n  if (!useTypeScript) {\n    const apiJS = componentApiJs();\n    await writeFormattedFile(\n      ctx,\n      tmpDir,\n      apiJS,\n      \"typescript\",\n      path.join(codegenDir, \"api.js\"),\n      opts,\n    );\n\n    // Don't write the `.d.ts` stub if it already exists.\n    const apiDTSPath = path.join(codegenDir, \"api.d.ts\");\n    const apiStubDTS = componentApiStubDTS();\n    if (!ctx.fs.exists(apiDTSPath)) {\n      await writeFormattedFile(\n        ctx,\n        tmpDir,\n        apiStubDTS,\n        \"typescript\",\n        apiDTSPath,\n        opts,\n      );\n    }\n\n    writtenFiles.push(\"api.js\", \"api.d.ts\");\n\n    if (generateCommonJSApi && isRoot) {\n      const apiCjsJS = rootComponentApiCJS();\n      await writeFormattedFile(\n        ctx,\n        tmpDir,\n        apiCjsJS,\n        \"typescript\",\n        path.join(codegenDir, \"api_cjs.cjs\"),\n        opts,\n      );\n\n      const cjsStubPath = path.join(codegenDir, \"api_cjs.d.cts\");\n      if (!ctx.fs.exists(cjsStubPath)) {\n        await writeFormattedFile(\n          ctx,\n          tmpDir,\n          apiStubDTS,\n          \"typescript\",\n          cjsStubPath,\n          opts,\n        );\n      }\n      writtenFiles.push(\"api_cjs.cjs\", \"api_cjs.d.cts\");\n    }\n  } else {\n    const apiTSPath = path.join(codegenDir, \"api.ts\");\n    const apiTS = componentApiStubTS();\n    // Don't write the `.ts` stub if it already exists.\n    if (!ctx.fs.exists(apiTSPath)) {\n      await writeFormattedFile(\n        ctx,\n        tmpDir,\n        apiTS,\n        \"typescript\",\n        apiTSPath,\n        opts,\n      );\n    }\n    writtenFiles.push(\"api.ts\");\n  }\n\n  return writtenFiles;\n}\n\nasync function doApiCodegen(\n  ctx: Context,\n  tmpDir: TempDir,\n  functionsDir: string,\n  codegenDir: string,\n  useTypeScript: boolean,\n  generateCommonJSApi: boolean,\n  opts?: { dryRun?: boolean; debug?: boolean },\n) {\n  const absModulePaths = await entryPoints(ctx, functionsDir);\n  const modulePaths = absModulePaths\n    .map((p) => path.relative(functionsDir, p))\n    .sort();\n\n  const writtenFiles: string[] = [];\n\n  if (!useTypeScript) {\n    const apiContent = apiCodegen(modulePaths, { useTypeScript: false });\n    await writeFormattedFile(\n      ctx,\n      tmpDir,\n      apiContent.JS!,\n      \"typescript\",\n      path.join(codegenDir, \"api.js\"),\n      opts,\n    );\n    await writeFormattedFile(\n      ctx,\n      tmpDir,\n      apiContent.DTS!,\n      \"typescript\",\n      path.join(codegenDir, \"api.d.ts\"),\n      opts,\n    );\n    writtenFiles.push(\"api.js\", \"api.d.ts\");\n\n    if (generateCommonJSApi) {\n      const apiCjsContent = apiCjsCodegen(modulePaths);\n      await writeFormattedFile(\n        ctx,\n        tmpDir,\n        apiCjsContent.JS!,\n        \"typescript\",\n        path.join(codegenDir, \"api_cjs.cjs\"),\n        opts,\n      );\n      await writeFormattedFile(\n        ctx,\n        tmpDir,\n        apiCjsContent.DTS!,\n        \"typescript\",\n        path.join(codegenDir, \"api_cjs.d.cts\"),\n        opts,\n      );\n      writtenFiles.push(\"api_cjs.cjs\", \"api_cjs.d.cts\");\n    }\n  } else {\n    const apiContent = apiCodegen(modulePaths, { useTypeScript: true });\n    await writeFormattedFile(\n      ctx,\n      tmpDir,\n      apiContent.TS!,\n      \"typescript\",\n      path.join(codegenDir, \"api.ts\"),\n      opts,\n    );\n    writtenFiles.push(\"api.ts\");\n  }\n\n  return writtenFiles;\n}\n\nasync function writeFormattedFile(\n  ctx: Context,\n  tmpDir: TempDir,\n  contents: string,\n  filetype: string,\n  destination: string,\n  options?: {\n    dryRun?: boolean;\n    debug?: boolean;\n  },\n) {\n  // Run prettier so we don't have to think about formatting!\n  //\n  // This is a little sketchy because we are using the default prettier config\n  // (not our user's one) but it's better than nothing.\n  const formattedContents = await prettier.format(contents, {\n    parser: filetype,\n    pluginSearchDirs: false,\n  });\n  if (options?.debug) {\n    // NB: The `test_codegen_projects_are_up_to_date` smoke test depends\n    // on this output format.\n    logOutput(`# ${path.resolve(destination)}`);\n    logOutput(formattedContents);\n    return;\n  }\n  try {\n    const existing = ctx.fs.readUtf8File(destination);\n    if (existing === formattedContents) {\n      return;\n    }\n  } catch (err: any) {\n    if (err.code !== \"ENOENT\") {\n      // eslint-disable-next-line no-restricted-syntax\n      throw err;\n    }\n  }\n  if (options?.dryRun) {\n    logOutput(`Command would write file: ${destination}`);\n    return;\n  }\n  const tmpPath = tmpDir.writeUtf8File(formattedContents);\n  ctx.fs.swapTmpFile(tmpPath, destination);\n}\n", "export function header(oneLineDescription: string) {\n  return `/* eslint-disable */\n  /**\n   * ${oneLineDescription}\n   *\n   * THIS CODE IS AUTOMATICALLY GENERATED.\n   *\n   * To regenerate, run \\`npx convex dev\\`.\n   * @module\n   */\n  `;\n}\n\nexport function apiComment(\n  apiName: string,\n  type: \"public\" | \"internal\" | undefined,\n) {\n  return `\n  /**\n     * A utility for referencing Convex functions in your app's${type ? ` ${type}` : \"\"} API.\n     *\n     * Usage:\n     * \\`\\`\\`js\n     * const myFunctionReference = ${apiName}.myModule.myFunction;\n     * \\`\\`\\`\n     */`;\n}\n\n/**\n * Comparison function for sorting strings alphabetically.\n * Uses localeCompare for consistent, locale-aware sorting.\n *\n * Usage: array.sort(compareStrings)\n * or with entries: Object.entries(obj).sort(([a], [b]) => compareStrings(a, b))\n */\nexport function compareStrings(a: string, b: string): number {\n  return a.localeCompare(b);\n}\n", "import { header } from \"./common.js\";\n\nexport function importPath(modulePath: string) {\n  // Replace backslashes with forward slashes.\n  const filePath = modulePath.replace(/\\\\/g, \"/\");\n  // Strip off the file extension.\n  const lastDot = filePath.lastIndexOf(\".\");\n  return filePath.slice(0, lastDot === -1 ? undefined : lastDot);\n}\n\nexport function moduleIdentifier(modulePath: string) {\n  // TODO: This encoding is ambiguous (`foo/bar` vs `foo_bar` vs `foo-bar`).\n  // Also we should be renaming keywords like `delete`.\n  let safeModulePath = importPath(modulePath)\n    .replace(/\\//g, \"_\")\n    .replace(/-/g, \"_\");\n  // Escape existing variable names in this file\n  if ([\"fullApi\", \"api\", \"internal\", \"components\"].includes(safeModulePath)) {\n    safeModulePath = `${safeModulePath}_`;\n  }\n  // Escape reserved words which are legal property names unescaped but are not\n  // legal identifiers.\n  // see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Lexical_grammar#reserved_words\n  const reserved = [\n    \"break\",\n    \"case\",\n    \"catch\",\n    \"class\",\n    \"const\",\n    \"continue\",\n    \"debugger\",\n    \"default\",\n    \"delete\",\n    \"do\",\n    \"else\",\n    \"export\",\n    \"extends\",\n    \"false\",\n    \"finally\",\n    \"for\",\n    \"function\",\n    \"if\",\n    \"import\",\n    \"in\",\n    \"instanceof\",\n    \"new\",\n    \"null\",\n    \"return\",\n    \"super\",\n    \"switch\",\n    \"this\",\n    \"throw\",\n    \"true\",\n    \"try\",\n    \"typeof\",\n    \"var\",\n    \"void\",\n    \"while\",\n    \"with\",\n    \"let\",\n    \"static\",\n    \"yield\",\n    \"await\",\n    \"enum\",\n    \"implements\",\n    \"interface\",\n    \"package\",\n    \"private\",\n    \"protected\",\n    \"public\",\n  ];\n  if (reserved.includes(safeModulePath)) {\n    safeModulePath = `${safeModulePath}_`;\n  }\n  return safeModulePath;\n}\n\nexport function apiCodegen(\n  modulePaths: string[],\n  opts?: { useTypeScript?: boolean },\n) {\n  const useTypeScript = opts?.useTypeScript ?? false;\n\n  if (!useTypeScript) {\n    // Generate separate .js and .d.ts files\n    const apiDTS = `${header(\"Generated `api` utility.\")}\n  import type { ApiFromModules, FilterApi, FunctionReference } from \"convex/server\";\n  ${modulePaths\n    .map(\n      (modulePath) =>\n        `import type * as ${moduleIdentifier(modulePath)} from \"../${importPath(\n          modulePath,\n        )}.js\";`,\n    )\n    .join(\"\\n\")}\n\n  /**\n   * A utility for referencing Convex functions in your app's API.\n   *\n   * Usage:\n   * \\`\\`\\`js\n   * const myFunctionReference = api.myModule.myFunction;\n   * \\`\\`\\`\n   */\n  declare const fullApi: ApiFromModules<{\n    ${modulePaths\n      .map(\n        (modulePath) =>\n          `\"${importPath(modulePath)}\": typeof ${moduleIdentifier(modulePath)},`,\n      )\n      .join(\"\\n\")}\n  }>;\n  export declare const api: FilterApi<typeof fullApi, FunctionReference<any, \"public\">>;\n  export declare const internal: FilterApi<typeof fullApi, FunctionReference<any, \"internal\">>;\n  `;\n\n    const apiJS = `${header(\"Generated `api` utility.\")}\n  import { anyApi } from \"convex/server\";\n\n  /**\n   * A utility for referencing Convex functions in your app's API.\n   *\n   * Usage:\n   * \\`\\`\\`js\n   * const myFunctionReference = api.myModule.myFunction;\n   * \\`\\`\\`\n   */\n  export const api = anyApi;\n  export const internal = anyApi;\n  `;\n    return {\n      DTS: apiDTS,\n      JS: apiJS,\n    };\n  } else {\n    // Generate combined .ts file\n    const apiTS = `${header(\"Generated `api` utility.\")}\nimport type { ApiFromModules, FilterApi, FunctionReference } from \"convex/server\";\nimport { anyApi } from \"convex/server\";\n${modulePaths\n  .map(\n    (modulePath) =>\n      `import type * as ${moduleIdentifier(modulePath)} from \"../${importPath(\n        modulePath,\n      )}.js\";`,\n  )\n  .join(\"\\n\")}\n\nconst fullApi: ApiFromModules<{\n  ${modulePaths\n    .map(\n      (modulePath) =>\n        `\"${importPath(modulePath)}\": typeof ${moduleIdentifier(modulePath)},`,\n    )\n    .join(\"\\n\")}\n}> = anyApi as any;\n\n/**\n * A utility for referencing Convex functions in your app's public API.\n *\n * Usage:\n * \\`\\`\\`js\n * const myFunctionReference = api.myModule.myFunction;\n * \\`\\`\\`\n */\nexport const api: FilterApi<typeof fullApi, FunctionReference<any, \"public\">> = anyApi as any;\n\n/**\n * A utility for referencing Convex functions in your app's internal API.\n *\n * Usage:\n * \\`\\`\\`js\n * const myFunctionReference = internal.myModule.myFunction;\n * \\`\\`\\`\n */\nexport const internal: FilterApi<typeof fullApi, FunctionReference<any, \"internal\">> = anyApi as any;\n`;\n    return {\n      TS: apiTS,\n    };\n  }\n}\n", "import { apiCodegen as esmApiCodegen } from \"./api.js\";\nimport { header } from \"./common.js\";\n\nexport function apiCjsCodegen(modulePaths: string[]) {\n  const { DTS } = esmApiCodegen(modulePaths);\n  const apiJS = `${header(\"Generated `api` utility.\")}\n  const { anyApi } = require(\"convex/server\");\n  module.exports = {\n    api: anyApi,\n    internal: anyApi,\n  };\n  `;\n  return {\n    DTS,\n    JS: apiJS,\n  };\n}\n", "import { jsonToConvex, Value } from \"../../values/index.js\";\nimport { ConvexValidator } from \"../lib/deployApi/validator.js\";\n\nexport function parseValidator(\n  validator: string | null,\n): ConvexValidator | null {\n  if (!validator) {\n    return null;\n  }\n  // This is code returned from the server, so we can skip validation\n  return JSON.parse(validator) as ConvexValidator;\n}\n\nexport function validatorToType(\n  validator: ConvexValidator,\n  useIdType: boolean,\n): string {\n  if (validator.type === \"null\") {\n    return \"null\";\n  } else if (validator.type === \"number\") {\n    return \"number\";\n  } else if (validator.type === \"bigint\") {\n    return \"bigint\";\n  } else if (validator.type === \"boolean\") {\n    return \"boolean\";\n  } else if (validator.type === \"string\") {\n    return \"string\";\n  } else if (validator.type === \"bytes\") {\n    return \"ArrayBuffer\";\n  } else if (validator.type === \"any\") {\n    return \"any\";\n  } else if (validator.type === \"literal\") {\n    const convexValue = jsonToConvex(validator.value);\n    return convexValueToLiteral(convexValue);\n  } else if (validator.type === \"id\") {\n    return useIdType ? `Id<\"${validator.tableName}\">` : \"string\";\n  } else if (validator.type === \"array\") {\n    return `Array<${validatorToType(validator.value, useIdType)}>`;\n  } else if (validator.type === \"record\") {\n    return `Record<${validatorToType(validator.keys, useIdType)}, ${validatorToType(validator.values.fieldType, useIdType)}>`;\n  } else if (validator.type === \"union\") {\n    return validator.value\n      .map((v) => validatorToType(v, useIdType))\n      .join(\" | \");\n  } else if (validator.type === \"object\") {\n    return objectValidatorToType(validator.value, useIdType);\n  } else {\n    // eslint-disable-next-line no-restricted-syntax\n    throw new Error(`Unsupported validator type`);\n  }\n}\n\nfunction objectValidatorToType(\n  fields: Record<string, { fieldType: ConvexValidator; optional: boolean }>,\n  useIdType: boolean,\n): string {\n  const fieldStrings: string[] = [];\n  for (const [fieldName, field] of Object.entries(fields)) {\n    const fieldType = validatorToType(field.fieldType, useIdType);\n    fieldStrings.push(`${fieldName}${field.optional ? \"?\" : \"\"}: ${fieldType}`);\n  }\n  return `{ ${fieldStrings.join(\", \")} }`;\n}\n\nfunction convexValueToLiteral(value: Value): string {\n  if (value === null) {\n    return \"null\";\n  }\n  if (typeof value === \"bigint\") {\n    return `${value}n`;\n  }\n  if (typeof value === \"number\") {\n    return `${value}`;\n  }\n  if (typeof value === \"boolean\") {\n    return `${value}`;\n  }\n  if (typeof value === \"string\") {\n    return `\"${value}\"`;\n  }\n  // eslint-disable-next-line no-restricted-syntax\n  throw new Error(`Unsupported literal type`);\n}\n", "import { Context } from \"../../bundler/context.js\";\nimport { SystemIndexes } from \"../../server/system_fields.js\";\nimport {\n  ComponentDirectory,\n  toComponentDefinitionPath,\n} from \"../lib/components/definition/directoryStructure.js\";\nimport {\n  AnalyzedSchema,\n  TableDefinition,\n} from \"../lib/deployApi/componentDefinition.js\";\nimport { StartPushResponse } from \"../lib/deployApi/startPush.js\";\nimport { ConvexValidator } from \"../lib/deployApi/validator.js\";\nimport { compareStrings, header } from \"./common.js\";\nimport { validatorToType } from \"./validator_helpers.js\";\n\nconst NO_SCHEMA_DATA_MODEL_CONTENT = `\n  ${header(\"Generated data model types.\")}\n  import { AnyDataModel } from \"convex/server\";\n  import type { GenericId } from \"convex/values\";\n\n  /**\n   * No \\`schema.ts\\` file found!\n   *\n   * This generated code has permissive types like \\`Doc = any\\` because\n   * Convex doesn't know your schema. If you'd like more type safety, see\n   * https://docs.convex.dev/using/schemas for instructions on how to add a\n   * schema file.\n   *\n   * After you change a schema, rerun codegen with \\`npx convex dev\\`.\n   */\n\n  /**\n   * The names of all of your Convex tables.\n   */\n  export type TableNames = string;\n\n  /**\n   * The type of a document stored in Convex.\n   */\n  export type Doc = any;\n\n  /**\n   * An identifier for a document in Convex.\n   *\n   * Convex documents are uniquely identified by their \\`Id\\`, which is accessible\n   * on the \\`_id\\` field. To learn more, see [Document IDs](https://docs.convex.dev/using/document-ids).\n   *\n   * Documents can be loaded using \\`db.get(tableName, id)\\` in query and mutation functions.\n   *\n   * IDs are just strings at runtime, but this type can be used to distinguish them from other\n   * strings when type checking.\n   */\n  export type Id<TableName extends TableNames = TableNames> = GenericId<TableName>;\n\n  /**\n   * A type describing your Convex data model.\n   *\n   * This type includes information about what tables you have, the type of\n   * documents stored in those tables, and the indexes defined on them.\n   *\n   * This type is used to parameterize methods like \\`queryGeneric\\` and\n   * \\`mutationGeneric\\` to make them type-safe.\n   */\n  export type DataModel = AnyDataModel;`;\n\nexport function noSchemaDataModelDTS() {\n  return NO_SCHEMA_DATA_MODEL_CONTENT;\n}\n\nexport function noSchemaDataModelTS() {\n  return NO_SCHEMA_DATA_MODEL_CONTENT;\n}\n\nconst dynamicDataModelContent = `\n  ${header(\"Generated data model types.\")}\n  import type { DataModelFromSchemaDefinition, DocumentByName, TableNamesInDataModel, SystemTableNames } from \"convex/server\";\n  import type { GenericId } from \"convex/values\";\n  import schema from \"../schema.js\";\n\n  /**\n   * The names of all of your Convex tables.\n   */\n  export type TableNames = TableNamesInDataModel<DataModel>;\n\n  /**\n   * The type of a document stored in Convex.\n   *\n   * @typeParam TableName - A string literal type of the table name (like \"users\").\n   */\n  export type Doc<TableName extends TableNames> = DocumentByName<DataModel, TableName>;\n\n  /**\n   * An identifier for a document in Convex.\n   *\n   * Convex documents are uniquely identified by their \\`Id\\`, which is accessible\n   * on the \\`_id\\` field. To learn more, see [Document IDs](https://docs.convex.dev/using/document-ids).\n   *\n   * Documents can be loaded using \\`db.get(tableName, id)\\` in query and mutation functions.\n   *\n   * IDs are just strings at runtime, but this type can be used to distinguish them from other\n   * strings when type checking.\n   *\n   * @typeParam TableName - A string literal type of the table name (like \"users\").\n   */\n  export type Id<TableName extends TableNames | SystemTableNames> = GenericId<TableName>;\n\n  /**\n   * A type describing your Convex data model.\n   *\n   * This type includes information about what tables you have, the type of\n   * documents stored in those tables, and the indexes defined on them.\n   *\n   * This type is used to parameterize methods like \\`queryGeneric\\` and\n   * \\`mutationGeneric\\` to make them type-safe.\n   */\n  export type DataModel = DataModelFromSchemaDefinition<typeof schema>;\n  `;\n\nexport function dynamicDataModelDTS() {\n  return dynamicDataModelContent;\n}\n\nexport function dynamicDataModelTS() {\n  return dynamicDataModelContent;\n}\n\nasync function staticDataModelImpl(\n  ctx: Context,\n  startPush: StartPushResponse,\n  rootComponent: ComponentDirectory,\n  componentDirectory: ComponentDirectory,\n  useTypeScript: boolean,\n): Promise<string> {\n  const definitionPath = toComponentDefinitionPath(\n    rootComponent,\n    componentDirectory,\n  );\n\n  const analysis = startPush.analysis[definitionPath];\n  if (!analysis) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: `No analysis found for component ${definitionPath} orig: ${definitionPath}\\nin\\n${Object.keys(startPush.analysis).toString()}`,\n    });\n  }\n  if (!analysis.schema) {\n    return useTypeScript ? noSchemaDataModelTS() : noSchemaDataModelDTS();\n  }\n\n  const lines = [\n    header(\"Generated data model types.\"),\n    `import type { DocumentByName, TableNamesInDataModel, SystemTableNames, AnyDataModel } from \"convex/server\";`,\n    `import type { GenericId } from \"convex/values\";`,\n  ];\n  for await (const line of codegenDataModel(ctx, analysis.schema)) {\n    lines.push(line);\n  }\n  lines.push(`\n    /**\n     * The names of all of your Convex tables.\n     */\n    export type TableNames = TableNamesInDataModel<DataModel>;\n\n    /**\n     * The type of a document stored in Convex.\n     *\n     * @typeParam TableName - A string literal type of the table name (like \"users\").\n     */\n    export type Doc<TableName extends TableNames> = DocumentByName<DataModel, TableName>;\n\n    /**\n     * An identifier for a document in Convex.\n     *\n     * Convex documents are uniquely identified by their \\`Id\\`, which is accessible\n     * on the \\`_id\\` field. To learn more, see [Document IDs](https://docs.convex.dev/using/document-ids).\n     *\n     * Documents can be loaded using \\`db.get(tableName, id)\\` in query and mutation functions.\n     *\n     * IDs are just strings at runtime, but this type can be used to distinguish them from other\n     * strings when type checking.\n     *\n     * @typeParam TableName - A string literal type of the table name (like \"users\").\n     */\n    export type Id<TableName extends TableNames | SystemTableNames> = GenericId<TableName>;\n    `);\n\n  return lines.join(\"\\n\");\n}\n\nexport async function staticDataModelDTS(\n  ctx: Context,\n  startPush: StartPushResponse,\n  rootComponent: ComponentDirectory,\n  componentDirectory: ComponentDirectory,\n) {\n  return staticDataModelImpl(\n    ctx,\n    startPush,\n    rootComponent,\n    componentDirectory,\n    false,\n  );\n}\n\n// Used for components and root\nexport async function staticDataModelTS(\n  ctx: Context,\n  startPush: StartPushResponse,\n  rootComponent: ComponentDirectory,\n  componentDirectory: ComponentDirectory,\n) {\n  return staticDataModelImpl(\n    ctx,\n    startPush,\n    rootComponent,\n    componentDirectory,\n    true,\n  );\n}\n\nasync function* codegenDataModel(ctx: Context, schema: AnalyzedSchema) {\n  yield `\n    /**\n     * A type describing your Convex data model.\n     *\n     * This type includes information about what tables you have, the type of\n     * documents stored in those tables, and the indexes defined on them.\n     *\n     * This type is used to parameterize methods like \\`queryGeneric\\` and\n     * \\`mutationGeneric\\` to make them type-safe.\n     */\n  `;\n  const tables = [...schema.tables];\n  tables.sort((a, b) => compareStrings(a.tableName, b.tableName));\n\n  yield `export type DataModel = {`;\n  for (const table of tables) {\n    yield `  ${table.tableName}:`;\n    yield* codegenTable(ctx, table);\n    yield `,`;\n  }\n  yield `}`;\n  if (!schema.schemaValidation) {\n    yield ` & AnyDataModel`;\n  }\n  yield `;`;\n}\n\nasync function* codegenTable(ctx: Context, table: TableDefinition) {\n  const documentType = await addSystemFields(\n    ctx,\n    table.tableName,\n    table.documentType,\n  );\n\n  const indexJson: Record<string, string[]> = {};\n  for (const index of table.indexes) {\n    indexJson[index.indexDescriptor] = index.fields;\n  }\n\n  yield `{`;\n  yield `  document: ${validatorToType(documentType, true)},`;\n\n  const fieldPaths = new Set<string>();\n  for (const fieldPath of extractFieldPaths(documentType)) {\n    fieldPaths.add(fieldPath.join(\".\"));\n  }\n  yield `  fieldPaths: ${stringLiteralUnionType(Array.from(fieldPaths).sort(compareStrings))},`;\n\n  yield `  indexes: {`;\n  const systemIndexes: SystemIndexes = {\n    by_id: [\"_id\"],\n    by_creation_time: [\"_creationTime\"],\n  };\n  const indexes: Record<string, string[]> = {};\n  for (const [indexDescriptor, fields] of Object.entries(systemIndexes)) {\n    indexes[indexDescriptor] = fields;\n  }\n  for (const index of table.indexes) {\n    if (indexes[index.indexDescriptor]) {\n      yield await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: `Duplicate index name ${index.indexDescriptor} in table ${table.tableName}.`,\n      });\n    }\n    indexes[index.indexDescriptor] = index.fields;\n  }\n  for (const [indexDescriptor, fields] of Object.entries(indexes)) {\n    yield `    \"${indexDescriptor}\": ${JSON.stringify(fields)},`;\n  }\n  yield `  },`;\n\n  yield `  searchIndexes: {`;\n  for (const index of table.searchIndexes ?? []) {\n    yield `    \"${index.indexDescriptor}\": {`;\n    yield `      searchField: \"${index.searchField}\",`;\n    yield `      filterFields: ${stringLiteralUnionType(index.filterFields)},`;\n    yield `    },`;\n  }\n  yield `  },`;\n\n  yield `  vectorIndexes: {`;\n  for (const index of table.vectorIndexes ?? []) {\n    yield `    \"${index.indexDescriptor}\": {`;\n    yield `      vectorField: \"${index.vectorField}\",`;\n    yield `      dimensions: number,`;\n    yield `      filterFields: ${stringLiteralUnionType(index.filterFields)},`;\n    yield `    },`;\n  }\n  yield `  },`;\n  yield `}`;\n}\n\nconst SYSTEM_FIELDS = [\"_id\", \"_creationTime\"];\n\nasync function addSystemFields(\n  ctx: Context,\n  tableName: string,\n  validator: ConvexValidator,\n): Promise<ConvexValidator> {\n  if (validator.type === \"object\") {\n    return addSystemFieldsToObject(ctx, tableName, validator);\n  } else if (validator.type === \"any\") {\n    return { type: \"any\" };\n  } else if (validator.type === \"union\") {\n    const newSubValidators = [];\n    for (const subValidator of validator.value) {\n      const newSubValidator = await addSystemFieldsToObject(\n        ctx,\n        tableName,\n        subValidator,\n      );\n      newSubValidators.push(newSubValidator);\n    }\n    return { type: \"union\", value: newSubValidators };\n  } else {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: `Invalid top-level validator for ${tableName}.`,\n    });\n  }\n}\n\nasync function addSystemFieldsToObject(\n  ctx: Context,\n  tableName: string,\n  validator: ConvexValidator,\n): Promise<ConvexValidator> {\n  if (validator.type !== \"object\") {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: `System fields can only be added to objects.`,\n    });\n  }\n  for (const systemField of SYSTEM_FIELDS) {\n    if (Object.hasOwn(validator.value, systemField)) {\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: `System field ${systemField} present in table ${tableName}.`,\n      });\n    }\n  }\n  return {\n    type: \"object\",\n    value: {\n      ...validator.value,\n      _id: {\n        fieldType: { type: \"id\", tableName },\n        optional: false,\n      },\n      _creationTime: {\n        fieldType: { type: \"number\" },\n        optional: false,\n      },\n    },\n  };\n}\n\nfunction* extractFieldPaths(validator: ConvexValidator): Generator<string[]> {\n  if (validator.type === \"object\") {\n    for (const [fieldName, fieldValidator] of Object.entries(validator.value)) {\n      yield [fieldName];\n      for (const subFieldPath of extractFieldPaths(fieldValidator.fieldType)) {\n        if (subFieldPath.length > 0) {\n          yield [fieldName, ...subFieldPath];\n        }\n      }\n    }\n  } else if (validator.type === \"union\") {\n    for (const subValidator of validator.value) {\n      yield* extractFieldPaths(subValidator);\n    }\n  } else if (validator.type === \"record\") {\n    yield [\"${string}\"];\n  } else {\n    yield [];\n  }\n}\n\nfunction stringLiteralUnionType(fields: string[]) {\n  if (fields.length === 0) {\n    return \"never\";\n  } else {\n    return fields\n      .map((field) => (field.includes(\"${\") ? `\\`${field}\\`` : `\"${field}\"`))\n      .join(\" | \");\n  }\n}\n", "export function readmeCodegen() {\n  return `# Welcome to your Convex functions directory!\n\nWrite your Convex functions here.\nSee https://docs.convex.dev/functions for more.\n\nA query function that takes two arguments looks like:\n\n\\`\\`\\`ts\n// convex/myFunctions.ts\nimport { query } from \"./_generated/server\";\nimport { v } from \"convex/values\";\n\nexport const myQueryFunction = query({\n  // Validators for arguments.\n  args: {\n    first: v.number(),\n    second: v.string(),\n  },\n\n  // Function implementation.\n  handler: async (ctx, args) => {\n    // Read the database as many times as you need here.\n    // See https://docs.convex.dev/database/reading-data.\n    const documents = await ctx.db.query(\"tablename\").collect();\n\n    // Arguments passed from the client are properties of the args object.\n    console.log(args.first, args.second)\n\n    // Write arbitrary JavaScript here: filter, aggregate, build derived data,\n    // remove non-public properties, or create new objects.\n    return documents;\n  },\n});\n\\`\\`\\`\n\nUsing this query function in a React component looks like:\n\n\\`\\`\\`ts\nconst data = useQuery(api.myFunctions.myQueryFunction, { first: 10, second: \"hello\" });\n\\`\\`\\`\n\n\nA mutation function looks like:\n\n\\`\\`\\`ts\n// convex/myFunctions.ts\nimport { mutation } from \"./_generated/server\";\nimport { v } from \"convex/values\";\n\nexport const myMutationFunction = mutation({\n  // Validators for arguments.\n  args: {\n    first: v.string(),\n    second: v.string(),\n  },\n\n  // Function implementation.\n  handler: async (ctx, args) => {\n    // Insert or modify documents in the database here.\n    // Mutations can also read from the database like queries.\n    // See https://docs.convex.dev/database/writing-data.\n    const message = { body: args.first, author: args.second };\n    const id = await ctx.db.insert(\"messages\", message);\n\n    // Optionally, return a value from your mutation.\n    return await ctx.db.get(\"messages\", id);\n  },\n});\n\\`\\`\\`\n\nUsing this mutation function in a React component looks like:\n\n\\`\\`\\`ts\nconst mutation = useMutation(api.myFunctions.myMutationFunction);\nfunction handleButtonPress() {\n  // fire and forget, the most common way to use mutations\n  mutation({ first: \"Hello!\", second: \"me\" });\n  // OR\n  // use the result once the mutation has completed\n  mutation({ first: \"Hello!\", second: \"me\" }).then(result => console.log(result));\n}\n\\`\\`\\`\n\nUse the Convex CLI to push your functions to a deployment. See everything\nthe Convex CLI can do by running \\`npx convex -h\\` in your project root\ndirectory. To learn more, launch the docs with \\`npx convex docs\\`.\n`;\n}\n", "import { header } from \"./common.js\";\n\nexport function serverCodegen({ useTypeScript }: { useTypeScript: boolean }) {\n  if (!useTypeScript) {\n    // Generate separate .js and .d.ts files\n    const serverDTS = `\n    ${header(\n      \"Generated utilities for implementing server-side Convex query and mutation functions.\",\n    )}\n    import {\n      ActionBuilder,\n      HttpActionBuilder,\n      MutationBuilder,\n      QueryBuilder,\n      GenericActionCtx,\n      GenericMutationCtx,\n      GenericQueryCtx,\n      GenericDatabaseReader,\n      GenericDatabaseWriter,\n    } from \"convex/server\";\n    import type { DataModel } from \"./dataModel.js\";\n\n    /**\n     * Define a query in this Convex app's public API.\n     *\n     * This function will be allowed to read your Convex database and will be accessible from the client.\n     *\n     * @param func - The query function. It receives a {@link QueryCtx} as its first argument.\n     * @returns The wrapped query. Include this as an \\`export\\` to name it and make it accessible.\n     */\n    export declare const query: QueryBuilder<DataModel, \"public\">;\n\n    /**\n     * Define a query that is only accessible from other Convex functions (but not from the client).\n     *\n     * This function will be allowed to read from your Convex database. It will not be accessible from the client.\n     *\n     * @param func - The query function. It receives a {@link QueryCtx} as its first argument.\n     * @returns The wrapped query. Include this as an \\`export\\` to name it and make it accessible.\n     */\n    export declare const internalQuery: QueryBuilder<DataModel, \"internal\">;\n\n    /**\n     * Define a mutation in this Convex app's public API.\n     *\n     * This function will be allowed to modify your Convex database and will be accessible from the client.\n     *\n     * @param func - The mutation function. It receives a {@link MutationCtx} as its first argument.\n     * @returns The wrapped mutation. Include this as an \\`export\\` to name it and make it accessible.\n     */\n    export declare const mutation: MutationBuilder<DataModel, \"public\">;\n\n    /**\n     * Define a mutation that is only accessible from other Convex functions (but not from the client).\n     *\n     * This function will be allowed to modify your Convex database. It will not be accessible from the client.\n     *\n     * @param func - The mutation function. It receives a {@link MutationCtx} as its first argument.\n     * @returns The wrapped mutation. Include this as an \\`export\\` to name it and make it accessible.\n     */\n    export declare const internalMutation: MutationBuilder<DataModel, \"internal\">;\n\n    /**\n     * Define an action in this Convex app's public API.\n     *\n     * An action is a function which can execute any JavaScript code, including non-deterministic\n     * code and code with side-effects, like calling third-party services.\n     * They can be run in Convex's JavaScript environment or in Node.js using the \"use node\" directive.\n     * They can interact with the database indirectly by calling queries and mutations using the {@link ActionCtx}.\n     *\n     * @param func - The action. It receives an {@link ActionCtx} as its first argument.\n     * @returns The wrapped action. Include this as an \\`export\\` to name it and make it accessible.\n     */\n    export declare const action: ActionBuilder<DataModel, \"public\">;\n\n    /**\n     * Define an action that is only accessible from other Convex functions (but not from the client).\n     *\n     * @param func - The function. It receives an {@link ActionCtx} as its first argument.\n     * @returns The wrapped function. Include this as an \\`export\\` to name it and make it accessible.\n     */\n    export declare const internalAction: ActionBuilder<DataModel, \"internal\">;\n\n    /**\n     * Define an HTTP action.\n     *\n     * The wrapped function will be used to respond to HTTP requests received\n     * by a Convex deployment if the requests matches the path and method where\n     * this action is routed. Be sure to route your httpAction in \\`convex/http.js\\`.\n     *\n     * @param func - The function. It receives an {@link ActionCtx} as its first argument\n     * and a Fetch API \\`Request\\` object as its second.\n     * @returns The wrapped function. Import this function from \\`convex/http.js\\` and route it to hook it up.\n     */\n    export declare const httpAction: HttpActionBuilder;\n\n    /**\n     * A set of services for use within Convex query functions.\n     *\n     * The query context is passed as the first argument to any Convex query\n     * function run on the server.\n     *\n     * This differs from the {@link MutationCtx} because all of the services are\n     * read-only.\n     */\n    export type QueryCtx = GenericQueryCtx<DataModel>;\n\n    /**\n     * A set of services for use within Convex mutation functions.\n     *\n     * The mutation context is passed as the first argument to any Convex mutation\n     * function run on the server.\n     */\n    export type MutationCtx = GenericMutationCtx<DataModel>;\n\n    /**\n     * A set of services for use within Convex action functions.\n     *\n     * The action context is passed as the first argument to any Convex action\n     * function run on the server.\n     */\n    export type ActionCtx = GenericActionCtx<DataModel>;\n\n    /**\n     * An interface to read from the database within Convex query functions.\n     *\n     * The two entry points are {@link DatabaseReader.get}, which fetches a single\n     * document by its {@link Id}, or {@link DatabaseReader.query}, which starts\n     * building a query.\n     */\n    export type DatabaseReader = GenericDatabaseReader<DataModel>;\n\n    /**\n     * An interface to read from and write to the database within Convex mutation\n     * functions.\n     *\n     * Convex guarantees that all writes within a single mutation are\n     * executed atomically, so you never have to worry about partial writes leaving\n     * your data in an inconsistent state. See [the Convex Guide](https://docs.convex.dev/understanding/convex-fundamentals/functions#atomicity-and-optimistic-concurrency-control)\n     * for the guarantees Convex provides your functions.\n     */\n    export type DatabaseWriter = GenericDatabaseWriter<DataModel>;`;\n\n    const serverJS = `\n    ${header(\n      \"Generated utilities for implementing server-side Convex query and mutation functions.\",\n    )}\n    import {\n      actionGeneric,\n      httpActionGeneric,\n      queryGeneric,\n      mutationGeneric,\n      internalActionGeneric,\n      internalMutationGeneric,\n      internalQueryGeneric,\n    } from \"convex/server\";\n\n    /**\n     * Define a query in this Convex app's public API.\n     *\n     * This function will be allowed to read your Convex database and will be accessible from the client.\n     *\n     * @param func - The query function. It receives a {@link QueryCtx} as its first argument.\n     * @returns The wrapped query. Include this as an \\`export\\` to name it and make it accessible.\n     */\n    export const query = queryGeneric;\n\n    /**\n     * Define a query that is only accessible from other Convex functions (but not from the client).\n     *\n     * This function will be allowed to read from your Convex database. It will not be accessible from the client.\n     *\n     * @param func - The query function. It receives a {@link QueryCtx} as its first argument.\n     * @returns The wrapped query. Include this as an \\`export\\` to name it and make it accessible.\n     */\n    export const internalQuery = internalQueryGeneric;\n\n    /**\n     * Define a mutation in this Convex app's public API.\n     *\n     * This function will be allowed to modify your Convex database and will be accessible from the client.\n     *\n     * @param func - The mutation function. It receives a {@link MutationCtx} as its first argument.\n     * @returns The wrapped mutation. Include this as an \\`export\\` to name it and make it accessible.\n     */\n    export const mutation = mutationGeneric;\n\n    /**\n     * Define a mutation that is only accessible from other Convex functions (but not from the client).\n     *\n     * This function will be allowed to modify your Convex database. It will not be accessible from the client.\n     *\n     * @param func - The mutation function. It receives a {@link MutationCtx} as its first argument.\n     * @returns The wrapped mutation. Include this as an \\`export\\` to name it and make it accessible.\n     */\n    export const internalMutation = internalMutationGeneric;\n\n    /**\n     * Define an action in this Convex app's public API.\n     *\n     * An action is a function which can execute any JavaScript code, including non-deterministic\n     * code and code with side-effects, like calling third-party services.\n     * They can be run in Convex's JavaScript environment or in Node.js using the \"use node\" directive.\n     * They can interact with the database indirectly by calling queries and mutations using the {@link ActionCtx}.\n     *\n     * @param func - The action. It receives an {@link ActionCtx} as its first argument.\n     * @returns The wrapped action. Include this as an \\`export\\` to name it and make it accessible.\n     */\n    export const action = actionGeneric;\n\n    /**\n     * Define an action that is only accessible from other Convex functions (but not from the client).\n     *\n     * @param func - The function. It receives an {@link ActionCtx} as its first argument.\n     * @returns The wrapped function. Include this as an \\`export\\` to name it and make it accessible.\n     */\n    export const internalAction = internalActionGeneric;\n\n    /**\n     * Define an HTTP action.\n     *\n     * The wrapped function will be used to respond to HTTP requests received\n     * by a Convex deployment if the requests matches the path and method where\n     * this action is routed. Be sure to route your httpAction in \\`convex/http.js\\`.\n     *\n     * @param func - The function. It receives an {@link ActionCtx} as its first argument\n     * and a Fetch API \\`Request\\` object as its second.\n     * @returns The wrapped function. Import this function from \\`convex/http.js\\` and route it to hook it up.\n     */\n    export const httpAction = httpActionGeneric;\n    `;\n\n    return {\n      DTS: serverDTS,\n      JS: serverJS,\n    };\n  } else {\n    // Generate combined .ts file\n    const serverTS = `${header(\n      \"Generated utilities for implementing server-side Convex query and mutation functions.\",\n    )}\nimport {\n  actionGeneric,\n  httpActionGeneric,\n  queryGeneric,\n  mutationGeneric,\n  internalActionGeneric,\n  internalMutationGeneric,\n  internalQueryGeneric,\n} from \"convex/server\";\nimport type {\n  ActionBuilder,\n  HttpActionBuilder,\n  MutationBuilder,\n  QueryBuilder,\n  GenericActionCtx,\n  GenericMutationCtx,\n  GenericQueryCtx,\n  GenericDatabaseReader,\n  GenericDatabaseWriter,\n} from \"convex/server\";\nimport type { DataModel } from \"./dataModel.js\";\n\n/**\n * Define a query in this Convex app's public API.\n *\n * This function will be allowed to read your Convex database and will be accessible from the client.\n *\n * @param func - The query function. It receives a {@link QueryCtx} as its first argument.\n * @returns The wrapped query. Include this as an \\`export\\` to name it and make it accessible.\n */\nexport const query: QueryBuilder<DataModel, \"public\"> = queryGeneric;\n\n/**\n * Define a query that is only accessible from other Convex functions (but not from the client).\n *\n * This function will be allowed to read from your Convex database. It will not be accessible from the client.\n *\n * @param func - The query function. It receives a {@link QueryCtx} as its first argument.\n * @returns The wrapped query. Include this as an \\`export\\` to name it and make it accessible.\n */\nexport const internalQuery: QueryBuilder<DataModel, \"internal\"> = internalQueryGeneric;\n\n/**\n * Define a mutation in this Convex app's public API.\n *\n * This function will be allowed to modify your Convex database and will be accessible from the client.\n *\n * @param func - The mutation function. It receives a {@link MutationCtx} as its first argument.\n * @returns The wrapped mutation. Include this as an \\`export\\` to name it and make it accessible.\n */\nexport const mutation: MutationBuilder<DataModel, \"public\"> = mutationGeneric;\n\n/**\n * Define a mutation that is only accessible from other Convex functions (but not from the client).\n *\n * This function will be allowed to modify your Convex database. It will not be accessible from the client.\n *\n * @param func - The mutation function. It receives a {@link MutationCtx} as its first argument.\n * @returns The wrapped mutation. Include this as an \\`export\\` to name it and make it accessible.\n */\nexport const internalMutation: MutationBuilder<DataModel, \"internal\"> = internalMutationGeneric;\n\n/**\n * Define an action in this Convex app's public API.\n *\n * An action is a function which can execute any JavaScript code, including non-deterministic\n * code and code with side-effects, like calling third-party services.\n * They can be run in Convex's JavaScript environment or in Node.js using the \"use node\" directive.\n * They can interact with the database indirectly by calling queries and mutations using the {@link ActionCtx}.\n *\n * @param func - The action. It receives an {@link ActionCtx} as its first argument.\n * @returns The wrapped action. Include this as an \\`export\\` to name it and make it accessible.\n */\nexport const action: ActionBuilder<DataModel, \"public\"> = actionGeneric;\n\n/**\n * Define an action that is only accessible from other Convex functions (but not from the client).\n *\n * @param func - The function. It receives an {@link ActionCtx} as its first argument.\n * @returns The wrapped function. Include this as an \\`export\\` to name it and make it accessible.\n */\nexport const internalAction: ActionBuilder<DataModel, \"internal\"> = internalActionGeneric;\n\n/**\n * Define an HTTP action.\n *\n * The wrapped function will be used to respond to HTTP requests received\n * by a Convex deployment if the requests matches the path and method where\n * this action is routed. Be sure to route your httpAction in \\`convex/http.js\\`.\n *\n * @param func - The function. It receives an {@link ActionCtx} as its first argument\n * and a Fetch API \\`Request\\` object as its second.\n * @returns The wrapped function. Import this function from \\`convex/http.js\\` and route it to hook it up.\n */\nexport const httpAction: HttpActionBuilder = httpActionGeneric;\n\n/**\n * A set of services for use within Convex query functions.\n *\n * The query context is passed as the first argument to any Convex query\n * function run on the server.\n *\n * This differs from the {@link MutationCtx} because all of the services are\n * read-only.\n */\nexport type QueryCtx = GenericQueryCtx<DataModel>;\n\n/**\n * A set of services for use within Convex mutation functions.\n *\n * The mutation context is passed as the first argument to any Convex mutation\n * function run on the server.\n */\nexport type MutationCtx = GenericMutationCtx<DataModel>;\n\n/**\n * A set of services for use within Convex action functions.\n *\n * The action context is passed as the first argument to any Convex action\n * function run on the server.\n */\nexport type ActionCtx = GenericActionCtx<DataModel>;\n\n/**\n * An interface to read from the database within Convex query functions.\n *\n * The two entry points are {@link DatabaseReader.get}, which fetches a single\n * document by its {@link Id}, or {@link DatabaseReader.query}, which starts\n * building a query.\n */\nexport type DatabaseReader = GenericDatabaseReader<DataModel>;\n\n/**\n * An interface to read from and write to the database within Convex mutation\n * functions.\n *\n * Convex guarantees that all writes within a single mutation are\n * executed atomically, so you never have to worry about partial writes leaving\n * your data in an inconsistent state. See [the Convex Guide](https://docs.convex.dev/understanding/convex-fundamentals/functions#atomicity-and-optimistic-concurrency-control)\n * for the guarantees Convex provides your functions.\n */\nexport type DatabaseWriter = GenericDatabaseWriter<DataModel>;`;\n\n    return {\n      TS: serverTS,\n    };\n  }\n}\n", "export function tsconfigCodegen() {\n  return `{\n  /* This TypeScript project config describes the environment that\n   * Convex functions run in and is used to typecheck them.\n   * You can modify it, but some settings are required to use Convex.\n   */\n  \"compilerOptions\": {\n    /* These settings are not required by Convex and can be modified. */\n    \"allowJs\": true,\n    \"strict\": true,\n    \"moduleResolution\": \"Bundler\",\n    \"jsx\": \"react-jsx\",\n    \"skipLibCheck\": true,\n    \"allowSyntheticDefaultImports\": true,\n\n    /* These compiler options are required by Convex */\n    \"target\": \"ESNext\",\n    \"lib\": [\"ES2023\", \"dom\"],\n    \"forceConsistentCasingInFileNames\": true,\n    \"module\": \"ESNext\",\n    \"isolatedModules\": true,\n    \"noEmit\": true,\n  },\n  \"include\": [\"./**/*\"],\n  \"exclude\": [\"./_generated\"]\n}`;\n}\n", "import { chalkStderr } from \"chalk\";\nimport path from \"path\";\nimport { performance } from \"perf_hooks\";\nimport { Context } from \"../../bundler/context.js\";\nimport {\n  logError,\n  logFailure,\n  logMessage,\n  showSpinner,\n} from \"../../bundler/log.js\";\nimport * as Sentry from \"@sentry/node\";\nimport * as semver from \"semver\";\nimport { formatDuration, spawnAsync } from \"./utils/utils.js\";\nimport { readProjectConfig } from \"./config.js\";\nimport { WatchContext } from \"./watch.js\";\n\nexport type TypecheckResult = \"cantTypeCheck\" | \"success\" | \"typecheckFailed\";\n\nexport type TypeCheckMode = \"enable\" | \"try\" | \"disable\";\n\nexport type TypescriptCompiler = \"tsc\" | \"tsgo\";\n\nconst SLOW_TYPECHECK_THRESHOLD_MS = 10_000;\nconst SLOW_TYPECHECK_DOCS_URL =\n  \"https://docs.convex.dev/production/project-configuration#configuring-the-typescript-compiler\";\n\n/**\n * Resolves the TypeScript compiler to use based on CLI flag, config file, and default.\n * Precedence: CLI flag \u2192 config file \u2192 default \"tsc\"\n */\nexport async function resolveTypescriptCompiler(\n  ctx: Context,\n  cliOption?: TypescriptCompiler,\n): Promise<TypescriptCompiler> {\n  const { projectConfig } = await readProjectConfig(ctx);\n  return cliOption ?? projectConfig?.typescriptCompiler ?? \"tsc\";\n}\n\ntype TypecheckResultHandler = (\n  result: TypecheckResult,\n  logSpecificError?: () => void,\n  // If given, we run it to print out errors.\n  // We expect it to throw or resolve to \"success\"\n  // if a concurrent change invalidated the error result.\n  runOnError?: () => Promise<\"success\">,\n) => Promise<void>;\n\n/**\n * Conditionally run a typecheck function and interpret the result.\n *\n * If typeCheckMode === \"disable\", never run the typecheck function.\n * If typeCheckMode === \"enable\", run the typecheck and crash if typechecking\n * fails or we can't find tsc.\n * If typeCheckMode === \"try\", try and run the typecheck. crash if typechecking\n * fails but don't worry if tsc is missing and we can't run it.\n */\nexport async function typeCheckFunctionsInMode(\n  ctx: Context,\n  typeCheckMode: TypeCheckMode,\n  functionsDir: string,\n): Promise<void> {\n  if (typeCheckMode === \"disable\") {\n    return;\n  }\n  const typescriptCompiler = await resolveTypescriptCompiler(ctx);\n  const typecheckStart = performance.now();\n  await typeCheckFunctions(\n    ctx,\n    typescriptCompiler,\n    functionsDir,\n    async (result, logSpecificError, runOnError) => {\n      if (\n        (result === \"cantTypeCheck\" && typeCheckMode === \"enable\") ||\n        result === \"typecheckFailed\"\n      ) {\n        logSpecificError?.();\n        logError(\n          chalkStderr.gray(\n            \"To ignore failing typecheck, use `--typecheck=disable`.\",\n          ),\n        );\n        try {\n          const result = await runOnError?.();\n          // Concurrent change invalidated the error, don't fail\n          if (result === \"success\") {\n            return;\n          }\n        } catch {\n          // As expected, `runOnError` threw\n        }\n        await ctx.crash({\n          exitCode: 1,\n          errorType: \"invalid filesystem data\",\n          printedMessage: null,\n        });\n      }\n    },\n  );\n  maybeLogSlowTypecheckSuggestion(\n    ctx,\n    performance.now() - typecheckStart,\n    typescriptCompiler,\n  );\n}\n\n// Runs TypeScript compiler to typecheck Convex query and mutation functions.\nexport async function typeCheckFunctions(\n  ctx: Context,\n  typescriptCompiler: TypescriptCompiler,\n  functionsDir: string,\n  handleResult: TypecheckResultHandler,\n): Promise<void> {\n  const tsconfig = path.join(functionsDir, \"tsconfig.json\");\n  if (!ctx.fs.exists(tsconfig)) {\n    return handleResult(\"cantTypeCheck\", () => {\n      logError(\n        \"Found no convex/tsconfig.json to use to typecheck Convex functions, so skipping typecheck.\",\n      );\n      logError(\"Run `npx convex codegen --init` to create one.\");\n    });\n  }\n  await runTsc(\n    ctx,\n    typescriptCompiler,\n    [\"--project\", functionsDir],\n    handleResult,\n  );\n}\n\nasync function runTsc(\n  ctx: Context,\n  typescriptCompiler: TypescriptCompiler,\n  tscArgs: string[],\n  handleResult: TypecheckResultHandler,\n): Promise<void> {\n  // Check if tsc is even installed\n  const tscPath =\n    typescriptCompiler === \"tsgo\"\n      ? path.join(\n          \"node_modules\",\n          \"@typescript\",\n          \"native-preview\",\n          \"bin\",\n          \"tsgo.js\",\n        )\n      : path.join(\"node_modules\", \"typescript\", \"bin\", \"tsc\");\n  if (!ctx.fs.exists(tscPath)) {\n    return handleResult(\"cantTypeCheck\", () => {\n      logError(\n        chalkStderr.gray(\n          `No \\`${typescriptCompiler}\\` binary found, so skipping typecheck.`,\n        ),\n      );\n    });\n  }\n\n  // Check the TypeScript version matches the recommendation from Convex\n  const versionResult = await spawnAsync(ctx, process.execPath, [\n    tscPath,\n    \"--version\",\n  ]);\n\n  const version = versionResult.stdout.match(/Version (.*)/)?.[1] ?? null;\n  const hasOlderTypeScriptVersion = version && semver.lt(version, \"4.8.4\");\n\n  await runTscInner(ctx, tscPath, tscArgs, handleResult);\n\n  // Print this warning after any logs from running `tsc`\n  if (hasOlderTypeScriptVersion) {\n    logError(\n      chalkStderr.yellow(\n        \"Convex works best with TypeScript version 4.8.4 or newer -- npm i --save-dev typescript@latest to update.\",\n      ),\n    );\n  }\n}\n\nasync function runTscInner(\n  ctx: Context,\n  tscPath: string,\n  tscArgs: string[],\n  handleResult: TypecheckResultHandler,\n) {\n  // Run `tsc` once and have it print out the files it touched. This output won't\n  // be very useful if there's an error, but we'll run it again to get a nice\n  // user-facing error in this exceptional case.\n  // The `--listFiles` command prints out files touched on success or error.\n  const result = await spawnAsync(ctx, process.execPath, [\n    tscPath,\n    ...tscArgs,\n    \"--listFiles\",\n  ]);\n  if (result.status === null) {\n    return handleResult(\"typecheckFailed\", () => {\n      logFailure(`TypeScript typecheck timed out.`);\n      if (result.error) {\n        logError(chalkStderr.red(`${result.error.toString()}`));\n      }\n    });\n  }\n  // Okay, we may have failed `tsc` but at least it returned. Try to parse its\n  // output to discover which files it touched.\n  const filesTouched = result.stdout\n    .split(\"\\n\")\n    .map((s) => s.trim())\n    .filter((s) => s.length > 0);\n  let anyPathsFound = false;\n  for (const fileTouched of filesTouched) {\n    const absPath = path.resolve(fileTouched);\n    let st;\n    try {\n      st = ctx.fs.stat(absPath);\n      anyPathsFound = true;\n    } catch {\n      // Just move on if we have a bogus path from `tsc`. We'll log below if\n      // we fail to stat *any* of the paths emitted by `tsc`.\n      // TODO: Switch to using their JS API so we can get machine readable output.\n      continue;\n    }\n    ctx.fs.registerPath(absPath, st);\n  }\n  if (filesTouched.length > 0 && !anyPathsFound) {\n    const err = new Error(\n      `Failed to stat any files emitted by tsc (received ${filesTouched.length})`,\n    );\n    Sentry.captureException(err);\n  }\n\n  if (!result.error && result.status === 0) {\n    return handleResult(\"success\");\n  }\n\n  // This is the \"No inputs were found\", which is fine and we shouldn't\n  // report it to the user.\n  if (result.stdout.startsWith(\"error TS18003\")) {\n    return handleResult(\"success\");\n  }\n\n  // At this point we know that `tsc` failed. Rerun it without `--listFiles`\n  // and with stderr redirected to have it print out a nice error.\n  return handleResult(\n    \"typecheckFailed\",\n    () => {\n      logFailure(\"TypeScript typecheck via `tsc` failed.\");\n    },\n    async () => {\n      showSpinner(\"Collecting TypeScript errors\");\n      await spawnAsync(\n        ctx,\n        process.execPath,\n        [tscPath, ...tscArgs, \"--pretty\", \"true\"],\n        {\n          stdio: \"inherit\",\n        },\n      );\n      // If this passes, we had a concurrent file change that'll overlap with\n      // our observations in the first run. Invalidate our context's filesystem\n      // but allow the rest of the system to observe the success.\n      ctx.fs.invalidate();\n      return \"success\";\n    },\n  );\n}\n\nfunction maybeLogSlowTypecheckSuggestion(\n  ctx: Context,\n  durationMs: number,\n  typescriptCompiler: TypescriptCompiler,\n) {\n  if (!(ctx instanceof WatchContext)) {\n    return;\n  }\n  if (!ctx.isFirstPush) {\n    return;\n  }\n  if (typescriptCompiler === \"tsgo\") {\n    return;\n  }\n  if (durationMs <= SLOW_TYPECHECK_THRESHOLD_MS) {\n    return;\n  }\n  const formattedDuration = formatDuration(durationMs);\n  logMessage(\n    chalkStderr.gray(\n      `Typechecking took ${formattedDuration}. For faster iteration, consider enabling the TypeScript 7 compiler (tsgo) in your project configuration: ${SLOW_TYPECHECK_DOCS_URL}`,\n    ),\n  );\n}\n", "import chokidar from \"chokidar\";\nimport path from \"path\";\nimport { Observations, RecordingFs, WatchEvent } from \"../../bundler/fs.js\";\nimport { BigBrainAuth, Context, ErrorType } from \"../../bundler/context.js\";\nimport { logFailure } from \"../../bundler/log.js\";\nimport * as Sentry from \"@sentry/node\";\nimport { Ora } from \"ora\";\n\nexport class Watcher {\n  private watch: chokidar.FSWatcher;\n  private readyCb: Promise<void>;\n\n  private bufferedEvents: WatchEvent[];\n  private waiters: (() => void)[];\n\n  constructor(observations: Observations) {\n    this.bufferedEvents = [];\n    this.waiters = [];\n\n    const watch = chokidar.watch(observations.paths(), { persistent: true });\n    watch.on(\"all\", (eventName, eventPath) => {\n      const absPath = path.resolve(eventPath);\n      this.bufferedEvents.push({ name: eventName, absPath });\n      for (const waiter of drain(this.waiters)) {\n        waiter();\n      }\n    });\n    this.readyCb = new Promise<void>((resolve) => {\n      watch.on(\"ready\", () => resolve());\n    });\n    this.watch = watch;\n  }\n\n  update(observations: Observations) {\n    const watchedDirs = new Set(Object.keys(this.watch.getWatched()));\n    for (const newPath of observations.paths()) {\n      if (!this.isWatched(watchedDirs, newPath)) {\n        this.watch.add(newPath);\n      }\n    }\n  }\n\n  isWatched(watchedDirs: Set<string>, observedPath: string) {\n    // Walk over all of path's parents (inclusively) to see if any of them are in the watch set.\n    // This function assumes that Chokidar recursively watches all directories, which is\n    // definitely true on Mac with its FSEvents-based watcher.\n    // TODO (CX-2151): Verify this condition on Windows and Linux.\n    let curPath = observedPath;\n    while (true) {\n      const parsed = path.parse(curPath);\n\n      // TODO(CX-2152): Check to see if this condition for walking parents works on Windows.\n      if (parsed.dir === curPath) {\n        break;\n      }\n      if (watchedDirs.has(curPath)) {\n        return true;\n      }\n      curPath = parsed.dir;\n    }\n    return false;\n  }\n\n  async ready(): Promise<void> {\n    await this.readyCb;\n  }\n\n  async waitForEvent(): Promise<void> {\n    while (this.bufferedEvents.length === 0) {\n      const newEvent = new Promise<void>((resolve) => {\n        this.waiters.push(resolve);\n      });\n      await newEvent;\n    }\n  }\n\n  drainEvents(): WatchEvent[] {\n    return drain(this.bufferedEvents);\n  }\n\n  async close() {\n    await this.watch.close();\n  }\n}\nfunction drain<T>(l: T[]): T[] {\n  return l.splice(0, l.length);\n}\n\nexport class Crash extends Error {\n  errorType?: ErrorType;\n\n  constructor(errorType?: ErrorType, err?: any) {\n    super(err?.message);\n    if (errorType) {\n      this.errorType = errorType;\n    }\n  }\n}\n\nexport class WatchContext implements Context {\n  private _cleanupFns: Record<\n    string,\n    (exitCode: number, err?: any) => Promise<void>\n  > = {};\n  fs: RecordingFs;\n  deprecationMessagePrinted: boolean;\n  isFirstPush: boolean;\n  spinner: Ora | undefined;\n  private _bigBrainAuth: BigBrainAuth | null;\n\n  constructor(\n    traceEvents: boolean,\n    bigBrainAuth: BigBrainAuth | null,\n    isFirstPush: boolean,\n  ) {\n    this.fs = new RecordingFs(traceEvents);\n    this.deprecationMessagePrinted = false;\n    this.isFirstPush = isFirstPush;\n    this._bigBrainAuth = bigBrainAuth;\n  }\n\n  async crash(args: {\n    exitCode: number;\n    errorType?: ErrorType;\n    errForSentry?: any;\n    printedMessage: string | null;\n  }): Promise<never> {\n    if (args.errForSentry) {\n      Sentry.captureException(args.errForSentry);\n    }\n    if (args.printedMessage !== null) {\n      logFailure(args.printedMessage);\n    }\n    for (const fn of Object.values(this._cleanupFns)) {\n      await fn(args.exitCode, args.errForSentry);\n    }\n    // Okay to throw here. We've wrapped it in a Crash that we'll catch later.\n    // eslint-disable-next-line no-restricted-syntax\n    throw new Crash(args.errorType, args.errForSentry);\n  }\n\n  registerCleanup(fn: (exitCode: number, err?: any) => Promise<void>): string {\n    const handle = Math.random().toString(36).slice(2);\n    this._cleanupFns[handle] = fn;\n    return handle;\n  }\n\n  removeCleanup(handle: string) {\n    const value = this._cleanupFns[handle];\n    delete this._cleanupFns[handle];\n    return value ?? null;\n  }\n\n  bigBrainAuth(): BigBrainAuth | null {\n    return this._bigBrainAuth;\n  }\n\n  _updateBigBrainAuth(auth: BigBrainAuth | null): void {\n    this._bigBrainAuth = auth;\n  }\n}\n", "import { header } from \"./common.js\";\n\nexport function componentServerTS(isRoot: boolean): string {\n  const result = `\n  ${header(\n    \"Generated utilities for implementing server-side Convex query and mutation functions.\",\n  )}\n  import type {\n    ActionBuilder,\n    ${isRoot ? \"AnyComponents,\" : \"\"}\n    HttpActionBuilder,\n    MutationBuilder,\n    QueryBuilder,\n    GenericActionCtx,\n    GenericMutationCtx,\n    GenericQueryCtx,\n    GenericDatabaseReader,\n    GenericDatabaseWriter,\n  } from \"convex/server\";\n  import {\n    actionGeneric,\n    httpActionGeneric,\n    queryGeneric,\n    mutationGeneric,\n    internalActionGeneric,\n    internalMutationGeneric,\n    internalQueryGeneric,\n    ${isRoot ? \"componentsGeneric,\" : \"\"}\n  } from \"convex/server\";\n  import type { DataModel } from \"./dataModel.js\";\n\n  /**\n   * Define a query in this Convex app's public API.\n   *\n   * This function will be allowed to read your Convex database and will be accessible from the client.\n   *\n   * @param func - The query function. It receives a {@link QueryCtx} as its first argument.\n   * @returns The wrapped query. Include this as an \\`export\\` to name it and make it accessible.\n   */\n  export const query: QueryBuilder<DataModel, \"public\"> = queryGeneric;\n\n  /**\n   * Define a query that is only accessible from other Convex functions (but not from the client).\n   *\n   * This function will be allowed to read from your Convex database. It will not be accessible from the client.\n   *\n   * @param func - The query function. It receives a {@link QueryCtx} as its first argument.\n   * @returns The wrapped query. Include this as an \\`export\\` to name it and make it accessible.\n   */\n  export const internalQuery: QueryBuilder<DataModel, \"internal\"> = internalQueryGeneric;\n\n  /**\n   * Define a mutation in this Convex app's public API.\n   *\n   * This function will be allowed to modify your Convex database and will be accessible from the client.\n   *\n   * @param func - The mutation function. It receives a {@link MutationCtx} as its first argument.\n   * @returns The wrapped mutation. Include this as an \\`export\\` to name it and make it accessible.\n   */\n  export const mutation: MutationBuilder<DataModel, \"public\"> = mutationGeneric;\n\n  /**\n   * Define a mutation that is only accessible from other Convex functions (but not from the client).\n   *\n   * This function will be allowed to modify your Convex database. It will not be accessible from the client.\n   *\n   * @param func - The mutation function. It receives a {@link MutationCtx} as its first argument.\n   * @returns The wrapped mutation. Include this as an \\`export\\` to name it and make it accessible.\n   */\n  export const internalMutation: MutationBuilder<DataModel, \"internal\"> = internalMutationGeneric;\n\n  /**\n   * Define an action in this Convex app's public API.\n   *\n   * An action is a function which can execute any JavaScript code, including non-deterministic\n   * code and code with side-effects, like calling third-party services.\n   * They can be run in Convex's JavaScript environment or in Node.js using the \"use node\" directive.\n   * They can interact with the database indirectly by calling queries and mutations using the {@link ActionCtx}.\n   *\n   * @param func - The action. It receives an {@link ActionCtx} as its first argument.\n   * @returns The wrapped action. Include this as an \\`export\\` to name it and make it accessible.\n   */\n  export const action: ActionBuilder<DataModel, \"public\"> = actionGeneric;\n\n  /**\n   * Define an action that is only accessible from other Convex functions (but not from the client).\n   *\n   * @param func - The function. It receives an {@link ActionCtx} as its first argument.\n   * @returns The wrapped function. Include this as an \\`export\\` to name it and make it accessible.\n   */\n  export const internalAction: ActionBuilder<DataModel, \"internal\"> = internalActionGeneric;\n\n  /**\n   * Define an HTTP action.\n   *\n   * The wrapped function will be used to respond to HTTP requests received\n   * by a Convex deployment if the requests matches the path and method where\n   * this action is routed. Be sure to route your httpAction in \\`convex/http.js\\`.\n   *\n   * @param func - The function. It receives an {@link ActionCtx} as its first argument\n   * and a Fetch API \\`Request\\` object as its second.\n   * @returns The wrapped function. Import this function from \\`convex/http.js\\` and route it to hook it up.\n   */\n  export const httpAction: HttpActionBuilder = httpActionGeneric;\n\n  /**\n   * A set of services for use within Convex query functions.\n   *\n   * The query context is passed as the first argument to any Convex query\n   * function run on the server.\n   *\n   * If you're using code generation, use the \\`QueryCtx\\` type in \\`convex/_generated/server.d.ts\\` instead.\n   */\n  export type QueryCtx = GenericQueryCtx<DataModel>;\n\n  /**\n   * A set of services for use within Convex mutation functions.\n   *\n   * The mutation context is passed as the first argument to any Convex mutation\n   * function run on the server.\n   *\n   * If you're using code generation, use the \\`MutationCtx\\` type in \\`convex/_generated/server.d.ts\\` instead.\n   */\n  export type MutationCtx = GenericMutationCtx<DataModel>;\n\n  /**\n   * A set of services for use within Convex action functions.\n   *\n   * The action context is passed as the first argument to any Convex action\n   * function run on the server.\n   */\n  export type ActionCtx = GenericActionCtx<DataModel>;\n\n  /**\n   * An interface to read from the database within Convex query functions.\n   *\n   * The two entry points are {@link DatabaseReader.get}, which fetches a single\n   * document by its {@link Id}, or {@link DatabaseReader.query}, which starts\n   * building a query.\n   */\n  export type DatabaseReader = GenericDatabaseReader<DataModel>;\n\n  /**\n   * An interface to read from and write to the database within Convex mutation\n   * functions.\n   *\n   * Convex guarantees that all writes within a single mutation are\n   * executed atomically, so you never have to worry about partial writes leaving\n   * your data in an inconsistent state. See [the Convex Guide](https://docs.convex.dev/understanding/convex-fundamentals/functions#atomicity-and-optimistic-concurrency-control)\n   * for the guarantees Convex provides your functions.\n   */\n  export type DatabaseWriter = GenericDatabaseWriter<DataModel>;\n  ${\n    isRoot\n      ? `\n  /**\n   * Load the API for calling functions from this Convex deployment's components.\n   */\n  export const components: AnyComponents = componentsGeneric();`\n      : \"\"\n  }\n  `;\n  return result;\n}\n", "import path from \"path\";\nimport { Context } from \"../../bundler/context.js\";\nimport { entryPoints } from \"../../bundler/index.js\";\nimport {\n  ComponentDirectory,\n  toAbsolutePath,\n  toComponentDefinitionPath,\n  ComponentDefinitionPath,\n} from \"../lib/components/definition/directoryStructure.js\";\nimport { StartPushResponse } from \"../lib/deployApi/startPush.js\";\nimport { importPath, moduleIdentifier } from \"./api.js\";\nimport { apiComment, compareStrings, header } from \"./common.js\";\nimport {\n  ComponentExports,\n  EvaluatedComponentDefinition,\n} from \"../lib/deployApi/componentDefinition.js\";\nimport { Identifier, Reference } from \"../lib/deployApi/types.js\";\nimport { CanonicalizedModulePath } from \"../lib/deployApi/paths.js\";\nimport {\n  AnalyzedFunction,\n  AnalyzedModule,\n  Visibility,\n} from \"../lib/deployApi/modules.js\";\nimport { parseValidator, validatorToType } from \"./validator_helpers.js\";\n\nexport function componentApiJs() {\n  const lines = [];\n  lines.push(header(\"Generated `api` utility.\"));\n  lines.push(`\n    import { anyApi, componentsGeneric } from \"convex/server\";\n\n    ${apiComment(\"api\", undefined)}\n    export const api = anyApi;\n    export const internal = anyApi;\n    export const components = componentsGeneric();\n  `);\n  return lines.join(\"\\n\");\n}\n\nexport function rootComponentApiCJS() {\n  const lines = [];\n  lines.push(header(\"Generated `api` utility.\"));\n  lines.push(`const { anyApi } = require(\"convex/server\");`);\n  lines.push(`module.exports = {\n    api: anyApi,\n    internal: anyApi,\n  };`);\n  return lines.join(\"\\n\");\n}\n\nexport function componentApiStubDTS() {\n  const lines = [];\n  lines.push(header(\"Generated `api` utility.\"));\n  lines.push(`import type { AnyApi, AnyComponents } from \"convex/server\";`);\n  lines.push(`\n    export declare const api: AnyApi;\n    export declare const internal: AnyApi;\n    export declare const components: AnyComponents;\n  `);\n\n  return lines.join(\"\\n\");\n}\n\n// This is also used for root components\nexport function componentApiStubTS() {\n  const lines = [];\n  lines.push(header(\"Generated `api` utility.\"));\n  lines.push(`\n    import type { AnyApi, AnyComponents } from \"convex/server\";\n    import { anyApi, componentsGeneric } from \"convex/server\";\n\n    export const api: AnyApi = anyApi;\n    export const internal: AnyApi = anyApi;\n    export const components: AnyComponents = componentsGeneric();\n  `);\n  return lines.join(\"\\n\");\n}\n\nexport async function componentApiDTS(\n  ctx: Context,\n  startPush: StartPushResponse,\n  rootComponent: ComponentDirectory,\n  componentDirectory: ComponentDirectory,\n  componentsMap: Map<string, ComponentDirectory>,\n  opts: { staticApi: boolean; useComponentApiImports: boolean },\n) {\n  const definitionPath = toComponentDefinitionPath(\n    rootComponent,\n    componentDirectory,\n  );\n\n  const analysis = startPush.analysis[definitionPath];\n  if (!analysis) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: `No analysis found for component ${definitionPath} orig: ${definitionPath}\\nin\\n${Object.keys(startPush.analysis).toString()}`,\n    });\n  }\n\n  const lines = [];\n  lines.push(header(\"Generated `api` utility.\"));\n  let apiLines: AsyncGenerator<string>;\n  if (opts.staticApi) {\n    apiLines = codegenStaticApiObjects(ctx, analysis);\n  } else {\n    apiLines = codegenDynamicApiObjects(ctx, componentDirectory);\n  }\n  for await (const line of apiLines) {\n    lines.push(line);\n  }\n\n  lines.push(`\n  export declare const components: {`);\n  lines.push(\n    ...(await componentApiLines(\n      ctx,\n      startPush,\n      analysis,\n      rootComponent,\n      componentsMap,\n      opts,\n    )),\n  );\n  lines.push(\"};\");\n  return lines.join(\"\\n\");\n}\n\nasync function componentApiLines(\n  ctx: Context,\n  startPush: StartPushResponse,\n  analysis: EvaluatedComponentDefinition,\n  rootComponent: ComponentDirectory,\n  componentsMap: Map<string, ComponentDirectory>,\n  opts: { useComponentApiImports: boolean },\n): Promise<string[]> {\n  const lines: string[] = [];\n  for (const childComponent of analysis.definition.childComponents) {\n    if (opts.useComponentApiImports) {\n      const absolutePath = toAbsolutePath(\n        rootComponent,\n        childComponent.path as ComponentDefinitionPath,\n      );\n\n      let childComponentWithRelativePath = componentsMap?.get(absolutePath);\n      if (!childComponentWithRelativePath) {\n        return await ctx.crash({\n          exitCode: 1,\n          errorType: \"fatal\",\n          printedMessage: `Invalid child component directory: ${childComponent.path}`,\n        });\n      }\n\n      // If the user uses a different import specifier than the absolute path of the child component, use the import specifier.\n      const importSpecifier = childComponentWithRelativePath.importSpecifier;\n      let importPath;\n      // Don't trust relative specifiers\n      if (\n        importSpecifier &&\n        !importSpecifier.startsWith(\".\") &&\n        importSpecifier !== childComponent.path\n      ) {\n        importPath = importSpecifier;\n      } else {\n        importPath = `../${childComponent.path}`;\n      }\n      lines.push(\n        `  \"${childComponent.name}\": import(\"${importPath}/_generated/component.js\").ComponentApi<\"${childComponent.name}\">,`,\n      );\n    } else {\n      const childComponentAnalysis = startPush.analysis[childComponent.path];\n      if (!childComponentAnalysis) {\n        return await ctx.crash({\n          exitCode: 1,\n          errorType: \"fatal\",\n          printedMessage: `No analysis found for child component ${childComponent.path}`,\n        });\n      }\n      for await (const line of codegenExports(\n        ctx,\n        childComponent.name,\n        childComponentAnalysis,\n      )) {\n        lines.push(line);\n      }\n    }\n  }\n  return lines;\n}\n\nexport async function componentTS(\n  ctx: Context,\n  startPush: StartPushResponse,\n  rootComponent: ComponentDirectory,\n  componentDirectory: ComponentDirectory,\n) {\n  const definitionPath = toComponentDefinitionPath(\n    rootComponent,\n    componentDirectory,\n  );\n  const analysis = startPush.analysis[definitionPath];\n  if (!analysis) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: `No analysis found for component ${definitionPath} orig: ${definitionPath}\\nin\\n${Object.keys(startPush.analysis).toString()}`,\n    });\n  }\n\n  const lines = [];\n  lines.push(header(\"Generated `ComponentApi` utility.\"));\n  lines.push(`\n    import type { FunctionReference } from \"convex/server\";\n\n    /**\n    * A utility for referencing a Convex component's exposed API.\n    *\n    * Useful when expecting a parameter like \\`components.myComponent\\`.\n    * Usage:\n    * \\`\\`\\`ts\n    * async function myFunction(ctx: QueryCtx, component: ComponentApi) {\n    *   return ctx.runQuery(component.someFile.someQuery, { ...args });\n    * }\n    * \\`\\`\\`\n    */`);\n  lines.push(\n    `export type ComponentApi<Name extends string | undefined = string | undefined> = `,\n  );\n  for await (const line of codegenExport(\n    ctx,\n    analysis,\n    analysis.definition.exports,\n    \"Name\",\n  )) {\n    lines.push(line);\n  }\n  lines.push(`;`);\n  return lines.join(\"\\n\");\n}\n\nexport async function componentApiTSWithTypes(\n  ctx: Context,\n  startPush: StartPushResponse,\n  rootComponent: ComponentDirectory,\n  componentDirectory: ComponentDirectory,\n  componentsMap: Map<string, ComponentDirectory>,\n  opts: { staticApi: boolean; useComponentApiImports: boolean },\n) {\n  const definitionPath = toComponentDefinitionPath(\n    rootComponent,\n    componentDirectory,\n  );\n\n  const analysis = startPush.analysis[definitionPath];\n  if (!analysis) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: `No analysis found for component ${definitionPath} orig: ${definitionPath}\\nin\\n${Object.keys(startPush.analysis).toString()}`,\n    });\n  }\n\n  const lines = [];\n  lines.push(header(\"Generated `api` utility.\"));\n  let apiLines: AsyncGenerator<string>;\n  if (opts.staticApi) {\n    apiLines = codegenStaticApiObjectsTS(ctx, analysis);\n  } else {\n    apiLines = codegenDynamicApiObjectsTS(ctx, componentDirectory);\n  }\n  for await (const line of apiLines) {\n    lines.push(line);\n  }\n\n  // Generate components section\n  lines.push(`\n  export const components = componentsGeneric() as unknown as {`);\n  lines.push(\n    ...(await componentApiLines(\n      ctx,\n      startPush,\n      analysis,\n      rootComponent,\n      componentsMap,\n      opts,\n    )),\n  );\n  lines.push(\"};\");\n\n  return lines.join(\"\\n\");\n}\n\nasync function* codegenStaticApiObjects(\n  ctx: Context,\n  analysis: EvaluatedComponentDefinition,\n) {\n  yield `import type { FunctionReference } from \"convex/server\";`;\n  yield `import type { GenericId as Id } from \"convex/values\";`;\n\n  const apiTree = await buildApiTree(ctx, analysis.functions, {\n    kind: \"public\",\n  });\n  yield apiComment(\"api\", \"public\");\n  yield `export declare const api:`;\n  yield* codegenApiTree(ctx, apiTree);\n  yield \";\";\n\n  yield apiComment(\"internal\", \"internal\");\n  const internalTree = await buildApiTree(ctx, analysis.functions, {\n    kind: \"internal\",\n  });\n  yield `export declare const internal:`;\n  yield* codegenApiTree(ctx, internalTree);\n  yield \";\";\n}\n\nasync function* codegenStaticApiObjectsTS(\n  ctx: Context,\n  analysis: EvaluatedComponentDefinition,\n) {\n  yield `import type { FunctionReference } from \"convex/server\";`;\n  yield `import type { GenericId as Id } from \"convex/values\";`;\n  yield `import { anyApi, componentsGeneric } from \"convex/server\";`;\n\n  const apiTree = await buildApiTree(ctx, analysis.functions, {\n    kind: \"public\",\n  });\n  yield apiComment(\"api\", \"public\");\n  yield `export const api:`;\n  yield* codegenApiTree(ctx, apiTree);\n  yield \"= anyApi as any;\";\n\n  yield apiComment(\"internal\", \"internal\");\n  const internalTree = await buildApiTree(ctx, analysis.functions, {\n    kind: \"internal\",\n  });\n  yield `export const internal:`;\n  yield* codegenApiTree(ctx, internalTree);\n  yield \"= anyApi as any;\";\n}\n\nasync function* codegenDynamicApiObjects(\n  ctx: Context,\n  componentDirectory: ComponentDirectory,\n) {\n  const absModulePaths = await entryPoints(ctx, componentDirectory.path);\n  const modulePaths = absModulePaths\n    .map((p) => path.relative(componentDirectory.path, p))\n    .sort();\n  for (const modulePath of modulePaths) {\n    const ident = moduleIdentifier(modulePath);\n    const path = importPath(modulePath);\n    yield `import type * as ${ident} from \"../${path}.js\";`;\n  }\n  yield `\n    import type {\n      ApiFromModules,\n      FilterApi,\n      FunctionReference,\n    } from \"convex/server\";\n\n    declare const fullApi: ApiFromModules<{\n  `;\n  for (const modulePath of modulePaths) {\n    const ident = moduleIdentifier(modulePath);\n    const path = importPath(modulePath);\n    yield `  \"${path}\": typeof ${ident},`;\n  }\n  yield `}>;`;\n  yield `\n    ${apiComment(\"api\", \"public\")}\n    export declare const api: FilterApi<typeof fullApi, FunctionReference<any, \"public\">>;\n    ${apiComment(\"internal\", \"internal\")}\n    export declare const internal: FilterApi<typeof fullApi, FunctionReference<any, \"internal\">>;\n  `;\n}\n\nasync function* codegenDynamicApiObjectsTS(\n  ctx: Context,\n  componentDirectory: ComponentDirectory,\n) {\n  const absModulePaths = await entryPoints(ctx, componentDirectory.path);\n  const modulePaths = absModulePaths\n    .map((p) => path.relative(componentDirectory.path, p))\n    .sort();\n  for (const modulePath of modulePaths) {\n    const ident = moduleIdentifier(modulePath);\n    const path = importPath(modulePath);\n    yield `import type * as ${ident} from \"../${path}.js\";`;\n  }\n  yield `\n    import type {\n      ApiFromModules,\n      FilterApi,\n      FunctionReference,\n    } from \"convex/server\";\n    import { anyApi, componentsGeneric } from \"convex/server\";\n\n    const fullApi: ApiFromModules<{\n  `;\n  for (const modulePath of modulePaths) {\n    const ident = moduleIdentifier(modulePath);\n    const path = importPath(modulePath);\n    yield `  \"${path}\": typeof ${ident},`;\n  }\n  yield `}> = anyApi as any;`;\n  yield `\n    ${apiComment(\"api\", \"public\")}\n    export const api: FilterApi<typeof fullApi, FunctionReference<any, \"public\">> = anyApi as any;\n    ${apiComment(\"internal\", \"internal\")}\n    export const internal: FilterApi<typeof fullApi, FunctionReference<any, \"internal\">> = anyApi as any;\n  `;\n}\n\ninterface ApiTree {\n  [identifier: string]:\n    | { type: \"branch\"; branch: ApiTree }\n    | { type: \"leaf\"; leaf: AnalyzedFunction };\n}\n\nasync function buildApiTree(\n  ctx: Context,\n  functions: Record<CanonicalizedModulePath, AnalyzedModule>,\n  visibility: Visibility,\n): Promise<ApiTree> {\n  const root: ApiTree = {};\n  for (const [modulePath, module] of Object.entries(functions)) {\n    const p = importPath(modulePath);\n    if (p.startsWith(\"_deps/\")) {\n      continue;\n    }\n    for (const f of module.functions) {\n      if (f.visibility?.kind !== visibility.kind) {\n        continue;\n      }\n      let current = root;\n      for (const pathComponent of p.split(\"/\")) {\n        let next = current[pathComponent];\n        if (!next) {\n          next = { type: \"branch\", branch: {} };\n          current[pathComponent] = next;\n        }\n        if (next.type === \"leaf\") {\n          return await ctx.crash({\n            exitCode: 1,\n            errorType: \"fatal\",\n            printedMessage: `Ambiguous function name: ${f.name} in ${modulePath}`,\n          });\n        }\n        current = next.branch;\n      }\n      if (current[f.name]) {\n        return await ctx.crash({\n          exitCode: 1,\n          errorType: \"fatal\",\n          printedMessage: `Duplicate function name: ${f.name} in ${modulePath}`,\n        });\n      }\n      current[f.name] = { type: \"leaf\", leaf: f };\n    }\n  }\n  return root;\n}\n\nasync function* codegenApiTree(\n  ctx: Context,\n  tree: ApiTree,\n): AsyncGenerator<string> {\n  yield \"{\";\n  // Sort entries alphabetically for stable output\n  const sortedEntries = Object.entries(tree).sort(([a], [b]) =>\n    compareStrings(a, b),\n  );\n  for (const [identifier, subtree] of sortedEntries) {\n    if (subtree.type === \"branch\") {\n      yield `\"${identifier}\":`;\n      yield* codegenApiTree(ctx, subtree.branch);\n      yield \",\";\n    } else {\n      const visibility = subtree.leaf.visibility?.kind;\n      if (!visibility) {\n        return await ctx.crash({\n          exitCode: 1,\n          errorType: \"fatal\",\n          printedMessage: `Function ${subtree.leaf.name} has no visibility`,\n        });\n      }\n      const ref = await codegenFunctionReference(\n        ctx,\n        subtree.leaf,\n        visibility,\n        true,\n        undefined,\n      );\n      yield `\"${identifier}\": ${ref},`;\n    }\n  }\n  yield \"}\";\n}\n\nasync function* codegenExports(\n  ctx: Context,\n  name: Identifier,\n  analysis: EvaluatedComponentDefinition,\n): AsyncGenerator<string> {\n  yield `${name}: {`;\n  const exports = analysis.definition.exports.branch;\n  const entries = Array.from(exports).sort(([a], [b]) => compareStrings(a, b));\n  for (const [name, componentExport] of entries) {\n    yield `${name}:`;\n    yield* codegenExport(ctx, analysis, componentExport, undefined);\n    yield \",\";\n  }\n  yield \"},\";\n}\n\nasync function* codegenExport(\n  ctx: Context,\n  analysis: EvaluatedComponentDefinition,\n  componentExport: ComponentExports,\n  componentPath: string | undefined,\n): AsyncGenerator<string> {\n  if (componentExport.type === \"leaf\") {\n    yield await resolveFunctionReference(\n      ctx,\n      analysis,\n      componentExport.leaf,\n      \"internal\",\n      componentPath,\n    );\n  } else if (componentExport.type === \"branch\") {\n    yield \"{\";\n    const entries = Array.from(componentExport.branch).sort(([a], [b]) =>\n      compareStrings(a, b),\n    );\n    for (const [name, childExport] of entries) {\n      yield `${name}:`;\n      yield* codegenExport(ctx, analysis, childExport, componentPath);\n      yield \",\";\n    }\n    yield \"}\";\n  }\n}\n\nexport async function resolveFunctionReference(\n  ctx: Context,\n  analysis: EvaluatedComponentDefinition,\n  reference: Reference,\n  visibility: \"public\" | \"internal\",\n  componentPath: string | undefined,\n) {\n  if (!reference.startsWith(\"_reference/function/\")) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: `Invalid function reference: ${reference}`,\n    });\n  }\n  const udfPath = reference.slice(\"_reference/function/\".length);\n\n  const [modulePath, functionName] = udfPath.split(\":\");\n  const canonicalizedModulePath = canonicalizeModulePath(modulePath);\n\n  const analyzedModule = analysis.functions[canonicalizedModulePath];\n  if (!analyzedModule) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: `Module not found: ${modulePath}`,\n    });\n  }\n  const analyzedFunction = analyzedModule.functions.find(\n    (f) => f.name === functionName,\n  );\n  if (!analyzedFunction) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: `Function not found: ${functionName}`,\n    });\n  }\n  return await codegenFunctionReference(\n    ctx,\n    analyzedFunction,\n    visibility,\n    false,\n    componentPath,\n  );\n}\n\nasync function codegenFunctionReference(\n  ctx: Context,\n  analyzedFunction: AnalyzedFunction,\n  visibility: \"public\" | \"internal\",\n  useIdType: boolean,\n  componentPath: string | undefined,\n): Promise<string> {\n  // The server sends down `udfType` capitalized.\n  const udfType = analyzedFunction.udfType.toLowerCase();\n\n  let argsType = \"any\";\n  try {\n    const argsValidator = parseValidator(analyzedFunction.args);\n    if (argsValidator) {\n      if (argsValidator.type === \"object\" || argsValidator.type === \"any\") {\n        argsType = validatorToType(argsValidator, useIdType);\n      } else {\n        // eslint-disable-next-line no-restricted-syntax\n        throw new Error(\n          `Unexpected argument validator type: ${argsValidator.type}`,\n        );\n      }\n    }\n  } catch (e) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: `Invalid function args: ${analyzedFunction.args}`,\n      errForSentry: e,\n    });\n  }\n\n  let returnsType = \"any\";\n  try {\n    const returnsValidator = parseValidator(analyzedFunction.returns);\n    if (returnsValidator) {\n      returnsType = validatorToType(returnsValidator, useIdType);\n    }\n  } catch (e) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: `Invalid function returns: ${analyzedFunction.returns}`,\n      errForSentry: e,\n    });\n  }\n\n  return `FunctionReference<\"${udfType}\", \"${visibility}\", ${argsType}, ${returnsType}${componentPath ? `, ${componentPath}` : \"\"}>`;\n}\n\nfunction canonicalizeModulePath(modulePath: string): CanonicalizedModulePath {\n  if (!modulePath.endsWith(\".js\")) {\n    return modulePath + \".js\";\n  }\n  return modulePath;\n}\n", "import path from \"path\";\nimport { Context } from \"../../bundler/context.js\";\nimport { Config } from \"./config.js\";\n\nexport async function handleDebugBundlePath(\n  ctx: Context,\n  debugBundleDir: string,\n  config: Config,\n) {\n  if (!ctx.fs.exists(debugBundleDir)) {\n    ctx.fs.mkdir(debugBundleDir);\n  } else if (!ctx.fs.stat(debugBundleDir).isDirectory()) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: `Path \\`${debugBundleDir}\\` is not a directory. Please choose an empty directory for \\`--debug-bundle-path\\`.`,\n    });\n  } else if (ctx.fs.listDir(debugBundleDir).length !== 0) {\n    await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: `Directory \\`${debugBundleDir}\\` is not empty. Please remove it or choose an empty directory for \\`--debug-bundle-path\\`.`,\n    });\n  }\n  ctx.fs.writeUtf8File(\n    path.join(debugBundleDir, \"fullConfig.json\"),\n    JSON.stringify(config),\n  );\n\n  for (const moduleInfo of config.modules) {\n    const trimmedPath = moduleInfo.path.endsWith(\".js\")\n      ? moduleInfo.path.slice(0, moduleInfo.path.length - \".js\".length)\n      : moduleInfo.path;\n    const environmentDir = path.join(debugBundleDir, moduleInfo.environment);\n    ctx.fs.mkdir(path.dirname(path.join(environmentDir, `${trimmedPath}.js`)), {\n      allowExisting: true,\n      recursive: true,\n    });\n    ctx.fs.writeUtf8File(\n      path.join(environmentDir, `${trimmedPath}.js`),\n      moduleInfo.source,\n    );\n    if (moduleInfo.sourceMap !== undefined) {\n      ctx.fs.writeUtf8File(\n        path.join(environmentDir, `${trimmedPath}.js.map`),\n        moduleInfo.sourceMap,\n      );\n    }\n  }\n}\n", "import crypto from \"node:crypto\";\n\ntype TraceId = string; // u128\ntype SpanId = string; // u64\n\ntype Nanoseconds = bigint;\n\n// base64 URL encoded little endian\ntype SerializedNanoseconds = string;\n\nexport class Reporter {\n  spans: CompletedSpan[] = [];\n\n  emit(span: CompletedSpan) {\n    this.spans.push(span);\n  }\n}\n\ntype EventRecord = {\n  name: string;\n  timestampUnixNs: Nanoseconds;\n  properties: Record<string, string>;\n};\n\nexport class Span {\n  private properties: Record<string, string> = {};\n  private events: EventRecord[] = [];\n\n  private constructor(\n    private reporter: Reporter | undefined,\n    private traceId: TraceId,\n    private parentId: SpanId,\n    private spanId: SpanId,\n    private beginTimeUnixNs: Nanoseconds,\n    private name: string,\n  ) {}\n\n  static noop() {\n    return new Span(\n      undefined,\n      randomTraceId(),\n      randomSpanId(),\n      randomSpanId(),\n      unixTimeNs(),\n      \"\",\n    );\n  }\n\n  static root(reporter: Reporter, name: string) {\n    const traceId = randomTraceId();\n    const parentId = emptySpanId();\n    const spanId = randomSpanId();\n    const beginTimeUnixNs = unixTimeNs();\n    return new Span(reporter, traceId, parentId, spanId, beginTimeUnixNs, name);\n  }\n\n  setProperty(key: string, value: string) {\n    this.properties[key] = value;\n  }\n\n  childSpan(name: string): Span {\n    const spanId = randomSpanId();\n    const beginTimeUnixNs = unixTimeNs();\n    return new Span(\n      this.reporter,\n      this.traceId,\n      this.spanId,\n      spanId,\n      beginTimeUnixNs,\n      name,\n    );\n  }\n\n  enter<T>(name: string, f: (span: Span) => T): T {\n    const childSpan = this.childSpan(name);\n    try {\n      const result = f(childSpan);\n      childSpan.end();\n      return result;\n    } finally {\n      childSpan.end();\n    }\n  }\n\n  async enterAsync<T>(name: string, f: (span: Span) => Promise<T>): Promise<T> {\n    const childSpan = this.childSpan(name);\n    try {\n      return await f(childSpan);\n    } finally {\n      childSpan.end();\n    }\n  }\n\n  end() {\n    const endTimeUnixNs = unixTimeNs();\n    const durationNs = endTimeUnixNs - this.beginTimeUnixNs;\n    const span = {\n      traceId: this.traceId,\n      parentId: this.parentId,\n      spanId: this.spanId,\n      beginTimeUnixNs: serializeNanoseconds(this.beginTimeUnixNs),\n      durationNs: serializeNanoseconds(durationNs),\n      name: this.name,\n      properties: this.properties,\n      events: this.events.map((event) => ({\n        name: event.name,\n        timestampUnixNs: serializeNanoseconds(event.timestampUnixNs),\n        properties: event.properties,\n      })),\n    };\n    if (this.reporter) {\n      this.reporter.emit(span);\n    }\n  }\n\n  encodeW3CTraceparent() {\n    // Encode traceId and spanId as a big-endian hex strings.\n    const traceIdBytes = Buffer.from(this.traceId, \"base64url\");\n    const traceIdBigInt =\n      traceIdBytes.readBigUInt64LE(0) |\n      (traceIdBytes.readBigUInt64LE(8) << 64n);\n    const traceIdHex = traceIdBigInt.toString(16).padStart(32, \"0\");\n\n    const spanIdBytes = Buffer.from(this.spanId, \"base64url\");\n    const spanIdBigInt = spanIdBytes.readBigUInt64LE(0);\n    const spanIdHex = spanIdBigInt.toString(16).padStart(16, \"0\");\n\n    return `00-${traceIdHex}-${spanIdHex}-01`;\n  }\n}\n\nfunction randomTraceId() {\n  return Buffer.from(crypto.getRandomValues(new Uint8Array(16))).toString(\n    \"base64url\",\n  );\n}\n\nfunction emptySpanId() {\n  return Buffer.from(new Uint8Array(8)).toString(\"base64url\");\n}\n\nfunction randomSpanId() {\n  return Buffer.from(crypto.getRandomValues(new Uint8Array(8))).toString(\n    \"base64url\",\n  );\n}\n\nfunction unixTimeNs() {\n  // Note that as a unix nanosecond timestamp, performance.timeOrigin * 1000 is less than\n  // Number.MAX_SAFE_INTEGER, so multiply by 1000 to convert to microseconds, round, convert\n  // to bigint, and then multiply again to convert to nanoseconds.\n  return (\n    BigInt(Math.floor(performance.timeOrigin * 1000)) * 1000n +\n    BigInt(Math.floor(performance.now() * 1000)) * 1000n\n  );\n}\n\nfunction serializeNanoseconds(ns: Nanoseconds): SerializedNanoseconds {\n  const buffer = Buffer.alloc(8);\n  buffer.writeBigUInt64LE(ns, 0);\n  return buffer.toString(\"base64url\");\n}\n\ntype CompletedSpan = {\n  traceId: TraceId;\n  parentId: SpanId;\n  spanId: SpanId;\n  beginTimeUnixNs: SerializedNanoseconds;\n  durationNs: SerializedNanoseconds;\n  name: string;\n  properties: Record<string, string>;\n  events: SerializedEventRecord[];\n};\n\ntype SerializedEventRecord = {\n  name: string;\n  timestampUnixNs: SerializedNanoseconds;\n  properties: Record<string, string>;\n};\n", "import { chalkStderr } from \"chalk\";\nimport { Context } from \"../../bundler/context.js\";\nimport {\n  changeSpinner,\n  logFinishedStep,\n  logMessage,\n  stopSpinner,\n} from \"../../bundler/log.js\";\nimport { formatIndex } from \"./indexes.js\";\nimport { promptYesNo } from \"./utils/prompts.js\";\nimport { Span } from \"./tracing.js\";\nimport { StartPushRequest } from \"./deployApi/startPush.js\";\nimport { evaluatePush } from \"./deploy2.js\";\nimport { DeveloperIndexConfig, IndexDiff } from \"./deployApi/finishPush.js\";\nimport { runSystemQuery } from \"./run.js\";\n\nconst MIN_DOCUMENTS_FOR_INDEX_DELETE_WARNING = 100_000;\n\nexport async function checkForLargeIndexDeletion({\n  ctx,\n  span,\n  request,\n  options,\n  askForConfirmation,\n}: {\n  ctx: Context;\n  span: Span;\n  request: StartPushRequest;\n  options: {\n    url: string;\n    deploymentName: string | null;\n    adminKey: string;\n  };\n  askForConfirmation: boolean;\n}): Promise<void> {\n  changeSpinner(\"Verifying that the push isn\u2019t deleting large indexes...\");\n\n  const { schemaChange } = await evaluatePush(ctx, span, request, options);\n\n  const indexDiffs = schemaChange.indexDiffs ?? {};\n  const deletedIndexes = Object.entries(indexDiffs).flatMap(\n    ([componentDefinitionPath, indexDiff]) =>\n      indexDiff.removed_indexes.map((index) => ({\n        componentDefinitionPath,\n        index,\n      })),\n  );\n\n  if (deletedIndexes.length === 0) {\n    logFinishedStep(\"No indexes are deleted by this push\");\n    return;\n  }\n\n  const tablesWithDeletedIndexes = [\n    ...new Set(\n      deletedIndexes.map(\n        ({ componentDefinitionPath, index }) =>\n          `${componentDefinitionPath}:${getTableName(index)}`,\n      ),\n    ),\n  ].map((str) => {\n    const [componentDefinitionPath, table] = str.split(\":\");\n    return { componentDefinitionPath, table };\n  });\n  changeSpinner(\"Checking whether the deleted indexes are on large tables...\");\n  const documentCounts = await Promise.all(\n    tablesWithDeletedIndexes.map(\n      async ({ componentDefinitionPath, table }) => ({\n        componentDefinitionPath,\n        table,\n        count: (await runSystemQuery(ctx, {\n          deploymentUrl: options.url,\n          adminKey: options.adminKey,\n          functionName: \"_system/cli/tableSize:default\",\n          componentPath: componentDefinitionPath,\n          args: { tableName: table },\n        })) as number,\n      }),\n    ),\n  );\n  const deletedIndexesWithDocumentsCount = deletedIndexes.map(\n    ({ componentDefinitionPath, index }) => ({\n      componentDefinitionPath,\n      index,\n      count: documentCounts.find(\n        (count) =>\n          count.table === getTableName(index) &&\n          count.componentDefinitionPath === componentDefinitionPath,\n      )!.count,\n    }),\n  );\n\n  const minDocumentsForWarning = minDocumentsForIndexDeleteWarning();\n  if (\n    !deletedIndexesWithDocumentsCount.some(\n      ({ count }) => count >= minDocumentsForWarning,\n    )\n  ) {\n    logFinishedStep(\"No large indexes are deleted by this push\");\n    return;\n  }\n\n  logMessage(`\u26A0\uFE0F  This code push will ${chalkStderr.bold(\"delete\")} the following ${deletedIndexesWithDocumentsCount.length === 1 ? \"index\" : \"indexes\"}\nfrom your production deployment (${options.url}):\n\n${deletedIndexesWithDocumentsCount\n  .map(({ componentDefinitionPath, index, count }) =>\n    formatDeletedIndex({\n      componentDefinitionPath,\n      index,\n      indexDiff: indexDiffs[componentDefinitionPath],\n      documentsCount: count,\n      minDocumentsForWarning,\n    }),\n  )\n  .join(\"\\n\")}\n\nThe documents that are in the index won\u2019t be deleted, but the index will need\nto be backfilled again if you want to restore it later.\n`);\n\n  if (!askForConfirmation) {\n    logFinishedStep(\n      \"Proceeding with push since --allow-deleting-large-indexes is set\",\n    );\n    return;\n  }\n\n  if (!process.stdin.isTTY) {\n    return ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: `To confirm the push:\n\u2022 run the deploy command in an ${chalkStderr.bold(\"interactive terminal\")}\n\u2022 or run the deploy command with the ${chalkStderr.bold(\"--allow-deleting-large-indexes\")} flag`,\n    });\n  }\n\n  stopSpinner();\n  if (\n    !(await promptYesNo(ctx, {\n      message: `Delete ${deletedIndexesWithDocumentsCount.length === 1 ? \"this index\" : \"these indexes\"}?`,\n      default: false,\n    }))\n  ) {\n    return ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: `Canceling push`,\n    });\n  }\n\n  logFinishedStep(\"Proceeding with push.\");\n}\n\nfunction formatDeletedIndex({\n  componentDefinitionPath,\n  index,\n  indexDiff,\n  documentsCount,\n  minDocumentsForWarning,\n}: {\n  componentDefinitionPath: string;\n  index: DeveloperIndexConfig;\n  indexDiff: IndexDiff;\n  documentsCount: number;\n  minDocumentsForWarning: number;\n}) {\n  const componentNameFormatted =\n    componentDefinitionPath !== \"\"\n      ? `${chalkStderr.gray(componentDefinitionPath)}:`\n      : \"\";\n\n  const documentsCountFormatted =\n    documentsCount >= minDocumentsForWarning\n      ? `  ${chalkStderr.yellowBright(`\u26A0\uFE0F  ${documentsCount.toLocaleString()} documents`)}`\n      : `  ${documentsCount.toLocaleString()} ${documentsCount === 1 ? \"document\" : \"documents\"}`;\n\n  const replacedBy = indexDiff.added_indexes.find((i) => i.name === index.name);\n  const replacedByFormatted = replacedBy\n    ? `\\n   ${chalkStderr.green(\"\u2192 replaced by:\")} ${formatIndex(replacedBy)}`\n    : \"\";\n\n  return (\n    \"\u26D4 \" +\n    componentNameFormatted +\n    formatIndex(index) +\n    documentsCountFormatted +\n    replacedByFormatted\n  );\n}\n\nfunction getTableName(index: DeveloperIndexConfig) {\n  const [tableName, _indexName] = index.name.split(\".\");\n  return tableName;\n}\n\nfunction minDocumentsForIndexDeleteWarning(): number {\n  const envValue = process.env.CONVEX_MIN_DOCUMENTS_FOR_INDEX_DELETE_WARNING;\n  if (envValue !== undefined) {\n    const parsed = parseInt(envValue, 10);\n    if (!isNaN(parsed)) {\n      return parsed;\n    }\n  }\n  return MIN_DOCUMENTS_FOR_INDEX_DELETE_WARNING;\n}\n", "import { chalkStderr } from \"chalk\";\nimport { OneoffCtx } from \"../../bundler/context.js\";\nimport {\n  logError,\n  logFinishedStep,\n  logMessage,\n  logWarning,\n  showSpinner,\n  showSpinnerIfSlow,\n  stopSpinner,\n} from \"../../bundler/log.js\";\nimport { runPush } from \"./components.js\";\nimport { performance } from \"perf_hooks\";\nimport path from \"path\";\nimport { LogManager, LogMode, watchLogs } from \"./logs.js\";\nimport { PushOptions } from \"./components.js\";\nimport {\n  formatDuration,\n  getCurrentTimeString,\n  spawnAsync,\n  waitForever,\n  waitUntilCalled,\n} from \"./utils/utils.js\";\nimport { Crash, WatchContext, Watcher } from \"./watch.js\";\nimport { runFunctionAndLog, subscribe } from \"./run.js\";\nimport { Value } from \"../../values/index.js\";\nimport { DeploymentType } from \"./api.js\";\nimport { readProjectConfig, getAuthKitConfig } from \"./config.js\";\nimport {\n  syncAuthKitConfigAfterPush,\n  ensureAuthKitProvisionedBeforeBuild,\n} from \"./workos/workos.js\";\n\nexport async function devAgainstDeployment(\n  ctx: OneoffCtx,\n  credentials: {\n    url: string;\n    adminKey: string;\n    deploymentName: string | null;\n    deploymentType?: DeploymentType;\n  },\n  devOptions: {\n    verbose: boolean;\n    typecheck: \"enable\" | \"try\" | \"disable\";\n    typecheckComponents: boolean;\n    codegen: boolean;\n    once: boolean;\n    untilSuccess: boolean;\n    run?:\n      | { kind: \"function\"; name: string; component?: string | undefined }\n      | { kind: \"shell\"; command: string }\n      | undefined;\n    tailLogs: LogMode;\n    traceEvents: boolean;\n    debugBundlePath?: string | undefined;\n    debugNodeApis: boolean;\n    liveComponentSources: boolean;\n    pushAllModules: boolean;\n  },\n) {\n  const logManager = new LogManager(devOptions.tailLogs);\n\n  // Pre-flight check: Ensure AuthKit is provisioned before starting dev\n  const { projectConfig } = await readProjectConfig(ctx);\n  const authKitConfig = await getAuthKitConfig(ctx, projectConfig);\n\n  if (authKitConfig && credentials.deploymentName) {\n    // Only provision for cloud deployments (dev/preview/prod)\n    // Skip for local and anonymous deployments\n    const deploymentType = credentials.deploymentType;\n    if (\n      deploymentType === \"dev\" ||\n      deploymentType === \"preview\" ||\n      deploymentType === \"prod\"\n    ) {\n      await ensureAuthKitProvisionedBeforeBuild(\n        ctx,\n        credentials.deploymentName,\n        { deploymentUrl: credentials.url, adminKey: credentials.adminKey },\n        deploymentType,\n      );\n    }\n  }\n\n  const promises = [];\n  if (devOptions.tailLogs !== \"disable\") {\n    promises.push(\n      watchLogs(ctx, credentials.url, credentials.adminKey, \"stderr\", {\n        logManager,\n        success: false,\n      }),\n    );\n  }\n\n  promises.push(\n    watchAndPush(\n      ctx,\n      {\n        ...credentials,\n        verbose: devOptions.verbose,\n        dryRun: false,\n        typecheck: devOptions.typecheck,\n        typecheckComponents: devOptions.typecheckComponents,\n        debug: false,\n        debugBundlePath: devOptions.debugBundlePath,\n        debugNodeApis: devOptions.debugNodeApis,\n        codegen: devOptions.codegen,\n        liveComponentSources: devOptions.liveComponentSources,\n        pushAllModules: devOptions.pushAllModules,\n        logManager, // Pass logManager to control logs during deploy\n        largeIndexDeletionCheck: \"no verification\", // `convex dev` can\u2019t push to prod\n      },\n      devOptions,\n    ),\n  );\n  await Promise.race(promises);\n  await ctx.flushAndExit(0);\n}\n\nexport async function watchAndPush(\n  outerCtx: OneoffCtx,\n  options: PushOptions,\n  cmdOptions: {\n    run?:\n      | { kind: \"function\"; name: string; component?: string | undefined }\n      | { kind: \"shell\"; command: string }\n      | undefined;\n    once: boolean;\n    untilSuccess: boolean;\n    traceEvents: boolean;\n  },\n) {\n  const watch: { watcher: Watcher | undefined } = { watcher: undefined };\n  const authKitCache: { lastAppliedConfig: string | undefined } = {\n    lastAppliedConfig: undefined,\n  };\n  let numFailures = 0;\n  let ran = false;\n  let pushed = false;\n  let tableNameTriggeringRetry;\n  let shouldRetryOnDeploymentEnvVarChange;\n  let isFirstPush = true; // Track if this is the first push in the session\n\n  while (true) {\n    const start = performance.now();\n    tableNameTriggeringRetry = null;\n    shouldRetryOnDeploymentEnvVarChange = false;\n\n    const ctx = new WatchContext(\n      cmdOptions.traceEvents,\n      outerCtx.bigBrainAuth(),\n      isFirstPush,\n    );\n    options.logManager?.beginDeploy();\n    showSpinner(\"Preparing Convex functions...\");\n    try {\n      await runPush(ctx, options);\n      const end = performance.now();\n      // NOTE: If `runPush` throws, `endDeploy` will not be called.\n      // This allows you to see the output from the failed deploy without\n      // logs getting in the way.\n      options.logManager?.endDeploy();\n      numFailures = 0;\n      logFinishedStep(\n        `${getCurrentTimeString()} Convex functions ready! (${formatDuration(\n          end - start,\n        )})`,\n      );\n\n      // Sync AuthKit configuration if it has changed\n      const { projectConfig } = await readProjectConfig(ctx);\n      const authKitConfig = await getAuthKitConfig(ctx, projectConfig);\n\n      // Check if config has changed by comparing stringified versions\n      const currentConfigString = authKitConfig\n        ? JSON.stringify(authKitConfig)\n        : undefined;\n\n      // Skip sync on first push since ensureAuthKitProvisionedBeforeBuild already configured WorkOS\n      if (\n        !isFirstPush &&\n        currentConfigString !== authKitCache.lastAppliedConfig\n      ) {\n        // Config has changed, sync it\n        await syncAuthKitConfigAfterPush(ctx, projectConfig, {\n          deploymentUrl: options.url,\n          adminKey: options.adminKey,\n        });\n      }\n\n      // Always update cache after push (even if we skipped sync)\n      authKitCache.lastAppliedConfig = currentConfigString;\n      isFirstPush = false;\n      if (cmdOptions.run !== undefined && !ran) {\n        switch (cmdOptions.run.kind) {\n          case \"function\":\n            await runFunctionInDev(\n              ctx,\n              options,\n              cmdOptions.run.name,\n              cmdOptions.run.component,\n            );\n            break;\n          case \"shell\":\n            try {\n              await spawnAsync(ctx, cmdOptions.run.command, [], {\n                stdio: \"inherit\",\n                shell: true,\n              });\n            } catch (e) {\n              // `spawnAsync` throws an error like `{ status: 1, error: Error }`\n              // when the command fails.\n              const errorMessage =\n                e === null || e === undefined\n                  ? null\n                  : (e as any).error instanceof Error\n                    ? ((e as any).error.message ?? null)\n                    : null;\n              const printedMessage = `Failed to run command \\`${cmdOptions.run.command}\\`: ${errorMessage ?? \"Unknown error\"}`;\n              // Don't return this since it'll bypass the `catch` below.\n              await ctx.crash({\n                exitCode: 1,\n                errorType: \"fatal\",\n                printedMessage,\n              });\n            }\n            break;\n          default: {\n            cmdOptions.run satisfies never;\n            // Don't return this since it'll bypass the `catch` below.\n            await ctx.crash({\n              exitCode: 1,\n              errorType: \"fatal\",\n              printedMessage: `Unexpected arguments for --run`,\n              errForSentry: `Unexpected arguments for --run: ${JSON.stringify(\n                cmdOptions.run,\n              )}`,\n            });\n          }\n        }\n        ran = true;\n      }\n      pushed = true;\n    } catch (e: any) {\n      // Crash the app on unexpected errors.\n      if (!(e instanceof Crash) || !e.errorType) {\n        // eslint-disable-next-line no-restricted-syntax\n        throw e;\n      }\n      if (e.errorType === \"fatal\") {\n        break;\n      }\n      // Retry after an exponential backoff if we hit a transient error.\n      if (e.errorType === \"transient\" || e.errorType === \"already handled\") {\n        const delay = nextBackoff(numFailures);\n        numFailures += 1;\n        if (e.errorType === \"transient\") {\n          logWarning(\n            chalkStderr.yellow(\n              `Failed due to network error, retrying in ${formatDuration(\n                delay,\n              )}...`,\n            ),\n          );\n        }\n        await new Promise((resolve) => setTimeout(resolve, delay));\n        continue;\n      }\n\n      // Fall through if we had a filesystem-based error.\n      // TODO(sarah): Replace this with `logError`.\n      // eslint-disable-next-line no-console\n      console.assert(\n        e.errorType === \"invalid filesystem data\" ||\n          e.errorType === \"invalid filesystem or env vars\" ||\n          e.errorType[\"invalid filesystem or db data\"] !== undefined,\n      );\n      if (e.errorType === \"invalid filesystem or env vars\") {\n        shouldRetryOnDeploymentEnvVarChange = true;\n      } else if (\n        e.errorType !== \"invalid filesystem data\" &&\n        e.errorType[\"invalid filesystem or db data\"] !== undefined\n      ) {\n        tableNameTriggeringRetry = e.errorType[\"invalid filesystem or db data\"];\n      }\n      if (cmdOptions.once) {\n        await outerCtx.flushAndExit(1, e.errorType);\n      }\n      // Make sure that we don't spin if this push failed\n      // in any edge cases that didn't call `logFailure`\n      // before throwing.\n      stopSpinner();\n    }\n    if (cmdOptions.once) {\n      return;\n    }\n    if (pushed && cmdOptions.untilSuccess) {\n      return;\n    }\n    const fileSystemWatch = getFileSystemWatch(ctx, watch, cmdOptions);\n    const tableWatch = getTableWatch(\n      ctx,\n      options,\n      tableNameTriggeringRetry?.tableName ?? null,\n      tableNameTriggeringRetry?.componentPath,\n    );\n    const envVarWatch = getDeplymentEnvVarWatch(\n      ctx,\n      options,\n      shouldRetryOnDeploymentEnvVarChange,\n    );\n    await Promise.race([\n      fileSystemWatch.watch(),\n      tableWatch.watch(),\n      envVarWatch.watch(),\n    ]);\n    fileSystemWatch.stop();\n    void tableWatch.stop();\n    void envVarWatch.stop();\n  }\n}\n\nasync function runFunctionInDev(\n  ctx: WatchContext,\n  credentials: {\n    url: string;\n    adminKey: string;\n  },\n  functionName: string,\n  componentPath: string | undefined,\n) {\n  await runFunctionAndLog(ctx, {\n    deploymentUrl: credentials.url,\n    adminKey: credentials.adminKey,\n    functionName,\n    argsString: \"{}\",\n    componentPath,\n    callbacks: {\n      onSuccess: () => {\n        logFinishedStep(`Finished running function \"${functionName}\"`);\n      },\n    },\n  });\n}\n\nfunction getTableWatch(\n  ctx: WatchContext,\n  credentials: {\n    url: string;\n    adminKey: string;\n  },\n  tableName: string | null,\n  componentPath: string | undefined,\n) {\n  return getFunctionWatch(ctx, {\n    deploymentUrl: credentials.url,\n    adminKey: credentials.adminKey,\n    parsedFunctionName: \"_system/cli/queryTable\",\n    getArgs: () => (tableName !== null ? { tableName } : null),\n    componentPath,\n  });\n}\n\nfunction getDeplymentEnvVarWatch(\n  ctx: WatchContext,\n  credentials: {\n    url: string;\n    adminKey: string;\n  },\n  shouldRetryOnDeploymentEnvVarChange: boolean,\n) {\n  return getFunctionWatch(ctx, {\n    deploymentUrl: credentials.url,\n    adminKey: credentials.adminKey,\n    parsedFunctionName: \"_system/cli/queryEnvironmentVariables\",\n    getArgs: () => (shouldRetryOnDeploymentEnvVarChange ? {} : null),\n    componentPath: undefined,\n  });\n}\n\nfunction getFunctionWatch(\n  ctx: WatchContext,\n  args: {\n    deploymentUrl: string;\n    adminKey: string;\n    parsedFunctionName: string;\n    getArgs: () => Record<string, Value> | null;\n    componentPath: string | undefined;\n  },\n) {\n  const [stopPromise, stop] = waitUntilCalled();\n  return {\n    watch: async () => {\n      const functionArgs = args.getArgs();\n      if (functionArgs === null) {\n        return waitForever();\n      }\n      let changes = 0;\n      return subscribe(ctx, {\n        deploymentUrl: args.deploymentUrl,\n        adminKey: args.adminKey,\n        parsedFunctionName: args.parsedFunctionName,\n        parsedFunctionArgs: functionArgs,\n        componentPath: args.componentPath,\n        until: stopPromise,\n        callbacks: {\n          onChange: () => {\n            changes++;\n            // First bump is just the initial results reporting\n            if (changes > 1) {\n              stop();\n            }\n          },\n        },\n      });\n    },\n    stop: () => {\n      stop();\n    },\n  };\n}\n\nfunction getFileSystemWatch(\n  ctx: WatchContext,\n  watch: { watcher: Watcher | undefined },\n  cmdOptions: { traceEvents: boolean },\n) {\n  let hasStopped = false;\n  return {\n    watch: async () => {\n      const observations = ctx.fs.finalize();\n      if (observations === \"invalidated\") {\n        logMessage(\"Filesystem changed during push, retrying...\");\n        return;\n      }\n      // Initialize the watcher if we haven't done it already. Chokidar expects to have a\n      // nonempty watch set at initialization, so we can't do it before running our first\n      // push.\n      if (!watch.watcher) {\n        watch.watcher = new Watcher(observations);\n        await showSpinnerIfSlow(\n          \"Preparing to watch files...\",\n          500,\n          async () => {\n            await watch.watcher!.ready();\n          },\n        );\n        stopSpinner();\n      }\n      // Watch new directories if needed.\n      watch.watcher.update(observations);\n\n      // Process events until we find one that overlaps with our previous observations.\n      let anyChanges = false;\n      do {\n        await watch.watcher.waitForEvent();\n        if (hasStopped) {\n          return;\n        }\n        for (const event of watch.watcher.drainEvents()) {\n          if (cmdOptions.traceEvents) {\n            logMessage(\n              \"Processing\",\n              event.name,\n              path.relative(\"\", event.absPath),\n            );\n          }\n          const result = observations.overlaps(event);\n          if (result.overlaps) {\n            const relPath = path.relative(\"\", event.absPath);\n            if (cmdOptions.traceEvents) {\n              logMessage(`${relPath} ${result.reason}, rebuilding...`);\n            }\n            anyChanges = true;\n            break;\n          }\n        }\n      } while (!anyChanges);\n\n      // Wait for the filesystem to quiesce before starting a new push. It's okay to\n      // drop filesystem events at this stage since we're already committed to doing\n      // a push and resubscribing based on that push's observations.\n      let deadline = performance.now() + quiescenceDelay;\n      while (true) {\n        const now = performance.now();\n        if (now >= deadline) {\n          break;\n        }\n        const remaining = deadline - now;\n        if (cmdOptions.traceEvents) {\n          logMessage(`Waiting for ${formatDuration(remaining)} to quiesce...`);\n        }\n        const remainingWait = new Promise<\"timeout\">((resolve) =>\n          setTimeout(() => resolve(\"timeout\"), deadline - now),\n        );\n        const result = await Promise.race([\n          remainingWait,\n          watch.watcher.waitForEvent().then<\"newEvents\">(() => \"newEvents\"),\n        ]);\n        if (result === \"newEvents\") {\n          for (const event of watch.watcher.drainEvents()) {\n            const result = observations.overlaps(event);\n            // Delay another `quiescenceDelay` since we had an overlapping event.\n            if (result.overlaps) {\n              if (cmdOptions.traceEvents) {\n                logMessage(\n                  `Received an overlapping event at ${event.absPath}, delaying push.`,\n                );\n              }\n              deadline = performance.now() + quiescenceDelay;\n            }\n          }\n        } else {\n          // Let the check above `break` from the loop if we're past our deadlne.\n          if (result !== \"timeout\") {\n            logError(\n              \"Assertion failed: Unexpected result from watcher: \" + result,\n            );\n          }\n        }\n      }\n    },\n    stop: () => {\n      hasStopped = true;\n    },\n  };\n}\n\nconst initialBackoff = 500;\nconst maxBackoff = 16000;\nconst quiescenceDelay = 500;\n\nexport function nextBackoff(prevFailures: number): number {\n  const baseBackoff = initialBackoff * Math.pow(2, prevFailures);\n  const actualBackoff = Math.min(baseBackoff, maxBackoff);\n  const jitter = actualBackoff * (Math.random() - 0.5);\n  return actualBackoff + jitter;\n}\n", "import { Context } from \"../../bundler/context.js\";\nimport { logMessage, logOutput, logWarning } from \"../../bundler/log.js\";\nimport { nextBackoff } from \"./dev.js\";\n// eslint-disable-next-line no-restricted-imports -- chalk used for writing to stdout\nimport chalk, { chalkStderr } from \"chalk\";\nimport { stripVTControlCharacters } from \"node:util\";\nimport { format } from \"node:util\";\nimport { deploymentFetch } from \"./utils/utils.js\";\nimport { FunctionExecution } from \"./apiTypes.js\";\n\nexport type LogMode = \"always\" | \"pause-on-deploy\" | \"disable\";\n\nexport class LogManager {\n  private paused: boolean = false;\n\n  constructor(private mode: LogMode) {}\n\n  async waitForUnpaused() {\n    while (this.paused) {\n      await new Promise((resolve) => setTimeout(resolve, 100));\n    }\n  }\n\n  beginDeploy() {\n    if (this.mode === \"pause-on-deploy\") {\n      this.paused = true;\n    }\n  }\n\n  endDeploy() {\n    if (this.mode === \"pause-on-deploy\") {\n      this.paused = false;\n    }\n  }\n}\n\nconst MAX_UDF_STREAM_FAILURE_COUNT = 5;\n\ntype LogDestination = \"stdout\" | \"stderr\";\n\nexport async function logsForDeployment(\n  ctx: Context,\n  credentials: {\n    url: string;\n    adminKey: string;\n  },\n  options: {\n    success: boolean;\n    history: number;\n    jsonl: boolean;\n    deploymentNotice: string;\n  },\n) {\n  logMessage(chalkStderr.yellow(`Watching logs${options.deploymentNotice}...`));\n  await watchLogs(ctx, credentials.url, credentials.adminKey, \"stdout\", {\n    history: options.history,\n    success: options.success,\n    jsonl: options.jsonl,\n  });\n}\n\nexport async function watchLogs(\n  ctx: Context,\n  url: string,\n  adminKey: string,\n  dest: LogDestination,\n  options?: {\n    success: boolean;\n    history?: number | boolean;\n    jsonl?: boolean;\n    logManager?: LogManager;\n  },\n) {\n  let numFailures = 0;\n  let isFirst = true;\n  let cursorMs = 0;\n\n  // Select the appropriate chalk instance and write function based on destination\n  const chalkInstance = dest === \"stdout\" ? chalk : chalkStderr;\n  const write = (s: string) => logToDestination(dest, s);\n\n  for (;;) {\n    try {\n      const { entries, newCursor } = await pollUdfLog(\n        ctx,\n        cursorMs,\n        url,\n        adminKey,\n      );\n      cursorMs = newCursor;\n      numFailures = 0;\n\n      // Delay printing logs until the log manager is unpaused.\n      await options?.logManager?.waitForUnpaused();\n\n      // The first execution, we just want to fetch the current head cursor so we don't send stale\n      // logs to the client.\n      if (isFirst) {\n        isFirst = false;\n        if (\n          options?.history === true ||\n          (typeof options?.history === \"number\" && options?.history > 0)\n        ) {\n          const entriesSlice =\n            options?.history === true\n              ? entries\n              : entries.slice(entries.length - options?.history);\n          processLogs(\n            entriesSlice,\n            write,\n            options?.success,\n            chalkInstance,\n            options?.jsonl,\n          );\n        }\n      } else {\n        processLogs(\n          entries,\n          write,\n          options?.success === true,\n          chalkInstance,\n          options?.jsonl,\n        );\n      }\n    } catch {\n      numFailures += 1;\n    }\n    // Handle backoff\n    if (numFailures > 0) {\n      const backoff = nextBackoff(numFailures);\n\n      // If we exceed a threshold number of failures, warn the user and display backoff.\n      if (numFailures > MAX_UDF_STREAM_FAILURE_COUNT) {\n        logWarning(\n          `Convex [WARN] Failed to fetch logs. Waiting ${backoff}ms before next retry.`,\n        );\n      }\n      await new Promise((resolve) => {\n        setTimeout(() => resolve(null), backoff);\n      });\n    }\n  }\n}\n\ntype UdfType = \"Query\" | \"Mutation\" | \"Action\" | \"HttpAction\";\n\ntype StructuredLogLine = {\n  messages: string[];\n  level: \"LOG\" | \"DEBUG\" | \"INFO\" | \"WARN\" | \"ERROR\";\n  timestamp: number;\n  isTruncated: boolean;\n};\ntype LogLine = string | StructuredLogLine;\n\nasync function pollUdfLog(\n  ctx: Context,\n  cursor: number,\n  url: string,\n  adminKey: string,\n): Promise<{ entries: FunctionExecution[]; newCursor: number }> {\n  const fetch = deploymentFetch(ctx, {\n    deploymentUrl: url,\n    adminKey,\n  });\n  const response = await fetch(`/api/stream_function_logs?cursor=${cursor}`, {\n    method: \"GET\",\n  });\n  return await response.json();\n}\n\nconst prefixForSource = (udfType: UdfType): string => {\n  return udfType.charAt(0);\n};\n\nfunction processLogs(\n  rawLogs: FunctionExecution[],\n  write: (message: string) => void,\n  shouldShowSuccessLogs: boolean,\n  chalkInstance: typeof chalk,\n  jsonl?: boolean,\n) {\n  if (jsonl) {\n    for (let i = 0; i < rawLogs.length; i++) {\n      const log = rawLogs[i];\n      write(JSON.stringify(log));\n    }\n    return;\n  }\n\n  for (let i = 0; i < rawLogs.length; i++) {\n    const log = rawLogs[i];\n    if (log.logLines) {\n      const id = log.identifier;\n      const udfType = log.udfType;\n      const timestampMs = log.timestamp * 1000;\n      const executionTimeMs =\n        \"executionTime\" in log ? log.executionTime * 1000 : NaN;\n\n      for (let j = 0; j < log.logLines.length; j++) {\n        const formatted = formatLogLineMessage(\n          \"info\",\n          timestampMs,\n          udfType,\n          id,\n          log.logLines[j],\n          chalkInstance,\n        );\n        write(formatted);\n      }\n\n      if (\"error\" in log && log.error) {\n        const formatted = formatLogLineMessage(\n          \"error\",\n          timestampMs,\n          udfType,\n          id,\n          log.error!,\n          chalkInstance,\n        );\n        write(formatted);\n      } else if (log.kind === \"Completion\" && shouldShowSuccessLogs) {\n        const formatted = chalkInstance.green(\n          formatFunctionExecutionMessage(\n            timestampMs,\n            udfType,\n            id,\n            executionTimeMs,\n          ),\n        );\n        write(formatted);\n      }\n    }\n  }\n}\n\nexport function formatFunctionExecutionMessage(\n  timestampMs: number,\n  udfType: UdfType,\n  udfPath: string,\n  executionTimeMs: number,\n): string {\n  return `${prefixLog(timestampMs, udfType, udfPath)} Function executed in ${Math.ceil(executionTimeMs)} ms`;\n}\n\nexport function formatLogLineMessage(\n  type: \"info\" | \"error\",\n  timestampMs: number,\n  udfType: UdfType,\n  udfPath: string,\n  message: LogLine,\n  chalkInstance: typeof chalk = chalk,\n): string {\n  const prefix = prefixForSource(udfType);\n  if (typeof message === \"string\") {\n    if (type === \"info\") {\n      const match = message.match(/^\\[.*?\\] /);\n      if (match === null) {\n        return chalkInstance.red(\n          `[CONVEX ${prefix}(${udfPath})] Could not parse console.log`,\n        );\n      }\n      const level = message.slice(1, match[0].length - 2);\n      const args = message.slice(match[0].length);\n      return `${chalkInstance.cyan(`${prefixLog(timestampMs, udfType, udfPath)} [${level}]`)} ${format(args)}`;\n    } else {\n      return chalkInstance.red(\n        `${prefixLog(timestampMs, udfType, udfPath)} ${message}`,\n      );\n    }\n  } else {\n    const level = message.level;\n    const formattedMessage = `${message.messages.join(\" \")}${message.isTruncated ? \" (truncated due to length)\" : \"\"}`;\n    return `${chalkInstance.cyan(\n      `${prefixLog(message.timestamp, udfType, udfPath)} [${level}]`,\n    )} ${formattedMessage}`;\n  }\n}\n\nfunction logToDestination(dest: LogDestination, s: string) {\n  switch (dest) {\n    case \"stdout\":\n      logOutput(s);\n      break;\n    case \"stderr\":\n      logMessage(s);\n      break;\n  }\n}\n\nfunction prefixLog(timestampMs: number, udfType: UdfType, udfPath: string) {\n  const prefix = prefixForSource(udfType);\n  const localizedTimestamp = new Date(timestampMs).toLocaleString();\n\n  return `${localizedTimestamp} [CONVEX ${prefix}(${udfPath})]`;\n}\n\nexport function formatLogsAsText(\n  rawLogs: FunctionExecution[],\n  shouldShowSuccessLogs: boolean = false,\n): string {\n  const lines: string[] = [];\n  const write = (message: string) =>\n    lines.push(stripVTControlCharacters(message));\n  processLogs(rawLogs, write, shouldShowSuccessLogs, chalk);\n  return lines.join(\"\\n\");\n}\n", "import { chalkStderr } from \"chalk\";\nimport {\n  waitUntilCalled,\n  deploymentFetch,\n  logAndHandleFetchError,\n} from \"./utils/utils.js\";\nimport { Context } from \"../../bundler/context.js\";\nimport {\n  logFailure,\n  showSpinner,\n  logFinishedStep,\n  logError,\n  stopSpinner,\n  changeSpinner,\n} from \"../../bundler/log.js\";\nimport { subscribe } from \"./run.js\";\nimport { nodeFs } from \"../../bundler/fs.js\";\nimport path from \"path\";\nimport { Readable } from \"stream\";\nimport { stringifyValueForError } from \"../../values/value.js\";\n\nexport async function exportFromDeployment(\n  ctx: Context,\n  options: {\n    deploymentUrl: string;\n    adminKey: string;\n    path: string;\n    includeFileStorage?: boolean;\n    deploymentNotice: string;\n    snapshotExportDashboardLink: string | undefined;\n  },\n) {\n  const includeStorage = !!options.includeFileStorage;\n  const {\n    deploymentUrl,\n    adminKey,\n    path: inputPath,\n    deploymentNotice,\n    snapshotExportDashboardLink,\n  } = options;\n\n  showSpinner(`Creating snapshot export${deploymentNotice}`);\n\n  const snapshotExportState = await startSnapshotExport(ctx, {\n    includeStorage,\n    inputPath,\n    adminKey,\n    deploymentUrl,\n  });\n\n  switch (snapshotExportState.state) {\n    case \"completed\":\n      stopSpinner();\n      logFinishedStep(\n        `Created snapshot export at timestamp ${snapshotExportState.start_ts}`,\n      );\n      if (snapshotExportDashboardLink !== undefined) {\n        logFinishedStep(\n          `Export is available at ${snapshotExportDashboardLink}`,\n        );\n      }\n      break;\n    case \"requested\":\n    case \"in_progress\": {\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: `WARNING: Export is continuing to run on the server.`,\n      });\n    }\n    case \"failed\": {\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: `Export failed. Please try again later or contact support@convex.dev for help.`,\n      });\n    }\n    default: {\n      snapshotExportState satisfies never;\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: `unknown error: unexpected state ${stringifyValueForError(snapshotExportState as any)}`,\n        errForSentry: `unexpected snapshot export state ${(snapshotExportState as any).state}`,\n      });\n    }\n  }\n\n  showSpinner(`Downloading snapshot export to ${chalkStderr.bold(inputPath)}`);\n  const { filePath } = await downloadSnapshotExport(ctx, {\n    snapshotExportTs: snapshotExportState.start_ts,\n    inputPath,\n    adminKey,\n    deploymentUrl,\n  });\n  stopSpinner();\n  logFinishedStep(\n    `Downloaded snapshot export to ${chalkStderr.bold(filePath)}`,\n  );\n}\n\ntype SnapshotExportState =\n  | { state: \"requested\" }\n  | { state: \"in_progress\" }\n  | { state: \"failed\" }\n  | {\n      state: \"completed\";\n      complete_ts: bigint;\n      start_ts: bigint;\n      zip_object_key: string;\n    };\n\nasync function waitForStableExportState(\n  ctx: Context,\n  deploymentUrl: string,\n  adminKey: string,\n): Promise<SnapshotExportState> {\n  const [donePromise, onDone] = waitUntilCalled();\n  let snapshotExportState: SnapshotExportState;\n  await subscribe(ctx, {\n    deploymentUrl,\n    adminKey,\n    parsedFunctionName: \"_system/cli/exports:getLatest\",\n    parsedFunctionArgs: {},\n    componentPath: undefined,\n    until: donePromise,\n    callbacks: {\n      onChange: (value: any) => {\n        // NOTE: `value` would only be `null` if there has never been an export\n        // requested.\n        snapshotExportState = value;\n        switch (snapshotExportState.state) {\n          case \"requested\":\n          case \"in_progress\":\n            // Not a stable state.\n            break;\n          case \"completed\":\n          case \"failed\":\n            onDone();\n            break;\n          default: {\n            snapshotExportState satisfies never;\n            onDone();\n          }\n        }\n      },\n    },\n  });\n  return snapshotExportState!;\n}\n\nexport async function startSnapshotExport(\n  ctx: Context,\n  args: {\n    includeStorage: boolean;\n    inputPath: string;\n    adminKey: string;\n    deploymentUrl: string;\n  },\n) {\n  const fetch = deploymentFetch(ctx, {\n    deploymentUrl: args.deploymentUrl,\n    adminKey: args.adminKey,\n  });\n  try {\n    await fetch(\n      `/api/export/request/zip?includeStorage=${args.includeStorage}`,\n      {\n        method: \"POST\",\n      },\n    );\n  } catch (e) {\n    return await logAndHandleFetchError(ctx, e);\n  }\n\n  const snapshotExportState = await waitForStableExportState(\n    ctx,\n    args.deploymentUrl,\n    args.adminKey,\n  );\n  return snapshotExportState;\n}\n\nexport async function downloadSnapshotExport(\n  ctx: Context,\n  args: {\n    snapshotExportTs: bigint;\n    inputPath: string;\n    adminKey: string;\n    deploymentUrl: string;\n  },\n): Promise<{ filePath: string }> {\n  const inputPath = args.inputPath;\n  const exportUrl = `/api/export/zip/${args.snapshotExportTs.toString()}`;\n  const fetch = deploymentFetch(ctx, {\n    deploymentUrl: args.deploymentUrl,\n    adminKey: args.adminKey,\n  });\n  let response: Response;\n  try {\n    response = await fetch(exportUrl, {\n      method: \"GET\",\n    });\n  } catch (e) {\n    return await logAndHandleFetchError(ctx, e);\n  }\n\n  let filePath;\n  if (ctx.fs.exists(inputPath)) {\n    const st = ctx.fs.stat(inputPath);\n    if (st.isDirectory()) {\n      const contentDisposition =\n        response.headers.get(\"content-disposition\") ?? \"\";\n      let filename = `snapshot_${args.snapshotExportTs.toString()}.zip`;\n      if (contentDisposition.startsWith(\"attachment; filename=\")) {\n        filename = contentDisposition.slice(\"attachment; filename=\".length);\n      }\n      filePath = path.join(inputPath, filename);\n    } else {\n      // TODO(sarah) -- if this is called elsewhere, I'd like to catch the error + potentially\n      // have different logging\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"invalid filesystem data\",\n        printedMessage: `Error: Path ${chalkStderr.bold(inputPath)} already exists.`,\n      });\n    }\n  } else {\n    filePath = inputPath;\n  }\n  changeSpinner(`Downloading snapshot export to ${chalkStderr.bold(filePath)}`);\n\n  try {\n    await nodeFs.writeFileStream(\n      filePath,\n      Readable.fromWeb(response.body! as any),\n    );\n  } catch (e) {\n    logFailure(`Exporting data failed`);\n    logError(chalkStderr.red(e));\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: `Exporting data failed: ${chalkStderr.red(e)}`,\n    });\n  }\n  return { filePath };\n}\n", "import { chalkStderr } from \"chalk\";\nimport {\n  formatSize,\n  waitUntilCalled,\n  deploymentFetch,\n  logAndHandleFetchError,\n} from \"./utils/utils.js\";\nimport { Context } from \"../../bundler/context.js\";\nimport {\n  logFailure,\n  showSpinner,\n  logFinishedStep,\n  logWarning,\n  logMessage,\n  stopSpinner,\n  changeSpinner,\n} from \"../../bundler/log.js\";\nimport path from \"path\";\nimport { subscribe } from \"./run.js\";\nimport { ConvexHttpClient } from \"../../browser/http_client.js\";\nimport { makeFunctionReference } from \"../../server/index.js\";\nimport { promptYesNo } from \"./utils/prompts.js\";\n\n// Backend has minimum chunk size of 5MiB except for the last chunk,\n// so we use 5MiB as highWaterMark which makes fs.ReadStream[asyncIterator]\n// output 5MiB chunks before the last one. This value can be overridden by\n// setting `CONVEX_IMPORT_CHUNK_SIZE` (bytes) in the environment.\nconst DEFAULT_CHUNK_SIZE = 5 * 1024 * 1024;\nconst ENV_CHUNK_SIZE = process.env.CONVEX_IMPORT_CHUNK_SIZE\n  ? parseInt(process.env.CONVEX_IMPORT_CHUNK_SIZE, 10)\n  : undefined;\n\nexport async function importIntoDeployment(\n  ctx: Context,\n  filePath: string,\n  options: {\n    deploymentUrl: string;\n    adminKey: string;\n    deploymentNotice: string;\n    snapshotImportDashboardLink: string | undefined;\n    table?: string;\n    format?: \"csv\" | \"jsonLines\" | \"jsonArray\" | \"zip\";\n    replace?: boolean;\n    append?: boolean;\n    replaceAll?: boolean;\n    yes?: boolean;\n    component?: string;\n  },\n) {\n  if (!ctx.fs.exists(filePath)) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"invalid filesystem data\",\n      printedMessage: `Error: Path ${chalkStderr.bold(filePath)} does not exist.`,\n    });\n  }\n\n  const format = await determineFormat(ctx, filePath, options.format ?? null);\n  const tableName = options.table ?? null;\n  if (tableName === null) {\n    if (format !== \"zip\") {\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: `Error: The \\`--table\\` option is required for format ${format}`,\n      });\n    }\n  } else {\n    if (format === \"zip\") {\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: `Error: The \\`--table\\` option is not allowed for format ${format}`,\n      });\n    }\n  }\n\n  const convexClient = new ConvexHttpClient(options.deploymentUrl);\n  convexClient.setAdminAuth(options.adminKey);\n  const existingImports = await convexClient.query(\n    makeFunctionReference<\"query\", Record<string, never>, Array<unknown>>(\n      \"_system/cli/queryImport:list\",\n    ),\n    {},\n  );\n  const ongoingImports = existingImports.filter(\n    (i) => (i as any).state.state === \"in_progress\",\n  );\n  if (ongoingImports.length > 0) {\n    await askToConfirmImportWithExistingImports(\n      ctx,\n      options.snapshotImportDashboardLink,\n      options.yes,\n    );\n  }\n\n  const fileStats = ctx.fs.stat(filePath);\n  showSpinner(`Importing ${filePath} (${formatSize(fileStats.size)})`);\n\n  let mode = \"requireEmpty\";\n  if (options.append) {\n    mode = \"append\";\n  } else if (options.replace) {\n    mode = \"replace\";\n  } else if (options.replaceAll) {\n    mode = \"replaceAll\";\n  }\n  const importArgs = {\n    tableName: tableName === null ? undefined : tableName,\n    componentPath: options.component,\n    mode,\n    format,\n  };\n  const tableNotice = tableName\n    ? ` to table \"${chalkStderr.bold(tableName)}\"`\n    : \"\";\n  const onFailure = async () => {\n    logFailure(\n      `Importing data from \"${chalkStderr.bold(\n        filePath,\n      )}\"${tableNotice}${options.deploymentNotice} failed`,\n    );\n  };\n  const importId = await uploadForImport(ctx, {\n    deploymentUrl: options.deploymentUrl,\n    adminKey: options.adminKey,\n    filePath,\n    importArgs,\n    onImportFailed: onFailure,\n  });\n  changeSpinner(\"Parsing uploaded data\");\n  const onProgress = (\n    _ctx: Context,\n    state: InProgressImportState,\n    checkpointCount: number,\n  ) => {\n    stopSpinner();\n    while ((state.checkpoint_messages?.length ?? 0) > checkpointCount) {\n      logFinishedStep(state.checkpoint_messages![checkpointCount]);\n      checkpointCount += 1;\n    }\n    showSpinner(state.progress_message ?? \"Importing\");\n    return checkpointCount;\n  };\n  while (true) {\n    const snapshotImportState = await waitForStableImportState(ctx, {\n      importId,\n      deploymentUrl: options.deploymentUrl,\n      adminKey: options.adminKey,\n      onProgress,\n    });\n    switch (snapshotImportState.state) {\n      case \"completed\":\n        logFinishedStep(\n          `Added ${snapshotImportState.num_rows_written} documents${tableNotice}${options.deploymentNotice}.`,\n        );\n        return;\n      case \"failed\":\n        return await ctx.crash({\n          exitCode: 1,\n          errorType: \"fatal\",\n          printedMessage: `Importing data from \"${chalkStderr.bold(\n            filePath,\n          )}\"${tableNotice}${options.deploymentNotice} failed\\n\\n${chalkStderr.red(snapshotImportState.error_message)}`,\n        });\n      case \"waiting_for_confirmation\": {\n        // Clear spinner state so we can log and prompt without clobbering lines.\n        stopSpinner();\n        await askToConfirmImport(\n          ctx,\n          snapshotImportState.message_to_confirm,\n          snapshotImportState.require_manual_confirmation,\n          options.yes,\n        );\n        showSpinner(`Importing`);\n        await confirmImport(ctx, {\n          importId,\n          adminKey: options.adminKey,\n          deploymentUrl: options.deploymentUrl,\n          onError: async () => {\n            logFailure(\n              `Importing data from \"${chalkStderr.bold(\n                filePath,\n              )}\"${tableNotice}${options.deploymentNotice} failed`,\n            );\n          },\n        });\n        // Now we have kicked off the rest of the import, go around the loop again.\n        break;\n      }\n      case \"uploaded\": {\n        return await ctx.crash({\n          exitCode: 1,\n          errorType: \"fatal\",\n          printedMessage: `Import canceled while parsing uploaded file`,\n        });\n      }\n      case \"in_progress\": {\n        const visitDashboardLink = options.snapshotImportDashboardLink\n          ? ` Visit ${options.snapshotImportDashboardLink} to monitor its progress.`\n          : \"\";\n        return await ctx.crash({\n          exitCode: 1,\n          errorType: \"fatal\",\n          printedMessage: `WARNING: Import is continuing to run on the server.${visitDashboardLink}`,\n        });\n      }\n      default: {\n        snapshotImportState satisfies never;\n        return await ctx.crash({\n          exitCode: 1,\n          errorType: \"fatal\",\n          printedMessage: `unknown error: unexpected state ${snapshotImportState as any}`,\n          errForSentry: `unexpected snapshot import state ${(snapshotImportState as any).state}`,\n        });\n      }\n    }\n  }\n}\n\nasync function askToConfirmImport(\n  ctx: Context,\n  messageToConfirm: string | undefined,\n  requireManualConfirmation: boolean | undefined,\n  yes: boolean | undefined,\n) {\n  if (!messageToConfirm?.length) {\n    return;\n  }\n  logMessage(messageToConfirm);\n  if (requireManualConfirmation !== false && !yes) {\n    const confirmed = await promptYesNo(ctx, {\n      message: \"Perform import?\",\n      default: true,\n    });\n    if (!confirmed) {\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: \"Import canceled\",\n      });\n    }\n  }\n}\n\nasync function askToConfirmImportWithExistingImports(\n  ctx: Context,\n  snapshotImportDashboardLink: string | undefined,\n  yes: boolean | undefined,\n) {\n  const atDashboardLink = snapshotImportDashboardLink\n    ? ` You can view its progress at ${snapshotImportDashboardLink}.`\n    : \"\";\n  logMessage(\n    `There is already a snapshot import in progress.${atDashboardLink}`,\n  );\n  if (yes) {\n    return;\n  }\n  const confirmed = await promptYesNo(ctx, {\n    message: \"Start another import?\",\n    default: true,\n  });\n  if (!confirmed) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: \"Import canceled\",\n    });\n  }\n}\n\ntype InProgressImportState = {\n  state: \"in_progress\";\n  progress_message?: string | undefined;\n  checkpoint_messages?: string[] | undefined;\n};\n\ntype SnapshotImportState =\n  | { state: \"uploaded\" }\n  | {\n      state: \"waiting_for_confirmation\";\n      message_to_confirm?: string;\n      require_manual_confirmation?: boolean;\n    }\n  | InProgressImportState\n  | { state: \"completed\"; num_rows_written: bigint }\n  | { state: \"failed\"; error_message: string };\n\nexport async function waitForStableImportState(\n  ctx: Context,\n  args: {\n    importId: string;\n    deploymentUrl: string;\n    adminKey: string;\n    onProgress: (\n      ctx: Context,\n      state: InProgressImportState,\n      checkpointCount: number,\n    ) => number;\n  },\n): Promise<SnapshotImportState> {\n  const { importId, deploymentUrl, adminKey, onProgress } = args;\n  const [donePromise, onDone] = waitUntilCalled();\n  let snapshotImportState: SnapshotImportState;\n  let checkpointCount = 0;\n  await subscribe(ctx, {\n    deploymentUrl,\n    adminKey,\n    parsedFunctionName: \"_system/cli/queryImport\",\n    parsedFunctionArgs: { importId },\n    componentPath: undefined,\n    until: donePromise,\n    callbacks: {\n      onChange: (value: any) => {\n        snapshotImportState = value.state;\n        switch (snapshotImportState.state) {\n          case \"waiting_for_confirmation\":\n          case \"completed\":\n          case \"failed\":\n            onDone();\n            break;\n          case \"uploaded\":\n            // Not a stable state. Ignore while the server continues working.\n            return;\n          case \"in_progress\":\n            // Not a stable state. Ignore while the server continues working.\n            checkpointCount = onProgress(\n              ctx,\n              snapshotImportState,\n              checkpointCount,\n            );\n            return;\n        }\n      },\n    },\n  });\n  return snapshotImportState!;\n}\n\nasync function determineFormat(\n  ctx: Context,\n  filePath: string,\n  format: string | null,\n) {\n  const fileExtension = path.extname(filePath);\n  if (fileExtension !== \"\") {\n    const formatToExtension: Record<string, string> = {\n      csv: \".csv\",\n      jsonLines: \".jsonl\",\n      jsonArray: \".json\",\n      zip: \".zip\",\n    };\n    const extensionToFormat = Object.fromEntries(\n      Object.entries(formatToExtension).map((a) => a.reverse()),\n    );\n    if (format !== null && fileExtension !== formatToExtension[format]) {\n      logWarning(\n        chalkStderr.yellow(\n          `Warning: Extension of file ${filePath} (${fileExtension}) does not match specified format: ${format} (${formatToExtension[format]}).`,\n        ),\n      );\n    }\n    format ??= extensionToFormat[fileExtension] ?? null;\n  }\n  if (format === null) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage:\n        \"No input file format inferred by the filename extension or specified. Specify your input file's format using the `--format` flag.\",\n    });\n  }\n  return format;\n}\n\nexport async function confirmImport(\n  ctx: Context,\n  args: {\n    importId: string;\n    adminKey: string;\n    deploymentUrl: string;\n    onError: (e: any) => Promise<void>;\n  },\n) {\n  const { importId, adminKey, deploymentUrl } = args;\n  const fetch = deploymentFetch(ctx, {\n    deploymentUrl,\n    adminKey,\n  });\n  const performUrl = `/api/perform_import`;\n  try {\n    await fetch(performUrl, {\n      method: \"POST\",\n      body: JSON.stringify({ importId }),\n    });\n  } catch (e) {\n    await args.onError(e);\n    return await logAndHandleFetchError(ctx, e);\n  }\n}\n\nexport async function uploadForImport(\n  ctx: Context,\n  args: {\n    deploymentUrl: string;\n    adminKey: string;\n    filePath: string;\n    importArgs: {\n      tableName?: string | undefined;\n      componentPath?: string | undefined;\n      mode: string;\n      format: string;\n    };\n    onImportFailed: (e: any) => Promise<void>;\n  },\n) {\n  const { deploymentUrl, adminKey, filePath } = args;\n  const fetch = deploymentFetch(ctx, {\n    deploymentUrl,\n    adminKey,\n  });\n\n  const fileStats = ctx.fs.stat(filePath);\n  // The backend rejects uploads of 10k or more parts. We use 9999 instead of\n  // 10000 so rounding errors can't push us over the limit.\n  const minChunkSize = Math.ceil(fileStats.size / 9999);\n  let chunkSize = ENV_CHUNK_SIZE ?? DEFAULT_CHUNK_SIZE;\n  if (chunkSize < minChunkSize) {\n    chunkSize = minChunkSize;\n  }\n  const data: AsyncIterable<Buffer> & {\n    bytesRead: number;\n  } = ctx.fs.createReadStream(filePath, {\n    highWaterMark: chunkSize,\n  });\n\n  showSpinner(`Importing ${filePath} (${formatSize(fileStats.size)})`);\n  let importId: string;\n  try {\n    const startResp = await fetch(\"/api/import/start_upload\", {\n      method: \"POST\",\n    });\n    const { uploadToken } = await startResp.json();\n\n    const partTokens = [];\n    let partNumber = 1;\n\n    for await (const chunk of data) {\n      // Strip BOM markers from the first chunk.\n      // Note that we don\u2019t have to worry about the BOM marker being split in multiple chunks:\n      // the chunk size is controlled by `highWaterMark`, so the first chunk will always be larger\n      // than 3 bytes (except for smaller files).\n      const chunkWithoutBom =\n        partNumber === 1 && hasBomMarker(chunk) ? chunk.subarray(3) : chunk;\n\n      const partUrl = `/api/import/upload_part?uploadToken=${encodeURIComponent(\n        uploadToken,\n      )}&partNumber=${partNumber}`;\n      const partResp = await fetch(partUrl, {\n        headers: {\n          \"Content-Type\": \"application/octet-stream\",\n        },\n        body: chunkWithoutBom,\n        method: \"POST\",\n      });\n      partTokens.push(await partResp.json());\n      partNumber += 1;\n      changeSpinner(\n        `Uploading ${filePath} (${formatSize(data.bytesRead)}/${formatSize(\n          fileStats.size,\n        )})`,\n      );\n    }\n\n    const finishResp = await fetch(\"/api/import/finish_upload\", {\n      body: JSON.stringify({\n        import: args.importArgs,\n        uploadToken,\n        partTokens,\n      }),\n      method: \"POST\",\n    });\n    const body = await finishResp.json();\n    importId = body.importId;\n  } catch (e) {\n    await args.onImportFailed(e);\n    return await logAndHandleFetchError(ctx, e);\n  }\n  return importId;\n}\n\nfunction hasBomMarker(chunk: Buffer) {\n  return (\n    chunk.length >= 3 &&\n    chunk[0] === 0xef &&\n    chunk[1] === 0xbb &&\n    chunk[2] === 0xbf\n  );\n}\n", "import * as Sentry from \"@sentry/node\";\nimport path from \"path\";\nimport { Context } from \"../../../bundler/context.js\";\n// eslint-disable-next-line no-restricted-imports\nimport { promises as fs } from \"fs\";\nimport { chalkStderr } from \"chalk\";\nimport { logMessage } from \"../../../bundler/log.js\";\nimport { promptYesNo } from \"../utils/prompts.js\";\nimport { type AiFilesPaths, aiDirForConvexDir } from \"./paths.js\";\nimport {\n  installGuidelinesFile,\n  hasGuidelinesInstalled,\n} from \"./guidelinesmd.js\";\nimport {\n  type AiFilesConfig,\n  hasAiFilesConfig,\n  readAiConfig,\n  writeAiConfig,\n  writeAiEnabledToProjectConfig,\n} from \"./config.js\";\nimport { isInInteractiveTerminal } from \"./utils.js\";\nimport {\n  hasAgentsMdInstalled,\n  applyAgentsMdSection,\n  removeAgentsMdSection,\n} from \"./agentsmd.js\";\nimport {\n  hasClaudeMdInstalled,\n  applyClaudeMdSection,\n  removeClaudeMdSection,\n} from \"./claudemd.js\";\nimport { installSkills, removeInstalledSkills } from \"./skills.js\";\nimport { removeLegacyCursorRulesFile as removeLegacyCursorRules } from \"./cursorrules.js\";\nasync function hasExistingAiFilesArtifacts({\n  projectDir,\n  convexDir,\n}: AiFilesPaths): Promise<boolean> {\n  return (\n    (await hasGuidelinesInstalled(convexDir)) ||\n    (await hasAgentsMdInstalled(projectDir)) ||\n    (await hasClaudeMdInstalled(projectDir))\n  );\n}\n\n/**\n * Install or refresh all Convex AI files.\n *\n * Reads the existing config if present, or starts from a blank one for a\n * fresh install. Each component can be individually skipped via the optional\n * flags (all default to true).\n */\nexport async function installAiFiles({\n  projectDir,\n  convexDir,\n  shouldWriteGuidelines = true,\n  shouldWriteAgentsMd = true,\n  shouldWriteClaudeMd = true,\n  shouldWriteSkills = true,\n}: AiFilesPaths & {\n  shouldWriteGuidelines?: boolean;\n  shouldWriteAgentsMd?: boolean;\n  shouldWriteClaudeMd?: boolean;\n  shouldWriteSkills?: boolean;\n}): Promise<void> {\n  await fs.mkdir(aiDirForConvexDir(convexDir), { recursive: true });\n\n  const config: AiFilesConfig = (await readAiConfig({\n    projectDir,\n    convexDir,\n  })) ?? {\n    enabled: true,\n    guidelinesHash: null,\n    agentsMdSectionHash: null,\n    claudeMdHash: null,\n    agentSkillsSha: null,\n    installedSkillNames: [],\n  };\n\n  if (shouldWriteGuidelines) await installGuidelinesFile({ convexDir, config });\n\n  const convexDirName = path.relative(projectDir, convexDir);\n\n  if (shouldWriteAgentsMd)\n    await applyAgentsMdSection({ projectDir, config, convexDirName });\n\n  if (shouldWriteClaudeMd)\n    await applyClaudeMdSection({ projectDir, config, convexDirName });\n\n  if (shouldWriteSkills) await installSkills({ projectDir, config });\n\n  await removeLegacyCursorRules(projectDir);\n  await writeAiConfig({ config, projectDir, convexDir });\n\n  logMessage(`${chalkStderr.green(\"\u2714\")} Convex AI files installed.`);\n}\n\nasync function attemptToInstallAiFiles(\n  opts: Parameters<typeof installAiFiles>[0],\n): Promise<void> {\n  try {\n    await installAiFiles(opts);\n  } catch (error) {\n    Sentry.captureException(error);\n  }\n}\n\ntype AiFilesStalenessStatus =\n  | \"not-installed\" // no config AND no artifacts \u2014 show install nag\n  | \"has-artifacts\" // no config but files exist on disk (e.g. fresh checkout) \u2014 stay quiet\n  | \"disabled\" // user opted out of nag messages\n  | \"stale\" // one or more files are out of date\n  | \"up-to-date\"; // everything looks fine\n\nasync function determineAiFilesStaleness({\n  canonicalGuidelinesHash,\n  canonicalAgentSkillsSha,\n  projectDir,\n  convexDir,\n}: {\n  canonicalGuidelinesHash: string | null;\n  canonicalAgentSkillsSha: string | null;\n} & AiFilesPaths): Promise<AiFilesStalenessStatus> {\n  const config = await readAiConfig({ projectDir, convexDir });\n\n  if (config === null) {\n    const hasArtifacts = await hasExistingAiFilesArtifacts({\n      projectDir,\n      convexDir,\n    });\n    return hasArtifacts ? \"has-artifacts\" : \"not-installed\";\n  }\n\n  if (!config.enabled) return \"disabled\";\n\n  if (canonicalGuidelinesHash === null && canonicalAgentSkillsSha === null)\n    return \"up-to-date\";\n\n  const guidelinesStale =\n    canonicalGuidelinesHash !== null &&\n    config.guidelinesHash !== null &&\n    config.guidelinesHash !== canonicalGuidelinesHash;\n\n  const skillsStale =\n    canonicalAgentSkillsSha !== null &&\n    config.agentSkillsSha !== null &&\n    config.agentSkillsSha !== canonicalAgentSkillsSha;\n\n  return guidelinesStale || skillsStale ? \"stale\" : \"up-to-date\";\n}\n\n/**\n * Check whether the Convex AI files are out of date and log a nag message\n * if so.\n */\nexport async function checkAiFilesStaleness(\n  opts: {\n    canonicalGuidelinesHash: string | null;\n    canonicalAgentSkillsSha: string | null;\n  } & AiFilesPaths,\n): Promise<void> {\n  const status = await determineAiFilesStaleness(opts);\n\n  if (status === \"not-installed\") {\n    logMessage(\n      chalkStderr.yellow(\n        `Convex AI files are not installed. Run ${chalkStderr.bold(`npx convex ai-files install`)} to get started or ${chalkStderr.bold(`npx convex ai-files disable`)} to hide this message.`,\n      ),\n    );\n  }\n\n  if (status === \"stale\") {\n    logMessage(\n      chalkStderr.yellow(\n        `Your Convex AI files are out of date. Run ${chalkStderr.bold(`npx convex ai-files update`)} to get the latest.`,\n      ),\n    );\n  }\n}\n\nexport async function enableAiFiles({\n  projectDir,\n  convexDir,\n}: AiFilesPaths): Promise<void> {\n  await installAiFiles({ projectDir, convexDir });\n  const config = await readAiConfig({ projectDir, convexDir });\n  if (config === null) return;\n  config.enabled = true;\n  await writeAiConfig({\n    config,\n    projectDir,\n    convexDir,\n    options: { persistEnabledPreference: \"always\" },\n  });\n}\n\n/**\n * Remove all Convex AI files from the project.\n * Called by `npx convex ai-files remove`.\n */\nexport async function removeAiFiles({\n  projectDir,\n  convexDir,\n}: AiFilesPaths): Promise<void> {\n  const config = await readAiConfig({ projectDir, convexDir });\n  if (config === null) {\n    logMessage(\"No Convex AI files found \u2014 nothing to remove.\");\n    return;\n  }\n\n  const removals = [\n    await removeAgentsMdSection(projectDir),\n    await removeClaudeMdSection(projectDir),\n    await removeInstalledSkills({\n      projectDir,\n      skillNames: config.installedSkillNames,\n    }),\n    await removeLegacyCursorRules(projectDir),\n    await attemptToDeleteAiDir({ projectDir, convexDir }),\n  ];\n\n  if (removals.some(Boolean)) logMessage(\"Convex AI files removed.\");\n}\n\n/**\n * Called by `npx convex ai-files disable`.\n *\n * Writes a suppression flag into `convex.json` so `npx convex dev` stops\n * showing AI files install/staleness messages. Files are left in place.\n */\nexport async function safelyAttemptToDisableAiFiles(\n  projectDir: string,\n): Promise<void> {\n  try {\n    await writeAiEnabledToProjectConfig({\n      projectDir,\n      enabled: false,\n    });\n    logMessage(\n      `${chalkStderr.green(`\u2714`)} Convex AI files disabled. Run ${chalkStderr.bold(`npx convex ai-files enable`)} to re-enable.`,\n    );\n  } catch (error) {\n    Sentry.captureException(error);\n    logMessage(\n      chalkStderr.yellow(\n        \"Could not write AI message suppression config. Message may reappear.\",\n      ),\n    );\n  }\n}\n\nasync function attemptToDeleteAiDir({\n  projectDir,\n  convexDir,\n}: AiFilesPaths): Promise<boolean> {\n  const aiDir = aiDirForConvexDir(convexDir);\n  const relPath = path.relative(projectDir, aiDir);\n  try {\n    await fs.rm(aiDir, { recursive: true, force: true });\n    logMessage(`${chalkStderr.green(\"\u2714\")} Deleted ${relPath}/`);\n    return true;\n  } catch (error) {\n    Sentry.captureException(error);\n    logMessage(\n      chalkStderr.yellow(`Could not delete ${relPath}/. Remove it manually.`),\n    );\n    return false;\n  }\n}\n\nasync function hasAiFilesBeenInstalledBefore({\n  projectDir,\n  convexDir,\n}: AiFilesPaths): Promise<boolean> {\n  return (\n    (await hasAiFilesConfig({ projectDir, convexDir })) ||\n    (await hasExistingAiFilesArtifacts({ projectDir, convexDir }))\n  );\n}\n\nexport async function maybeSetupAiFiles({\n  ctx,\n  convexDir,\n  projectDir,\n}: {\n  ctx: Context;\n} & AiFilesPaths): Promise<void> {\n  if (!isInInteractiveTerminal()) return;\n\n  const config = await readAiConfig({ projectDir, convexDir });\n  if (config !== null && !config.enabled) return;\n\n  if (await hasAiFilesBeenInstalledBefore({ projectDir, convexDir })) {\n    await attemptToInstallAiFiles({ projectDir, convexDir });\n    return;\n  }\n\n  const shouldInstall = await promptYesNo(ctx, {\n    message: \"Set up Convex AI files? (guidelines, AGENTS.md, agent skills)\",\n    default: true,\n  });\n\n  if (shouldInstall) await attemptToInstallAiFiles({ projectDir, convexDir });\n}\n", "import path from \"path\";\n\nexport type AiFilesPaths = {\n  projectDir: string;\n  convexDir: string;\n};\n\nconst AI_FILES_PARENT_DIR = \"_generated\";\nconst AI_FILES_DIR = \"ai\";\n\nexport function aiDirForConvexDir(convexDir: string): string {\n  return path.join(convexDir, AI_FILES_PARENT_DIR, AI_FILES_DIR);\n}\n\nexport function guidelinesPathForConvexDir(convexDir: string): string {\n  return path.join(aiDirForConvexDir(convexDir), \"guidelines.md\");\n}\n\nexport function aiFilesStatePathForConvexDir(convexDir: string): string {\n  return path.join(aiDirForConvexDir(convexDir), \"ai-files.state.json\");\n}\n\nexport function agentsMdPath(projectDir?: string): string {\n  return path.join(projectDir ?? process.cwd(), \"AGENTS.md\");\n}\n\nexport function claudeMdPath(projectDir?: string): string {\n  return path.join(projectDir ?? process.cwd(), \"CLAUDE.md\");\n}\n", "// eslint-disable-next-line no-restricted-imports\nimport { promises as fs } from \"fs\";\nimport { chalkStderr } from \"chalk\";\nimport { logMessage } from \"../../../bundler/log.js\";\nimport { downloadGuidelines } from \"../versionApi.js\";\nimport { hashSha256 } from \"../utils/hash.js\";\nimport { guidelinesPathForConvexDir } from \"./paths.js\";\nimport { readFileSafe } from \"./utils.js\";\nimport { type AiFilesConfig } from \"./config.js\";\n\nexport async function hasGuidelinesInstalled(\n  convexDir: string,\n): Promise<boolean> {\n  return (await readFileSafe(guidelinesPathForConvexDir(convexDir))) !== null;\n}\n\n/**\n * Download and write the guidelines file.\n * Guidelines live in `_generated/` so local edits are not expected and are\n * not preserved.\n */\nexport async function installGuidelinesFile({\n  convexDir,\n  config,\n}: {\n  convexDir: string;\n  config: AiFilesConfig;\n}): Promise<void> {\n  const guidelines = await downloadGuidelines();\n  if (guidelines === null) {\n    logMessage(\n      chalkStderr.yellow(\n        \"Could not download Convex AI guidelines right now. You can retry with: npx convex ai-files install\",\n      ),\n    );\n    return;\n  }\n\n  await fs.writeFile(guidelinesPathForConvexDir(convexDir), guidelines, \"utf8\");\n  config.guidelinesHash = hashSha256(guidelines);\n}\n", "import * as Sentry from \"@sentry/node\";\nimport { version } from \"../version.js\";\n\nconst VERSION_ENDPOINT = \"https://version.convex.dev/v1/version\";\nconst GUIDELINES_ENDPOINT = \"https://version.convex.dev/v1/guidelines\";\n\nconst HEADERS: Record<string, string> = {\n  \"Convex-Client\": `npm-cli-${version}`,\n  // Useful telemetry proxy for \"human at a terminal\" vs automated/background execution.\n  \"Convex-Interactive\": process.stdin.isTTY === true ? \"true\" : \"false\",\n};\nif (process.env.CONVEX_AGENT_MODE) {\n  HEADERS[\"Convex-Agent-Mode\"] = process.env.CONVEX_AGENT_MODE;\n}\n\nexport type VersionResult = {\n  message: string | null;\n  guidelinesHash: string | null;\n  agentSkillsSha: string | null;\n  disableSkillsCli: boolean;\n};\n\nexport type VersionFetchResult =\n  | { kind: \"ok\"; data: VersionResult }\n  | { kind: \"error\" };\n\nexport async function getVersion(): Promise<VersionFetchResult> {\n  try {\n    const req = await fetch(VERSION_ENDPOINT, {\n      headers: HEADERS,\n    });\n\n    if (!req.ok) {\n      Sentry.captureException(\n        new Error(`Failed to fetch version: status = ${req.status}`),\n      );\n      return { kind: \"error\" };\n    }\n\n    const json = await req.json();\n    const result = validateVersionResult(json);\n\n    if (result === null) return { kind: \"error\" };\n    return { kind: \"ok\", data: result };\n  } catch (error) {\n    Sentry.captureException(error);\n    return { kind: \"error\" };\n  }\n}\n\nexport function validateVersionResult(json: any): VersionResult | null {\n  if (typeof json !== \"object\" || json === null) {\n    Sentry.captureMessage(\"Invalid version result\", \"error\");\n    return null;\n  }\n\n  if (typeof json.message !== \"string\" && json.message !== null) {\n    Sentry.captureMessage(\"Invalid version.message result\", \"error\");\n    return null;\n  }\n\n  // Treat missing optional hashes as null.\n  const agentSkillsSha =\n    typeof json.agentSkillsSha === \"string\" ? json.agentSkillsSha : null;\n\n  const guidelinesHash =\n    typeof json.guidelinesHash === \"string\" ? json.guidelinesHash : null;\n  const disableSkillsCli = json.disableSkillsCli === true;\n\n  return {\n    message: json.message,\n    guidelinesHash,\n    agentSkillsSha,\n    disableSkillsCli,\n  };\n}\n\n/** Fetch the latest agent skills SHA from version.convex.dev. */\nexport async function fetchAgentSkillsSha(): Promise<string | null> {\n  const versionData = await getVersion();\n  if (versionData.kind === \"error\") return null;\n  return versionData.data.agentSkillsSha;\n}\n\nexport async function downloadGuidelines(): Promise<string | null> {\n  try {\n    const req = await fetch(GUIDELINES_ENDPOINT, { headers: HEADERS });\n\n    if (!req.ok) {\n      Sentry.captureMessage(\n        `Failed to fetch Convex guidelines: status = ${req.status}`,\n      );\n      return null;\n    }\n\n    const text = await req.text();\n    return text;\n  } catch (error) {\n    Sentry.captureException(error);\n    return null;\n  }\n}\n", "import { createHash } from \"crypto\";\n\nexport function hashSha256(value: string): string {\n  return createHash(\"sha256\").update(value, \"utf8\").digest(\"hex\");\n}\n", "// eslint-disable-next-line no-restricted-imports\nimport { promises as fs } from \"fs\";\nimport { chalkStderr } from \"chalk\";\nimport { logMessage } from \"../../../bundler/log.js\";\nimport { hashSha256 } from \"../utils/hash.js\";\n\nexport function isInInteractiveTerminal(): boolean {\n  return process.stdin.isTTY === true;\n}\n\nexport async function readFileSafe(filePath: string): Promise<string | null> {\n  try {\n    return await fs.readFile(filePath, \"utf8\");\n  } catch {\n    return null;\n  }\n}\n\n/**\n * Attempt to delete a file. Returns `true` if the file was deleted,\n * `false` if it didn't exist or the deletion failed.\n */\nexport async function safelyDeleteFile(filePath: string): Promise<boolean> {\n  try {\n    await fs.unlink(filePath);\n    return true;\n  } catch {\n    return false;\n  }\n}\n\n// ---------------------------------------------------------------------------\n// Generic managed-section helpers\n//\n// Several files (AGENTS.md, CLAUDE.md) contain a Convex-managed section\n// delimited by start/end markers. These helpers provide the common logic\n// for injecting, stripping, and detecting those sections.\n// ---------------------------------------------------------------------------\n\nexport type ManagedSectionTarget = {\n  filePath: string;\n  startMarker: string;\n  endMarker: string;\n};\n\nexport type InjectResult = {\n  sectionHash: string;\n  didWrite: boolean;\n};\n\nexport const iife = <T>(fn: () => T): T => fn();\n\n/**\n * Inject a managed section into a file. If the file already contains the\n * markers, the section between them is replaced. Otherwise the section is\n * appended (or the file is created). Only writes when content actually\n * changes.\n */\nexport async function injectManagedSection(\n  opts: ManagedSectionTarget & { section: string },\n): Promise<InjectResult> {\n  const { filePath, startMarker, endMarker, section } = opts;\n\n  const existing = (await readFileSafe(filePath)) ?? \"\";\n\n  const startIdx = existing.indexOf(startMarker);\n  const endIdx = existing.indexOf(endMarker);\n\n  const updated = iife(() => {\n    if (startIdx !== -1 && endIdx !== -1)\n      return (\n        existing.slice(0, startIdx) +\n        section +\n        existing.slice(endIdx + endMarker.length)\n      );\n    if (existing.length > 0)\n      return existing.trimEnd() + \"\\n\\n\" + section + \"\\n\";\n\n    return section + \"\\n\";\n  });\n\n  const didWrite = updated !== existing;\n  if (didWrite) await fs.writeFile(filePath, updated, \"utf8\");\n\n  return { sectionHash: hashSha256(section), didWrite };\n}\n\nexport type StripResult = \"none\" | \"section\" | \"file\";\n\n/**\n * Remove the managed section (between start/end markers) from a file.\n * If the file is empty after removal, it is deleted.\n *\n * Returns `\"none\"` if the file doesn't exist or has no markers,\n * `\"section\"` if the section was stripped, or `\"file\"` if the entire\n * file was deleted.\n */\nexport async function stripManagedSection(\n  opts: ManagedSectionTarget,\n): Promise<StripResult> {\n  const { filePath, startMarker, endMarker } = opts;\n\n  const content = await readFileSafe(filePath);\n  if (content === null) return \"none\";\n\n  const startIdx = content.indexOf(startMarker);\n  const endIdx = content.indexOf(endMarker);\n  if (startIdx === -1 || endIdx === -1) {\n    return \"none\";\n  }\n\n  const before = content.slice(0, startIdx).trimEnd();\n  const after = content.slice(endIdx + endMarker.length).trimStart();\n  const updated = [before, after].filter(Boolean).join(\"\\n\\n\");\n\n  if (!updated.trim()) {\n    await safelyDeleteFile(filePath);\n    return \"file\";\n  }\n\n  await fs.writeFile(filePath, updated + \"\\n\", \"utf8\");\n  return \"section\";\n}\n\nexport async function removeMarkdownSection({\n  projectDir,\n  strip,\n  fileName,\n}: {\n  projectDir: string;\n  strip: (dir: string) => Promise<StripResult>;\n  fileName: string;\n}): Promise<boolean> {\n  const result = await strip(projectDir);\n\n  if (result === \"section\") {\n    logMessage(\n      `${chalkStderr.green(\"\u2714\")} Removed Convex section from ${fileName}.`,\n    );\n    return true;\n  }\n\n  if (result === \"file\") {\n    logMessage(`${chalkStderr.green(\"\u2714\")} Deleted ${fileName}.`);\n    return true;\n  }\n\n  return false;\n}\n\n/**\n * Check whether a file contains a managed section (both markers present).\n */\nexport async function hasManagedSection(\n  opts: ManagedSectionTarget,\n): Promise<boolean> {\n  const content = await readFileSafe(opts.filePath);\n  return (\n    content !== null &&\n    content.includes(opts.startMarker) &&\n    content.includes(opts.endMarker)\n  );\n}\n", "import * as Sentry from \"@sentry/node\";\n// Use raw fs (not ctx.fs) so these operations run asynchronously and don't\n// interfere with the file-watcher used by `convex dev`.\n// eslint-disable-next-line no-restricted-imports\nimport { promises as fs } from \"fs\";\nimport path from \"path\";\nimport { z } from \"zod\";\nimport { aiFilesStatePathForConvexDir } from \"./paths.js\";\nimport { iife, readFileSafe } from \"./utils.js\";\n\nexport const aiFilesStateSchema = z.object({\n  guidelinesHash: z.string().nullable(),\n  agentsMdSectionHash: z.string().nullable(),\n  claudeMdHash: z.string().nullable(),\n  // Commit SHA from get-convex/agent-skills that was current when skills were\n  // last installed. Used to detect when newer skills are available.\n  agentSkillsSha: z.string().nullable(),\n  // Names of skills installed by `npx skills add`, used by `remove` to\n  // only remove Convex-managed skills.\n  installedSkillNames: z.array(z.string()).default([]),\n});\n\nconst aiFilesProjectConfigSchema = z\n  .object({\n    aiFiles: z\n      .object({\n        // `enabled` is the canonical field. When present it takes full\n        // precedence - `enabled: true` will re-enable even if the legacy\n        // disableStalenessMessage field is still `true` in the file.\n        enabled: z.boolean().optional(),\n        // @deprecated - use `enabled` instead. Read for backward compat;\n        // new writes always emit `enabled` and drop this key.\n        disableStalenessMessage: z.boolean().optional(),\n      })\n      .default({}),\n  })\n  .passthrough();\n\ntype AiFilesState = z.infer<typeof aiFilesStateSchema>;\nexport type AiFilesConfig = AiFilesState & {\n  enabled: boolean;\n};\n\nconst EMPTY_AI_STATE: AiFilesState = {\n  guidelinesHash: null,\n  agentsMdSectionHash: null,\n  claudeMdHash: null,\n  agentSkillsSha: null,\n  installedSkillNames: [],\n};\n\nasync function readAiEnabledFromProjectConfig(\n  projectDir: string,\n): Promise<boolean> {\n  const raw = await readFileSafe(path.join(projectDir, \"convex.json\"));\n  if (raw === null) return true;\n  try {\n    const parsed = aiFilesProjectConfigSchema.parse(JSON.parse(raw));\n    // `enabled` takes full precedence when explicitly set.\n    if (parsed.aiFiles.enabled !== undefined) return parsed.aiFiles.enabled;\n    // Legacy `disableStalenessMessage` - invert it.\n    return !(parsed.aiFiles.disableStalenessMessage ?? false);\n  } catch (err) {\n    Sentry.captureException(err);\n    return true;\n  }\n}\n\nexport async function writeAiEnabledToProjectConfig({\n  projectDir,\n  enabled,\n}: {\n  projectDir: string;\n  enabled: boolean;\n}): Promise<void> {\n  const filePath = path.join(projectDir, \"convex.json\");\n  const existing = await iife(async () => {\n    try {\n      return JSON.parse(await fs.readFile(filePath, \"utf8\")) as unknown;\n    } catch {\n      return {} as unknown;\n    }\n  });\n  const base =\n    existing !== null &&\n    typeof existing === \"object\" &&\n    !Array.isArray(existing)\n      ? (existing as Record<string, unknown>)\n      : {};\n  const aiFilesValue =\n    base.aiFiles !== null &&\n    typeof base.aiFiles === \"object\" &&\n    !Array.isArray(base.aiFiles)\n      ? (base.aiFiles as Record<string, unknown>)\n      : {};\n  const { $schema, ...rest } = base;\n  // Remove legacy keys on every write.\n  const { disableStalenessMessage: _legacy, ...restAiFiles } = aiFilesValue;\n  const next: Record<string, unknown> = {\n    $schema: $schema ?? \"node_modules/convex/schemas/convex.schema.json\",\n    ...rest,\n    aiFiles: { ...restAiFiles, enabled },\n  };\n  await fs.writeFile(filePath, JSON.stringify(next, null, 2) + \"\\n\", \"utf8\");\n}\n\nexport async function readAiConfig({\n  projectDir,\n  convexDir,\n}: {\n  projectDir: string;\n  convexDir: string;\n}): Promise<AiFilesConfig | null> {\n  const enabled = await readAiEnabledFromProjectConfig(projectDir);\n  const rawState = await readFileSafe(aiFilesStatePathForConvexDir(convexDir));\n  if (rawState === null) {\n    // No state file means AI files are not installed, unless the user has\n    // explicitly disabled in convex.json.\n    return !enabled ? { ...EMPTY_AI_STATE, enabled } : null;\n  }\n  try {\n    const state = aiFilesStateSchema.parse(JSON.parse(rawState));\n    return { ...state, enabled };\n  } catch (err) {\n    Sentry.captureException(err);\n    return null;\n  }\n}\n\nexport async function hasAiFilesConfig({\n  projectDir,\n  convexDir,\n}: {\n  projectDir: string;\n  convexDir: string;\n}): Promise<boolean> {\n  if (!(await readAiEnabledFromProjectConfig(projectDir))) {\n    return true;\n  }\n  try {\n    const rawState = await fs.readFile(\n      aiFilesStatePathForConvexDir(convexDir),\n      \"utf8\",\n    );\n    aiFilesStateSchema.parse(JSON.parse(rawState));\n    return true;\n  } catch (err) {\n    if ((err as NodeJS.ErrnoException).code !== \"ENOENT\") {\n      Sentry.captureException(err);\n    }\n    return false;\n  }\n}\n\nexport async function writeAiConfig({\n  config,\n  projectDir,\n  convexDir,\n  options,\n}: {\n  config: AiFilesConfig;\n  projectDir: string;\n  convexDir: string;\n  options?: { persistEnabledPreference?: \"ifFalse\" | \"always\" | \"never\" };\n}): Promise<void> {\n  const state = aiFilesStateSchema.parse({\n    guidelinesHash: config.guidelinesHash,\n    agentsMdSectionHash: config.agentsMdSectionHash,\n    claudeMdHash: config.claudeMdHash,\n    agentSkillsSha: config.agentSkillsSha,\n    installedSkillNames: config.installedSkillNames,\n  });\n  await fs.writeFile(\n    aiFilesStatePathForConvexDir(convexDir),\n    JSON.stringify(state, null, 2) + \"\\n\",\n    \"utf8\",\n  );\n\n  const persistMode = options?.persistEnabledPreference ?? \"ifFalse\";\n  if (\n    persistMode === \"always\" ||\n    (persistMode === \"ifFalse\" && !config.enabled)\n  )\n    await writeAiEnabledToProjectConfig({\n      projectDir,\n      enabled: config.enabled,\n    });\n}\n", "export const AGENTS_MD_START_MARKER = \"<!-- convex-ai-start -->\";\nexport const AGENTS_MD_END_MARKER = \"<!-- convex-ai-end -->\";\n\nexport function convexAiMarkdownBody(convexDir: string): string {\n  return `This project uses [Convex](https://convex.dev) as its backend.\n\nWhen working on Convex code, **always read \\`${convexDir}/_generated/ai/guidelines.md\\` first** for important guidelines on how to correctly use Convex APIs and patterns. The file contains rules that override what you may have learned about Convex from training data.\n\nConvex agent skills for common tasks can be installed by running \\`npx convex ai-files install\\`.`;\n}\n\n/**\n * Returns the Convex section to inject into AGENTS.md.\n * The section is delimited by markers so it can be identified and updated\n * without clobbering any user-written content in the file.\n */\nexport function agentsMdConvexSection(convexDir: string): string {\n  return `${AGENTS_MD_START_MARKER}\n${convexAiMarkdownBody(convexDir)}\n${AGENTS_MD_END_MARKER}`;\n}\n", "import {\n  AGENTS_MD_START_MARKER,\n  AGENTS_MD_END_MARKER,\n  agentsMdConvexSection,\n} from \"../../codegen_templates/agentsmd.js\";\nimport { agentsMdPath } from \"./paths.js\";\nimport { type AiFilesConfig } from \"./config.js\";\nimport {\n  type ManagedSectionTarget,\n  type InjectResult,\n  type StripResult,\n  injectManagedSection,\n  stripManagedSection,\n  hasManagedSection,\n  removeMarkdownSection,\n} from \"./utils.js\";\n\nfunction target(projectDir?: string): ManagedSectionTarget {\n  return {\n    filePath: agentsMdPath(projectDir),\n    startMarker: AGENTS_MD_START_MARKER,\n    endMarker: AGENTS_MD_END_MARKER,\n  };\n}\n\nexport async function injectAgentsMdSection({\n  section,\n  projectDir,\n}: {\n  section: string;\n  projectDir?: string;\n}): Promise<InjectResult> {\n  return injectManagedSection({ ...target(projectDir), section });\n}\n\nexport async function stripAgentsMdSection(\n  projectDir: string,\n): Promise<StripResult> {\n  return stripManagedSection(target(projectDir));\n}\n\nexport async function removeAgentsMdSection(\n  projectDir: string,\n): Promise<boolean> {\n  return removeMarkdownSection({\n    projectDir,\n    strip: stripAgentsMdSection,\n    fileName: \"AGENTS.md\",\n  });\n}\n\nexport async function hasAgentsMdInstalled(\n  projectDir: string,\n): Promise<boolean> {\n  return hasManagedSection(target(projectDir));\n}\n\n/**\n * Inject (or update) the Convex section in AGENTS.md and record the hash.\n * Returns true if the file was actually written.\n */\nexport async function applyAgentsMdSection({\n  projectDir,\n  config,\n  convexDirName,\n}: {\n  projectDir: string;\n  config: AiFilesConfig;\n  convexDirName: string;\n}): Promise<boolean> {\n  const result = await injectAgentsMdSection({\n    section: agentsMdConvexSection(convexDirName),\n    projectDir,\n  });\n  config.agentsMdSectionHash = result.sectionHash;\n  return result.didWrite;\n}\n", "import { convexAiMarkdownBody } from \"./agentsmd.js\";\n\n/**\n * Markers delimiting the Convex-managed section in CLAUDE.md.\n * Everything outside this block is user-owned and left untouched.\n */\nexport const CLAUDE_MD_START_MARKER = \"<!-- convex-ai-start -->\";\nexport const CLAUDE_MD_END_MARKER = \"<!-- convex-ai-end -->\";\n\n/**\n * Returns the Convex section to inject into CLAUDE.md.\n */\nexport function claudeMdConvexSection(convexDir: string): string {\n  return `${CLAUDE_MD_START_MARKER}\n${convexAiMarkdownBody(convexDir)}\n${CLAUDE_MD_END_MARKER}`;\n}\n", "import {\n  CLAUDE_MD_END_MARKER,\n  CLAUDE_MD_START_MARKER,\n  claudeMdConvexSection,\n} from \"../../codegen_templates/claudemd.js\";\nimport { claudeMdPath } from \"./paths.js\";\nimport { type AiFilesConfig } from \"./config.js\";\nimport {\n  type ManagedSectionTarget,\n  type InjectResult,\n  type StripResult,\n  injectManagedSection,\n  stripManagedSection,\n  hasManagedSection,\n  removeMarkdownSection,\n} from \"./utils.js\";\n\nfunction target(projectDir?: string): ManagedSectionTarget {\n  return {\n    filePath: claudeMdPath(projectDir),\n    startMarker: CLAUDE_MD_START_MARKER,\n    endMarker: CLAUDE_MD_END_MARKER,\n  };\n}\n\nexport async function injectClaudeMdSection({\n  section,\n  projectDir,\n}: {\n  section: string;\n  projectDir?: string;\n}): Promise<InjectResult> {\n  return injectManagedSection({ ...target(projectDir), section });\n}\n\nexport async function stripClaudeMdSection(\n  projectDir: string,\n): Promise<StripResult> {\n  return stripManagedSection(target(projectDir));\n}\n\nexport async function removeClaudeMdSection(\n  projectDir: string,\n): Promise<boolean> {\n  return removeMarkdownSection({\n    projectDir,\n    strip: stripClaudeMdSection,\n    fileName: \"CLAUDE.md\",\n  });\n}\n\nexport async function hasClaudeMdInstalled(\n  projectDir: string,\n): Promise<boolean> {\n  return hasManagedSection(target(projectDir));\n}\n\n/**\n * Inject (or update) the Convex section in CLAUDE.md and record the hash.\n * Returns true if the file was actually written.\n */\nexport async function applyClaudeMdSection({\n  projectDir,\n  config,\n  convexDirName,\n}: {\n  projectDir: string;\n  config: AiFilesConfig;\n  convexDirName: string;\n}): Promise<boolean> {\n  const result = await injectClaudeMdSection({\n    section: claudeMdConvexSection(convexDirName),\n    projectDir,\n  });\n  config.claudeMdHash = result.sectionHash;\n  return result.didWrite;\n}\n", "import child_process from \"child_process\";\nimport path from \"path\";\n// eslint-disable-next-line no-restricted-imports\nimport { promises as fs } from \"fs\";\nimport { chalkStderr } from \"chalk\";\nimport { logMessage } from \"../../../bundler/log.js\";\nimport { getVersion, fetchAgentSkillsSha } from \"../versionApi.js\";\nimport { type AiFilesConfig } from \"./config.js\";\nimport { iife, readFileSafe } from \"./utils.js\";\n\n/**\n * Read the frontmatter `name:` values from skills installed by the skills CLI.\n */\nasync function readInstalledSkillNames(projectDir: string): Promise<string[]> {\n  const skillsDir = path.join(projectDir, \".agents\", \"skills\");\n  const entries = await iife(async () => {\n    try {\n      const dirents = await fs.readdir(skillsDir, { withFileTypes: true });\n      return dirents\n        .filter((d) => d.isDirectory() || d.isSymbolicLink())\n        .map((d) => d.name);\n    } catch {\n      return [] as string[];\n    }\n  });\n  if (entries.length === 0) return [];\n\n  const names: string[] = [];\n  for (const entry of entries) {\n    const skillMdPath = path.join(skillsDir, entry, \"SKILL.md\");\n    const content = await readFileSafe(skillMdPath);\n    if (content === null) continue;\n    const match = content.match(/^---[\\s\\S]*?^name:\\s*(.+?)\\s*$/m);\n    if (match) {\n      names.push(match[1]);\n    }\n  }\n  return names;\n}\n\n/**\n * Runs `npx skills add get-convex/agent-skills --yes` in the given directory.\n * Returns true on success, false if the process fails or cannot be started.\n */\nfunction runSkillsAdd(cwd: string): Promise<boolean> {\n  return runSkillsCommand(cwd, [\"add\", \"get-convex/agent-skills\", \"--yes\"]);\n}\n\n/**\n * Runs `npx skills remove <name...> --yes` to surgically remove only the\n * Convex-managed skills, leaving any skills from other sources intact.\n */\nfunction runSkillsRemove({\n  cwd,\n  skillNames,\n}: {\n  cwd: string;\n  skillNames: string[];\n}): Promise<boolean> {\n  return runSkillsCommand(cwd, [\"remove\", ...skillNames, \"--yes\"]);\n}\n\n/**\n * This function exists so we have a way to disable skills installs without pushing a new\n * version of the convex CLI\n */\nasync function shouldRunSkillsCli(): Promise<boolean> {\n  const versionData = await getVersion();\n\n  if (versionData.kind === \"error\") return true;\n\n  if (versionData.data.disableSkillsCli) {\n    logMessage(chalkStderr.yellow(`Agent skills are temporarily disabled.`));\n    return false;\n  }\n\n  return true;\n}\n\n/**\n * Remove the skills-lock.json file if it only contains skills that we\n * are removing. The `npx skills remove` command leaves the lockfile behind\n * even when it's logically empty.\n */\nasync function removeSkillsLockIfEmpty({\n  projectDir,\n  removedSkillNames,\n}: {\n  projectDir: string;\n  removedSkillNames: string[];\n}): Promise<boolean> {\n  const lockPath = path.join(projectDir, \"skills-lock.json\");\n  try {\n    const content = await fs.readFile(lockPath, \"utf8\");\n    const lock = JSON.parse(content);\n\n    if (\n      !lock ||\n      typeof lock !== \"object\" ||\n      !lock.skills ||\n      typeof lock.skills !== \"object\"\n    ) {\n      return false;\n    }\n\n    const remainingSkills = Object.keys(lock.skills).filter(\n      (name) => !removedSkillNames.includes(name),\n    );\n\n    if (remainingSkills.length === 0) {\n      await fs.unlink(lockPath);\n      return true;\n    }\n    return false;\n  } catch {\n    return false;\n  }\n}\n\n/**\n * Install Convex agent skills and record the SHA and names into the config.\n * Handles the kill-switch check and all logging internally.\n */\nexport async function installSkills({\n  projectDir,\n  config,\n}: {\n  projectDir: string;\n  config: AiFilesConfig;\n}): Promise<void> {\n  if (!(await shouldRunSkillsCli())) return;\n\n  logMessage(\"Installing Convex agent skills...\");\n  const skillsOk = await runSkillsAdd(projectDir);\n  if (!skillsOk) {\n    logMessage(\n      chalkStderr.yellow(\n        \"Could not install agent skills. You can retry manually with: npx skills add get-convex/agent-skills\",\n      ),\n    );\n    return;\n  }\n\n  const sha = await fetchAgentSkillsSha();\n  if (sha) config.agentSkillsSha = sha;\n\n  const names = await readInstalledSkillNames(projectDir);\n  if (names.length > 0) config.installedSkillNames = names;\n}\n\n/**\n * Remove Convex-managed agent skills and clean up the lock file if empty.\n * Returns true if any removal occurred.\n */\nexport async function removeInstalledSkills({\n  projectDir,\n  skillNames,\n}: {\n  projectDir: string;\n  skillNames: string[];\n}): Promise<boolean> {\n  if (skillNames.length === 0 || !(await shouldRunSkillsCli())) return false;\n\n  logMessage(`Removing Convex agent skills: ${skillNames.join(\", \")}`);\n  const skillsOk = await runSkillsRemove({ cwd: projectDir, skillNames });\n  if (!skillsOk) {\n    logMessage(\n      chalkStderr.yellow(\n        \"Could not remove agent skills automatically. Remove them manually with: npx skills remove\",\n      ),\n    );\n    return false;\n  }\n\n  const lockRemoved = await removeSkillsLockIfEmpty({\n    projectDir,\n    removedSkillNames: skillNames,\n  });\n  if (lockRemoved)\n    logMessage(`${chalkStderr.green(\"\u2714\")} Deleted skills-lock.json.`);\n  return true;\n}\n\nfunction runSkillsCommand(cwd: string, args: string[]): Promise<boolean> {\n  return new Promise((resolve) => {\n    const proc = child_process.spawn(\n      \"npx\",\n      [\"--yes\", \"skills@latest\", ...args],\n      {\n        cwd,\n        stdio: \"pipe\",\n        // .cmd files on Windows require shell execution.\n        shell: process.platform === \"win32\",\n      },\n    );\n    let capturedOutput = \"\";\n    proc.stdout?.on(\"data\", (chunk) => {\n      capturedOutput += chunk.toString();\n    });\n    proc.stderr?.on(\"data\", (chunk) => {\n      capturedOutput += chunk.toString();\n    });\n    proc.on(\"close\", (code) => {\n      if (code !== 0 && capturedOutput.trim().length > 0) {\n        const lines = capturedOutput.trim().split(/\\r?\\n/);\n        const tail = lines.slice(-10).join(\"\\n\");\n        logMessage(chalkStderr.gray(`skills output (tail):\\n${tail}`));\n      }\n      resolve(code === 0);\n    });\n    proc.on(\"error\", () => resolve(false));\n  });\n}\n", "import path from \"path\";\nimport { chalkStderr } from \"chalk\";\nimport { logMessage } from \"../../../bundler/log.js\";\nimport { safelyDeleteFile } from \"./utils.js\";\n\n/**\n * Remove the legacy `.cursor/rules/convex_rules.mdc` file if it exists.\n * This file was written by the old cursor rules auto-update feature (removed\n * in favour of the AI files system). We clean it up unconditionally\n * during `writeAiFiles`, `convex ai-files update`, and `convex ai-files remove`\n * since it was always auto-managed and is now superseded by\n * `convex/_generated/ai/guidelines.md`.\n */\nexport async function removeLegacyCursorRulesFile(\n  projectDir: string,\n): Promise<boolean> {\n  const removed = await safelyDeleteFile(\n    path.join(projectDir, \".cursor\", \"rules\", \"convex_rules.mdc\"),\n  );\n  if (removed)\n    logMessage(\n      `${chalkStderr.green(\"\u2714\")} Removed legacy .cursor/rules/convex_rules.mdc (superseded by convex/_generated/ai/guidelines.md).`,\n    );\n  return removed;\n}\n", "import { Context } from \"../../../bundler/context.js\";\nimport {\n  dashboardOutDir,\n  loadDashboardConfig,\n  loadUuidForAnonymousUser,\n  saveDashboardConfig,\n} from \"./filePaths.js\";\nimport { choosePorts } from \"./utils.js\";\nimport { startServer } from \"./serve.js\";\nimport { listExistingAnonymousDeployments } from \"./anonymous.js\";\nimport { localDeploymentUrl, selfHostedEventTag } from \"./run.js\";\nimport serveHandler from \"serve-handler\";\nimport { ensureDashboardDownloaded } from \"./download.js\";\nimport { bigBrainAPIMaybeThrows } from \"../utils/utils.js\";\n\nexport const DEFAULT_LOCAL_DASHBOARD_PORT = 6790;\nexport const DEFAULT_LOCAL_DASHBOARD_API_PORT = 6791;\n\n/**\n * This runs the `dashboard-self-hosted` app locally.\n * It's currently just used for the `anonymous` flow, while everything else\n * uses `dashboard.convex.dev`, and some of the code below is written\n * assuming this is only used for `anonymous`.\n */\nexport async function handleDashboard(ctx: Context, version: string) {\n  const anonymousId = loadUuidForAnonymousUser(ctx) ?? undefined;\n  const isRunning = await checkIfDashboardIsRunning(ctx);\n  if (isRunning) {\n    // It's possible this is running with a different version, but\n    // let's not worry about that for now.\n    return;\n  }\n  await ensureDashboardDownloaded(ctx, version);\n  const [dashboardPort, apiPort] = await choosePorts(ctx, {\n    count: 2,\n    startPort: DEFAULT_LOCAL_DASHBOARD_PORT,\n    requestedPorts: [null, null],\n  });\n  await saveDashboardConfig(ctx, {\n    port: dashboardPort,\n    apiPort,\n    version,\n  });\n\n  let hasReportedSelfHostedEvent = false;\n\n  const { cleanupHandle } = await startServer(\n    ctx,\n    dashboardPort,\n    async (request, response) => {\n      if (!hasReportedSelfHostedEvent) {\n        hasReportedSelfHostedEvent = true;\n        void reportSelfHostedEvent(ctx, {\n          anonymousId,\n          eventName: \"self_host_dashboard_connected\",\n          tag: selfHostedEventTag(\"anonymous\"),\n        });\n      }\n      await serveHandler(request, response, {\n        public: dashboardOutDir(),\n      });\n    },\n    {},\n  );\n  await startServingListDeploymentsApi(ctx, apiPort);\n  return {\n    dashboardPort,\n    cleanupHandle,\n  };\n}\n\nasync function reportSelfHostedEvent(\n  ctx: Context,\n  {\n    anonymousId,\n    eventName,\n    eventFields,\n    tag,\n  }: {\n    anonymousId: string | undefined;\n    eventName: string;\n    eventFields?: Record<string, unknown>;\n    tag: string | undefined;\n  },\n) {\n  try {\n    await bigBrainAPIMaybeThrows({\n      ctx,\n      method: \"POST\",\n      path: \"self_hosted_event\",\n      data: {\n        selfHostedUuid: anonymousId,\n        eventName,\n        eventFields,\n        tag,\n      },\n    });\n  } catch {\n    // ignore\n  }\n}\n\n/**\n * This serves a really basic API that just returns a JSON blob with the deployments\n * and their credentials.\n * The locally running dashboard can hit this API.\n */\nasync function startServingListDeploymentsApi(ctx: Context, port: number) {\n  await startServer(\n    ctx,\n    port,\n    async (request, response) => {\n      const deployments = await listExistingAnonymousDeployments(ctx);\n      const deploymentsJson = deployments.map((d) => ({\n        name: d.deploymentName,\n        url: localDeploymentUrl(d.config.ports.cloud),\n        adminKey: d.config.adminKey,\n      }));\n      response.setHeader(\"Content-Type\", \"application/json\");\n      response.end(JSON.stringify({ deployments: deploymentsJson }));\n    },\n    {\n      cors: true,\n    },\n  );\n}\n\nexport async function checkIfDashboardIsRunning(ctx: Context) {\n  const dashboardConfig = loadDashboardConfig(ctx);\n  if (dashboardConfig === null) {\n    return false;\n  }\n  // We're checking if the mini API server is running and has a response that\n  // looks like a list of deployments, since it's easier than checking the\n  // dashboard UI + won't trigger the event for the developer opening the dashboard.\n  let resp: Response;\n  try {\n    resp = await fetch(`http://127.0.0.1:${dashboardConfig.apiPort}`);\n  } catch {\n    return false;\n  }\n  if (!resp.ok) {\n    return false;\n  }\n  let data: { deployments: { name: string; url: string; adminKey: string }[] };\n  try {\n    data = await resp.json();\n  } catch {\n    return false;\n  }\n  return Array.isArray(data.deployments);\n}\n\nexport function dashboardUrl(ctx: Context, deploymentName: string) {\n  const dashboardConfig = loadDashboardConfig(ctx);\n  if (dashboardConfig === null) {\n    return null;\n  }\n\n  const queryParams = new URLSearchParams();\n  if (dashboardConfig.apiPort !== DEFAULT_LOCAL_DASHBOARD_API_PORT) {\n    queryParams.set(\"a\", dashboardConfig.apiPort.toString());\n  }\n  queryParams.set(\"d\", deploymentName);\n  const queryString = queryParams.toString();\n  const url = new URL(`http://127.0.0.1:${dashboardConfig.port}`);\n  url.search = queryString;\n  return url.href;\n}\n", "import { Context } from \"../../bundler/context.js\";\nimport { DeploymentType } from \"./api.js\";\nimport { dashboardUrl as localDashboardUrl } from \"./localDeployment/dashboard.js\";\n\nexport const DASHBOARD_HOST = process.env.CONVEX_PROVISION_HOST\n  ? \"http://localhost:6789\"\n  : \"https://dashboard.convex.dev\";\n\nexport async function getDashboardUrl(\n  ctx: Context,\n  {\n    deploymentName,\n    deploymentType,\n  }: {\n    deploymentName: string;\n    deploymentType: DeploymentType;\n  },\n): Promise<string | null> {\n  switch (deploymentType) {\n    case \"anonymous\": {\n      return localDashboardUrl(ctx, deploymentName);\n    }\n    case \"local\":\n    case \"dev\":\n    case \"prod\":\n    case \"preview\":\n    case \"custom\":\n      return deploymentDashboardUrlPage(deploymentName, \"\");\n    default: {\n      deploymentType satisfies never;\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: `Unknown deployment type: ${deploymentType as any}`,\n      });\n    }\n  }\n}\n\nexport function deploymentDashboardUrlPage(\n  configuredDeployment: string | null,\n  page: string,\n): string {\n  const deploymentFrag = configuredDeployment\n    ? `/d/${configuredDeployment}`\n    : \"\";\n  return `${DASHBOARD_HOST}${deploymentFrag}${page}`;\n}\n\nexport function deploymentDashboardUrl(\n  team: string,\n  project: string,\n  deploymentName: string,\n) {\n  return `${projectDashboardUrl(team, project)}/${deploymentName}`;\n}\n\nexport function projectDashboardUrl(team: string, project: string) {\n  return `${teamDashboardUrl(team)}/${project}`;\n}\n\nexport function teamDashboardUrl(team: string) {\n  return `${DASHBOARD_HOST}/t/${team}`;\n}\n", "import { Context } from \"../../../bundler/context.js\";\nimport { logVerbose } from \"../../../bundler/log.js\";\nimport {\n  bigBrainPause,\n  bigBrainRecordActivity,\n  bigBrainStart,\n} from \"./bigBrain.js\";\nimport {\n  LocalDeploymentConfig,\n  loadDeploymentConfig,\n  loadDeploymentConfigFromDir,\n  loadProjectLocalConfig,\n  legacyDeploymentStateDir,\n  rootDeploymentStateDir,\n  saveDeploymentConfig,\n} from \"./filePaths.js\";\nimport {\n  ensureBackendRunning,\n  ensureBackendStopped,\n  localDeploymentUrl,\n  runLocalBackend,\n} from \"./run.js\";\nimport { handlePotentialUpgrade } from \"./upgrade.js\";\nimport { OnDeploymentActivityFunc } from \"../deployment.js\";\nimport { promptSearch } from \"../utils/prompts.js\";\nimport { LocalDeploymentError, printLocalDeploymentOnError } from \"./errors.js\";\nimport {\n  choosePorts,\n  printLocalDeploymentWelcomeMessage,\n  isOffline,\n  LOCAL_BACKEND_INSTANCE_SECRET,\n} from \"./utils.js\";\nimport { ensureBackendBinaryDownloaded } from \"./download.js\";\nexport type DeploymentDetails = {\n  deploymentName: string;\n  deploymentUrl: string;\n  adminKey: string;\n  onActivity: OnDeploymentActivityFunc;\n};\n\nexport async function handleLocalDeployment(\n  ctx: Context,\n  options: {\n    teamSlug: string;\n    projectSlug: string;\n    ports?:\n      | {\n          cloud: number;\n          site: number;\n        }\n      | undefined;\n    backendVersion?: string | undefined;\n    forceUpgrade: boolean;\n  },\n): Promise<DeploymentDetails> {\n  if (await isOffline()) {\n    return handleOffline(ctx, options);\n  }\n\n  const existingDeploymentForProject = await getExistingDeployment(ctx, {\n    projectSlug: options.projectSlug,\n    teamSlug: options.teamSlug,\n  });\n  if (existingDeploymentForProject === null) {\n    printLocalDeploymentWelcomeMessage();\n  }\n  ctx.registerCleanup(async (_exitCode, err) => {\n    if (err instanceof LocalDeploymentError) {\n      printLocalDeploymentOnError();\n    }\n  });\n  if (existingDeploymentForProject !== null) {\n    logVerbose(`Found existing deployment for project ${options.projectSlug}`);\n    // If it's still running for some reason, exit and tell the user to kill it.\n    // It's fine if a different backend is running on these ports though since we'll\n    // pick new ones.\n    await ensureBackendStopped(ctx, {\n      ports: {\n        cloud: existingDeploymentForProject.config.ports.cloud,\n      },\n      maxTimeSecs: 5,\n      deploymentName: existingDeploymentForProject.deploymentName,\n      allowOtherDeployments: true,\n    });\n  }\n\n  const { binaryPath, version } = await ensureBackendBinaryDownloaded(\n    ctx,\n    options.backendVersion === undefined\n      ? {\n          kind: \"latest\",\n          allowedVersion: existingDeploymentForProject?.config.backendVersion,\n        }\n      : { kind: \"version\", version: options.backendVersion },\n  );\n  const [cloudPort, sitePort] = await choosePorts(ctx, {\n    count: 2,\n    startPort: 3210,\n    requestedPorts: [options.ports?.cloud ?? null, options.ports?.site ?? null],\n  });\n  const { deploymentName, adminKey } = await bigBrainStart(ctx, {\n    port: cloudPort,\n    projectSlug: options.projectSlug,\n    teamSlug: options.teamSlug,\n    instanceName: existingDeploymentForProject?.deploymentName ?? null,\n  });\n  const onActivity = async (isOffline: boolean, _wasOffline: boolean) => {\n    await ensureBackendRunning(ctx, {\n      cloudPort,\n      deploymentName,\n      maxTimeSecs: 5,\n    });\n    if (isOffline) {\n      return;\n    }\n    await bigBrainRecordActivity(ctx, {\n      instanceName: deploymentName,\n    });\n  };\n\n  const { cleanupHandle } = await handlePotentialUpgrade(ctx, {\n    deploymentKind: \"local\",\n    deploymentName,\n    oldVersion: existingDeploymentForProject?.config.backendVersion ?? null,\n    newBinaryPath: binaryPath,\n    newVersion: version,\n    ports: { cloud: cloudPort, site: sitePort },\n    adminKey,\n    instanceSecret: LOCAL_BACKEND_INSTANCE_SECRET,\n    forceUpgrade: options.forceUpgrade,\n  });\n\n  // Periodically report activity to BigBrain every 60 seconds.\n  // Uses self-scheduling setTimeout to avoid overlapping requests.\n  let activityTimeout: ReturnType<typeof setTimeout> | null = null;\n  const scheduleActivityPing = () => {\n    activityTimeout = setTimeout(async () => {\n      try {\n        await bigBrainRecordActivity(ctx, {\n          instanceName: deploymentName,\n        });\n      } catch {\n        // Best-effort: don't crash on failed pings\n      }\n      scheduleActivityPing();\n    }, 60_000);\n  };\n  scheduleActivityPing();\n\n  const cleanupFunc = ctx.removeCleanup(cleanupHandle);\n  ctx.registerCleanup(async (exitCode, err) => {\n    if (activityTimeout !== null) {\n      clearTimeout(activityTimeout);\n    }\n    if (cleanupFunc !== null) {\n      await cleanupFunc(exitCode, err);\n    }\n    await bigBrainPause(ctx, {\n      projectSlug: options.projectSlug,\n      teamSlug: options.teamSlug,\n    });\n  });\n\n  return {\n    adminKey,\n    deploymentName,\n    deploymentUrl: localDeploymentUrl(cloudPort),\n    onActivity,\n  };\n}\n\nexport async function loadLocalDeploymentCredentials(\n  ctx: Context,\n  deploymentName: string,\n): Promise<{\n  deploymentName: string;\n  deploymentUrl: string;\n  adminKey: string;\n}> {\n  const config = loadDeploymentConfig(ctx, \"local\", deploymentName);\n  if (config === null) {\n    return ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage:\n        \"Failed to load deployment config - try running `npx convex dev --configure`\",\n    });\n  }\n  return {\n    deploymentName,\n    deploymentUrl: localDeploymentUrl(config.ports.cloud),\n    adminKey: config.adminKey,\n  };\n}\n\nasync function handleOffline(\n  ctx: Context,\n  options: {\n    teamSlug: string;\n    projectSlug: string;\n    ports?: { cloud: number; site: number } | undefined;\n  },\n): Promise<DeploymentDetails> {\n  const { deploymentName, config } =\n    await chooseFromExistingLocalDeployments(ctx);\n  const { binaryPath } = await ensureBackendBinaryDownloaded(ctx, {\n    kind: \"version\",\n    version: config.backendVersion,\n  });\n  const [cloudPort, sitePort] = await choosePorts(ctx, {\n    count: 2,\n    startPort: 3210,\n    requestedPorts: [options.ports?.cloud ?? null, options.ports?.site ?? null],\n  });\n  saveDeploymentConfig(ctx, \"local\", deploymentName, config);\n  await runLocalBackend(ctx, {\n    binaryPath,\n    ports: { cloud: cloudPort, site: sitePort },\n    deploymentName,\n    deploymentKind: \"local\",\n    instanceSecret: LOCAL_BACKEND_INSTANCE_SECRET,\n    isLatestVersion: false,\n  });\n  return {\n    adminKey: config.adminKey,\n    deploymentName,\n    deploymentUrl: localDeploymentUrl(cloudPort),\n    onActivity: async (isOffline: boolean, wasOffline: boolean) => {\n      await ensureBackendRunning(ctx, {\n        cloudPort,\n        deploymentName,\n        maxTimeSecs: 5,\n      });\n      if (isOffline) {\n        return;\n      }\n      if (wasOffline) {\n        await bigBrainStart(ctx, {\n          port: cloudPort,\n          projectSlug: options.projectSlug,\n          teamSlug: options.teamSlug,\n          instanceName: deploymentName,\n        });\n      }\n      await bigBrainRecordActivity(ctx, {\n        instanceName: deploymentName,\n      });\n    },\n  };\n}\n\nasync function getExistingDeployment(\n  ctx: Context,\n  options: {\n    projectSlug: string;\n    teamSlug: string;\n  },\n): Promise<{ deploymentName: string; config: LocalDeploymentConfig } | null> {\n  const { projectSlug, teamSlug } = options;\n\n  // Check project-local storage first - this is the new default location\n  const projectLocal = loadProjectLocalConfig(ctx);\n  if (projectLocal !== null) {\n    // Verify this deployment is for the expected project (matches the naming pattern)\n    const expectedPrefix = `local-${teamSlug.replace(/-/g, \"_\")}-${projectSlug.replace(/-/g, \"_\")}`;\n    if (projectLocal.deploymentName.startsWith(expectedPrefix)) {\n      return projectLocal;\n    }\n    logVerbose(\n      `Project-local deployment ${projectLocal.deploymentName} doesn't match expected prefix ${expectedPrefix}`,\n    );\n  }\n\n  // Fall back to checking legacy home directory\n  const prefix = `local-${teamSlug.replace(/-/g, \"_\")}-${projectSlug.replace(/-/g, \"_\")}`;\n  const legacyDeployments = await getLegacyLocalDeployments(ctx);\n  const existingDeploymentForProject = legacyDeployments.find((d) =>\n    d.deploymentName.startsWith(prefix),\n  );\n  if (existingDeploymentForProject === undefined) {\n    return null;\n  }\n  return {\n    deploymentName: existingDeploymentForProject.deploymentName,\n    config: existingDeploymentForProject.config,\n  };\n}\n\n/**\n * Get local deployments from the legacy home directory location.\n * This is used for backward compatibility and for listing deployments in offline mode.\n */\nasync function getLegacyLocalDeployments(ctx: Context): Promise<\n  Array<{\n    deploymentName: string;\n    config: LocalDeploymentConfig;\n  }>\n> {\n  const dir = rootDeploymentStateDir(\"local\");\n  if (!ctx.fs.exists(dir)) {\n    return [];\n  }\n  const deploymentNames = ctx.fs\n    .listDir(dir)\n    .map((d) => d.name)\n    .filter((d) => d.startsWith(\"local-\"));\n  return deploymentNames.flatMap((deploymentName) => {\n    const legacyDir = legacyDeploymentStateDir(\"local\", deploymentName);\n    const config = loadDeploymentConfigFromDir(ctx, legacyDir);\n    if (config !== null) {\n      return [{ deploymentName, config }];\n    }\n    return [];\n  });\n}\n\n/**\n * Get all local deployments from both project-local and legacy locations.\n */\nasync function getLocalDeployments(ctx: Context): Promise<\n  Array<{\n    deploymentName: string;\n    config: LocalDeploymentConfig;\n  }>\n> {\n  const deployments: Array<{\n    deploymentName: string;\n    config: LocalDeploymentConfig;\n  }> = [];\n\n  // Check project-local storage\n  const projectLocal = loadProjectLocalConfig(ctx);\n  if (\n    projectLocal !== null &&\n    projectLocal.deploymentName.startsWith(\"local-\")\n  ) {\n    deployments.push(projectLocal);\n  }\n\n  // Also include legacy deployments (but avoid duplicates)\n  const legacyDeployments = await getLegacyLocalDeployments(ctx);\n  for (const legacy of legacyDeployments) {\n    if (!deployments.some((d) => d.deploymentName === legacy.deploymentName)) {\n      deployments.push(legacy);\n    }\n  }\n\n  return deployments;\n}\n\nasync function chooseFromExistingLocalDeployments(ctx: Context): Promise<{\n  deploymentName: string;\n  config: LocalDeploymentConfig;\n}> {\n  const localDeployments = await getLocalDeployments(ctx);\n\n  if (localDeployments.length === 0) {\n    return ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage:\n        \"No local deployments found. Please run `npx convex dev` while online first.\",\n    });\n  }\n\n  // Auto-select if there's only one deployment\n  if (localDeployments.length === 1) {\n    logVerbose(\n      `Auto-selecting the only local deployment: ${localDeployments[0].deploymentName}`,\n    );\n    return localDeployments[0];\n  }\n\n  // Multiple deployments (legacy) - prompt user to choose\n  return promptSearch(ctx, {\n    message: \"Choose from an existing local deployment:\",\n    choices: localDeployments.map((d) => ({\n      name: d.deploymentName,\n      value: d,\n    })),\n  });\n}\n", "export type InProjectSelector =\n  | { kind: \"dev\" }\n  | { kind: \"prod\" }\n  | { kind: \"reference\"; reference: string };\n\nexport type ParsedDeploymentSelector =\n  | { kind: \"deploymentName\"; deploymentName: string }\n  | { kind: \"inCurrentProject\"; selector: InProjectSelector }\n  | { kind: \"inProject\"; projectSlug: string; selector: InProjectSelector }\n  | {\n      kind: \"inTeamProject\";\n      teamSlug: string;\n      projectSlug: string;\n      selector: InProjectSelector;\n    };\n\nfunction parseInProjectSelector(s: string): InProjectSelector {\n  if (s === \"dev\") return { kind: \"dev\" };\n  if (s === \"prod\") return { kind: \"prod\" };\n  return { kind: \"reference\", reference: s };\n}\n\n/**\n * Parses the value of the `--deployment` CLI flag\n */\nexport function parseDeploymentSelector(\n  selector: string,\n): ParsedDeploymentSelector {\n  if (/^[a-z]+-[a-z]+-[0-9]+$/.test(selector)) {\n    return { kind: \"deploymentName\", deploymentName: selector };\n  }\n  const parts = selector.split(\":\");\n  if (parts.length === 3) {\n    return {\n      kind: \"inTeamProject\",\n      teamSlug: parts[0],\n      projectSlug: parts[1],\n      selector: parseInProjectSelector(parts[2]),\n    };\n  }\n  if (parts.length === 2) {\n    return {\n      kind: \"inProject\",\n      projectSlug: parts[0],\n      selector: parseInProjectSelector(parts[1]),\n    };\n  }\n  return {\n    kind: \"inCurrentProject\",\n    selector: parseInProjectSelector(selector),\n  };\n}\n", "import { Context } from \"../../bundler/context.js\";\nimport { logVerbose, logWarning } from \"../../bundler/log.js\";\nimport { getTeamAndProjectFromPreviewAdminKey } from \"./deployment.js\";\nimport {\n  assertLocalBackendRunning,\n  localDeploymentUrl,\n} from \"./localDeployment/run.js\";\nimport {\n  ThrowingFetchError,\n  bigBrainAPI,\n  bigBrainAPIMaybeThrows,\n  logAndHandleFetchError,\n  typedPlatformClient,\n} from \"./utils/utils.js\";\nimport { z } from \"zod\";\nimport {\n  DeploymentSelection,\n  ProjectSelection,\n} from \"./deploymentSelection.js\";\nimport { loadLocalDeploymentCredentials } from \"./localDeployment/localDeployment.js\";\nimport { loadAnonymousDeployment } from \"./localDeployment/anonymous.js\";\nimport {\n  parseDeploymentSelector,\n  InProjectSelector,\n} from \"./deploymentSelector.js\";\nimport { chalkStderr } from \"chalk\";\nexport type DeploymentName = string;\nexport type CloudDeploymentType = \"prod\" | \"dev\" | \"preview\" | \"custom\";\nexport type AccountRequiredDeploymentType = CloudDeploymentType | \"local\";\nexport type DeploymentType = AccountRequiredDeploymentType | \"anonymous\";\n\nexport type Project = {\n  id: number;\n  name: string;\n  slug: string;\n  isDemo: boolean;\n};\n\ntype AdminKey = string;\n\n/**\n * Create a new project. If `deploymentToProvision` is specified, also provision a deployment for the project.\n */\nexport async function createProject(\n  ctx: Context,\n  {\n    teamSlug: selectedTeamSlug,\n    projectName,\n    deploymentToProvision,\n  }: {\n    teamSlug: string;\n    projectName: string;\n    deploymentToProvision: {\n      deploymentType: \"prod\" | \"dev\";\n      region: string | null;\n    } | null;\n  },\n): Promise<{\n  projectSlug: string;\n  teamSlug: string;\n  projectsRemaining: number;\n}> {\n  const provisioningArgs = {\n    team: selectedTeamSlug,\n    projectName,\n    ...deploymentToProvision,\n  };\n  const data = await bigBrainAPI({\n    ctx,\n    method: \"POST\",\n    path: \"create_project\",\n    data: provisioningArgs,\n  });\n  const { projectSlug, teamSlug, projectsRemaining } = data;\n  if (\n    projectSlug === undefined ||\n    teamSlug === undefined ||\n    projectsRemaining === undefined\n  ) {\n    const error =\n      \"Unexpected response during provisioning: \" + JSON.stringify(data);\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"transient\",\n      errForSentry: error,\n      printedMessage: error,\n    });\n  }\n  return {\n    projectSlug,\n    teamSlug,\n    projectsRemaining,\n  };\n}\n\n// ----------------------------------------------------------------------\n// Helpers for `deploymentSelectionFromOptions`\n// ----------------------------------------------------------------------\n\nexport const deploymentSelectionWithinProjectSchema = z.discriminatedUnion(\n  \"kind\",\n  [\n    z.object({ kind: z.literal(\"previewName\"), previewName: z.string() }),\n    z.object({ kind: z.literal(\"deploymentName\"), deploymentName: z.string() }),\n    z.object({ kind: z.literal(\"prod\") }),\n    z.object({ kind: z.literal(\"implicitProd\") }),\n    z.object({ kind: z.literal(\"ownDev\") }),\n    z.object({\n      kind: z.literal(\"deploymentSelector\"),\n      selector: z.string(),\n    }),\n  ],\n);\n\nexport type DeploymentSelectionWithinProject = z.infer<\n  typeof deploymentSelectionWithinProjectSchema\n>;\n\ntype DeploymentSelectionOptionsWithinProject = {\n  prod?: boolean | undefined;\n  // Whether this command defaults to prod when no other flags are provided. If\n  // this is not set, the default will be \"ownDev\"\n  implicitProd?: boolean;\n\n  previewName?: string | undefined;\n  deploymentName?: string | undefined;\n  deployment?: string | undefined;\n};\n\nexport type DeploymentSelectionOptions =\n  DeploymentSelectionOptionsWithinProject & {\n    url?: string | undefined;\n    adminKey?: string | undefined;\n    envFile?: string | undefined;\n  };\n\nexport function deploymentSelectionWithinProjectFromOptions(\n  options: DeploymentSelectionOptions,\n): DeploymentSelectionWithinProject {\n  if (options.deployment !== undefined) {\n    return { kind: \"deploymentSelector\", selector: options.deployment };\n  }\n  if (options.previewName !== undefined) {\n    return { kind: \"previewName\", previewName: options.previewName };\n  }\n  if (options.deploymentName !== undefined) {\n    return { kind: \"deploymentName\", deploymentName: options.deploymentName };\n  }\n  if (options.prod) {\n    return { kind: \"prod\" };\n  }\n  if (options.implicitProd) {\n    return { kind: \"implicitProd\" };\n  }\n  return { kind: \"ownDev\" };\n}\n\nexport async function validateDeploymentSelectionForExistingDeployment(\n  ctx: Context,\n  deploymentSelection: DeploymentSelectionWithinProject,\n  source: \"selfHosted\" | \"deployKey\" | \"cliArgs\",\n) {\n  if (\n    deploymentSelection.kind === \"ownDev\" ||\n    deploymentSelection.kind === \"implicitProd\"\n  ) {\n    // These are both considered the \"default\" selection depending on the command, so this is always fine\n    return;\n  }\n  if (deploymentSelection.kind === \"deploymentSelector\") {\n    switch (source) {\n      case \"selfHosted\":\n        return await ctx.crash({\n          exitCode: 1,\n          errorType: \"fatal\",\n          printedMessage:\n            \"The `--deployment` flag cannot be used with a self-hosted deployment.\",\n        });\n      case \"deployKey\":\n        return await ctx.crash({\n          exitCode: 1,\n          errorType: \"fatal\",\n          printedMessage:\n            \"The `--deployment` flag cannot be used with CONVEX_DEPLOY_KEY.\",\n        });\n      case \"cliArgs\":\n        return await ctx.crash({\n          exitCode: 1,\n          errorType: \"fatal\",\n          printedMessage:\n            \"The `--deployment` flag cannot be used with --url and --admin-key.\",\n        });\n    }\n  }\n  switch (source) {\n    case \"selfHosted\":\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage:\n          \"The `--prod`, `--preview-name`, and `--deployment-name` flags cannot be used with a self-hosted deployment.\",\n      });\n    case \"deployKey\":\n      logWarning(\n        \"Ignoring `--prod`, `--preview-name`, or `--deployment-name` flags and using deployment from CONVEX_DEPLOY_KEY\",\n      );\n      break;\n    case \"cliArgs\":\n      logWarning(\n        \"Ignoring `--prod`, `--preview-name`, or `--deployment-name` flags since this command was run with --url and --admin-key\",\n      );\n      break;\n  }\n}\n\n// ----------------------------------------------------------------------\n// Helpers for `checkAccessToSelectedProject`\n// ----------------------------------------------------------------------\n\nasync function hasAccessToProject(\n  ctx: Context,\n  selector: { projectSlug: string; teamSlug: string },\n): Promise<boolean> {\n  try {\n    await bigBrainAPIMaybeThrows({\n      ctx,\n      path: `teams/${selector.teamSlug}/projects/${selector.projectSlug}/deployments`,\n      method: \"GET\",\n    });\n    return true;\n  } catch (err) {\n    if (\n      err instanceof ThrowingFetchError &&\n      (err.serverErrorData?.code === \"TeamNotFound\" ||\n        err.serverErrorData?.code === \"ProjectNotFound\")\n    ) {\n      return false;\n    }\n    return logAndHandleFetchError(ctx, err);\n  }\n}\n\nexport async function checkAccessToSelectedProject(\n  ctx: Context,\n  projectSelection: ProjectSelection,\n): Promise<\n  | { kind: \"hasAccess\"; teamSlug: string; projectSlug: string }\n  | { kind: \"noAccess\" }\n  | { kind: \"unknown\" }\n> {\n  switch (projectSelection.kind) {\n    case \"deploymentName\": {\n      const result = await getTeamAndProjectSlugForDeployment(ctx, {\n        deploymentName: projectSelection.deploymentName,\n      });\n      if (result === null) {\n        return { kind: \"noAccess\" };\n      }\n      return {\n        kind: \"hasAccess\",\n        teamSlug: result.teamSlug,\n        projectSlug: result.projectSlug,\n      };\n    }\n    case \"teamAndProjectSlugs\": {\n      const hasAccess = await hasAccessToProject(ctx, {\n        teamSlug: projectSelection.teamSlug,\n        projectSlug: projectSelection.projectSlug,\n      });\n      if (!hasAccess) {\n        return { kind: \"noAccess\" };\n      }\n      return {\n        kind: \"hasAccess\",\n        teamSlug: projectSelection.teamSlug,\n        projectSlug: projectSelection.projectSlug,\n      };\n    }\n    case \"projectDeployKey\":\n      // Ideally we would be able to do an explicit check here, but if the key is invalid,\n      // it will instead fail as soon as we try to use the key.\n      return { kind: \"unknown\" };\n    default: {\n      projectSelection satisfies never;\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: `Invalid project selection: ${(projectSelection as any).kind}`,\n      });\n    }\n  }\n}\n\nexport async function getTeamAndProjectSlugForDeployment(\n  ctx: Context,\n  selector: { deploymentName: string },\n): Promise<{ teamSlug: string; projectSlug: string } | null> {\n  try {\n    const body = await bigBrainAPIMaybeThrows({\n      ctx,\n      path: `deployment/${selector.deploymentName}/team_and_project`,\n      method: \"GET\",\n    });\n    return { teamSlug: body.team, projectSlug: body.project };\n  } catch (err) {\n    if (\n      err instanceof ThrowingFetchError &&\n      (err.serverErrorData?.code === \"DeploymentNotFound\" ||\n        err.serverErrorData?.code === \"ProjectNotFound\")\n    ) {\n      return null;\n    }\n    return logAndHandleFetchError(ctx, err);\n  }\n}\n\n// ----------------------------------------------------------------------\n// Helpers for fetching deployment credentials\n// ----------------------------------------------------------------------\n\n// Used by dev for upgrade from team and project in convex.json to CONVEX_DEPLOYMENT\nexport async function fetchDeploymentCredentialsProvisioningDevOrProdMaybeThrows(\n  ctx: Context,\n  projectSelection:\n    | { kind: \"teamAndProjectSlugs\"; teamSlug: string; projectSlug: string }\n    | { kind: \"projectDeployKey\"; projectDeployKey: string },\n  deploymentType: \"prod\" | \"dev\",\n): Promise<{\n  deploymentName: string;\n  deploymentUrl: string;\n  adminKey: AdminKey;\n}> {\n  if (projectSelection.kind === \"projectDeployKey\") {\n    const auth = ctx.bigBrainAuth();\n    const doesAuthMatch =\n      auth !== null &&\n      auth.kind === \"projectKey\" &&\n      auth.projectKey === projectSelection.projectDeployKey;\n    if (!doesAuthMatch) {\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        errForSentry: new Error(\n          \"Expected project deploy key to match the big brain auth header\",\n        ),\n        printedMessage: \"Unexpected error when loading the Convex deployment\",\n      });\n    }\n  }\n  let data;\n  try {\n    data = await bigBrainAPIMaybeThrows({\n      ctx,\n      method: \"POST\",\n      path: \"deployment/provision_and_authorize\",\n      data: {\n        teamSlug:\n          projectSelection.kind === \"teamAndProjectSlugs\"\n            ? projectSelection.teamSlug\n            : null,\n        projectSlug:\n          projectSelection.kind === \"teamAndProjectSlugs\"\n            ? projectSelection.projectSlug\n            : null,\n        deploymentType: deploymentType === \"prod\" ? \"prod\" : \"dev\",\n      },\n    });\n  } catch (error) {\n    const msg = \"Unknown error during authorization: \" + error;\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"transient\",\n      errForSentry: new Error(msg),\n      printedMessage: msg,\n    });\n  }\n  const adminKey = data.adminKey;\n  const url = data.url;\n  const deploymentName = data.deploymentName;\n  if (adminKey === undefined || url === undefined) {\n    const msg = \"Unknown error during authorization: \" + JSON.stringify(data);\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"transient\",\n      errForSentry: new Error(msg),\n      printedMessage: msg,\n    });\n  }\n  return { adminKey, deploymentUrl: url, deploymentName };\n}\n\nasync function fetchExistingDevDeploymentCredentialsOrCrash(\n  ctx: Context,\n  deploymentName: DeploymentName,\n): Promise<{\n  deploymentName: string;\n  adminKey: string;\n  url: string;\n  deploymentType: DeploymentType;\n}> {\n  const slugs = await fetchTeamAndProject(ctx, deploymentName);\n  const credentials =\n    await fetchDeploymentCredentialsProvisioningDevOrProdMaybeThrows(\n      ctx,\n      {\n        kind: \"teamAndProjectSlugs\",\n        teamSlug: slugs.team,\n        projectSlug: slugs.project,\n      },\n      \"dev\",\n    );\n  return {\n    deploymentName: credentials.deploymentName,\n    adminKey: credentials.adminKey,\n    url: credentials.deploymentUrl,\n    deploymentType: \"dev\",\n  };\n}\n\n// ----------------------------------------------------------------------\n// Helpers for `loadSelectedDeploymentCredentials`\n// ----------------------------------------------------------------------\n\nasync function handleOwnDev(\n  ctx: Context,\n  projectSelection: ProjectSelection,\n): Promise<{\n  deploymentName: string;\n  adminKey: string;\n  url: string;\n  deploymentType: DeploymentType;\n}> {\n  switch (projectSelection.kind) {\n    case \"deploymentName\": {\n      if (projectSelection.deploymentType === \"local\") {\n        const credentials = await loadLocalDeploymentCredentials(\n          ctx,\n          projectSelection.deploymentName,\n        );\n        return {\n          deploymentName: projectSelection.deploymentName,\n          adminKey: credentials.adminKey,\n          url: credentials.deploymentUrl,\n          deploymentType: \"local\",\n        };\n      }\n      return await fetchExistingDevDeploymentCredentialsOrCrash(\n        ctx,\n        projectSelection.deploymentName,\n      );\n    }\n    case \"teamAndProjectSlugs\":\n    case \"projectDeployKey\": {\n      // Note -- this provisions a dev deployment if one doesn't exist\n      const credentials =\n        await fetchDeploymentCredentialsProvisioningDevOrProdMaybeThrows(\n          ctx,\n          projectSelection,\n          \"dev\",\n        );\n      return {\n        url: credentials.deploymentUrl,\n        adminKey: credentials.adminKey,\n        deploymentName: credentials.deploymentName,\n        deploymentType: \"dev\",\n      };\n    }\n    default: {\n      projectSelection satisfies never;\n      return ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        // This should be unreachable, so don't bother with a printed message.\n        printedMessage: null,\n        errForSentry: `Unexpected project selection: ${(projectSelection as any).kind}`,\n      });\n    }\n  }\n}\n\nasync function handleProd(\n  ctx: Context,\n  projectSelection: ProjectSelection,\n): Promise<{\n  deploymentName: string;\n  adminKey: string;\n  url: string;\n  deploymentType: \"prod\";\n}> {\n  switch (projectSelection.kind) {\n    case \"deploymentName\": {\n      const credentials = await bigBrainAPI({\n        ctx,\n        method: \"POST\",\n        path: \"deployment/authorize_prod\",\n        data: {\n          deploymentName: projectSelection.deploymentName,\n        },\n      });\n      return credentials;\n    }\n    case \"teamAndProjectSlugs\":\n    case \"projectDeployKey\": {\n      const credentials =\n        await fetchDeploymentCredentialsProvisioningDevOrProdMaybeThrows(\n          ctx,\n          projectSelection,\n          \"prod\",\n        );\n      return {\n        url: credentials.deploymentUrl,\n        adminKey: credentials.adminKey,\n        deploymentName: credentials.deploymentName,\n        deploymentType: \"prod\",\n      };\n    }\n  }\n}\n\nasync function handlePreview(\n  ctx: Context,\n  previewName: string,\n  projectSelection: ProjectSelection,\n): Promise<{\n  deploymentName: string;\n  adminKey: string;\n  url: string;\n  deploymentType: \"preview\";\n}> {\n  switch (projectSelection.kind) {\n    case \"deploymentName\":\n    case \"teamAndProjectSlugs\":\n      return await bigBrainAPI({\n        ctx,\n        method: \"POST\",\n        path: \"deployment/authorize_preview\",\n        data: {\n          previewName: previewName,\n          projectSelection: projectSelection,\n        },\n      });\n\n    case \"projectDeployKey\":\n      // TODO -- this should be supported\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage:\n          \"Project deploy keys are not supported for preview deployments\",\n      });\n  }\n}\n\nasync function handleDeploymentName(\n  ctx: Context,\n  deploymentName: string,\n  projectSelection: ProjectSelection,\n): Promise<{\n  deploymentName: string;\n  adminKey: string;\n  url: string;\n  deploymentType: DeploymentType;\n}> {\n  switch (projectSelection.kind) {\n    case \"deploymentName\":\n    case \"teamAndProjectSlugs\":\n      return await bigBrainAPI({\n        ctx,\n        method: \"POST\",\n        path: \"deployment/authorize_within_current_project\",\n        data: {\n          selectedDeploymentName: deploymentName,\n          projectSelection: projectSelection,\n        },\n      });\n    case \"projectDeployKey\":\n      // TODO -- this should be supported\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage:\n          \"Project deploy keys are not supported with the --deployment-name flag\",\n      });\n  }\n}\n\nasync function fetchDeploymentCredentialsWithinCurrentProject(\n  ctx: Context,\n  projectSelection: ProjectSelection,\n  deploymentSelection: DeploymentSelectionWithinProject,\n): Promise<{\n  deploymentName: string;\n  adminKey: string;\n  url: string;\n  deploymentType: DeploymentType;\n}> {\n  switch (deploymentSelection.kind) {\n    case \"ownDev\": {\n      return await handleOwnDev(ctx, projectSelection);\n    }\n    case \"implicitProd\":\n    case \"prod\": {\n      return await handleProd(ctx, projectSelection);\n    }\n    case \"previewName\":\n      return await handlePreview(\n        ctx,\n        deploymentSelection.previewName,\n        projectSelection,\n      );\n    case \"deploymentName\":\n      return await handleDeploymentName(\n        ctx,\n        deploymentSelection.deploymentName,\n        projectSelection,\n      );\n    case \"deploymentSelector\":\n      return await handleDeploymentSelector(\n        ctx,\n        deploymentSelection.selector,\n        projectSelection,\n      );\n    default: {\n      deploymentSelection satisfies never;\n      return ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        // This should be unreachable, so don't bother with a printed message.\n        printedMessage: null,\n        errForSentry: `Unexpected deployment selection: ${deploymentSelection as any}`,\n      });\n    }\n  }\n}\n\nasync function resolveDeploymentNameByReference(\n  ctx: Context,\n  teamSlug: string,\n  projectSlug: string,\n  reference: string,\n): Promise<string> {\n  try {\n    const result = await typedPlatformClient(ctx, { throw: true }).GET(\n      \"/teams/{team_id_or_slug}/projects/{project_slug}/deployment\",\n      {\n        params: {\n          path: { team_id_or_slug: teamSlug, project_slug: projectSlug },\n          query: { reference },\n        },\n      },\n    );\n\n    return result.data!.name;\n  } catch (err) {\n    if (\n      err instanceof ThrowingFetchError &&\n      err.serverErrorData?.code === \"DeploymentNotFound\"\n    ) {\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: `Deployment \u201C${reference}\u201D not found. To create a new deployment, use ${chalkStderr.bold(`npx convex deployment create ${reference} --team ${teamSlug} --project ${projectSlug} --select`)}`,\n        errForSentry: err,\n      });\n    }\n    return await logAndHandleFetchError(ctx, err);\n  }\n}\n\nasync function handleRefInProject(\n  ctx: Context,\n  selector: InProjectSelector,\n  projectSelection: ProjectSelection,\n): Promise<{\n  deploymentName: string;\n  adminKey: string;\n  url: string;\n  deploymentType: DeploymentType;\n}> {\n  switch (selector.kind) {\n    case \"dev\":\n      return await handleOwnDev(ctx, projectSelection);\n    case \"prod\":\n      return await handleProd(ctx, projectSelection);\n    case \"reference\": {\n      const access = await checkAccessToSelectedProject(ctx, projectSelection);\n      if (access.kind !== \"hasAccess\") {\n        return await ctx.crash({\n          exitCode: 1,\n          errorType: \"fatal\",\n          printedMessage:\n            \"You don't have access to the selected project. Run `npx convex dev` to select a different project.\",\n        });\n      }\n      const deploymentName = await resolveDeploymentNameByReference(\n        ctx,\n        access.teamSlug,\n        access.projectSlug,\n        selector.reference,\n      );\n      return await handleDeploymentName(ctx, deploymentName, projectSelection);\n    }\n  }\n}\n\nasync function handleDeploymentSelector(\n  ctx: Context,\n  selector: string,\n  projectSelection: ProjectSelection,\n): Promise<{\n  deploymentName: string;\n  adminKey: string;\n  url: string;\n  deploymentType: DeploymentType;\n}> {\n  const parsed = parseDeploymentSelector(selector);\n  switch (parsed.kind) {\n    case \"deploymentName\":\n      return await handleDeploymentName(\n        ctx,\n        parsed.deploymentName,\n        projectSelection,\n      );\n    case \"inCurrentProject\":\n      return await handleRefInProject(ctx, parsed.selector, projectSelection);\n    case \"inProject\": {\n      const access = await checkAccessToSelectedProject(ctx, projectSelection);\n      if (access.kind !== \"hasAccess\") {\n        return await ctx.crash({\n          exitCode: 1,\n          errorType: \"fatal\",\n          printedMessage:\n            \"You don't have access to the selected project. Run `npx convex dev` to select a different project.\",\n        });\n      }\n      return await handleRefInProject(ctx, parsed.selector, {\n        kind: \"teamAndProjectSlugs\",\n        teamSlug: access.teamSlug,\n        projectSlug: parsed.projectSlug,\n      });\n    }\n    case \"inTeamProject\":\n      return await handleRefInProject(ctx, parsed.selector, {\n        kind: \"teamAndProjectSlugs\",\n        teamSlug: parsed.teamSlug,\n        projectSlug: parsed.projectSlug,\n      });\n  }\n}\n\nasync function _loadExistingDeploymentCredentialsForProject(\n  ctx: Context,\n  targetProject: ProjectSelection,\n  deploymentSelection: DeploymentSelectionWithinProject,\n  { ensureLocalRunning } = { ensureLocalRunning: true },\n): Promise<DetailedDeploymentCredentials> {\n  const accessResult = await checkAccessToSelectedProject(ctx, targetProject);\n  if (accessResult.kind === \"noAccess\") {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage:\n        \"You don't have access to the selected project. Run `npx convex dev` to select a different project.\",\n    });\n  }\n  const result = await fetchDeploymentCredentialsWithinCurrentProject(\n    ctx,\n    targetProject,\n    deploymentSelection,\n  );\n  logVerbose(\n    `Deployment URL: ${result.url}, Deployment Name: ${result.deploymentName}, Deployment Type: ${result.deploymentType}`,\n  );\n  if (ensureLocalRunning && result.deploymentType === \"local\") {\n    await assertLocalBackendRunning(ctx, {\n      url: result.url,\n      deploymentName: result.deploymentName,\n    });\n  }\n  return {\n    ...result,\n    deploymentFields: {\n      deploymentName: result.deploymentName,\n      deploymentType: result.deploymentType,\n\n      projectSlug:\n        accessResult.kind === \"hasAccess\" ? accessResult.projectSlug : null,\n      teamSlug:\n        accessResult.kind === \"hasAccess\" ? accessResult.teamSlug : null,\n    },\n  };\n}\n\nexport type DetailedDeploymentCredentials = {\n  adminKey: string;\n  url: string;\n  deploymentFields: {\n    deploymentName: string;\n    deploymentType: DeploymentType;\n    projectSlug: string | null;\n    teamSlug: string | null;\n  } | null;\n};\n\n/**\n * This is used by most commands to determine which deployment to act on, taking into account the deployment selection flags.\n */\nexport async function loadSelectedDeploymentCredentials(\n  ctx: Context,\n  deploymentSelection: DeploymentSelection,\n  { ensureLocalRunning } = { ensureLocalRunning: true },\n): Promise<DetailedDeploymentCredentials> {\n  switch (deploymentSelection.kind) {\n    case \"existingDeployment\":\n      // We're already set up.\n      logVerbose(\n        `Deployment URL: ${deploymentSelection.deploymentToActOn.url}, Deployment Name: ${deploymentSelection.deploymentToActOn.deploymentFields?.deploymentName ?? \"unknown\"}, Deployment Type: ${deploymentSelection.deploymentToActOn.deploymentFields?.deploymentType ?? \"unknown\"}`,\n      );\n      return {\n        adminKey: deploymentSelection.deploymentToActOn.adminKey,\n        url: deploymentSelection.deploymentToActOn.url,\n        deploymentFields:\n          deploymentSelection.deploymentToActOn.deploymentFields,\n      };\n    case \"chooseProject\":\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage:\n          \"No CONVEX_DEPLOYMENT set, run `npx convex dev` to configure a Convex project\",\n      });\n    case \"preview\": {\n      const slugs = await getTeamAndProjectFromPreviewAdminKey(\n        ctx,\n        deploymentSelection.previewDeployKey,\n      );\n      return await _loadExistingDeploymentCredentialsForProject(\n        ctx,\n        {\n          kind: \"teamAndProjectSlugs\",\n          teamSlug: slugs.teamSlug,\n          projectSlug: slugs.projectSlug,\n        },\n        // Note that the user could select a non-preview deployment here, and it would succeed if the user is logged in locally because getBigBrainAuth prefers the user's access token over the preview deploy key.\n        deploymentSelection.selectionWithinProject,\n        { ensureLocalRunning },\n      );\n    }\n    case \"deploymentWithinProject\": {\n      return await _loadExistingDeploymentCredentialsForProject(\n        ctx,\n        deploymentSelection.targetProject,\n        deploymentSelection.selectionWithinProject,\n        { ensureLocalRunning },\n      );\n    }\n    case \"anonymous\": {\n      if (deploymentSelection.deploymentName === null) {\n        return await ctx.crash({\n          exitCode: 1,\n          errorType: \"fatal\",\n          printedMessage:\n            \"No CONVEX_DEPLOYMENT set, run `npx convex dev` to configure a Convex project\",\n        });\n      }\n      const config = await loadAnonymousDeployment(\n        ctx,\n        deploymentSelection.deploymentName,\n      );\n      const url = localDeploymentUrl(config.ports.cloud);\n      if (ensureLocalRunning) {\n        await assertLocalBackendRunning(ctx, {\n          url,\n          deploymentName: deploymentSelection.deploymentName,\n        });\n      }\n      return {\n        adminKey: config.adminKey,\n        url,\n        deploymentFields: {\n          deploymentName: deploymentSelection.deploymentName,\n          deploymentType: \"anonymous\",\n          projectSlug: null,\n          teamSlug: null,\n        },\n      };\n    }\n    default: {\n      deploymentSelection satisfies never;\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: \"Unknown deployment type\",\n      });\n    }\n  }\n}\n\nexport async function fetchTeamAndProject(\n  ctx: Context,\n  deploymentName: string,\n) {\n  const data = (await bigBrainAPI({\n    ctx,\n    method: \"GET\",\n    path: `deployment/${deploymentName}/team_and_project`,\n  })) as {\n    team: string; // slug\n    project: string; // slug\n    teamId: number;\n    projectId: number;\n  };\n\n  const { team, project } = data;\n  if (team === undefined || project === undefined) {\n    const msg =\n      \"Unknown error when fetching team and project: \" + JSON.stringify(data);\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"transient\",\n      errForSentry: new Error(msg),\n      printedMessage: msg,\n    });\n  }\n\n  return data;\n}\n\nexport async function fetchTeamAndProjectForKey(\n  ctx: Context,\n  // Deployment deploy key, like `prod:happy-animal-123|<stuff>`\n  deployKey: string,\n) {\n  const data = (await bigBrainAPI({\n    ctx,\n    method: \"POST\",\n    path: `deployment/team_and_project_for_key`,\n    data: {\n      deployKey: deployKey,\n    },\n  })) as {\n    team: string; // slug\n    project: string; // slug\n    teamId: number;\n    projectId: number;\n  };\n\n  const { team, project } = data;\n  if (team === undefined || project === undefined) {\n    const msg =\n      \"Unknown error when fetching team and project: \" + JSON.stringify(data);\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"transient\",\n      errForSentry: new Error(msg),\n      printedMessage: msg,\n    });\n  }\n\n  return data;\n}\n\nexport async function getTeamsForUser(ctx: Context) {\n  const teams = await bigBrainAPI<{ id: number; name: string; slug: string }[]>(\n    {\n      ctx,\n      method: \"GET\",\n      path: \"teams\",\n    },\n  );\n  return teams;\n}\n", "import { chalkStderr } from \"chalk\";\nimport os from \"os\";\nimport path from \"path\";\nimport { rootDirectory } from \"./utils.js\";\nimport { Context } from \"../../../bundler/context.js\";\nimport { logError, logVerbose } from \"../../../bundler/log.js\";\nimport { z } from \"zod\";\n\nexport function globalConfigPath(): string {\n  return path.join(rootDirectory(), \"config.json\");\n}\n\n// GlobalConfig is stored in a file that very old versions of Convex also need to access.\n// Everything besides accessToken must be optional forever.\n// GlobalConfig is deleted on logout. It is primarily used for the accessToken.\nexport type GlobalConfig = {\n  accessToken: string;\n  // Means \"Don't use local dev unless CLI version is at least 1.19\" (actual version TBD)\n  optOutOfLocalDevDeploymentsUntilBetaOver?: boolean | undefined;\n};\n\nconst schema = z.object({\n  accessToken: z.string().min(1),\n  optOutOfLocalDevDeploymentsUntilBetaOver: z.boolean().optional(),\n});\n\nexport function readGlobalConfig(ctx: Context): GlobalConfig | null {\n  const configPath = globalConfigPath();\n  let configFile;\n  try {\n    configFile = ctx.fs.readUtf8File(configPath);\n  } catch {\n    return null;\n  }\n  try {\n    const storedConfig = JSON.parse(configFile);\n    const config: GlobalConfig = schema.parse(storedConfig);\n    return config;\n  } catch (err) {\n    // Print an error and act as if the file does not exist.\n    logError(\n      chalkStderr.red(\n        `Failed to parse global config in ${configPath} with error ${\n          err as any\n        }.`,\n      ),\n    );\n    return null;\n  }\n}\n\n/** Write the global config, preserving existing properties we don't understand. */\nexport async function modifyGlobalConfig(ctx: Context, config: GlobalConfig) {\n  const configPath = globalConfigPath();\n  let configFile;\n  try {\n    configFile = ctx.fs.readUtf8File(configPath);\n    // totally fine for it not to exist\n    // eslint-disable-next-line no-empty\n  } catch {}\n  // storedConfig may contain properties this version of the CLI doesn't understand.\n  let storedConfig = {};\n  if (configFile) {\n    try {\n      storedConfig = JSON.parse(configFile);\n      schema.parse(storedConfig);\n    } catch (err) {\n      logError(\n        chalkStderr.red(\n          `Failed to parse global config in ${configPath} with error ${\n            err as any\n          }.`,\n        ),\n      );\n      storedConfig = {};\n    }\n  }\n  const newConfig: GlobalConfig = { ...storedConfig, ...config };\n  await overrwriteGlobalConfig(ctx, newConfig);\n}\n\n/** Write global config, overwriting any existing settings. */\nasync function overrwriteGlobalConfig(ctx: Context, config: GlobalConfig) {\n  const dirName = rootDirectory();\n  ctx.fs.mkdir(dirName, { allowExisting: true });\n  const path = globalConfigPath();\n  try {\n    ctx.fs.writeUtf8File(path, JSON.stringify(config, null, 2));\n  } catch (err) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"invalid filesystem data\",\n      errForSentry: err,\n      printedMessage: chalkStderr.red(\n        `Failed to write auth config to ${path} with error: ${err as any}`,\n      ),\n    });\n  }\n  logVerbose(`Saved credentials to ${formatPathForPrinting(path)}`);\n}\n\nexport function formatPathForPrinting(path: string) {\n  const homedir = os.homedir();\n  if (process.platform === \"darwin\" && path.startsWith(homedir)) {\n    return path.replace(homedir, \"~\");\n  }\n  return path;\n}\n", "import { PlatformProjectDetails } from \"@convex-dev/platform/managementApi\";\nimport { BigBrainAuth, Context } from \"../../bundler/context.js\";\nimport { logVerbose } from \"../../bundler/log.js\";\nimport {\n  AccountRequiredDeploymentType,\n  DeploymentSelectionOptions,\n  DeploymentSelectionWithinProject,\n  deploymentSelectionWithinProjectFromOptions,\n  DeploymentType,\n  fetchTeamAndProjectForKey,\n  validateDeploymentSelectionForExistingDeployment,\n} from \"./api.js\";\nimport {\n  deploymentNameFromAdminKeyOrCrash,\n  deploymentTypeFromAdminKey,\n  getDeploymentTypeFromConfiguredDeployment,\n  isAnonymousDeployment,\n  isDeploymentKey,\n  isPreviewDeployKey,\n  isProjectKey,\n  stripDeploymentTypePrefix,\n} from \"./deployment.js\";\nimport { parseDeploymentSelector } from \"./deploymentSelector.js\";\nimport { getBuildEnvironment } from \"./envvars.js\";\nimport { readGlobalConfig } from \"./utils/globalConfig.js\";\nimport {\n  CONVEX_DEPLOYMENT_ENV_VAR_NAME,\n  CONVEX_DEPLOY_KEY_ENV_VAR_NAME,\n  CONVEX_SELF_HOSTED_ADMIN_KEY_VAR_NAME,\n  CONVEX_SELF_HOSTED_URL_VAR_NAME,\n  ENV_VAR_FILE_PATH,\n  bigBrainAPI,\n  processDeployKeyValue,\n  typedPlatformClient,\n} from \"./utils/utils.js\";\nimport * as dotenv from \"dotenv\";\n\n// ----------------------------------------------------------------------------\n// Big Brain Auth\n// ----------------------------------------------------------------------------\n\n/**\n * The auth header can be a few different things:\n * * An access token (corresponds to device authorization, usually stored in `~/.convex/config.json`)\n * * A preview deploy key (set via the `CONVEX_DEPLOY_KEY` environment variable)\n * * A project key (set via the `CONVEX_DEPLOY_KEY` environment variable)\n * * A deployment key if a deployment key (set via `CONVEX_DEPLOY_KEY` environment variable)\n *\n * Project keys take precedence over the the access token.\n * Deployment keys take precedence over the the access token.\n * This makes using one of these keys while logged in or logged out work the same.\n *\n * We check for the `CONVEX_DEPLOY_KEY` in the `--env-file` if it's provided.\n * Otherwise, we check in the `.env` and `.env.local` files.\n *\n * If we later prompt for log in, we need to call `ctx.setBigBrainAuthHeader` to\n * update the value.\n *\n * @param ctx\n * @param envFile\n * @returns\n */\nexport async function initializeBigBrainAuth(\n  ctx: Context,\n  initialArgs: {\n    url?: string | undefined;\n    adminKey?: string | undefined;\n    envFile?: string | undefined;\n  },\n): Promise<void> {\n  if (initialArgs.url !== undefined && initialArgs.adminKey !== undefined) {\n    // Do not check any env vars if `url` and `adminKey` are specified via CLI\n    ctx._updateBigBrainAuth(\n      getBigBrainAuth(ctx, {\n        previewDeployKey: null,\n        projectKey: null,\n        deploymentKey: null,\n      }),\n    );\n    return;\n  }\n  if (initialArgs.envFile !== undefined) {\n    const existingFile = ctx.fs.exists(initialArgs.envFile)\n      ? ctx.fs.readUtf8File(initialArgs.envFile)\n      : null;\n    if (existingFile === null) {\n      return ctx.crash({\n        exitCode: 1,\n        errorType: \"invalid filesystem or env vars\",\n        printedMessage: \"env file does not exist\",\n      });\n    }\n    const config = dotenv.parse(existingFile);\n    const rawDeployKey = config[CONVEX_DEPLOY_KEY_ENV_VAR_NAME];\n    const deployKey = await processDeployKeyValue(ctx, rawDeployKey);\n    if (deployKey !== undefined) {\n      const bigBrainAuth = getBigBrainAuth(ctx, {\n        previewDeployKey: isPreviewDeployKey(deployKey) ? deployKey : null,\n        projectKey: isProjectKey(deployKey) ? deployKey : null,\n        deploymentKey: isDeploymentKey(deployKey) ? deployKey : null,\n      });\n      ctx._updateBigBrainAuth(bigBrainAuth);\n      return;\n    }\n    // No deploy key was found in the env file, so fall back on using the global config\n    ctx._updateBigBrainAuth(\n      getBigBrainAuth(ctx, {\n        previewDeployKey: null,\n        projectKey: null,\n        deploymentKey: null,\n      }),\n    );\n    return;\n  }\n  dotenv.config({ path: ENV_VAR_FILE_PATH });\n  dotenv.config();\n  const rawDeployKey = process.env[CONVEX_DEPLOY_KEY_ENV_VAR_NAME];\n  const deployKey = await processDeployKeyValue(ctx, rawDeployKey);\n  if (deployKey !== undefined) {\n    const bigBrainAuth = getBigBrainAuth(ctx, {\n      previewDeployKey: isPreviewDeployKey(deployKey) ? deployKey : null,\n      projectKey: isProjectKey(deployKey) ? deployKey : null,\n      deploymentKey: isDeploymentKey(deployKey) ? deployKey : null,\n    });\n    ctx._updateBigBrainAuth(bigBrainAuth);\n    return;\n  }\n  ctx._updateBigBrainAuth(\n    getBigBrainAuth(ctx, {\n      previewDeployKey: null,\n      projectKey: null,\n      deploymentKey: null,\n    }),\n  );\n  return;\n}\n\nexport async function updateBigBrainAuthAfterLogin(\n  ctx: Context,\n  accessToken: string,\n) {\n  const existingAuth = ctx.bigBrainAuth();\n  if (existingAuth !== null && existingAuth.kind === \"projectKey\") {\n    logVerbose(\n      `Ignoring update to big brain auth since project key takes precedence`,\n    );\n    return;\n  }\n  ctx._updateBigBrainAuth({\n    accessToken: accessToken,\n    kind: \"accessToken\",\n    header: `Bearer ${accessToken}`,\n  });\n}\n\nexport async function clearBigBrainAuth(ctx: Context) {\n  ctx._updateBigBrainAuth(null);\n}\n\nfunction getBigBrainAuth(\n  ctx: Context,\n  opts: {\n    previewDeployKey: string | null;\n    projectKey: string | null;\n    deploymentKey: string | null;\n  },\n): BigBrainAuth | null {\n  if (process.env.CONVEX_OVERRIDE_ACCESS_TOKEN) {\n    return {\n      accessToken: process.env.CONVEX_OVERRIDE_ACCESS_TOKEN,\n      kind: \"accessToken\",\n      header: `Bearer ${process.env.CONVEX_OVERRIDE_ACCESS_TOKEN}`,\n    };\n  }\n  if (opts.projectKey !== null) {\n    // Project keys take precedence over global config.\n    return {\n      header: `Bearer ${opts.projectKey}`,\n      kind: \"projectKey\",\n      projectKey: opts.projectKey,\n    };\n  }\n  if (opts.deploymentKey !== null) {\n    // Deployment keys take precedence over global config.\n    return {\n      header: `Bearer ${opts.deploymentKey}`,\n      kind: \"deploymentKey\",\n      deploymentKey: opts.deploymentKey,\n    };\n  }\n  const globalConfig = readGlobalConfig(ctx);\n  if (globalConfig) {\n    return {\n      kind: \"accessToken\",\n      header: `Bearer ${globalConfig.accessToken}`,\n      accessToken: globalConfig.accessToken,\n    };\n  }\n  if (opts.previewDeployKey !== null) {\n    return {\n      header: `Bearer ${opts.previewDeployKey}`,\n      kind: \"previewDeployKey\",\n      previewDeployKey: opts.previewDeployKey,\n    };\n  }\n  return null;\n}\n\n// ----------------------------------------------------------------------------\n// Deployment Selection\n// ----------------------------------------------------------------------------\n/**\n * Our CLI has logic to select which deployment to act on.\n *\n * We first check whether we're targeting a deployment within a project, or if we\n * know exactly which deployment to act on (e.g. in the case of self-hosting).\n *\n * We also special case preview deploys since the presence of a preview deploy key\n * triggers different behavior in `npx convex deploy`.\n *\n * Most commands will immediately compute the deployment selection, and then combine\n * that with any relevant CLI flags to figure out which deployment to talk to.\n *\n * Different commands do different things (e.g. `dev` will allow you to create a new project,\n * `deploy` has different behavior for preview deploys)\n *\n * This should be kept in sync with `initializeBigBrainAuth` since environment variables\n * like `CONVEX_DEPLOY_KEY` are used for both deployment selection and auth.\n */\nexport type DeploymentSelection =\n  | {\n      kind: \"existingDeployment\";\n      deploymentToActOn: {\n        url: string;\n        adminKey: string;\n      } & (\n        | {\n            deploymentFields: DeploymentFields;\n            source: \"deployKey\";\n          }\n        | {\n            deploymentFields: null;\n            source: \"selfHosted\" | \"cliArgs\";\n          }\n      );\n    }\n  | {\n      kind: \"deploymentWithinProject\";\n      targetProject: ProjectSelection;\n      selectionWithinProject: DeploymentSelectionWithinProject;\n    }\n  | {\n      kind: \"preview\";\n      previewDeployKey: string;\n      selectionWithinProject: DeploymentSelectionWithinProject;\n    }\n  | {\n      kind: \"chooseProject\";\n      selectionWithinProject: DeploymentSelectionWithinProject;\n    }\n  | {\n      kind: \"anonymous\";\n      deploymentName: string | null;\n      selectionWithinProject: DeploymentSelectionWithinProject;\n    };\n\ntype DeploymentFields = {\n  deploymentName: string;\n  deploymentType: DeploymentType;\n  projectSlug: string;\n  teamSlug: string;\n};\n\nexport type ProjectSelection =\n  | {\n      kind: \"teamAndProjectSlugs\";\n      teamSlug: string;\n      projectSlug: string;\n    }\n  | {\n      kind: \"deploymentName\";\n      deploymentName: string;\n      deploymentType: AccountRequiredDeploymentType | null;\n    }\n  | {\n      kind: \"projectDeployKey\";\n      projectDeployKey: string;\n    };\n\nexport async function getDeploymentSelection(\n  ctx: Context,\n  cliArgs: DeploymentSelectionOptions,\n): Promise<DeploymentSelection> {\n  const metadata = await _getDeploymentSelection(ctx, cliArgs);\n  if (metadata.kind === \"existingDeployment\") {\n    const selectionWithinProject =\n      deploymentSelectionWithinProjectFromOptions(cliArgs);\n    await validateDeploymentSelectionForExistingDeployment(\n      ctx,\n      selectionWithinProject,\n      metadata.deploymentToActOn.source,\n    );\n  }\n  logDeploymentSelection(ctx, metadata);\n  return metadata;\n}\n\nfunction logDeploymentSelection(_ctx: Context, selection: DeploymentSelection) {\n  switch (selection.kind) {\n    case \"existingDeployment\": {\n      logVerbose(\n        `Existing deployment: ${selection.deploymentToActOn.url} ${selection.deploymentToActOn.source}`,\n      );\n      break;\n    }\n    case \"deploymentWithinProject\": {\n      logVerbose(\n        `Deployment within project: ${prettyProjectSelection(selection.targetProject)}`,\n      );\n      break;\n    }\n    case \"preview\": {\n      logVerbose(`Preview deploy key`);\n      break;\n    }\n    case \"chooseProject\": {\n      logVerbose(`Choose project`);\n      break;\n    }\n    case \"anonymous\": {\n      logVerbose(\n        `Anonymous, has selected deployment?: ${selection.deploymentName !== null}`,\n      );\n      break;\n    }\n    default: {\n      selection satisfies never;\n      logVerbose(`Unknown deployment selection`);\n    }\n  }\n  return null;\n}\n\nfunction prettyProjectSelection(selection: ProjectSelection) {\n  switch (selection.kind) {\n    case \"teamAndProjectSlugs\": {\n      return `Team and project slugs: ${selection.teamSlug} ${selection.projectSlug}`;\n    }\n    case \"deploymentName\": {\n      return `Deployment name: ${selection.deploymentName}`;\n    }\n    case \"projectDeployKey\": {\n      return `Project deploy key`;\n    }\n    default: {\n      selection satisfies never;\n      return `Unknown`;\n    }\n  }\n}\n\nasync function _getDeploymentSelection(\n  ctx: Context,\n  cliArgs: DeploymentSelectionOptions,\n): Promise<DeploymentSelection> {\n  const selectionWithinProject =\n    deploymentSelectionWithinProjectFromOptions(cliArgs);\n  /*\n   - url + adminKey specified via CLI\n   - Do not check any env vars (including ones relevant for auth)\n  */\n  if (cliArgs.url !== undefined && cliArgs.adminKey !== undefined) {\n    return {\n      kind: \"existingDeployment\",\n      deploymentToActOn: {\n        url: cliArgs.url,\n        adminKey: cliArgs.adminKey,\n        deploymentFields: null,\n        source: \"cliArgs\",\n      },\n    };\n  }\n\n  // If --deployment is a fully qualified selector (team:project:ref or a\n  // deployment name), we don't need a current project context \u2014 handle it\n  // before env var resolution.\n  if (cliArgs.deployment !== undefined) {\n    const parsed = parseDeploymentSelector(cliArgs.deployment);\n    if (parsed.kind === \"inTeamProject\") {\n      return {\n        kind: \"deploymentWithinProject\",\n        targetProject: {\n          kind: \"teamAndProjectSlugs\",\n          teamSlug: parsed.teamSlug,\n          projectSlug: parsed.projectSlug,\n        },\n        selectionWithinProject: {\n          kind: \"deploymentSelector\",\n          selector: cliArgs.deployment,\n        },\n      };\n    }\n    if (parsed.kind === \"deploymentName\") {\n      return {\n        kind: \"deploymentWithinProject\",\n        targetProject: {\n          kind: \"deploymentName\",\n          deploymentName: parsed.deploymentName,\n          deploymentType: null,\n        },\n        selectionWithinProject: {\n          kind: \"deploymentSelector\",\n          selector: cliArgs.deployment,\n        },\n      };\n    }\n  }\n\n  if (cliArgs.envFile !== undefined) {\n    // If an `--env-file` is specified, it must contain enough information for both auth and deployment selection.\n    logVerbose(`Checking env file: ${cliArgs.envFile}`);\n    const existingFile = ctx.fs.exists(cliArgs.envFile)\n      ? ctx.fs.readUtf8File(cliArgs.envFile)\n      : null;\n    if (existingFile === null) {\n      return ctx.crash({\n        exitCode: 1,\n        errorType: \"invalid filesystem or env vars\",\n        printedMessage: \"env file does not exist\",\n      });\n    }\n    const config = dotenv.parse(existingFile);\n    const result = await getDeploymentSelectionFromEnv(\n      ctx,\n      selectionWithinProject,\n      (name) =>\n        config[name] === undefined || config[name] === \"\" ? null : config[name],\n    );\n    if (result.kind === \"unknown\") {\n      return ctx.crash({\n        exitCode: 1,\n        errorType: \"invalid filesystem or env vars\",\n        printedMessage:\n          `env file \\`${cliArgs.envFile}\\` did not contain environment variables for a Convex deployment. ` +\n          `Expected \\`${CONVEX_DEPLOY_KEY_ENV_VAR_NAME}\\`, \\`${CONVEX_DEPLOYMENT_ENV_VAR_NAME}\\`, or both \\`${CONVEX_SELF_HOSTED_URL_VAR_NAME}\\` and \\`${CONVEX_SELF_HOSTED_ADMIN_KEY_VAR_NAME}\\` to be set.`,\n      });\n    }\n    return result.metadata;\n  }\n  // start with .env.local (but doesn't override existing)\n  dotenv.config({ path: ENV_VAR_FILE_PATH });\n  // for variables not already set, use .env values\n  dotenv.config();\n  const result = await getDeploymentSelectionFromEnv(\n    ctx,\n    selectionWithinProject,\n    (name) => {\n      const value = process.env[name];\n      if (value === undefined || value === \"\") {\n        return null;\n      }\n      return value;\n    },\n  );\n  if (result.kind !== \"unknown\") {\n    return result.metadata;\n  }\n  // none of these?\n\n  // Check if they're logged in\n  const isLoggedIn = ctx.bigBrainAuth() !== null;\n  if (\n    (!isLoggedIn || process.env.CONVEX_AGENT_MODE === \"anonymous\") &&\n    shouldAllowAnonymousDevelopment()\n  ) {\n    return {\n      kind: \"anonymous\",\n      deploymentName: null,\n      selectionWithinProject,\n    };\n  }\n\n  // Choose a project interactively later\n  return {\n    kind: \"chooseProject\",\n    selectionWithinProject,\n  };\n}\n\nasync function getDeploymentSelectionFromEnv(\n  ctx: Context,\n  selectionWithinProject: DeploymentSelectionWithinProject,\n  getEnv: (name: string) => string | null,\n): Promise<\n  { kind: \"success\"; metadata: DeploymentSelection } | { kind: \"unknown\" }\n> {\n  const rawDeployKey = getEnv(CONVEX_DEPLOY_KEY_ENV_VAR_NAME);\n  const deployKey = await processDeployKeyValue(\n    ctx,\n    rawDeployKey === null ? undefined : rawDeployKey,\n  );\n  if (deployKey !== undefined) {\n    const deployKeyType = isPreviewDeployKey(deployKey)\n      ? \"preview\"\n      : isProjectKey(deployKey)\n        ? \"project\"\n        : \"deployment\";\n    switch (deployKeyType) {\n      case \"preview\": {\n        // `CONVEX_DEPLOY_KEY` is set to a preview deploy key so this takes precedence over anything else.\n        // At the moment, we don't verify that there aren't other env vars that would also be used for deployment selection (e.g. `CONVEX_DEPLOYMENT`)\n        return {\n          kind: \"success\",\n          metadata: {\n            kind: \"preview\",\n            previewDeployKey: deployKey,\n            selectionWithinProject,\n          },\n        };\n      }\n      case \"project\": {\n        // `CONVEX_DEPLOY_KEY` is set to a project deploy key.\n        // Commands can select any deployment within the project. At the moment we don't check for other env vars (e.g. `CONVEX_DEPLOYMENT`)\n        return {\n          kind: \"success\",\n          metadata: {\n            kind: \"deploymentWithinProject\",\n            targetProject: {\n              kind: \"projectDeployKey\",\n              projectDeployKey: deployKey,\n            },\n            selectionWithinProject,\n          },\n        };\n      }\n      case \"deployment\": {\n        // `CONVEX_DEPLOY_KEY` is set to a deployment's deploy key.\n        // Deploy to this deployment -- selectors like `--prod` / `--preview-name` will be ignored.\n        // At the moment, we don't verify that there aren't other env vars that would also be used for deployment selection (e.g. `CONVEX_DEPLOYMENT`)\n        const deploymentName = await deploymentNameFromAdminKeyOrCrash(\n          ctx,\n          deployKey,\n        );\n        const deploymentType = deploymentTypeFromAdminKey(deployKey);\n        // We cannot derive the deployment URL from the deploy key, because it\n        // might be a custom domain. Ask big brain for the URL.\n        const url = await bigBrainAPI({\n          ctx,\n          method: \"POST\",\n          path: \"deployment/url_for_key\",\n          data: {\n            deployKey: deployKey,\n          },\n        });\n        const slugs = await fetchTeamAndProjectForKey(ctx, deployKey);\n        return {\n          kind: \"success\",\n          metadata: {\n            kind: \"existingDeployment\",\n            deploymentToActOn: {\n              url: url,\n              adminKey: deployKey,\n              deploymentFields: {\n                deploymentName: deploymentName,\n                deploymentType: deploymentType,\n                teamSlug: slugs.team,\n                projectSlug: slugs.project,\n              },\n              source: \"deployKey\",\n            },\n          },\n        };\n      }\n      default: {\n        deployKeyType satisfies never;\n        return ctx.crash({\n          exitCode: 1,\n          errorType: \"fatal\",\n          printedMessage: `Unexpected deploy key type: ${deployKeyType as any}`,\n        });\n      }\n    }\n  }\n\n  const convexDeployment = getEnv(CONVEX_DEPLOYMENT_ENV_VAR_NAME);\n  const selfHostedUrl = getEnv(CONVEX_SELF_HOSTED_URL_VAR_NAME);\n  const selfHostedAdminKey = getEnv(CONVEX_SELF_HOSTED_ADMIN_KEY_VAR_NAME);\n\n  if (selfHostedUrl !== null && selfHostedAdminKey !== null) {\n    if (convexDeployment !== null) {\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"invalid filesystem or env vars\",\n        printedMessage: `${CONVEX_DEPLOYMENT_ENV_VAR_NAME} must not be set when ${CONVEX_SELF_HOSTED_URL_VAR_NAME} and ${CONVEX_SELF_HOSTED_ADMIN_KEY_VAR_NAME} are set`,\n      });\n    }\n    return {\n      kind: \"success\",\n      metadata: {\n        kind: \"existingDeployment\",\n        deploymentToActOn: {\n          url: selfHostedUrl,\n          adminKey: selfHostedAdminKey,\n          deploymentFields: null,\n          source: \"selfHosted\",\n        },\n      },\n    };\n  }\n\n  // --deployment-name\u2019s deployment may be in a different project from CONVEX_DEPLOYMENT.\n  if (selectionWithinProject.kind === \"deploymentName\") {\n    return {\n      kind: \"success\",\n      metadata: {\n        kind: \"deploymentWithinProject\",\n        targetProject: {\n          kind: \"deploymentName\",\n          deploymentName: selectionWithinProject.deploymentName,\n          deploymentType: null,\n        },\n        selectionWithinProject,\n      },\n    };\n  }\n\n  if (convexDeployment !== null) {\n    if (selfHostedUrl !== null || selfHostedAdminKey !== null) {\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"invalid filesystem or env vars\",\n        printedMessage: `${CONVEX_SELF_HOSTED_URL_VAR_NAME} and ${CONVEX_SELF_HOSTED_ADMIN_KEY_VAR_NAME} must not be set when ${CONVEX_DEPLOYMENT_ENV_VAR_NAME} is set`,\n      });\n    }\n    const targetDeploymentType =\n      getDeploymentTypeFromConfiguredDeployment(convexDeployment);\n\n    // Commands can select a deployment within the project that this deployment belongs to.\n    const targetDeploymentName = stripDeploymentTypePrefix(convexDeployment);\n    const isAnonymous = isAnonymousDeployment(targetDeploymentName);\n    if (isAnonymous) {\n      if (!shouldAllowAnonymousDevelopment()) {\n        return {\n          kind: \"unknown\",\n        };\n      }\n      return {\n        kind: \"success\",\n        metadata: {\n          kind: \"anonymous\",\n          deploymentName: targetDeploymentName,\n          selectionWithinProject,\n        },\n      };\n    }\n\n    return {\n      kind: \"success\",\n      metadata: {\n        kind: \"deploymentWithinProject\",\n        targetProject: {\n          kind: \"deploymentName\",\n          deploymentName: targetDeploymentName,\n          deploymentType: targetDeploymentType,\n        },\n        selectionWithinProject,\n      },\n    };\n  }\n\n  // Throw a nice error if we're in something like a CI environment where we need a valid deployment configuration\n  await checkIfBuildEnvironmentRequiresDeploymentConfig(ctx);\n\n  return { kind: \"unknown\" };\n}\n\nasync function checkIfBuildEnvironmentRequiresDeploymentConfig(ctx: Context) {\n  const buildEnvironment = getBuildEnvironment();\n  if (buildEnvironment) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage:\n        `${buildEnvironment} build environment detected but no Convex deployment configuration found.\\n` +\n        `Set one of:\\n` +\n        `  \u2022 ${CONVEX_DEPLOY_KEY_ENV_VAR_NAME} for Convex Cloud deployments\\n` +\n        `  \u2022 ${CONVEX_SELF_HOSTED_URL_VAR_NAME} and ${CONVEX_SELF_HOSTED_ADMIN_KEY_VAR_NAME} for self-hosted deployments\\n` +\n        `See https://docs.convex.dev/production/hosting or https://docs.convex.dev/self-hosting`,\n    });\n  }\n}\n\n/**\n * Used for things like `npx convex docs` where we want to best effort extract a deployment name\n * but don't do the full deployment selection logic.\n */\nexport const deploymentNameFromSelection = (\n  selection: DeploymentSelection,\n): string | null => {\n  return deploymentNameAndTypeFromSelection(selection)?.name ?? null;\n};\n\nexport const deploymentNameAndTypeFromSelection = (\n  selection: DeploymentSelection,\n): { name: string | null; type: string | null } | null => {\n  switch (selection.kind) {\n    case \"existingDeployment\": {\n      return {\n        name:\n          selection.deploymentToActOn.deploymentFields?.deploymentName ?? null,\n        type:\n          selection.deploymentToActOn.deploymentFields?.deploymentType ?? null,\n      };\n    }\n    case \"deploymentWithinProject\": {\n      return selection.targetProject.kind === \"deploymentName\"\n        ? {\n            name: selection.targetProject.deploymentName,\n            type: selection.targetProject.deploymentType,\n          }\n        : null;\n    }\n    case \"preview\": {\n      return null;\n    }\n    case \"chooseProject\": {\n      return null;\n    }\n    case \"anonymous\": {\n      return null;\n    }\n    default: {\n      selection satisfies never;\n    }\n  }\n  return null;\n};\n\nexport const shouldAllowAnonymousDevelopment = (): boolean => {\n  // Kill switch / temporary opt out\n  if (process.env.CONVEX_ALLOW_ANONYMOUS === \"false\") {\n    return false;\n  }\n  return true;\n};\n\n/**\n * Fetch the project details corresponding to the given ProjectSelection.\n */\nexport async function getProjectDetails(\n  ctx: Context,\n  projectSelection: ProjectSelection,\n): Promise<PlatformProjectDetails> {\n  switch (projectSelection.kind) {\n    case \"deploymentName\": {\n      const deployment = (\n        await typedPlatformClient(ctx).GET(\"/deployments/{deployment_name}\", {\n          params: {\n            path: { deployment_name: projectSelection.deploymentName },\n          },\n        })\n      ).data!;\n      return (\n        await typedPlatformClient(ctx).GET(\"/projects/{project_id}\", {\n          params: { path: { project_id: deployment.projectId } },\n        })\n      ).data!;\n    }\n    case \"teamAndProjectSlugs\": {\n      return (\n        await typedPlatformClient(ctx).GET(\n          \"/teams/{team_id_or_slug}/projects/{project_slug}\",\n          {\n            params: {\n              path: {\n                team_id_or_slug: projectSelection.teamSlug,\n                project_slug: projectSelection.projectSlug,\n              },\n            },\n          },\n        )\n      ).data!;\n    }\n    case \"projectDeployKey\": {\n      const result = await fetchTeamAndProjectForKey(\n        ctx,\n        projectSelection.projectDeployKey,\n      );\n      return (\n        await typedPlatformClient(ctx).GET(\"/projects/{project_id}\", {\n          params: { path: { project_id: result.projectId } },\n        })\n      ).data!;\n    }\n  }\n}\n", "import { chalkStderr } from \"chalk\";\nimport { Context } from \"../../bundler/context.js\";\nimport { logFinishedStep, logMessage } from \"../../bundler/log.js\";\nimport { DeploymentType } from \"./api.js\";\nimport { writeUrlsToEnvFile } from \"./envvars.js\";\nimport { getDashboardUrl } from \"./dashboard.js\";\n\nexport async function finalizeConfiguration(\n  ctx: Context,\n  options: {\n    functionsPath: string;\n    deploymentType: DeploymentType;\n    deploymentName: string;\n    url: string;\n    siteUrl: string | null | undefined;\n    wroteToGitIgnore: boolean;\n    changedDeploymentEnvVar: boolean;\n  },\n) {\n  const envFileConfig = await writeUrlsToEnvFile(ctx, {\n    convexUrl: options.url,\n    siteUrl: options.siteUrl,\n  });\n  const isEnvFileConfigChanged =\n    envFileConfig !== null &&\n    (envFileConfig.convexUrlEnvVar || envFileConfig.siteUrlEnvVar);\n\n  if (isEnvFileConfigChanged) {\n    const urlUpdateMessages = [];\n    if (envFileConfig.convexUrlEnvVar) {\n      urlUpdateMessages.push(\n        `    client URL as ${envFileConfig.convexUrlEnvVar}\\n`,\n      );\n    }\n    if (envFileConfig.siteUrlEnvVar) {\n      urlUpdateMessages.push(\n        `    HTTP actions URL as ${envFileConfig.siteUrlEnvVar}\\n`,\n      );\n    }\n    logFinishedStep(\n      `${messageForDeploymentType(options.deploymentType, options.url)} and saved its:\\n` +\n        `    name as CONVEX_DEPLOYMENT\\n` +\n        urlUpdateMessages.join(\"\") +\n        ` to ${envFileConfig.envFile}`,\n    );\n  } else if (options.changedDeploymentEnvVar) {\n    logFinishedStep(\n      `${messageForDeploymentType(options.deploymentType, options.url)} and saved its name as CONVEX_DEPLOYMENT to .env.local`,\n    );\n  }\n  if (options.wroteToGitIgnore) {\n    logMessage(chalkStderr.gray(`  Added \".env.local\" to .gitignore`));\n  }\n  if (\n    options.deploymentType === \"anonymous\" &&\n    process.env.CONVEX_AGENT_MODE !== \"anonymous\"\n  ) {\n    logMessage(\n      `Run \\`npx convex login\\` at any time to create an account and link this deployment.`,\n    );\n  }\n\n  const anyChanges =\n    options.wroteToGitIgnore ||\n    options.changedDeploymentEnvVar ||\n    isEnvFileConfigChanged;\n  if (anyChanges) {\n    const dashboardUrl = await getDashboardUrl(ctx, {\n      deploymentName: options.deploymentName,\n      deploymentType: options.deploymentType,\n    });\n    logMessage(\n      `\\nWrite your Convex functions in ${chalkStderr.bold(options.functionsPath)}\\n` +\n        \"Give us feedback at https://convex.dev/community or support@convex.dev\\n\" +\n        `View the Convex dashboard at ${dashboardUrl}\\n`,\n    );\n  }\n}\n\nfunction messageForDeploymentType(deploymentType: DeploymentType, url: string) {\n  switch (deploymentType) {\n    case \"anonymous\":\n      return `Configured a local deployment for ${url}`;\n    case \"local\":\n      return `Configured a local deployment for ${url}`;\n    case \"dev\":\n    case \"prod\":\n    case \"preview\":\n    case \"custom\":\n      return `Provisioned a ${deploymentType} deployment`;\n    default: {\n      deploymentType satisfies never;\n      return `Provisioned a ${deploymentType as any} deployment`;\n    }\n  }\n}\n", "import { chalkStderr } from \"chalk\";\nimport { Context } from \"../bundler/context.js\";\nimport {\n  logFailure,\n  logFinishedStep,\n  logMessage,\n  logWarning,\n  showSpinner,\n} from \"../bundler/log.js\";\nimport {\n  DeploymentType,\n  DeploymentName,\n  fetchDeploymentCredentialsProvisioningDevOrProdMaybeThrows,\n  createProject,\n  loadSelectedDeploymentCredentials,\n  checkAccessToSelectedProject,\n  DeploymentSelectionWithinProject,\n} from \"./lib/api.js\";\nimport { readProjectConfig, writeProjectConfig } from \"./lib/config.js\";\nimport {\n  DeploymentDetails,\n  eraseDeploymentEnvVar,\n  writeDeploymentEnvVar,\n} from \"./lib/deployment.js\";\nimport { finalizeConfiguration } from \"./lib/init.js\";\nimport {\n  CONVEX_DEPLOYMENT_ENV_VAR_NAME,\n  functionsDir,\n  hasProjects,\n  logAndHandleFetchError,\n  selectDevDeploymentType,\n  selectRegionOrUseDefault,\n  validateOrSelectProject,\n  validateOrSelectTeam,\n} from \"./lib/utils/utils.js\";\nimport { writeUrlsToEnvFile } from \"./lib/envvars.js\";\nimport path from \"path\";\nimport { projectDashboardUrl } from \"./lib/dashboard.js\";\nimport { doInitConvexFolder } from \"./lib/codegen.js\";\nimport { handleLocalDeployment } from \"./lib/localDeployment/localDeployment.js\";\nimport {\n  promptOptions,\n  promptString,\n  promptYesNo,\n} from \"./lib/utils/prompts.js\";\nimport { readGlobalConfig } from \"./lib/utils/globalConfig.js\";\nimport { maybeSetupAiFiles } from \"./lib/aiFiles/index.js\";\nimport {\n  DeploymentSelection,\n  deploymentNameFromSelection,\n  shouldAllowAnonymousDevelopment,\n} from \"./lib/deploymentSelection.js\";\nimport { ensureLoggedIn } from \"./lib/login.js\";\nimport { handleAnonymousDeployment } from \"./lib/localDeployment/anonymous.js\";\nimport { fetchDeploymentCanonicalSiteUrl } from \"./lib/env.js\";\ntype DeploymentCredentials = {\n  url: string;\n  adminKey: string;\n};\n\ntype ChosenConfiguration =\n  // `--configure new`\n  | \"new\"\n  // `--configure existing`\n  | \"existing\"\n  // `--configure`\n  | \"ask\"\n  // `--configure` was not specified\n  | null;\n\ntype ConfigureCmdOptions = {\n  prod: boolean;\n  localOptions: {\n    ports?: {\n      cloud: number;\n      site: number;\n    };\n    backendVersion?: string | undefined;\n    dashboardVersion?: string | undefined;\n    forceUpgrade: boolean;\n  };\n  team?: string | undefined;\n  project?: string | undefined;\n  devDeployment?: \"cloud\" | \"local\" | undefined;\n  local?: boolean | undefined;\n  cloud?: boolean | undefined;\n  url?: string | undefined;\n  adminKey?: string | undefined;\n  envFile?: string | undefined;\n  overrideAuthUrl?: string | undefined;\n  overrideAuthClient?: string | undefined;\n  overrideAuthUsername?: string | undefined;\n  overrideAuthPassword?: string | undefined;\n};\n\n/**\n * As of writing, this is used by:\n * - `npx convex dev`\n * - `npx convex codegen`\n *\n * But is not used by `npx convex deploy` or other commands.\n */\nexport async function deploymentCredentialsOrConfigure(\n  ctx: Context,\n  deploymentSelection: DeploymentSelection,\n  chosenConfiguration: ChosenConfiguration,\n  cmdOptions: ConfigureCmdOptions,\n): Promise<\n  DeploymentCredentials & {\n    deploymentFields: {\n      deploymentName: DeploymentName;\n      deploymentType: DeploymentType;\n      projectSlug: string | null;\n      teamSlug: string | null;\n      siteUrl: string | null;\n    } | null;\n  }\n> {\n  const selectedDeployment = await _deploymentCredentialsOrConfigure(\n    ctx,\n    deploymentSelection,\n    chosenConfiguration,\n    cmdOptions,\n  );\n  const siteUrl = await fetchDeploymentCanonicalSiteUrl(ctx, {\n    adminKey: selectedDeployment.adminKey,\n    deploymentUrl: selectedDeployment.url,\n  });\n\n  if (selectedDeployment.deploymentFields !== null) {\n    // Set the `CONVEX_DEPLOYMENT` env var + the `CONVEX_URL` env var\n    await updateEnvAndConfigForDeploymentSelection(\n      ctx,\n      {\n        url: selectedDeployment.url,\n        siteUrl,\n        deploymentName: selectedDeployment.deploymentFields.deploymentName,\n        teamSlug: selectedDeployment.deploymentFields.teamSlug,\n        projectSlug: selectedDeployment.deploymentFields.projectSlug,\n        deploymentType: selectedDeployment.deploymentFields.deploymentType,\n      },\n      deploymentNameFromSelection(deploymentSelection),\n    );\n  } else {\n    // Clear the `CONVEX_DEPLOYMENT` env var + set the `CONVEX_URL` and\n    // `CONVEX_SITE_URL` env vars.\n    await handleManuallySetUrlAndAdminKey(ctx, {\n      url: selectedDeployment.url,\n      siteUrl,\n      adminKey: selectedDeployment.adminKey,\n    });\n  }\n  return {\n    url: selectedDeployment.url,\n    adminKey: selectedDeployment.adminKey,\n    deploymentFields:\n      selectedDeployment.deploymentFields === null\n        ? null\n        : { ...selectedDeployment.deploymentFields, siteUrl: siteUrl },\n  };\n}\n\nexport async function _deploymentCredentialsOrConfigure(\n  ctx: Context,\n  deploymentSelection: DeploymentSelection,\n  chosenConfiguration: ChosenConfiguration,\n  cmdOptions: ConfigureCmdOptions,\n): Promise<\n  DeploymentCredentials & {\n    deploymentFields: {\n      deploymentName: DeploymentName;\n      deploymentType: DeploymentType;\n      projectSlug: string | null;\n      teamSlug: string | null;\n    } | null;\n  }\n> {\n  const config = readGlobalConfig(ctx);\n  const globallyForceCloud = !!config?.optOutOfLocalDevDeploymentsUntilBetaOver;\n  if (globallyForceCloud && cmdOptions.local) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage:\n        \"Can't specify --local when local deployments are disabled on this machine. Run `npx convex disable-local-deployments --undo-global` to allow use of --local.\",\n    });\n  }\n\n  switch (deploymentSelection.kind) {\n    case \"existingDeployment\":\n      return {\n        url: deploymentSelection.deploymentToActOn.url,\n        adminKey: deploymentSelection.deploymentToActOn.adminKey,\n        deploymentFields:\n          deploymentSelection.deploymentToActOn.deploymentFields,\n      };\n    case \"chooseProject\": {\n      await ensureLoggedIn(ctx, {\n        overrideAuthUrl: cmdOptions.overrideAuthUrl,\n        overrideAuthClient: cmdOptions.overrideAuthClient,\n        overrideAuthUsername: cmdOptions.overrideAuthUsername,\n        overrideAuthPassword: cmdOptions.overrideAuthPassword,\n      });\n      return await handleChooseProject(\n        ctx,\n        chosenConfiguration,\n        deploymentSelection.selectionWithinProject,\n        {\n          globallyForceCloud,\n        },\n        cmdOptions,\n      );\n    }\n    case \"preview\":\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: \"Use `npx convex deploy` to use preview deployments.\",\n      });\n    case \"deploymentWithinProject\": {\n      return await handleDeploymentWithinProject(ctx, {\n        chosenConfiguration,\n        deploymentSelection,\n        cmdOptions,\n        globallyForceCloud,\n      });\n    }\n    case \"anonymous\": {\n      const hasAuth = ctx.bigBrainAuth() !== null;\n      const isAgentMode = process.env.CONVEX_AGENT_MODE === \"anonymous\";\n      if (\n        !isAgentMode &&\n        hasAuth &&\n        deploymentSelection.deploymentName !== null\n      ) {\n        const shouldConfigure =\n          chosenConfiguration !== null ||\n          (await promptYesNo(ctx, {\n            message: `${CONVEX_DEPLOYMENT_ENV_VAR_NAME} is configured with deployment ${deploymentSelection.deploymentName}, which is not linked with your account. Would you like to link it now?`,\n          }));\n        if (!shouldConfigure) {\n          return await ctx.crash({\n            exitCode: 0,\n            errorType: \"fatal\",\n            printedMessage: `Run \\`npx convex login --link-deployments\\` first to link this deployment to your account, and then run \\`npx convex dev\\` again.`,\n          });\n        }\n        return await handleChooseProject(\n          ctx,\n          chosenConfiguration,\n          deploymentSelection.selectionWithinProject,\n          {\n            globallyForceCloud,\n          },\n          cmdOptions,\n        );\n      }\n      const alreadyHasConfiguredAnonymousDeployment =\n        deploymentSelection.deploymentName !== null &&\n        chosenConfiguration === null;\n      if (isAgentMode) {\n        logWarning(\n          chalkStderr.yellow.bold(\n            \"CONVEX_AGENT_MODE=anonymous mode is in beta, functionality may change in the future.\",\n          ),\n        );\n      }\n\n      const shouldPromptForLogin = isAgentMode\n        ? \"no\"\n        : alreadyHasConfiguredAnonymousDeployment\n          ? \"no\"\n          : await promptOptions(ctx, {\n              message:\n                \"Welcome to Convex! Would you like to login to your account?\",\n              choices: [\n                {\n                  name: \"Start without an account (run Convex locally)\",\n                  value: \"no\",\n                },\n                { name: \"Login or create an account\", value: \"yes\" },\n              ],\n              default: \"no\",\n            });\n      if (shouldPromptForLogin === \"no\") {\n        const result = await handleAnonymousDeployment(ctx, {\n          chosenConfiguration,\n          deploymentName: deploymentSelection.deploymentName,\n          ...cmdOptions.localOptions,\n        });\n        return {\n          adminKey: result.adminKey,\n          url: result.deploymentUrl,\n          deploymentFields: {\n            deploymentName: result.deploymentName,\n            deploymentType: \"anonymous\",\n            projectSlug: null,\n            teamSlug: null,\n          },\n        };\n      }\n      return await handleChooseProject(\n        ctx,\n        chosenConfiguration,\n        deploymentSelection.selectionWithinProject,\n        {\n          globallyForceCloud,\n        },\n        cmdOptions,\n      );\n    }\n  }\n}\n\nasync function handleDeploymentWithinProject(\n  ctx: Context,\n  {\n    chosenConfiguration,\n    deploymentSelection,\n    cmdOptions,\n    globallyForceCloud,\n  }: {\n    chosenConfiguration: ChosenConfiguration;\n    deploymentSelection: DeploymentSelection & {\n      kind: \"deploymentWithinProject\";\n    };\n    cmdOptions: ConfigureCmdOptions;\n    globallyForceCloud: boolean;\n  },\n) {\n  const hasAuth = ctx.bigBrainAuth() !== null;\n  const loginMessage =\n    hasAuth && shouldAllowAnonymousDevelopment()\n      ? undefined\n      : \"Tip: You can try out Convex without creating an account by clearing the \" +\n        `${CONVEX_DEPLOYMENT_ENV_VAR_NAME} environment variable (often in .env.local).`;\n  await ensureLoggedIn(ctx, {\n    message: loginMessage,\n    overrideAuthUrl: cmdOptions.overrideAuthUrl,\n    overrideAuthClient: cmdOptions.overrideAuthClient,\n    overrideAuthUsername: cmdOptions.overrideAuthUsername,\n    overrideAuthPassword: cmdOptions.overrideAuthPassword,\n  });\n  if (chosenConfiguration !== null) {\n    const result = await handleChooseProject(\n      ctx,\n      chosenConfiguration,\n      deploymentSelection.selectionWithinProject,\n      {\n        globallyForceCloud,\n      },\n      cmdOptions,\n    );\n    return result;\n  }\n\n  const accessResult = await checkAccessToSelectedProject(\n    ctx,\n    deploymentSelection.targetProject,\n  );\n  if (accessResult.kind === \"noAccess\") {\n    logMessage(\"You don't have access to the selected project.\");\n    const result = await handleChooseProject(\n      ctx,\n      chosenConfiguration,\n      deploymentSelection.selectionWithinProject,\n      {\n        globallyForceCloud,\n      },\n      cmdOptions,\n    );\n    return result;\n  }\n\n  const selectedDeployment = await loadSelectedDeploymentCredentials(\n    ctx,\n    deploymentSelection,\n    // We'll start running it below\n    { ensureLocalRunning: false },\n  );\n  if (\n    selectedDeployment.deploymentFields !== null &&\n    selectedDeployment.deploymentFields.deploymentType === \"local\"\n  ) {\n    // Start running the local backend, which may bind to different ports\n    // than what was saved from a previous run.\n    const localDeployment = await handleLocalDeployment(ctx, {\n      teamSlug: selectedDeployment.deploymentFields.teamSlug!,\n      projectSlug: selectedDeployment.deploymentFields.projectSlug!,\n      forceUpgrade: cmdOptions.localOptions.forceUpgrade,\n      ports: cmdOptions.localOptions.ports,\n      backendVersion: cmdOptions.localOptions.backendVersion,\n    });\n    return {\n      url: localDeployment.deploymentUrl,\n      adminKey: localDeployment.adminKey,\n      deploymentFields: selectedDeployment.deploymentFields,\n    };\n  }\n  return {\n    url: selectedDeployment.url,\n    adminKey: selectedDeployment.adminKey,\n    deploymentFields: selectedDeployment.deploymentFields,\n  };\n}\n\nasync function handleChooseProject(\n  ctx: Context,\n  chosenConfiguration: ChosenConfiguration,\n  selectionWithinProject: DeploymentSelectionWithinProject,\n  args: {\n    globallyForceCloud: boolean;\n  },\n  cmdOptions: ConfigureCmdOptions,\n): Promise<\n  DeploymentCredentials & {\n    deploymentFields: {\n      deploymentName: DeploymentName;\n      deploymentType: DeploymentType;\n      projectSlug: string;\n      teamSlug: string;\n    };\n  }\n> {\n  await ensureLoggedIn(ctx, {\n    overrideAuthUrl: cmdOptions.overrideAuthUrl,\n    overrideAuthClient: cmdOptions.overrideAuthClient,\n    overrideAuthUsername: cmdOptions.overrideAuthUsername,\n    overrideAuthPassword: cmdOptions.overrideAuthPassword,\n  });\n  const project = await selectProject(ctx, chosenConfiguration, {\n    team: cmdOptions.team,\n    project: cmdOptions.project,\n    devDeployment: cmdOptions.devDeployment,\n    local: args.globallyForceCloud ? false : cmdOptions.local,\n    cloud: args.globallyForceCloud ? true : cmdOptions.cloud,\n  });\n  // TODO complain about any non-default cmdOptions.localOptions here\n  // because we're ignoring them if this isn't a local development.\n\n  const deploymentOptions: DeploymentOptions =\n    selectionWithinProject.kind === \"prod\"\n      ? { kind: \"prod\" }\n      : project.devDeployment === \"local\"\n        ? { kind: \"local\", ...cmdOptions.localOptions }\n        : { kind: \"dev\" };\n  const {\n    deploymentName,\n    deploymentUrl: url,\n    adminKey,\n  } = await ensureDeploymentProvisioned(ctx, {\n    teamSlug: project.teamSlug,\n    projectSlug: project.projectSlug,\n    deploymentOptions,\n  });\n  return {\n    url,\n    adminKey,\n    deploymentFields: {\n      deploymentName,\n      deploymentType: deploymentOptions.kind,\n      projectSlug: project.projectSlug,\n      teamSlug: project.teamSlug,\n    },\n  };\n}\n\nasync function handleManuallySetUrlAndAdminKey(\n  ctx: Context,\n  cmdOptions: { url: string; siteUrl: string; adminKey: string },\n) {\n  const { url, siteUrl, adminKey } = cmdOptions;\n  const didErase = await eraseDeploymentEnvVar(ctx);\n  if (didErase) {\n    logMessage(\n      chalkStderr.yellowBright(\n        `Removed the CONVEX_DEPLOYMENT environment variable from .env.local`,\n      ),\n    );\n  }\n  const envFileConfig = await writeUrlsToEnvFile(ctx, {\n    convexUrl: url,\n    siteUrl,\n  });\n  if (\n    envFileConfig !== null &&\n    (envFileConfig.convexUrlEnvVar || envFileConfig.siteUrlEnvVar)\n  ) {\n    // Join both names with \" and \" if both exist, otherwise just use one of them.\n    const updatedVars = [\n      envFileConfig.convexUrlEnvVar,\n      envFileConfig.siteUrlEnvVar,\n    ]\n      .filter(Boolean)\n      .join(\" and \");\n    logMessage(\n      chalkStderr.green(`Saved ${updatedVars} to ${envFileConfig.envFile}`),\n    );\n  }\n  return { url, adminKey };\n}\n\nexport async function selectProject(\n  ctx: Context,\n  chosenConfiguration: ChosenConfiguration,\n  cmdOptions: {\n    team?: string | undefined;\n    project?: string | undefined;\n    devDeployment?: \"cloud\" | \"local\" | undefined;\n    local?: boolean | undefined;\n    cloud?: boolean | undefined;\n    defaultProjectName?: string | undefined;\n  },\n): Promise<{\n  teamSlug: string;\n  projectSlug: string;\n  devDeployment: \"cloud\" | \"local\";\n}> {\n  // Prompt the user to select a project.\n  const choice =\n    chosenConfiguration !== \"ask\" && chosenConfiguration !== null\n      ? chosenConfiguration\n      : await askToConfigure(ctx);\n  switch (choice) {\n    case \"new\":\n      return selectNewProject(ctx, chosenConfiguration, cmdOptions);\n    case \"existing\":\n      return selectExistingProject(ctx, chosenConfiguration, cmdOptions);\n    default:\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: \"No project selected.\",\n      });\n  }\n}\n\nconst cwd = path.basename(process.cwd());\nasync function selectNewProject(\n  ctx: Context,\n  chosenConfiguration: ChosenConfiguration,\n  config: {\n    team?: string | undefined;\n    project?: string | undefined;\n    devDeployment?: \"cloud\" | \"local\" | undefined;\n    cloud?: boolean | undefined;\n    local?: boolean | undefined;\n    defaultProjectName?: string | undefined;\n  },\n) {\n  const { team: selectedTeam, chosen: didChooseBetweenTeams } =\n    await validateOrSelectTeam(ctx, config.team, \"Team:\");\n  let projectName: string = config.project || cwd;\n  let choseProjectInteractively = false;\n  if (!config.project) {\n    projectName = await promptString(ctx, {\n      message: \"Project name:\",\n      default: config.defaultProjectName || cwd,\n    });\n    choseProjectInteractively = true;\n  }\n\n  const { devDeployment } = await selectDevDeploymentType(ctx, {\n    chosenConfiguration,\n    newOrExisting: \"new\",\n    teamSlug: selectedTeam.slug,\n    userHasChosenSomethingInteractively:\n      didChooseBetweenTeams || choseProjectInteractively,\n    projectSlug: undefined,\n    devDeploymentFromFlag: config.devDeployment,\n    forceDevDeployment: config.local\n      ? \"local\"\n      : config.cloud\n        ? \"cloud\"\n        : undefined,\n  });\n\n  const region =\n    devDeployment === \"cloud\"\n      ? await selectRegionOrUseDefault(ctx, selectedTeam, \"dev\")\n      : null;\n\n  showSpinner(\"Creating new Convex project...\");\n\n  const deploymentToProvision =\n    devDeployment === \"cloud\"\n      ? {\n          deploymentType: \"dev\" as const,\n          region,\n        }\n      : null;\n\n  let projectSlug, teamSlug, projectsRemaining;\n  try {\n    ({ projectSlug, teamSlug, projectsRemaining } = await createProject(ctx, {\n      teamSlug: selectedTeam.slug,\n      projectName,\n      deploymentToProvision,\n    }));\n  } catch (err) {\n    logFailure(\"Unable to create project.\");\n    return await logAndHandleFetchError(ctx, err);\n  }\n  const teamMessage = didChooseBetweenTeams\n    ? \" in team \" + chalkStderr.bold(teamSlug)\n    : \"\";\n  logFinishedStep(\n    `Created project ${chalkStderr.bold(\n      projectSlug,\n    )}${teamMessage}, manage it at ${chalkStderr.bold(\n      projectDashboardUrl(teamSlug, projectSlug),\n    )}`,\n  );\n\n  if (projectsRemaining <= 2) {\n    logWarning(\n      chalkStderr.yellow.bold(\n        `Your account now has ${projectsRemaining} project${\n          projectsRemaining === 1 ? \"\" : \"s\"\n        } remaining.`,\n      ),\n    );\n  }\n\n  await doInitConvexFolder(ctx);\n  const { configPath, projectConfig } = await readProjectConfig(ctx);\n  const folder = functionsDir(configPath, projectConfig);\n  await maybeSetupAiFiles({\n    ctx,\n    convexDir: path.resolve(folder),\n    projectDir: path.resolve(path.dirname(configPath)),\n  });\n  return { teamSlug, projectSlug, devDeployment };\n}\n\nasync function selectExistingProject(\n  ctx: Context,\n  chosenConfiguration: ChosenConfiguration,\n  config: {\n    team?: string | undefined;\n    project?: string | undefined;\n    devDeployment?: \"cloud\" | \"local\" | undefined;\n    local?: boolean | undefined;\n    cloud?: boolean | undefined;\n  },\n): Promise<{\n  teamSlug: string;\n  projectSlug: string;\n  devDeployment: \"cloud\" | \"local\";\n}> {\n  const {\n    team: { slug: teamSlug },\n    chosen,\n  } = await validateOrSelectTeam(ctx, config.team, \"Team:\");\n\n  const projectSlug = await validateOrSelectProject(\n    ctx,\n    config.project,\n    teamSlug,\n    \"Configure project\",\n    \"Project:\",\n  );\n  if (projectSlug === null) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: \"Run the command again to create a new project instead.\",\n    });\n  }\n  const { devDeployment } = await selectDevDeploymentType(ctx, {\n    chosenConfiguration,\n    newOrExisting: \"existing\",\n    teamSlug,\n    projectSlug,\n    userHasChosenSomethingInteractively: chosen || !config.project,\n    devDeploymentFromFlag: config.devDeployment,\n    forceDevDeployment: config.local\n      ? \"local\"\n      : config.cloud\n        ? \"cloud\"\n        : undefined,\n  });\n\n  logFinishedStep(`Reinitialized project ${chalkStderr.bold(projectSlug)}`);\n\n  const { configPath, projectConfig } = await readProjectConfig(ctx);\n  const folder = functionsDir(configPath, projectConfig);\n  await maybeSetupAiFiles({\n    ctx,\n    convexDir: path.resolve(folder),\n    projectDir: path.resolve(path.dirname(configPath)),\n  });\n\n  return { teamSlug, projectSlug, devDeployment };\n}\n\nasync function askToConfigure(ctx: Context): Promise<\"new\" | \"existing\"> {\n  if (!(await hasProjects(ctx))) {\n    return \"new\";\n  }\n  return await promptOptions(ctx, {\n    message: \"What would you like to configure?\",\n    default: \"new\",\n    choices: [\n      { name: \"create a new project\", value: \"new\" },\n      { name: \"choose an existing project\", value: \"existing\" },\n    ],\n  });\n}\n\ntype DeploymentOptions =\n  | {\n      kind: \"prod\";\n    }\n  | { kind: \"dev\" }\n  | {\n      kind: \"local\";\n      ports?:\n        | {\n            cloud: number;\n            site: number;\n          }\n        | undefined;\n      backendVersion?: string | undefined;\n      forceUpgrade: boolean;\n    };\n\n/**\n * This method assumes that the member has access to the selected project.\n */\nasync function ensureDeploymentProvisioned(\n  ctx: Context,\n  options: {\n    teamSlug: string;\n    projectSlug: string;\n    deploymentOptions: DeploymentOptions;\n  },\n): Promise<DeploymentDetails> {\n  switch (options.deploymentOptions.kind) {\n    case \"dev\":\n    case \"prod\": {\n      const credentials =\n        await fetchDeploymentCredentialsProvisioningDevOrProdMaybeThrows(\n          ctx,\n          {\n            kind: \"teamAndProjectSlugs\",\n            teamSlug: options.teamSlug,\n            projectSlug: options.projectSlug,\n          },\n          options.deploymentOptions.kind,\n        );\n      return {\n        ...credentials,\n        onActivity: null,\n      };\n    }\n    case \"local\": {\n      const credentials = await handleLocalDeployment(ctx, {\n        teamSlug: options.teamSlug,\n        projectSlug: options.projectSlug,\n        ...options.deploymentOptions,\n      });\n      return credentials;\n    }\n    default:\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: `Invalid deployment type: ${(options.deploymentOptions as any).kind}`,\n        errForSentry: `Invalid deployment type: ${(options.deploymentOptions as any).kind}`,\n      });\n  }\n}\n\nexport async function updateEnvAndConfigForDeploymentSelection(\n  ctx: Context,\n  options: {\n    url: string;\n    siteUrl?: string | null;\n    deploymentName: string;\n    teamSlug: string | null;\n    projectSlug: string | null;\n    deploymentType: DeploymentType;\n  },\n  existingValue: string | null,\n) {\n  const { configPath, projectConfig } = await readProjectConfig(ctx);\n\n  const { wroteToGitIgnore, changedDeploymentEnvVar } =\n    await writeDeploymentEnvVar(\n      ctx,\n      options.deploymentType,\n      {\n        team: options.teamSlug,\n        project: options.projectSlug,\n        deploymentName: options.deploymentName,\n      },\n      existingValue,\n    );\n  await writeProjectConfig(ctx, projectConfig);\n  await finalizeConfiguration(ctx, {\n    deploymentType: options.deploymentType,\n    deploymentName: options.deploymentName,\n    url: options.url,\n    siteUrl: options.siteUrl,\n    wroteToGitIgnore,\n    changedDeploymentEnvVar,\n    functionsPath: functionsDir(configPath, projectConfig),\n  });\n}\n", "import mod from './index.js';\n\nexport default mod;\nexport const Issuer = mod.Issuer;\nexport const Strategy = mod.Strategy;\nexport const TokenSet = mod.TokenSet;\nexport const errors = mod.errors;\nexport const custom = mod.custom;\nexport const generators = mod.generators;\n", "import { errors, BaseClient, custom } from \"openid-client\";\nimport {\n  bigBrainAPI,\n  logAndHandleFetchError,\n  throwingFetch,\n  isWebContainer,\n} from \"./utils/utils.js\";\nimport open from \"open\";\nimport { chalkStderr } from \"chalk\";\nimport { provisionHost } from \"./config.js\";\nimport { version } from \"../version.js\";\nimport { Context } from \"../../bundler/context.js\";\nimport {\n  changeSpinner,\n  logError,\n  logFailure,\n  logFinishedStep,\n  logMessage,\n  logOutput,\n  logVerbose,\n  showSpinner,\n} from \"../../bundler/log.js\";\nimport { Issuer } from \"openid-client\";\nimport { hostname } from \"os\";\nimport { execSync } from \"child_process\";\nimport { promptString, promptYesNo } from \"./utils/prompts.js\";\nimport {\n  formatPathForPrinting,\n  globalConfigPath,\n  modifyGlobalConfig,\n} from \"./utils/globalConfig.js\";\nimport { updateBigBrainAuthAfterLogin } from \"./deploymentSelection.js\";\n\n// Per https://github.com/panva/node-openid-client/tree/main/docs#customizing\ncustom.setHttpOptionsDefaults({\n  timeout: parseInt(process.env.OPENID_CLIENT_TIMEOUT || \"10000\"),\n});\n\ninterface AuthorizeArgs {\n  authnToken: string;\n  deviceName: string;\n  anonymousId?: string | undefined;\n}\n\nexport async function checkAuthorization(\n  ctx: Context,\n  acceptOptIns: boolean,\n): Promise<boolean> {\n  const header = ctx.bigBrainAuth()?.header ?? null;\n  if (header === null) {\n    return false;\n  }\n  try {\n    const resp = await fetch(`${provisionHost}/api/authorize`, {\n      method: \"HEAD\",\n      headers: {\n        Authorization: header,\n        \"Convex-Client\": `npm-cli-${version}`,\n      },\n    });\n    // Don't throw an error if this request returns a non-200 status.\n    // Big Brain responds with a variety of error codes -- 401 if the token is correctly-formed but not valid, and either 400 or 500 if the token is ill-formed.\n    // We only care if this check returns a 200 code (so we can skip logging in again) -- any other errors should be silently skipped and we'll run the whole login flow again.\n    if (resp.status !== 200) {\n      return false;\n    }\n  } catch (e: any) {\n    // This `catch` block should only be hit if a network error was encountered\n    logError(\n      `Unexpected error when authorizing - are you connected to the internet?`,\n    );\n    return await logAndHandleFetchError(ctx, e);\n  }\n\n  // Check that we have optin as well\n  const shouldContinue = await optins(ctx, acceptOptIns);\n  if (!shouldContinue) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: null,\n    });\n  }\n  return true;\n}\n\nasync function performDeviceAuthorization(\n  ctx: Context,\n  authClient: BaseClient,\n  shouldOpen: boolean,\n  vercel?: boolean,\n  vercelOverride?: string,\n): Promise<string> {\n  // Device authorization flow follows this guide: https://github.com/auth0/auth0-device-flow-cli-sample/blob/9f0f3b76a6cd56ea8d99e76769187ea5102d519d/cli.js\n  // License: MIT License\n  // Copyright (c) 2019 Auth0 Samples\n  /*\n  The MIT License (MIT)\n\n  Copyright (c) 2019 Auth0 Samples\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  // Device Authorization Request - https://tools.ietf.org/html/rfc8628#section-3.1\n  // Get authentication URL\n  let handle;\n  try {\n    handle = await authClient.deviceAuthorization();\n  } catch {\n    // We couldn't get verification URL from the auth provider, proceed with manual auth\n    return promptString(ctx, {\n      message:\n        \"Open https://dashboard.convex.dev/auth, log in and paste the token here:\",\n    });\n  }\n\n  // Device Authorization Response - https://tools.ietf.org/html/rfc8628#section-3.2\n  // Open authentication URL\n  const { verification_uri_complete, user_code, expires_in } = handle;\n\n  // Construct Vercel URL if --vercel flag is used\n  const urlToOpen = vercel\n    ? `https://vercel.com/sso/integrations/${vercelOverride || \"convex\"}?url=${verification_uri_complete}`\n    : verification_uri_complete;\n\n  logMessage(\n    `Visit ${urlToOpen} to finish logging in.\\n` +\n      `You should see the following code which expires in ${\n        expires_in % 60 === 0\n          ? `${expires_in / 60} minutes`\n          : `${expires_in} seconds`\n      }: ${user_code}`,\n  );\n  if (shouldOpen) {\n    shouldOpen = await promptYesNo(ctx, {\n      message: `Open the browser?`,\n      default: true,\n    });\n  }\n\n  if (shouldOpen) {\n    showSpinner(`Opening ${urlToOpen} in your browser to log in...\\n`);\n    try {\n      const p = await open(urlToOpen);\n      p.once(\"error\", () => {\n        changeSpinner(`Manually open ${urlToOpen} in your browser to log in.`);\n      });\n      changeSpinner(\"Waiting for the confirmation...\");\n    } catch {\n      logError(chalkStderr.red(`Unable to open browser.`));\n      changeSpinner(`Manually open ${urlToOpen} in your browser to log in.`);\n    }\n  } else {\n    showSpinner(`Open ${urlToOpen} in your browser to log in.`);\n  }\n\n  // Device Access Token Request - https://tools.ietf.org/html/rfc8628#section-3.4\n  // Device Access Token Response - https://tools.ietf.org/html/rfc8628#section-3.5\n  try {\n    const tokens = await handle.poll();\n    if (typeof tokens.access_token === \"string\") {\n      return tokens.access_token;\n    } else {\n      // Unexpected error\n      // eslint-disable-next-line no-restricted-syntax\n      throw Error(\"Access token is missing\");\n    }\n  } catch (err: any) {\n    switch (err.error) {\n      case \"access_denied\": // end-user declined the device confirmation prompt, consent or rules failed\n        return await ctx.crash({\n          exitCode: 1,\n          errorType: \"fatal\",\n          printedMessage: \"Access denied.\",\n          errForSentry: err,\n        });\n      case \"expired_token\": // end-user did not complete the interaction in time\n        return await ctx.crash({\n          exitCode: 1,\n          errorType: \"fatal\",\n          printedMessage: \"Device flow expired.\",\n          errForSentry: err,\n        });\n      default: {\n        const message =\n          err instanceof errors.OPError\n            ? `Error = ${err.error}; error_description = ${err.error_description}`\n            : `Login failed with error: ${err}`;\n        return await ctx.crash({\n          exitCode: 1,\n          errorType: \"fatal\",\n          printedMessage: message,\n          errForSentry: err,\n        });\n      }\n    }\n  }\n}\n\nasync function performPasswordAuthentication(\n  ctx: Context,\n  clientId: string,\n  username: string,\n  password: string,\n): Promise<string> {\n  if (!process.env.WORKOS_API_SECRET) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: \"WORKOS_API_SECRET environment variable is not set\",\n    });\n  }\n\n  // Unfortunately, `openid-client` doesn't support the resource owner password credentials flow so we need to manually send the requests.\n  const options: Parameters<typeof throwingFetch>[1] = {\n    method: \"POST\",\n    headers: { \"Content-Type\": \"application/json\" },\n    body: JSON.stringify({\n      grant_type: \"password\",\n      email: username,\n      password: password,\n      client_id: clientId,\n      client_secret: process.env.WORKOS_API_SECRET,\n    }),\n  };\n\n  try {\n    const response = await throwingFetch(\n      \"https://apiauth.convex.dev/user_management/authenticate\",\n      options,\n    );\n    const data = await response.json();\n    if (typeof data.access_token === \"string\") {\n      return data.access_token;\n    } else {\n      // Unexpected error\n      // eslint-disable-next-line no-restricted-syntax\n      throw Error(\"Access token is missing\");\n    }\n  } catch (err: any) {\n    logFailure(`Password flow failed: ${err}`);\n    if (err.response) {\n      logError(chalkStderr.red(`${JSON.stringify(err.response.data)}`));\n    }\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      errForSentry: err,\n      printedMessage: null,\n    });\n  }\n}\n\nexport async function performLogin(\n  ctx: Context,\n  {\n    overrideAuthUrl,\n    overrideAuthClient,\n    overrideAuthUsername,\n    overrideAuthPassword,\n    overrideAccessToken,\n    loginFlow,\n    open,\n    acceptOptIns,\n    dumpAccessToken,\n    deviceName: deviceNameOverride,\n    anonymousId,\n    vercel,\n    vercelOverride,\n  }: {\n    overrideAuthUrl?: string | undefined;\n    overrideAuthClient?: string | undefined;\n    overrideAuthUsername?: string | undefined;\n    overrideAuthPassword?: string | undefined;\n    overrideAccessToken?: string | undefined;\n    loginFlow?: \"auto\" | \"paste\" | \"poll\" | undefined;\n    // default `true`\n    open?: boolean | undefined;\n    // default `false`\n    acceptOptIns?: boolean | undefined;\n    dumpAccessToken?: boolean | undefined;\n    deviceName?: string | undefined;\n    anonymousId?: string | undefined;\n    vercel?: boolean | undefined;\n    vercelOverride?: string | undefined;\n  } = {},\n) {\n  loginFlow = loginFlow || \"auto\";\n  // Get access token from big-brain\n  // Default the device name to the hostname, but allow the user to change this if the terminal is interactive.\n  // On Macs, the `hostname()` may be a weirdly-truncated form of the computer name. Attempt to read the \"real\" name before falling back to hostname.\n  let deviceName = deviceNameOverride ?? \"\";\n  if (!deviceName && process.platform === \"darwin\") {\n    try {\n      deviceName = execSync(\"scutil --get ComputerName\").toString().trim();\n    } catch {\n      // Just fall back to the hostname default below.\n    }\n  }\n  if (!deviceName) {\n    deviceName = hostname();\n  }\n  if (!deviceNameOverride) {\n    logMessage(\n      chalkStderr.bold(\n        `Welcome to developing with Convex, let's get you logged in.`,\n      ),\n    );\n    deviceName = await promptString(ctx, {\n      message: \"Device name:\",\n      default: deviceName,\n    });\n  }\n\n  const issuer = overrideAuthUrl ?? \"https://auth.convex.dev\";\n  let authIssuer;\n  let accessToken: string;\n\n  if (loginFlow === \"paste\" || (loginFlow === \"auto\" && isWebContainer())) {\n    accessToken = await promptString(ctx, {\n      message:\n        \"Open https://dashboard.convex.dev/auth, log in and paste the token here:\",\n    });\n  } else {\n    try {\n      authIssuer = await Issuer.discover(issuer);\n    } catch {\n      // Couldn't contact https://auth.convex.dev/.well-known/openid-configuration,\n      // proceed with manual auth.\n      accessToken = await promptString(ctx, {\n        message:\n          \"Open https://dashboard.convex.dev/auth, log in and paste the token here:\",\n      });\n    }\n  }\n\n  // typical path\n  if (authIssuer) {\n    const clientId = overrideAuthClient ?? \"HFtA247jp9iNs08NTLIB7JsNPMmRIyfi\";\n    const authClient = new authIssuer.Client({\n      client_id: clientId,\n      token_endpoint_auth_method: \"none\",\n      id_token_signed_response_alg: \"RS256\",\n    });\n\n    if (overrideAccessToken) {\n      accessToken = overrideAccessToken;\n    } else if (overrideAuthUsername && overrideAuthPassword) {\n      accessToken = await performPasswordAuthentication(\n        ctx,\n        clientId,\n        overrideAuthUsername,\n        overrideAuthPassword,\n      );\n    } else {\n      accessToken = await performDeviceAuthorization(\n        ctx,\n        authClient,\n        open ?? true,\n        vercel,\n        vercelOverride,\n      );\n    }\n  }\n\n  if (dumpAccessToken) {\n    logOutput(`${accessToken!}`);\n    return await ctx.crash({\n      exitCode: 0,\n      errorType: \"fatal\",\n      printedMessage: null,\n    });\n  }\n\n  const authorizeArgs: AuthorizeArgs = {\n    authnToken: accessToken!,\n    deviceName: deviceName,\n    anonymousId: anonymousId,\n  };\n  const data = await bigBrainAPI({\n    ctx,\n    method: \"POST\",\n    path: \"authorize\",\n    data: authorizeArgs,\n  });\n  const globalConfig = { accessToken: data.accessToken };\n  try {\n    await modifyGlobalConfig(ctx, globalConfig);\n    const path = globalConfigPath();\n    logFinishedStep(`Saved credentials to ${formatPathForPrinting(path)}`);\n  } catch (err: unknown) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"invalid filesystem data\",\n      errForSentry: err,\n      printedMessage: null,\n    });\n  }\n\n  logVerbose(`performLogin: updating big brain auth after login`);\n  await updateBigBrainAuthAfterLogin(ctx, data.accessToken);\n\n  logVerbose(`performLogin: checking opt ins, acceptOptIns: ${acceptOptIns}`);\n  // Do opt in to TOS and Privacy Policy stuff\n  const shouldContinue = await optins(ctx, acceptOptIns ?? false);\n  if (!shouldContinue) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: null,\n    });\n  }\n}\n\n/// There are fields like version, but we keep them opaque\ntype OptIn = Record<string, unknown>;\n\ntype OptInToAccept = {\n  optIn: OptIn;\n  message: string;\n};\n\ntype AcceptOptInsArgs = {\n  optInsAccepted: OptIn[];\n};\n\n// Returns whether we can proceed or not.\nasync function optins(ctx: Context, acceptOptIns: boolean): Promise<boolean> {\n  const bbAuth = ctx.bigBrainAuth();\n  if (bbAuth === null) {\n    // This should never happen, but if we're not even logged in, we can't proceed.\n    return false;\n  }\n  switch (bbAuth.kind) {\n    case \"accessToken\":\n      break;\n    case \"deploymentKey\":\n    case \"projectKey\":\n    case \"previewDeployKey\":\n      // If we have a key configured as auth, we do not need to check opt ins.\n      return true;\n    default: {\n      bbAuth satisfies never;\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        errForSentry: `Unexpected auth kind ${(bbAuth as any).kind}`,\n        printedMessage: \"Hit an unexpected error while logging in.\",\n      });\n    }\n  }\n  const data = await bigBrainAPI({\n    ctx,\n    method: \"POST\",\n    path: \"check_opt_ins\",\n  });\n  if (data.optInsToAccept.length === 0) {\n    return true;\n  }\n  for (const optInToAccept of data.optInsToAccept) {\n    const confirmed =\n      acceptOptIns ||\n      (await promptYesNo(ctx, {\n        message: optInToAccept.message,\n      }));\n    if (!confirmed) {\n      logFailure(\"Please accept the Terms of Service to use Convex.\");\n      return Promise.resolve(false);\n    }\n  }\n\n  const optInsAccepted = data.optInsToAccept.map((o: OptInToAccept) => o.optIn);\n  const args: AcceptOptInsArgs = { optInsAccepted };\n  await bigBrainAPI({\n    ctx,\n    method: \"POST\",\n    path: \"accept_opt_ins\",\n    data: args,\n  });\n  return true;\n}\n\nexport async function ensureLoggedIn(\n  ctx: Context,\n  options?: {\n    message?: string | undefined;\n    overrideAuthUrl?: string | undefined;\n    overrideAuthClient?: string | undefined;\n    overrideAuthUsername?: string | undefined;\n    overrideAuthPassword?: string | undefined;\n  },\n) {\n  const isLoggedIn = await checkAuthorization(ctx, false);\n  if (!isLoggedIn) {\n    if (options?.message) {\n      logMessage(options.message);\n    }\n    await performLogin(ctx, {\n      acceptOptIns: false,\n      overrideAuthUrl: options?.overrideAuthUrl,\n      overrideAuthClient: options?.overrideAuthClient,\n      overrideAuthUsername: options?.overrideAuthUsername,\n      overrideAuthPassword: options?.overrideAuthPassword,\n    });\n  }\n}\n", "import path from \"path\";\nimport { logMessage } from \"../../bundler/log.js\";\nimport type { Context } from \"../../bundler/context.js\";\nimport { readProjectConfig } from \"./config.js\";\nimport { functionsDir } from \"./utils/utils.js\";\nimport { checkAiFilesStaleness } from \"./aiFiles/index.js\";\nimport { getVersion } from \"./versionApi.js\";\n\n/**\n * Check the version of the `convex` NPM package and nag if Convex AI files\n * are out of date.\n */\nexport async function checkVersion(ctx: Context) {\n  const version = await getVersion();\n\n  if (version.kind === \"error\") {\n    return;\n  }\n\n  if (version.data.message) {\n    logMessage(version.data.message);\n  }\n\n  try {\n    const { configPath, projectConfig } = await readProjectConfig(ctx);\n    const convexDir = path.resolve(functionsDir(configPath, projectConfig));\n    const projectDir = path.resolve(path.dirname(configPath));\n    await checkAiFilesStaleness({\n      canonicalGuidelinesHash: version.data.guidelinesHash,\n      canonicalAgentSkillsSha: version.data.agentSkillsSha,\n      projectDir,\n      convexDir,\n    });\n  } catch {\n    // Non-fatal: skip staleness check if project config can't be resolved.\n  }\n}\n", "import { chalkStderr } from \"chalk\";\nimport { Context } from \"../../bundler/context.js\";\nimport { logWarning } from \"../../bundler/log.js\";\nimport { teamDashboardUrl } from \"./dashboard.js\";\nimport { fetchTeamAndProject } from \"./api.js\";\nimport { bigBrainAPI } from \"./utils/utils.js\";\n\nasync function warn(\n  ctx: Context,\n  options: { title: string; subtitle: string; teamSlug: string },\n) {\n  const { title, subtitle, teamSlug } = options;\n  logWarning(chalkStderr.bold.yellow(title));\n  logWarning(chalkStderr.yellow(subtitle));\n  logWarning(\n    chalkStderr.yellow(`Visit ${teamDashboardUrl(teamSlug)} to learn more.`),\n  );\n}\n\nasync function teamUsageState(ctx: Context, teamId: number) {\n  const { usageState } = (await bigBrainAPI({\n    ctx,\n    method: \"GET\",\n    path: \"dashboard/teams/\" + teamId + \"/usage/team_usage_state\",\n  })) as {\n    usageState: \"Default\" | \"Approaching\" | \"Exceeded\" | \"Disabled\" | \"Paused\";\n  };\n\n  return usageState;\n}\n\nasync function teamSpendingLimitsState(ctx: Context, teamId: number) {\n  const response = (await bigBrainAPI({\n    ctx,\n    method: \"GET\",\n    path: \"dashboard/teams/\" + teamId + \"/get_spending_limits\",\n  })) as {\n    disableThresholdCents: number | null;\n    state: null | \"Running\" | \"Disabled\" | \"Warning\";\n  };\n\n  return response.state;\n}\n\nexport async function usageStateWarning(\n  ctx: Context,\n  targetDeployment: string,\n) {\n  // Skip the warning if the user doesn\u2019t have an auth token\n  // (which can happen for instance when using a deploy key)\n  const auth = ctx.bigBrainAuth();\n  if (\n    auth === null ||\n    auth.kind === \"projectKey\" ||\n    auth.kind === \"deploymentKey\" ||\n    process.env.CONVEX_AGENT_MODE === \"anonymous\"\n  ) {\n    return;\n  }\n  const { teamId, team } = await fetchTeamAndProject(ctx, targetDeployment);\n\n  const [usageState, spendingLimitsState] = await Promise.all([\n    teamUsageState(ctx, teamId),\n    teamSpendingLimitsState(ctx, teamId),\n  ]);\n  if (spendingLimitsState === \"Disabled\") {\n    await warn(ctx, {\n      title:\n        \"Your projects are disabled because you exceeded your spending limit.\",\n      subtitle: \"Increase it from the dashboard to re-enable your projects.\",\n      teamSlug: team,\n    });\n  } else if (usageState === \"Approaching\") {\n    await warn(ctx, {\n      title: \"Your projects are approaching the Free plan limits.\",\n      subtitle: \"Consider upgrading to avoid service interruption.\",\n      teamSlug: team,\n    });\n  } else if (usageState === \"Exceeded\") {\n    await warn(ctx, {\n      title: \"Your projects are above the Free plan limits.\",\n      subtitle: \"Decrease your usage or upgrade to avoid service interruption.\",\n      teamSlug: team,\n    });\n  } else if (usageState === \"Disabled\") {\n    await warn(ctx, {\n      title:\n        \"Your projects are disabled because the team exceeded Free plan limits.\",\n      subtitle: \"Decrease your usage or upgrade to reenable your projects.\",\n      teamSlug: team,\n    });\n  } else if (usageState === \"Paused\") {\n    await warn(ctx, {\n      title:\n        \"Your projects are disabled because the team previously exceeded Free plan limits.\",\n      subtitle: \"Restore your projects by going to the dashboard.\",\n      teamSlug: team,\n    });\n  }\n}\n", "import { Command } from \"@commander-js/extra-typings\";\nimport { oneoffContext } from \"../bundler/context.js\";\nimport { logVerbose } from \"../bundler/log.js\";\nimport { deploymentCredentialsOrConfigure } from \"./configure.js\";\nimport { getDeploymentSelection } from \"./lib/deploymentSelection.js\";\nimport { checkVersion } from \"./lib/updates.js\";\nimport { usageStateWarning } from \"./lib/usage.js\";\n\n// Equivalent to `npx convex dev --once --skip-push`.\nexport const init = new Command(\"init\")\n  .description(\n    \"Ensures a Convex project is configured and initialized in the current directory. Does nothing if one is already configured. Unlike `npx convex dev`, it will not push code or typecheck.\\nTypically you can skip this and run `npx convex dev` directly which will both initialize and continously deploy code. \\n\\nTo initialize an agent: `export CONVEX_AGENT_MODE=anonymous && npx convex init && npx convex env set < .env.defaults && npx convex dev`.\",\n  )\n  .summary(\n    \"Ensures a Convex project is configured. Does not push code. No-ops if already configured.\",\n  )\n  .allowExcessArguments(false)\n  .action(async () => {\n    const ctx = await oneoffContext({\n      url: undefined,\n      adminKey: undefined,\n      envFile: undefined,\n    });\n    process.on(\"SIGINT\", async () => {\n      logVerbose(\"Received SIGINT, cleaning up...\");\n      await ctx.flushAndExit(-2);\n    });\n\n    const deploymentSelection = await getDeploymentSelection(ctx, {});\n    const credentials = await deploymentCredentialsOrConfigure(\n      ctx,\n      deploymentSelection,\n      null,\n      { prod: false, localOptions: { forceUpgrade: false } },\n    );\n\n    if (credentials.deploymentFields !== null) {\n      await Promise.all([\n        usageStateWarning(ctx, credentials.deploymentFields.deploymentName),\n        checkVersion(ctx),\n      ]);\n    }\n\n    await ctx.flushAndExit(0);\n  });\n", "import { Command } from \"@commander-js/extra-typings\";\nimport { chalkStderr } from \"chalk\";\nimport open from \"open\";\nimport { Context, oneoffContext } from \"../bundler/context.js\";\nimport { logMessage, logOutput, logWarning } from \"../bundler/log.js\";\nimport { loadSelectedDeploymentCredentials } from \"./lib/api.js\";\nimport { actionDescription } from \"./lib/command.js\";\nimport { getDeploymentSelection } from \"./lib/deploymentSelection.js\";\nimport { checkIfDashboardIsRunning } from \"./lib/localDeployment/dashboard.js\";\nimport { DASHBOARD_HOST, getDashboardUrl } from \"./lib/dashboard.js\";\nimport { isAnonymousDeployment } from \"./lib/deployment.js\";\n\nexport const dashboard = new Command(\"dashboard\")\n  .alias(\"dash\")\n  .description(\"Open the dashboard in the browser\")\n  .allowExcessArguments(false)\n  .option(\n    \"--no-open\",\n    \"Don't automatically open the dashboard in the default browser\",\n  )\n  .addDeploymentSelectionOptions(actionDescription(\"Open the dashboard for\"))\n  .showHelpAfterError()\n  .action(async (options) => {\n    const ctx = await oneoffContext(options);\n\n    const deploymentSelection = await getDeploymentSelection(ctx, options);\n    const deployment = await loadSelectedDeploymentCredentials(\n      ctx,\n      deploymentSelection,\n      { ensureLocalRunning: false },\n    );\n\n    if (deployment.deploymentFields === null) {\n      const msg = `Self-hosted deployment configured.\\n\\`${chalkStderr.bold(\"npx convex dashboard\")}\\` is not supported for self-hosted deployments.\\nSee self-hosting instructions for how to self-host the dashboard.`;\n      logMessage(chalkStderr.yellow(msg));\n      return;\n    }\n    const dashboardUrl = await getDashboardUrl(\n      ctx,\n      deployment.deploymentFields,\n    );\n    if (isAnonymousDeployment(deployment.deploymentFields.deploymentName)) {\n      const warningMessage = `You are not currently running the dashboard locally. Make sure \\`npx convex dev\\` is running and try again.`;\n      if (dashboardUrl === null) {\n        logWarning(warningMessage);\n        return;\n      }\n      const isLocalDashboardRunning = await checkIfDashboardIsRunning(ctx);\n      if (!isLocalDashboardRunning) {\n        logWarning(warningMessage);\n        return;\n      }\n      await logOrOpenUrl(ctx, dashboardUrl, options.open);\n      return;\n    }\n\n    await logOrOpenUrl(ctx, dashboardUrl ?? DASHBOARD_HOST, options.open);\n  });\n\nasync function logOrOpenUrl(ctx: Context, url: string, shouldOpen: boolean) {\n  if (shouldOpen) {\n    logMessage(chalkStderr.gray(`Opening ${url} in the default browser...`));\n    try {\n      // This can fail e.g. on a headless dev machine.\n      await open(url);\n    } catch {\n      logWarning(\n        `\u26A0\uFE0F Could not open dashboard in the default browser.\\nPlease visit: ${url}`,\n      );\n    }\n  } else {\n    logOutput(url);\n  }\n}\n", "import { Command, Option, OptionValues } from \"@commander-js/extra-typings\";\nimport { OneoffCtx } from \"../../bundler/context.js\";\nimport { LogMode } from \"./logs.js\";\nimport {\n  CONVEX_DEPLOYMENT_ENV_VAR_NAME,\n  CONVEX_SELF_HOSTED_ADMIN_KEY_VAR_NAME,\n  CONVEX_SELF_HOSTED_URL_VAR_NAME,\n  parseInteger,\n  parsePositiveInteger,\n} from \"./utils/utils.js\";\n\ndeclare module \"@commander-js/extra-typings\" {\n  interface Command<Args extends any[] = [], Opts extends OptionValues = {}> {\n    /**\n     * For a command that talks to the configured dev deployment by default,\n     * add flags for talking to prod, preview, or other deployment in the same\n     * project.\n     *\n     * These flags are added to the end of `command` (ordering matters for `--help`\n     * output). `action` should look like \"Import data into\" because it is prefixed\n     * onto help strings.\n     *\n     * The options can be passed to `deploymentSelectionFromOptions`.\n     *\n     * NOTE: This method only exists at runtime if this file is imported.\n     * To help avoid this bug, this method takes in an `ActionDescription` which\n     * can only be constructed via `actionDescription` from this file.\n     *\n     * @param action - The action description\n     * @param options - Optional settings\n     * @param options.showUrlHelp - If true, show the --url option in help output\n     */\n    addDeploymentSelectionOptions(\n      action: ActionDescription,\n      options?: { showUrlHelp?: boolean },\n    ): Command<\n      Args,\n      Opts & {\n        envFile?: string;\n        url?: string;\n        adminKey?: string;\n        prod?: boolean;\n        previewName?: string;\n        deploymentName?: string;\n        deployment?: string;\n      }\n    >;\n\n    /**\n     * Adds options for the `deploy` command.\n     */\n    addDeployOptions(): Command<\n      Args,\n      Opts & {\n        verbose?: boolean;\n        dryRun?: boolean;\n        yes?: boolean;\n        typecheck: \"enable\" | \"try\" | \"disable\";\n        typecheckComponents: boolean;\n        codegen: \"enable\" | \"disable\";\n        cmd?: string;\n        cmdUrlEnvVarName?: string;\n        debugBundlePath?: string;\n        debug?: boolean;\n        writePushRequest?: string;\n        liveComponentSources?: boolean;\n      }\n    >;\n\n    /**\n     * Adds options for `self-host` subcommands.\n     */\n    addSelfHostOptions(): Command<\n      Args,\n      Opts & {\n        url?: string;\n        adminKey?: string;\n        env?: string;\n      }\n    >;\n\n    /**\n     * Adds options and arguments for the `run` command.\n     */\n    addRunOptions(): Command<\n      [...Args, string, string | undefined],\n      Opts & {\n        watch?: boolean;\n        push?: boolean;\n        identity?: string;\n        typecheck: \"enable\" | \"try\" | \"disable\";\n        typecheckComponents: boolean;\n        codegen: \"enable\" | \"disable\";\n        component?: string;\n        liveComponentSources?: boolean;\n      }\n    >;\n\n    /**\n     * Adds options for the `import` command.\n     */\n    addImportOptions(): Command<\n      [...Args, string],\n      Opts & {\n        table?: string;\n        format?: \"csv\" | \"jsonLines\" | \"jsonArray\" | \"zip\";\n        replace?: boolean;\n        append?: boolean;\n        replaceAll?: boolean;\n        yes?: boolean;\n        component?: string;\n      }\n    >;\n\n    /**\n     * Adds options for the `export` command.\n     */\n    addExportOptions(): Command<\n      Args,\n      Opts & {\n        path: string;\n        includeFileStorage?: boolean;\n      }\n    >;\n\n    /**\n     * Adds options for the `data` command.\n     */\n    addDataOptions(): Command<\n      [...Args, string | undefined],\n      Opts & {\n        limit: number;\n        order: \"asc\" | \"desc\";\n        component?: string;\n        format?: \"json\" | \"jsonArray\" | \"jsonLines\" | \"jsonl\" | \"pretty\";\n      }\n    >;\n\n    /**\n     * Adds options for the `logs` command.\n     */\n    addLogsOptions(): Command<\n      Args,\n      Opts & {\n        history: number;\n        success: boolean;\n        jsonl: boolean;\n      }\n    >;\n\n    /**\n     * Adds options for the `network-test` command.\n     */\n    addNetworkTestOptions(): Command<\n      Args,\n      Opts & {\n        timeout?: string;\n        ipFamily?: string;\n        speedTest?: boolean;\n      }\n    >;\n  }\n}\n\nCommand.prototype.addDeploymentSelectionOptions = function (\n  action: ActionDescription,\n  options?: { showUrlHelp?: boolean },\n) {\n  const urlOption = new Option(\n    \"--url <url>\",\n    options?.showUrlHelp\n      ? action + \" the deployment at the given URL.\"\n      : undefined,\n  ).conflicts([\n    \"--prod\",\n    \"--preview-name\",\n    \"--deployment-name\",\n    \"--deployment\",\n  ]);\n  if (!options?.showUrlHelp) {\n    urlOption.hideHelp();\n  }\n  return this.addOption(urlOption)\n    .addOption(new Option(\"--admin-key <adminKey>\").hideHelp())\n    .addOption(\n      new Option(\n        \"--prod\",\n        action + \" this project's default production deployment.\",\n      ).conflicts([\n        \"--preview-name\",\n        \"--deployment-name\",\n        \"--url\",\n        \"--deployment\",\n      ]),\n    )\n    .addOption(\n      new Option(\n        \"--preview-name <previewName>\",\n        action + \" the preview deployment with the given name.\",\n      )\n        .conflicts([\"--prod\", \"--deployment-name\", \"--url\", \"--deployment\"])\n        .hideHelp(),\n    )\n    .addOption(\n      new Option(\n        \"--deployment-name <deploymentName>\",\n        action + \" the specified deployment.\",\n      )\n        .conflicts([\"--prod\", \"--preview-name\", \"--url\", \"--deployment\"])\n        .hideHelp(),\n    )\n    .addOption(\n      new Option(\n        \"--deployment <deployment>\",\n        action +\n          \" the specified deployment. Accepts a deployment name (e.g. joyful-capybara-123), ref (e.g. dev/james), 'dev' (for your personal dev deployment), 'prod' (for your project\u2019s default production deployment). You can also select deployments in other projects with 'project-slug:ref' or 'team-slug:project-slug:ref'.\",\n      )\n        .conflicts([\"--prod\", \"--preview-name\", \"--deployment-name\", \"--url\"])\n        .hideHelp(), // TODO(nicolas) Make this public\n    )\n    .addOption(\n      new Option(\n        \"--env-file <envFile>\",\n        `Path to a custom file of environment variables, for choosing the \\\ndeployment, e.g. ${CONVEX_DEPLOYMENT_ENV_VAR_NAME} or ${CONVEX_SELF_HOSTED_URL_VAR_NAME}. \\\nSame format as .env.local or .env files, and overrides them.`,\n      ).hideHelp(),\n    ) as any;\n};\n\ndeclare const tag: unique symbol;\ntype ActionDescription = string & { readonly [tag]: \"noop\" };\nexport function actionDescription(action: string): ActionDescription {\n  return action as any;\n}\n\nexport async function normalizeDevOptions(\n  ctx: OneoffCtx,\n  cmdOptions: {\n    verbose?: boolean;\n    typecheck: \"enable\" | \"try\" | \"disable\";\n    typecheckComponents?: boolean;\n    codegen: \"enable\" | \"disable\";\n    once?: boolean;\n    untilSuccess: boolean;\n    run?: string | undefined;\n    runSh?: string;\n    runComponent?: string;\n    tailLogs?: string | true;\n    traceEvents: boolean;\n    debugBundlePath?: string | undefined;\n    debugNodeApis?: boolean;\n    liveComponentSources?: boolean;\n    pushAllModules?: boolean;\n    while?: string;\n  },\n): Promise<{\n  verbose: boolean;\n  typecheck: \"enable\" | \"try\" | \"disable\";\n  typecheckComponents: boolean;\n  codegen: boolean;\n  once: boolean;\n  untilSuccess: boolean;\n  run?:\n    | { kind: \"function\"; name: string; component?: string | undefined }\n    | { kind: \"shell\"; command: string }\n    | undefined;\n  tailLogs: LogMode;\n  traceEvents: boolean;\n  debugBundlePath?: string | undefined;\n  debugNodeApis: boolean;\n  liveComponentSources: boolean;\n  pushAllModules: boolean;\n}> {\n  if (cmdOptions.runComponent && !cmdOptions.run) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: \"Can't specify `--run-component` option without `--run`\",\n    });\n  }\n\n  if (cmdOptions.debugBundlePath !== undefined && !cmdOptions.once) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: \"`--debug-bundle-path` can only be used with `--once`.\",\n    });\n  }\n  if (cmdOptions.debugNodeApis && !cmdOptions.once) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: \"`--debug-node-apis` can only be used with `--once`.\",\n    });\n  }\n\n  return {\n    verbose: !!cmdOptions.verbose,\n    typecheck: cmdOptions.typecheck,\n    typecheckComponents: !!cmdOptions.typecheckComponents,\n    codegen: cmdOptions.codegen === \"enable\",\n    once: !!cmdOptions.once,\n    untilSuccess: cmdOptions.untilSuccess,\n    run:\n      cmdOptions.run !== undefined\n        ? {\n            kind: \"function\",\n            name: cmdOptions.run,\n            component: cmdOptions.runComponent,\n          }\n        : cmdOptions.runSh !== undefined\n          ? {\n              kind: \"shell\",\n              command: cmdOptions.runSh,\n            }\n          : undefined,\n    tailLogs:\n      typeof cmdOptions.tailLogs === \"string\"\n        ? (cmdOptions.tailLogs as LogMode)\n        : \"pause-on-deploy\",\n    traceEvents: cmdOptions.traceEvents,\n    debugBundlePath: cmdOptions.debugBundlePath,\n    debugNodeApis: !!cmdOptions.debugNodeApis,\n    liveComponentSources: !!cmdOptions.liveComponentSources,\n    pushAllModules: !!cmdOptions.pushAllModules,\n  };\n}\n\nCommand.prototype.addDeployOptions = function () {\n  return this.option(\"-v, --verbose\", \"Show full listing of changes\")\n    .option(\n      \"--dry-run\",\n      \"Print out the generated configuration without deploying to your Convex deployment\",\n    )\n    .addOption(\n      new Option(\n        \"-y, --yes\",\n        \"Skip confirmation prompt when running interactively. Warning: this deploys to PRODUCTION. To deploy to your current dev environment, run npx convex dev --once\",\n      ).hideHelp(),\n    )\n    .addOption(\n      new Option(\n        \"--typecheck <mode>\",\n        `Whether to check TypeScript files with \\`tsc --noEmit\\` before deploying.`,\n      )\n        .choices([\"enable\", \"try\", \"disable\"] as const)\n        .default(\"try\" as const),\n    )\n    .option(\n      \"--typecheck-components\",\n      \"Check TypeScript files within component implementations with `tsc --noEmit`.\",\n      false,\n    )\n    .addOption(\n      new Option(\n        \"--codegen <mode>\",\n        \"Whether to regenerate code in `convex/_generated/` before pushing.\",\n      )\n        .choices([\"enable\", \"disable\"] as const)\n        .default(\"enable\" as const),\n    )\n    .addOption(\n      new Option(\n        \"--cmd <command>\",\n        \"Command to run as part of deploying your app (e.g. `vite build`). This command can depend on the environment variables specified in `--cmd-url-env-var-name` being set.\",\n      ),\n    )\n    .addOption(\n      new Option(\n        \"--cmd-url-env-var-name <name>\",\n        \"Environment variable name to set Convex deployment URL (e.g. `VITE_CONVEX_URL`) when using `--cmd`\",\n      ),\n    )\n    .addOption(new Option(\"--debug-bundle-path <path>\").hideHelp())\n    .addOption(new Option(\"--debug\").hideHelp())\n    .addOption(new Option(\"--write-push-request <writePushRequest>\").hideHelp())\n    .addOption(new Option(\"--live-component-sources\").hideHelp())\n    .addOption(\n      new Option(\n        \"--push-all-modules\",\n        \"Push all modules without checking for unchanged module hashes from the server\",\n      )\n        .default(false)\n        .hideHelp(),\n    );\n};\n\nCommand.prototype.addSelfHostOptions = function () {\n  return this.option(\n    \"--admin-key <adminKey>\",\n    `An admin key for the deployment. Can alternatively be set as \\`${CONVEX_SELF_HOSTED_ADMIN_KEY_VAR_NAME}\\` environment variable.`,\n  )\n    .option(\n      \"--url <url>\",\n      `The url of the deployment. Can alternatively be set as \\`${CONVEX_SELF_HOSTED_URL_VAR_NAME}\\` environment variable.`,\n    )\n    .option(\n      \"--env <env>\",\n      `Path to a custom file of environment variables, containing \\`${CONVEX_SELF_HOSTED_URL_VAR_NAME}\\` and \\`${CONVEX_SELF_HOSTED_ADMIN_KEY_VAR_NAME}\\`.`,\n    );\n};\n\nCommand.prototype.addRunOptions = function () {\n  return (\n    this.argument(\n      \"functionName\",\n      \"identifier of the function to run, like `listMessages` or `dir/file:myFunction`\",\n    )\n      .argument(\n        \"[args]\",\n        \"JSON-formatted arguments object to pass to the function.\",\n      )\n      .option(\n        \"-w, --watch\",\n        \"Watch a query, printing its result if the underlying data changes. Given function must be a query.\",\n      )\n      .option(\"--push\", \"Push code to deployment before running the function.\")\n      .addOption(\n        new Option(\n          \"--identity <identity>\",\n          'JSON-formatted UserIdentity object, e.g. \\'{ name: \"John\", address: \"0x123\" }\\'',\n        ),\n      )\n      // For backwards compatibility we still support --no-push which is a noop\n      .addOption(new Option(\"--no-push\").hideHelp())\n      // Options for the deploy that --push does\n      .addOption(\n        new Option(\n          \"--typecheck <mode>\",\n          `Whether to check TypeScript files with \\`tsc --noEmit\\`.`,\n        )\n          .choices([\"enable\", \"try\", \"disable\"] as const)\n          .default(\"try\" as const),\n      )\n      .option(\n        \"--typecheck-components\",\n        \"Check TypeScript files within component implementations with `tsc --noEmit`.\",\n        false,\n      )\n      .addOption(\n        new Option(\n          \"--codegen <mode>\",\n          \"Regenerate code in `convex/_generated/`\",\n        )\n          .choices([\"enable\", \"disable\"] as const)\n          .default(\"enable\" as const),\n      )\n      .addOption(\n        new Option(\n          \"--component <path>\",\n          \"Path to the component in the component tree defined in convex.config.ts.\",\n        ),\n      )\n      .addOption(new Option(\"--live-component-sources\").hideHelp())\n  );\n};\n\nCommand.prototype.addImportOptions = function () {\n  return this.argument(\"<path>\", \"Path to the input file\")\n    .addOption(\n      new Option(\n        \"--table <table>\",\n        \"Destination table name. Required if format is csv, jsonLines, or jsonArray. Not supported if format is zip.\",\n      ),\n    )\n    .addOption(\n      new Option(\n        \"--replace\",\n        \"Replace all existing data in any of the imported tables\",\n      )\n        .conflicts(\"--append\")\n        .conflicts(\"--replace-all\"),\n    )\n    .addOption(\n      new Option(\"--append\", \"Append imported data to any existing tables\")\n        .conflicts(\"--replace-all\")\n        .conflicts(\"--replace\"),\n    )\n    .addOption(\n      new Option(\n        \"--replace-all\",\n        \"Replace all existing data in the deployment with the imported tables,\\n\" +\n          \"  deleting tables that don't appear in the import file or the schema,\\n\" +\n          \"  and clearing tables that appear in the schema but not in the import file\",\n      )\n        .conflicts(\"--append\")\n        .conflicts(\"--replace\"),\n    )\n    .option(\n      \"-y, --yes\",\n      \"Skip confirmation prompt when import leads to deleting existing documents\",\n    )\n    .addOption(\n      new Option(\n        \"--format <format>\",\n        \"Input file format. This flag is only required if the filename is missing an extension.\\n\" +\n          \"- CSV files must have a header, and each row's entries are interpreted either as a (floating point) number or a string.\\n\" +\n          \"- JSON files must be an array of JSON objects.\\n\" +\n          \"- JSONLines files must have a JSON object per line.\\n\" +\n          \"- ZIP files must have one directory per table, containing <table>/documents.jsonl. Snapshot exports from the Convex dashboard have this format.\",\n      ).choices([\"csv\", \"jsonLines\", \"jsonArray\", \"zip\"]),\n    )\n    .addOption(\n      new Option(\n        \"--component <path>\",\n        \"Path to the component in the component tree defined in convex.config.ts.\",\n      ),\n    );\n};\n\nCommand.prototype.addExportOptions = function () {\n  return this.requiredOption(\n    \"--path <zipFilePath>\",\n    \"Exports data into a ZIP file at this path, which may be a directory or unoccupied .zip path\",\n  ).addOption(\n    new Option(\n      \"--include-file-storage\",\n      \"Includes stored files (https://dashboard.convex.dev/deployment/files) in a _storage folder within the ZIP file\",\n    ),\n  );\n};\n\nCommand.prototype.addDataOptions = function () {\n  return this.addOption(\n    new Option(\n      \"--limit <n>\",\n      \"List only the `n` the most recently created documents.\",\n    )\n      .default(100)\n      .argParser(parsePositiveInteger),\n  )\n    .addOption(\n      new Option(\n        \"--order <choice>\",\n        \"Order the documents by their `_creationTime`.\",\n      )\n        .choices([\"asc\", \"desc\"])\n        .default(\"desc\"),\n    )\n    .addOption(\n      new Option(\n        \"--component <path>\",\n        \"Path to the component in the component tree defined in convex.config.ts.\",\n      ),\n    )\n    .addOption(\n      new Option(\n        \"--format <format>\",\n        \"Format to print the data in. This flag is only required if the filename is missing an extension.\\n\" +\n          \"- jsonArray (aka json): print the data as a JSON array of objects.\\n\" +\n          \"- jsonLines (aka jsonl): print the data as a JSON object per line.\\n\" +\n          \"- pretty: print the data in a human-readable format.\",\n      ).choices([\"jsonArray\", \"json\", \"jsonLines\", \"jsonl\", \"pretty\"]),\n    )\n    .argument(\"[table]\", \"If specified, list documents in this table.\");\n};\n\nCommand.prototype.addLogsOptions = function () {\n  return this.option(\n    \"--history [n]\",\n    \"Show `n` most recent logs. Defaults to showing all available logs.\",\n    parseInteger,\n  )\n    .option(\n      \"--success\",\n      \"Print a log line for every successful function execution\",\n      false,\n    )\n    .option(\"--jsonl\", \"Output raw log events as JSONL\", false);\n};\n\nCommand.prototype.addNetworkTestOptions = function () {\n  return this.addOption(\n    new Option(\n      \"--timeout <timeout>\",\n      \"Timeout in seconds for the network test (default: 30).\",\n    ),\n  )\n    .addOption(\n      new Option(\n        \"--ip-family <ipFamily>\",\n        \"IP family to use (ipv4, ipv6, or auto)\",\n      ),\n    )\n    .addOption(\n      new Option(\n        \"--speed-test\",\n        \"Perform a large echo test to measure network speed.\",\n      ),\n    );\n};\n", "import { Command } from \"@commander-js/extra-typings\";\nimport { oneoffContext, Context } from \"../bundler/context.js\";\nimport { logMessage } from \"../bundler/log.js\";\nimport {\n  getDeploymentSelection,\n  DeploymentSelection,\n} from \"./lib/deploymentSelection.js\";\nimport { fetchTeamAndProject } from \"./lib/api.js\";\n\n// This is a debugging command: it's output is not stable, don't write scripts\n// that depend on its output.\n\n// TODO: for the deployments command to list all deployments in a project\n// we need a stable endpoint for listing projects (check) and a way to\n// get a project ID in all cases to use it. We have an endpoint that lists\n// deployments by team/project slug today but it's not in use and we'll\n// be able to deprecate it if we avoid using it.\n\nexport const deployments = new Command(\"deployments\")\n  .description(\"List deployments associated with a project\")\n  .allowExcessArguments(false)\n  .action(async () => {\n    const ctx = await oneoffContext({\n      url: undefined,\n      adminKey: undefined,\n      envFile: undefined,\n    });\n\n    const deploymentSelection = await getDeploymentSelection(ctx, {\n      url: undefined,\n      adminKey: undefined,\n      envFile: undefined,\n    });\n\n    await displayCurrentDeploymentInfo(ctx, deploymentSelection);\n  });\n\nasync function displayCurrentDeploymentInfo(\n  ctx: Context,\n  selection: DeploymentSelection,\n) {\n  logMessage(\"Currently configured deployment:\");\n\n  switch (selection.kind) {\n    case \"existingDeployment\": {\n      const { deploymentToActOn } = selection;\n      logMessage(`  URL: ${deploymentToActOn.url}`);\n\n      if (deploymentToActOn.deploymentFields) {\n        const fields = deploymentToActOn.deploymentFields;\n        logMessage(\n          `  Deployment: ${fields.deploymentName} (${fields.deploymentType})`,\n        );\n        logMessage(`  Team: ${fields.teamSlug}`);\n        logMessage(`  Project: ${fields.projectSlug}`);\n      } else {\n        logMessage(`  Type: ${deploymentToActOn.source}`);\n      }\n      break;\n    }\n    case \"deploymentWithinProject\": {\n      const { targetProject } = selection;\n      if (targetProject.kind === \"teamAndProjectSlugs\") {\n        logMessage(`  Team: ${targetProject.teamSlug}`);\n        logMessage(`  Project: ${targetProject.projectSlug}`);\n      } else if (targetProject.kind === \"deploymentName\") {\n        const slugs = await fetchTeamAndProject(\n          ctx,\n          targetProject.deploymentName,\n        );\n        logMessage(`  Team: ${slugs.team}`);\n        logMessage(`  Project: ${slugs.project}`);\n        logMessage(`  Deployment: ${targetProject.deploymentName}`);\n        if (targetProject.deploymentType) {\n          logMessage(`  Type: ${targetProject.deploymentType}`);\n        }\n      } else {\n        logMessage(`  Project deploy key configured`);\n      }\n      break;\n    }\n    case \"preview\": {\n      logMessage(`  Preview deployment (deploy key configured)`);\n      break;\n    }\n    case \"anonymous\": {\n      if (selection.deploymentName) {\n        logMessage(`  Anonymous deployment: ${selection.deploymentName}`);\n      } else {\n        logMessage(`  Anonymous development (no deployment selected)`);\n      }\n      break;\n    }\n    case \"chooseProject\": {\n      logMessage(`  No project configured - will prompt interactively`);\n      break;\n    }\n    default: {\n      logMessage(`  Unknown deployment configuration`);\n    }\n  }\n}\n", "import { Command } from \"@commander-js/extra-typings\";\nimport { chalkStderr } from \"chalk\";\nimport open from \"open\";\nimport { Context, oneoffContext } from \"../bundler/context.js\";\nimport { logMessage } from \"../bundler/log.js\";\nimport {\n  BIG_BRAIN_URL,\n  bigBrainFetch,\n  deprecationCheckWarning,\n} from \"./lib/utils/utils.js\";\nimport {\n  getDeploymentSelection,\n  deploymentNameFromSelection,\n} from \"./lib/deploymentSelection.js\";\n\nexport const docs = new Command(\"docs\")\n  .description(\"Open the docs in the browser\")\n  .allowExcessArguments(false)\n  .option(\"--no-open\", \"Print docs URL instead of opening it in your browser\")\n  .action(async (options) => {\n    const ctx = await oneoffContext({\n      url: undefined,\n      adminKey: undefined,\n      envFile: undefined,\n    });\n    const deploymentSelection = await getDeploymentSelection(ctx, {\n      url: undefined,\n      adminKey: undefined,\n      envFile: undefined,\n    });\n    const configuredDeployment =\n      deploymentNameFromSelection(deploymentSelection);\n    if (configuredDeployment === null) {\n      await openDocs(ctx, options.open);\n      return;\n    }\n    const getCookieUrl = new URL(\n      `get_cookie/${configuredDeployment}`,\n      BIG_BRAIN_URL,\n    );\n    const fetch = await bigBrainFetch(ctx);\n    try {\n      const res = await fetch(getCookieUrl);\n      deprecationCheckWarning(ctx, res);\n      const { cookie } = await res.json();\n      await openDocs(ctx, options.open, cookie);\n    } catch {\n      await openDocs(ctx, options.open);\n    }\n  });\n\nasync function openDocs(ctx: Context, toOpen: boolean, cookie?: string) {\n  let docsUrl = \"https://docs.convex.dev\";\n  if (cookie !== undefined) {\n    docsUrl += \"/?t=\" + cookie;\n  }\n  if (toOpen) {\n    await open(docsUrl);\n    logMessage(chalkStderr.green(\"Docs have launched! Check your browser.\"));\n  } else {\n    logMessage(chalkStderr.green(`Find Convex docs here: ${docsUrl}`));\n  }\n}\n", "import { Command } from \"@commander-js/extra-typings\";\nimport { oneoffContext } from \"../bundler/context.js\";\nimport { loadSelectedDeploymentCredentials } from \"./lib/api.js\";\nimport { actionDescription } from \"./lib/command.js\";\nimport { runInDeployment } from \"./lib/run.js\";\nimport { ensureHasConvexDependency } from \"./lib/utils/utils.js\";\nimport { getDeploymentSelection } from \"./lib/deploymentSelection.js\";\nimport { withRunningBackend } from \"./lib/localDeployment/run.js\";\n\nexport const run = new Command(\"run\")\n  .description(\"Run a function (query, mutation, or action) on your deployment\")\n  .allowExcessArguments(false)\n  .addRunOptions()\n  .addDeploymentSelectionOptions(actionDescription(\"Run the function on\"))\n  .showHelpAfterError()\n  .action(async (functionName, argsString, options) => {\n    const ctx = await oneoffContext(options);\n    await ensureHasConvexDependency(ctx, \"run\");\n    const deploymentSelection = await getDeploymentSelection(ctx, options);\n    const deployment = await loadSelectedDeploymentCredentials(\n      ctx,\n      deploymentSelection,\n      { ensureLocalRunning: false },\n    );\n\n    if (\n      deployment.deploymentFields?.deploymentType === \"prod\" &&\n      options.push\n    ) {\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage:\n          `\\`convex run\\` doesn't support pushing functions to prod deployments. ` +\n          `Remove the --push flag. To push to production use \\`npx convex deploy\\`.`,\n      });\n    }\n\n    await withRunningBackend({\n      ctx,\n      deployment: {\n        deploymentUrl: deployment.url,\n        deploymentFields: deployment.deploymentFields,\n      },\n      action: async () => {\n        await runInDeployment(ctx, {\n          deploymentUrl: deployment.url,\n          adminKey: deployment.adminKey,\n          deploymentName: deployment.deploymentFields?.deploymentName ?? null,\n          functionName,\n          argsString: argsString ?? \"{}\",\n          componentPath: options.component,\n          identityString: options.identity,\n          push: !!options.push,\n          watch: !!options.watch,\n          typecheck: options.typecheck,\n          typecheckComponents: options.typecheckComponents,\n          codegen: options.codegen === \"enable\",\n          liveComponentSources: !!options.liveComponentSources,\n        });\n      },\n    });\n  });\n", "import { Command, Option } from \"@commander-js/extra-typings\";\nimport { oneoffContext } from \"../bundler/context.js\";\n\nconst list = new Command(\"list\").action(async () => {\n  const ctx = await oneoffContext({\n    url: undefined,\n    adminKey: undefined,\n    envFile: undefined,\n  });\n  await ctx.crash({\n    exitCode: 1,\n    errorType: \"fatal\",\n    errForSentry: \"Ran deprecated `convex auth list`\",\n    printedMessage:\n      \"convex auth commands were removed, see https://docs.convex.dev/auth for up to date instructions.\",\n  });\n});\n\nconst rm = new Command(\"remove\").action(async () => {\n  const ctx = await oneoffContext({\n    url: undefined,\n    adminKey: undefined,\n    envFile: undefined,\n  });\n  await ctx.crash({\n    exitCode: 1,\n    errorType: \"fatal\",\n    errForSentry: \"Ran deprecated `convex auth remove`\",\n    printedMessage:\n      \"convex auth commands were removed, see https://docs.convex.dev/auth for up to date instructions.\",\n  });\n});\n\nconst add = new Command(\"add\")\n  .addOption(new Option(\"--identity-provider-url <url>\").hideHelp())\n  .addOption(new Option(\"--application-id <applicationId>\").hideHelp())\n  .action(async () => {\n    const ctx = await oneoffContext({\n      url: undefined,\n      adminKey: undefined,\n      envFile: undefined,\n    });\n    await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      errForSentry: \"Ran deprecated `convex auth add`\",\n      printedMessage:\n        \"convex auth commands were removed, see https://docs.convex.dev/auth for up to date instructions.\",\n    });\n  });\n\nexport const auth = new Command(\"auth\")\n  .addCommand(list)\n  .addCommand(rm)\n  .addCommand(add);\n", "import { Command, Option } from \"@commander-js/extra-typings\";\nimport { oneoffContext } from \"../bundler/context.js\";\nimport { runCodegen } from \"./lib/components.js\";\nimport { getDeploymentSelection } from \"./lib/deploymentSelection.js\";\nexport const codegen = new Command(\"codegen\")\n  .summary(\"Generate backend type definitions\")\n  .description(\n    \"Generate code in `convex/_generated/` based on the current contents of `convex/`.\",\n  )\n  .allowExcessArguments(false)\n  .option(\n    \"--dry-run\",\n    \"Print out the generated configuration to stdout instead of writing to convex directory\",\n  )\n  .addOption(new Option(\"--debug\").hideHelp())\n  .addOption(\n    new Option(\n      \"--typecheck <mode>\",\n      `Whether to check TypeScript files with \\`tsc --noEmit\\`.`,\n    )\n      .choices([\"enable\", \"try\", \"disable\"] as const)\n      .default(\"try\" as const),\n  )\n  .option(\n    \"--init\",\n    \"Also (over-)write the default convex/README.md and convex/tsconfig.json files, otherwise only written when creating a new Convex project.\",\n  )\n  .addOption(new Option(\"--admin-key <adminKey>\").hideHelp())\n  .addOption(new Option(\"--url <url>\").hideHelp())\n  .addOption(new Option(\"--live-component-sources\").hideHelp())\n  // Experimental option\n  .addOption(\n    new Option(\n      \"--commonjs\",\n      \"Generate CommonJS modules (CJS) instead of ECMAScript modules, the default. Bundlers typically take care of this conversion while bundling, so this setting is generally only useful for projects which do not use a bundler, typically Node.js projects. Convex functions can be written with either syntax.\",\n    ).hideHelp(),\n  )\n  // Only for doing codegen on system UDFs\n  .addOption(new Option(\"--system-udfs\").hideHelp())\n  .option(\n    \"--component-dir <path>\",\n    \"Generate code for a specific component directory instead of the current application.\",\n  )\n  .action(async (options) => {\n    const ctx = await oneoffContext(options);\n    const deploymentSelection = await getDeploymentSelection(ctx, options);\n\n    await runCodegen(ctx, deploymentSelection, {\n      dryRun: !!options.dryRun,\n      debug: !!options.debug,\n      typecheck: options.typecheck,\n      init: !!options.init,\n      commonjs: !!options.commonjs,\n      url: options.url,\n      adminKey: options.adminKey,\n      liveComponentSources: !!options.liveComponentSources,\n      debugNodeApis: false,\n      systemUdfs: !!options.systemUdfs,\n      largeIndexDeletionCheck: \"no verification\", // `codegen` is a read-only operation\n      codegenOnlyThisComponent: options.componentDir,\n    });\n  });\n", "import { Command, Option } from \"@commander-js/extra-typings\";\nimport { oneoffContext } from \"../bundler/context.js\";\n\n// Reinitialize an existing Convex project.\n// This command is deprecated and hidden from the command help.\n// `npx convex dev --once --configure=existing` replaces it.\nexport const reinit = new Command(\"reinit\")\n  .description(\n    \"Reinitialize a Convex project in the local directory if you've lost your convex.json file\",\n  )\n  .allowExcessArguments(false)\n  .addOption(\n    new Option(\n      \"--team <team_slug>\",\n      \"The identifier of the team the project belongs to.\",\n    ),\n  )\n  .addOption(\n    new Option(\n      \"--project <project_slug>\",\n      \"The identifier of the project you'd like to reinitialize.\",\n    ),\n  )\n  .action(async (_options) => {\n    return (\n      await oneoffContext({\n        url: undefined,\n        adminKey: undefined,\n        envFile: undefined,\n      })\n    ).crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      errForSentry:\n        \"The `reinit` command is deprecated. Use `npx convex dev --once --configure=existing` instead.\",\n      printedMessage:\n        \"The `reinit` command is deprecated. Use `npx convex dev --once --configure=existing` instead.\",\n    });\n  });\n", "import { chalkStderr } from \"chalk\";\nimport { Command } from \"@commander-js/extra-typings\";\nimport { logMessage } from \"../bundler/log.js\";\n\nexport const update = new Command(\"update\")\n  .description(\"Print instructions for updating the convex package\")\n  .allowExcessArguments(false)\n  .action(async () => {\n    logMessage(\n      chalkStderr.green(\n        `To view the Convex changelog, go to https://news.convex.dev/tag/releases/\\nWhen you are ready to upgrade, run the following command:\\nnpm install convex@latest\\n`,\n      ),\n    );\n  });\n", "import { chalkStderr } from \"chalk\";\nimport { functionsDir, ensureHasConvexDependency } from \"./lib/utils/utils.js\";\nimport { Command, Option } from \"@commander-js/extra-typings\";\nimport { readConfig } from \"./lib/config.js\";\nimport {\n  typeCheckFunctions,\n  resolveTypescriptCompiler,\n} from \"./lib/typecheck.js\";\nimport { oneoffContext } from \"../bundler/context.js\";\nimport { logFinishedStep, logMessage } from \"../bundler/log.js\";\n\n// Experimental (it's going to fail sometimes) TypeScript type checking.\n// Includes a separate command to help users debug their TypeScript configs.\n\nexport type TypecheckResult = \"cantTypeCheck\" | \"success\" | \"typecheckFailed\";\n\n/** Run the TypeScript compiler, as configured during  */\nexport const typecheck = new Command(\"typecheck\")\n  .description(\n    \"Run TypeScript typechecking on your Convex functions with `tsc --noEmit`.\",\n  )\n  .allowExcessArguments(false)\n  .addOption(\n    new Option(\n      \"--typescript-compiler <compiler>\",\n      \"TypeScript compiler to use for typechecking (`@typescript/native-preview` must be installed to use `tsgo`)\",\n    ).choices([\"tsc\", \"tsgo\"] as const),\n  )\n  .action(async (cmdOptions) => {\n    const ctx = await oneoffContext({\n      url: undefined,\n      adminKey: undefined,\n      envFile: undefined,\n    });\n    const typescriptCompiler = await resolveTypescriptCompiler(\n      ctx,\n      cmdOptions.typescriptCompiler,\n    );\n    const { configPath, config: localConfig } = await readConfig(ctx, false);\n    await ensureHasConvexDependency(ctx, \"typecheck\");\n    await typeCheckFunctions(\n      ctx,\n      typescriptCompiler,\n      functionsDir(configPath, localConfig.projectConfig),\n      async (typecheckResult, logSpecificError, runOnError) => {\n        logSpecificError?.();\n        if (typecheckResult === \"typecheckFailed\") {\n          logMessage(chalkStderr.gray(\"Typecheck failed\"));\n          try {\n            await runOnError?.();\n            // If runOnError doesn't throw then it worked the second time.\n            // No errors to report, but it's still a failure.\n          } catch {\n            // As expected, `runOnError` threw\n          }\n          return await ctx.crash({\n            exitCode: 1,\n            errorType: \"invalid filesystem data\",\n            printedMessage: null,\n          });\n        } else if (typecheckResult === \"cantTypeCheck\") {\n          logMessage(\n            chalkStderr.gray(\"Unable to typecheck; is TypeScript installed?\"),\n          );\n          return await ctx.crash({\n            exitCode: 1,\n            errorType: \"invalid filesystem data\",\n            printedMessage: null,\n          });\n        } else {\n          logFinishedStep(\n            `Typecheck passed: \\`${typescriptCompiler} --noEmit\\` completed with exit code 0.`,\n          );\n          return await ctx.flushAndExit(0);\n        }\n      },\n    );\n  });\n", "import { Command, Option } from \"@commander-js/extra-typings\";\nimport { Context, oneoffContext } from \"../bundler/context.js\";\nimport { logFailure, logFinishedStep, logMessage } from \"../bundler/log.js\";\nimport { checkAuthorization, performLogin } from \"./lib/login.js\";\nimport {\n  loadProjectLocalConfig,\n  loadUuidForAnonymousUser,\n} from \"./lib/localDeployment/filePaths.js\";\nimport {\n  handleLinkToProject,\n  listLegacyAnonymousDeployments,\n} from \"./lib/localDeployment/anonymous.js\";\nimport {\n  DASHBOARD_HOST,\n  deploymentDashboardUrlPage,\n  teamDashboardUrl,\n} from \"./lib/dashboard.js\";\nimport { promptSearch, promptYesNo } from \"./lib/utils/prompts.js\";\nimport { bigBrainAPI, validateOrSelectTeam } from \"./lib/utils/utils.js\";\nimport {\n  selectProject,\n  updateEnvAndConfigForDeploymentSelection,\n} from \"./configure.js\";\nimport {\n  getDeploymentSelection,\n  shouldAllowAnonymousDevelopment,\n} from \"./lib/deploymentSelection.js\";\nimport {\n  isAnonymousDeployment,\n  removeAnonymousPrefix,\n} from \"./lib/deployment.js\";\nimport {\n  readGlobalConfig,\n  globalConfigPath,\n} from \"./lib/utils/globalConfig.js\";\nimport { getTeamsForUser } from \"./lib/api.js\";\n\nconst loginStatus = new Command(\"status\")\n  .description(\"Check login status and list accessible teams\")\n  .allowExcessArguments(false)\n  .action(async () => {\n    const ctx = await oneoffContext({\n      url: undefined,\n      adminKey: undefined,\n      envFile: undefined,\n    });\n\n    const globalConfig = readGlobalConfig(ctx);\n    const hasToken = globalConfig?.accessToken !== null;\n\n    if (hasToken) {\n      logMessage(`Convex account token found in: ${globalConfigPath()}`);\n    } else {\n      logMessage(\"No token found locally\");\n      return;\n    }\n\n    const isLoggedIn = await checkAuthorization(ctx, false);\n\n    if (!isLoggedIn) {\n      logMessage(\"Status: Not logged in\");\n      return;\n    }\n\n    logMessage(\"Status: Logged in\");\n    const teams = await getTeamsForUser(ctx);\n    logMessage(\n      `Teams: ${teams.length} team${teams.length === 1 ? \"\" : \"s\"} accessible`,\n    );\n    for (const team of teams) {\n      logMessage(`  - ${team.name} (${team.slug})`);\n    }\n  });\n\nexport const login = new Command(\"login\")\n  .description(\"Login to Convex\")\n  .allowExcessArguments(false)\n  .option(\n    \"--device-name <name>\",\n    \"Provide a name for the device being authorized\",\n  )\n  .option(\n    \"-f, --force\",\n    \"Proceed with login even if a valid access token already exists for this device\",\n  )\n  .option(\n    \"--no-open\",\n    \"Don't automatically open the login link in the default browser\",\n  )\n  .addOption(\n    new Option(\n      \"--login-flow <mode>\",\n      `How to log in; defaults to guessing based on the environment.`,\n    )\n      .choices([\"paste\", \"auto\", \"poll\"] as const)\n      .default(\"auto\" as const),\n  )\n  .addOption(new Option(\"--link-deployments\").hideHelp())\n  // These options are hidden from the help/usage message, but allow overriding settings for testing.\n  // Change the auth credentials with the auth provider\n  .addOption(new Option(\"--override-auth-url <url>\").hideHelp())\n  .addOption(new Option(\"--override-auth-client <id>\").hideHelp())\n  .addOption(new Option(\"--override-auth-username <username>\").hideHelp())\n  .addOption(new Option(\"--override-auth-password <password>\").hideHelp())\n  // Skip the auth provider login and directly use this access token\n  .addOption(new Option(\"--override-access-token <token>\").hideHelp())\n  // Automatically accept opt ins without prompting\n  .addOption(new Option(\"--accept-opt-ins\").hideHelp())\n  // Dump the access token from the auth provider and skip authorization with Convex\n  .addOption(new Option(\"--dump-access-token\").hideHelp())\n  // Hidden option for tests to check if the user is logged in.\n  .addOption(new Option(\"--check-login\").hideHelp())\n  // Redirect to Vercel SSO integration URL\n  .addOption(\n    new Option(\n      \"--vercel\",\n      \"Redirect to Vercel SSO integration for login\",\n    ).hideHelp(),\n  )\n  // Override the Vercel URL slug (defaults to 'convex')\n  .addOption(new Option(\"--vercel-override <slug>\").hideHelp())\n  .addCommand(loginStatus)\n  .addHelpCommand(false)\n  .action(async (options, cmd: Command) => {\n    const ctx = await oneoffContext({\n      url: undefined,\n      adminKey: undefined,\n      envFile: undefined,\n    });\n    if (\n      !options.force &&\n      (await checkAuthorization(ctx, !!options.acceptOptIns))\n    ) {\n      logFinishedStep(\n        \"This device has previously been authorized and is ready for use with Convex.\",\n      );\n      await handleLinkingDeployments(ctx, {\n        interactive: !!options.linkDeployments,\n      });\n      return;\n    }\n    if (!options.force && options.checkLogin) {\n      const isLoggedIn = await checkAuthorization(ctx, !!options.acceptOptIns);\n      if (!isLoggedIn) {\n        return ctx.crash({\n          exitCode: 1,\n          errorType: \"fatal\",\n          errForSentry: \"You are not logged in.\",\n          printedMessage: \"You are not logged in.\",\n        });\n      }\n    }\n    if (!!options.overrideAuthUsername !== !!options.overrideAuthPassword) {\n      cmd.error(\n        \"If overriding credentials, both username and password must be provided\",\n      );\n    }\n\n    const uuid = loadUuidForAnonymousUser(ctx);\n    await performLogin(ctx, {\n      ...options,\n      anonymousId: uuid,\n      vercel: options.vercel,\n      vercelOverride: options.vercelOverride,\n    });\n\n    await handleLinkingDeployments(ctx, {\n      interactive: !!options.linkDeployments,\n    });\n  });\n\nasync function handleLinkingDeployments(\n  ctx: Context,\n  args: {\n    interactive: boolean;\n  },\n) {\n  if (!shouldAllowAnonymousDevelopment()) {\n    return;\n  }\n\n  // Check for project-local anonymous deployment first - this takes priority\n  const projectLocal = loadProjectLocalConfig(ctx);\n  if (\n    projectLocal !== null &&\n    isAnonymousDeployment(projectLocal.deploymentName)\n  ) {\n    const shouldLink = await promptYesNo(ctx, {\n      message: `Would you like to link your existing deployment to your account? (\"${projectLocal.deploymentName}\")`,\n      default: true,\n    });\n    if (!shouldLink) {\n      logMessage(\n        \"Not linking your existing deployment. If you want to link it later, run `npx convex login --link-deployments`.\",\n      );\n      logMessage(\n        `Visit ${DASHBOARD_HOST} or run \\`npx convex dev\\` to get started with your new account.`,\n      );\n      return;\n    }\n\n    const { dashboardUrl } = await linkSingleDeployment(\n      ctx,\n      projectLocal.deploymentName,\n      projectLocal.deploymentName,\n    );\n    logFinishedStep(`Visit ${dashboardUrl} to get started.`);\n    return;\n  }\n\n  // No project-local deployment - check for legacy deployments\n  const legacyDeployments = listLegacyAnonymousDeployments(ctx);\n  if (legacyDeployments.length === 0) {\n    if (args.interactive) {\n      logMessage(\n        \"It doesn't look like you have any deployments to link. You can run `npx convex dev` to set up a new project or select an existing one.\",\n      );\n    }\n    return;\n  }\n\n  // Get the currently configured deployment (if any) for env var updates\n  const deploymentSelection = await getDeploymentSelection(ctx, {\n    url: undefined,\n    adminKey: undefined,\n    envFile: undefined,\n  });\n  const configuredDeployment =\n    deploymentSelection.kind === \"anonymous\"\n      ? deploymentSelection.deploymentName\n      : null;\n\n  if (!args.interactive) {\n    // Non-interactive: link all legacy deployments automatically\n    const message = getMessage(legacyDeployments.map((d) => d.deploymentName));\n    const createProjects = await promptYesNo(ctx, {\n      message,\n      default: true,\n    });\n    if (!createProjects) {\n      logMessage(\n        \"Not linking your existing deployments. If you want to link them later, run `npx convex login --link-deployments`.\",\n      );\n      logMessage(\n        `Visit ${DASHBOARD_HOST} or run \\`npx convex dev\\` to get started with your new account.`,\n      );\n      return;\n    }\n\n    const {\n      team: { slug: teamSlug },\n    } = await validateOrSelectTeam(\n      ctx,\n      undefined,\n      \"Choose a team for your deployments:\",\n    );\n    const projectsRemaining = await getProjectsRemaining(ctx, teamSlug);\n    if (legacyDeployments.length > projectsRemaining) {\n      logFailure(\n        `You have ${legacyDeployments.length} deployments to link, but only have ${projectsRemaining} projects remaining. If you'd like to choose which ones to link, run this command with the --link-deployments flag.`,\n      );\n      return;\n    }\n\n    let dashboardUrl = teamDashboardUrl(teamSlug);\n    for (const deployment of legacyDeployments) {\n      const result = await linkSingleDeployment(\n        ctx,\n        deployment.deploymentName,\n        configuredDeployment,\n        { teamSlug, projectSlug: null },\n      );\n      if (deployment.deploymentName === configuredDeployment) {\n        dashboardUrl = result.dashboardUrl;\n      }\n    }\n    logFinishedStep(\n      `Successfully linked your deployments! Visit ${dashboardUrl} to get started.`,\n    );\n    return;\n  }\n\n  // Interactive mode: let user choose which legacy deployments to link\n  while (true) {\n    const currentLegacyDeployments = listLegacyAnonymousDeployments(ctx);\n    if (currentLegacyDeployments.length === 0) {\n      logMessage(\"All deployments have been linked.\");\n      break;\n    }\n    logMessage(\n      getDeploymentListMessage(\n        currentLegacyDeployments.map((d) => d.deploymentName),\n      ),\n    );\n    const deploymentToLink = await promptSearch(ctx, {\n      message: \"Which deployment would you like to link to your account?\",\n      choices: currentLegacyDeployments.map((d) => ({\n        name: d.deploymentName,\n        value: d.deploymentName,\n      })),\n    });\n\n    await linkSingleDeployment(ctx, deploymentToLink, configuredDeployment);\n\n    const shouldContinue = await promptYesNo(ctx, {\n      message: \"Would you like to link another deployment?\",\n      default: true,\n    });\n    if (!shouldContinue) {\n      break;\n    }\n  }\n}\n\n/**\n * Link a single deployment to a project, prompting for team and project selection.\n * Updates env vars if this is the currently configured deployment.\n */\nasync function linkSingleDeployment(\n  ctx: Context,\n  deploymentName: string,\n  configuredDeployment: string | null,\n  options?: {\n    teamSlug?: string;\n    projectSlug?: string | null;\n  },\n): Promise<{ dashboardUrl: string }> {\n  const teamSlug =\n    options?.teamSlug ??\n    (\n      await validateOrSelectTeam(\n        ctx,\n        undefined,\n        \"Choose a team for your deployment:\",\n      )\n    ).team.slug;\n\n  const projectSlug =\n    options?.projectSlug ??\n    (\n      await selectProject(ctx, \"ask\", {\n        team: teamSlug,\n        devDeployment: \"local\",\n        defaultProjectName: removeAnonymousPrefix(deploymentName),\n      })\n    ).projectSlug;\n\n  const linkedDeployment = await handleLinkToProject(ctx, {\n    deploymentName,\n    teamSlug,\n    projectSlug,\n  });\n\n  if (deploymentName === configuredDeployment) {\n    await updateEnvAndConfigForDeploymentSelection(\n      ctx,\n      {\n        url: linkedDeployment.deploymentUrl,\n        deploymentName: linkedDeployment.deploymentName,\n        teamSlug,\n        projectSlug: linkedDeployment.projectSlug,\n        deploymentType: \"local\",\n      },\n      configuredDeployment,\n    );\n  }\n\n  return {\n    dashboardUrl: deploymentDashboardUrlPage(\n      linkedDeployment.deploymentName,\n      \"\",\n    ),\n  };\n}\n\nasync function getProjectsRemaining(ctx: Context, teamSlug: string) {\n  const response = await bigBrainAPI<{ projectsRemaining: number }>({\n    ctx,\n    method: \"GET\",\n    path: `teams/${teamSlug}/projects_remaining`,\n  });\n\n  return response.projectsRemaining;\n}\n\nfunction getDeploymentListMessage(anonymousDeploymentNames: string[]) {\n  let message = `You have ${anonymousDeploymentNames.length} existing deployments.`;\n  message += `\\n\\nDeployments:`;\n  for (const deploymentName of anonymousDeploymentNames) {\n    message += `\\n- ${deploymentName}`;\n  }\n  return message;\n}\n\nfunction getMessage(anonymousDeploymentNames: string[]) {\n  if (anonymousDeploymentNames.length === 1) {\n    return `Would you like to link your existing deployment to your account? (\"${anonymousDeploymentNames[0]}\")`;\n  }\n  let message = `You have ${anonymousDeploymentNames.length} existing deployments. Would you like to link them to your account?`;\n  message += `\\n\\nDeployments:`;\n  for (const deploymentName of anonymousDeploymentNames) {\n    message += `\\n- ${deploymentName}`;\n  }\n  message += `\\n\\nYou can alternatively run \\`npx convex login --link-deployments\\` to interactively choose which deployments to add.`;\n  return message;\n}\n", "import { Command } from \"@commander-js/extra-typings\";\nimport { oneoffContext } from \"../bundler/context.js\";\nimport { logFinishedStep } from \"../bundler/log.js\";\nimport { recursivelyDelete } from \"./lib/fsUtils.js\";\nimport { globalConfigPath } from \"./lib/utils/globalConfig.js\";\n\nexport const logout = new Command(\"logout\")\n  .description(\"Log out of Convex on this machine\")\n  .allowExcessArguments(false)\n  .action(async () => {\n    const ctx = await oneoffContext({\n      url: undefined,\n      adminKey: undefined,\n      envFile: undefined,\n    });\n\n    if (ctx.fs.exists(globalConfigPath())) {\n      recursivelyDelete(ctx, globalConfigPath());\n    }\n\n    logFinishedStep(\n      \"You have been logged out of Convex.\\n  Run `npx convex dev` to log in.\",\n    );\n  });\n", "import { Command } from \"@commander-js/extra-typings\";\nimport { init } from \"./init.js\";\nimport { dashboard } from \"./dashboard.js\";\nimport { deployments } from \"./deployments.js\";\nimport { docs } from \"./docs.js\";\nimport { run } from \"./run.js\";\nimport { version } from \"./version.js\";\nimport { auth } from \"./auth.js\";\nimport { codegen } from \"./codegen.js\";\nimport { reinit } from \"./reinit.js\";\nimport { update } from \"./update.js\";\nimport { typecheck } from \"./typecheck.js\";\nimport { login } from \"./login.js\";\nimport { logout } from \"./logout.js\";\nimport { chalkStderr } from \"chalk\";\nimport * as Sentry from \"@sentry/node\";\nimport { initSentry } from \"./lib/utils/sentry.js\";\nimport { dev } from \"./dev.js\";\nimport { deploy } from \"./deploy.js\";\nimport { logs } from \"./logs.js\";\nimport { networkTest } from \"./network_test.js\";\nimport { convexExport } from \"./convexExport.js\";\nimport { convexImport } from \"./convexImport.js\";\nimport { env } from \"./env.js\";\nimport { data } from \"./data.js\";\nimport { format } from \"util\";\nimport { functionSpec } from \"./functionSpec.js\";\nimport { insights } from \"./insights.js\";\nimport { disableLocalDeployments } from \"./disableLocalDev.js\";\nimport { mcp } from \"./mcp.js\";\nimport { deployment } from \"./deployment.js\";\nimport { aiFiles } from \"./aiFiles.js\";\nimport dns from \"node:dns\";\nimport net from \"node:net\";\nimport { integration } from \"./integration.js\";\nimport { setGlobalDispatcher, EnvHttpProxyAgent } from \"undici\";\nimport { logVerbose } from \"../bundler/log.js\";\n\nconst HARD_MINIMUM_NODE_MAJOR_VERSION = 16;\nconst HARD_MINIMUM_NODE_MINOR_VERSION = 15;\nconst SOFT_MINIMUM_NODE_MAJOR_VERSION = 20;\n\n// console.error before it started being red by default in Node.js v20\nfunction logToStderr(...args: unknown[]) {\n  process.stderr.write(`${format(...args)}\\n`);\n}\n\nasync function main() {\n  const nodeVersion = process.versions.node;\n  const majorVersion = parseInt(nodeVersion.split(\".\")[0], 10);\n  const minorVersion = parseInt(nodeVersion.split(\".\")[1], 10);\n\n  const proxy = process.env.HTTPS_PROXY || process.env.HTTP_PROXY;\n  if (proxy) {\n    setGlobalDispatcher(new EnvHttpProxyAgent());\n    logVerbose(`[proxy-bootstrap] Using proxy: ${proxy}`);\n  }\n\n  // Use ipv4 first for 127.0.0.1 in tests\n  dns.setDefaultResultOrder(\"ipv4first\");\n\n  // Increase the timeout from default 250ms for high latency situations,\n  // see https://github.com/nodejs/node/issues/54359.\n  if (majorVersion >= 20) {\n    // While we use Node.js v18 types\n    (net as any).setDefaultAutoSelectFamilyAttemptTimeout?.(1000);\n  }\n\n  initSentry();\n\n  if (\n    majorVersion < HARD_MINIMUM_NODE_MAJOR_VERSION ||\n    (majorVersion === HARD_MINIMUM_NODE_MAJOR_VERSION &&\n      minorVersion < HARD_MINIMUM_NODE_MINOR_VERSION)\n  ) {\n    logToStderr(\n      chalkStderr.red(\n        `Your Node version ${nodeVersion} is too old. Convex requires at least Node v${HARD_MINIMUM_NODE_MAJOR_VERSION}.${HARD_MINIMUM_NODE_MINOR_VERSION}`,\n      ),\n    );\n    logToStderr(\n      chalkStderr.gray(\n        `You can use ${chalkStderr.bold(\n          \"nvm\",\n        )} (https://github.com/nvm-sh/nvm#installing-and-updating) to manage different versions of Node.`,\n      ),\n    );\n    logToStderr(\n      chalkStderr.gray(\n        \"After installing `nvm`, install the latest version of Node with \" +\n          chalkStderr.bold(\"`nvm install node`.\"),\n      ),\n    );\n    logToStderr(\n      chalkStderr.gray(\n        \"Then, activate the installed version in your terminal with \" +\n          chalkStderr.bold(\"`nvm use`.\"),\n      ),\n    );\n    process.exit(1);\n  }\n\n  if (majorVersion < SOFT_MINIMUM_NODE_MAJOR_VERSION) {\n    logToStderr(\n      chalkStderr.yellow(\n        `Warning: Your Node version ${nodeVersion} is below the recommended minimum of Node v${SOFT_MINIMUM_NODE_MAJOR_VERSION}.x. Convex may work but could behave unexpectedly.`,\n      ),\n    );\n    logToStderr(\n      chalkStderr.gray(\n        `We recommend upgrading Node to v${SOFT_MINIMUM_NODE_MAJOR_VERSION} or newer.`,\n      ),\n    );\n    logToStderr(\n      chalkStderr.gray(\n        `You can use ${chalkStderr.bold(\n          \"nvm\",\n        )} (https://github.com/nvm-sh/nvm#installing-and-updating) to manage different versions of Node.`,\n      ),\n    );\n    logToStderr(\n      chalkStderr.gray(\n        \"After installing `nvm`, install the latest version of Node with \" +\n          chalkStderr.bold(\"`nvm install node`.\"),\n      ),\n    );\n    logToStderr(\n      chalkStderr.gray(\n        \"Then, activate the installed version in your terminal with \" +\n          chalkStderr.bold(\"`nvm use`.\"),\n      ),\n    );\n  }\n\n  const program = new Command();\n  program\n    .name(\"convex\")\n    .usage(\"<command> [options]\")\n    .description(\"Start developing with Convex by running `npx convex dev`.\")\n    .addCommand(login, { hidden: true })\n    .addCommand(init, { hidden: true })\n    .addCommand(reinit, { hidden: true })\n    .addCommand(dev)\n    .addCommand(deploy)\n    .addCommand(deployment)\n    .addCommand(deployments, { hidden: true })\n    .addCommand(run)\n    .addCommand(convexImport)\n    .addCommand(dashboard)\n    .addCommand(docs)\n    .addCommand(logs)\n    .addCommand(typecheck, { hidden: true })\n    .addCommand(auth, { hidden: true })\n    .addCommand(convexExport)\n    .addCommand(env)\n    .addCommand(data)\n    .addCommand(codegen)\n    .addCommand(update)\n    .addCommand(logout)\n    .addCommand(networkTest, { hidden: true })\n    .addCommand(integration, { hidden: true })\n    .addCommand(functionSpec)\n    .addCommand(insights)\n    .addCommand(disableLocalDeployments)\n    .addCommand(mcp)\n    .addCommand(aiFiles)\n    .helpCommand(\"help <command>\", \"Show help for given <command>\")\n    .version(version)\n    // Hide version and help so they don't clutter\n    // the list of commands.\n    .configureHelp({ visibleOptions: () => [] })\n    .showHelpAfterError();\n\n  // Run the command and be sure to flush Sentry before exiting.\n  try {\n    await program.parseAsync(process.argv);\n  } catch (e) {\n    Sentry.captureException(e);\n    process.exitCode = 1;\n    // This is too early to use `logError`, so just log directly.\n    // eslint-disable-next-line no-console\n    console.error(chalkStderr.red(\"Unexpected Error: \" + e));\n  } finally {\n    await Sentry.close();\n  }\n  process.exit();\n}\nvoid main();\n", "import { Command, Option } from \"@commander-js/extra-typings\";\nimport { oneoffContext } from \"../bundler/context.js\";\nimport { logVerbose } from \"../bundler/log.js\";\nimport { deploymentCredentialsOrConfigure } from \"./configure.js\";\nimport { usageStateWarning } from \"./lib/usage.js\";\nimport { normalizeDevOptions } from \"./lib/command.js\";\nimport { devAgainstDeployment } from \"./lib/dev.js\";\nimport {\n  CONVEX_DEPLOYMENT_ENV_VAR_NAME,\n  CONVEX_SELF_HOSTED_URL_VAR_NAME,\n} from \"./lib/utils/utils.js\";\nimport { getDeploymentSelection } from \"./lib/deploymentSelection.js\";\nimport { checkVersion } from \"./lib/updates.js\";\n\nexport const dev = new Command(\"dev\")\n  .summary(\"Develop against a dev deployment, watching for changes\")\n  .description(\n    \"Develop against a dev deployment, watching for changes\\n\\n\" +\n      \"  1. Configures a new or existing project (if needed)\\n\" +\n      \"  2. Updates generated types and pushes code to the configured dev deployment\\n\" +\n      \"  3. Runs the provided command (if `--run` or `--run-sh` is used)\\n\" +\n      \"  4. Watches for file changes, and repeats step 2\\n\",\n  )\n  .allowExcessArguments(false)\n  .option(\"-v, --verbose\", \"Show full listing of changes\")\n  .addOption(\n    new Option(\n      \"--typecheck <mode>\",\n      `Check TypeScript files with \\`tsc --noEmit\\`.`,\n    )\n      .choices([\"enable\", \"try\", \"disable\"] as const)\n      .default(\"try\" as const),\n  )\n  .option(\n    \"--typecheck-components\",\n    \"Check TypeScript files within component implementations with `tsc --noEmit`.\",\n    false,\n  )\n  .addOption(\n    new Option(\"--codegen <mode>\", \"Regenerate code in `convex/_generated/`\")\n      .choices([\"enable\", \"disable\"] as const)\n      .default(\"enable\" as const),\n  )\n  .addOption(\n    new Option(\n      \"--push-all-modules\",\n      \"Push all modules without checking for unchanged module hashes from the server\",\n    )\n      .default(false)\n      .hideHelp(),\n  )\n  .option(\n    \"--once\",\n    \"Execute only the first 3 steps, stop on any failure\",\n    false,\n  )\n  .option(\n    \"--until-success\",\n    \"Execute only the first 3 steps, on failure watch for local and remote changes and retry steps 2 and 3\",\n    false,\n  )\n  .addOption(\n    new Option(\n      \"--run <functionName>\",\n      \"The identifier of the function to run in step 3, \" +\n        \"like `api.init.createData` or `myDir/myFile:myFunction`\",\n    ).conflicts([\"--run-sh\"]),\n  )\n  .option(\n    \"--run-component <functionName>\",\n    \"If --run is used and the function is in a component, the path the component tree defined in convex.config.ts. \" +\n      \"Components are a beta feature. This flag is unstable and may change in subsequent releases.\",\n  )\n  .addOption(\n    new Option(\n      \"--run-sh <command>\",\n      \"A shell command to run in step 3, like `node myScript.js`. \" +\n        \"If you just want to run a Convex function, use `--run` instead.\",\n    ).conflicts([\"--run\"]),\n  )\n  .addOption(\n    new Option(\n      \"--tail-logs [mode]\",\n      \"Choose whether to tail Convex function logs in this terminal\",\n    )\n      .choices([\"always\", \"pause-on-deploy\", \"disable\"] as const)\n      .default(\"pause-on-deploy\"),\n  )\n  .addOption(new Option(\"--trace-events\").default(false).hideHelp())\n  .addOption(new Option(\"--debug-bundle-path <path>\").hideHelp())\n  .addOption(new Option(\"--debug-node-apis\").hideHelp())\n  .addOption(new Option(\"--live-component-sources\").hideHelp())\n  .addOption(\n    new Option(\n      \"--configure [choice]\",\n      \"Ignore existing configuration and configure new or existing project, interactively or set by --team <team_slug>, --project <project_slug>, and --dev-deployment local|cloud\",\n    )\n      .choices([\"new\", \"existing\"] as const)\n      .conflicts([\"--local\", \"--cloud\"]),\n  )\n  .addOption(\n    new Option(\n      \"--team <team_slug>\",\n      \"The team you'd like to use for this project\",\n    ).hideHelp(),\n  )\n  .addOption(\n    new Option(\n      \"--project <project_slug>\",\n      \"The name of the project you'd like to configure\",\n    ).hideHelp(),\n  )\n  .addOption(\n    new Option(\n      \"--dev-deployment <mode>\",\n      \"Use a local or cloud deployment for dev for this project\",\n    )\n      .choices([\"cloud\", \"local\"] as const)\n      .conflicts([\"--prod\"])\n      .hideHelp(),\n  )\n  .addOption(\n    new Option(\n      \"--prod\",\n      \"Develop live against this project's production deployment.\",\n    )\n      .default(false)\n      .hideHelp(),\n  )\n  .addOption(\n    new Option(\n      \"--env-file <envFile>\",\n      `Path to a custom file of environment variables, for choosing the \\\ndeployment, e.g. ${CONVEX_DEPLOYMENT_ENV_VAR_NAME} or ${CONVEX_SELF_HOSTED_URL_VAR_NAME}. \\\nSame format as .env.local or .env files, and overrides them.`,\n    ),\n  )\n  .addOption(new Option(\"--skip-push\").default(false).hideHelp())\n  .addOption(new Option(\"--admin-key <adminKey>\").hideHelp())\n  .addOption(new Option(\"--url <url>\").hideHelp())\n  // Options for testing\n  .addOption(new Option(\"--override-auth-url <url>\").hideHelp())\n  .addOption(new Option(\"--override-auth-client <id>\").hideHelp())\n  .addOption(new Option(\"--override-auth-username <username>\").hideHelp())\n  .addOption(new Option(\"--override-auth-password <password>\").hideHelp())\n  .addOption(new Option(\"--local-cloud-port <port>\").hideHelp())\n  .addOption(new Option(\"--local-site-port <port>\").hideHelp())\n  .addOption(new Option(\"--local-backend-version <version>\").hideHelp())\n  .addOption(new Option(\"--local-force-upgrade\").default(false).hideHelp())\n  .addOption(\n    new Option(\n      \"--local\",\n      \"Use local deployment regardless of last used backend. DB data will not be downloaded from any cloud deployment.\",\n    )\n      .default(false)\n      .conflicts([\"--prod\", \"--url\", \"--admin-key\", \"--cloud\"])\n      .hideHelp(),\n  )\n  .addOption(\n    new Option(\n      \"--cloud\",\n      \"Use cloud deployment regardles of last used backend. DB data will not be uploaded from local.\",\n    )\n      .default(false)\n      .conflicts([\"--prod\", \"--url\", \"--admin-key\", \"--local\"])\n      .hideHelp(),\n  )\n  .showHelpAfterError()\n  .action(async (cmdOptions) => {\n    const ctx = await oneoffContext(cmdOptions);\n    process.on(\"SIGINT\", async () => {\n      logVerbose(\"Received SIGINT, cleaning up...\");\n      await ctx.flushAndExit(-2);\n    });\n\n    const devOptions = await normalizeDevOptions(ctx, cmdOptions);\n\n    if (cmdOptions.configure === undefined) {\n      if (cmdOptions.team || cmdOptions.project || cmdOptions.devDeployment)\n        return await ctx.crash({\n          exitCode: 1,\n          errorType: \"fatal\",\n          printedMessage:\n            \"`--team, --project, and --dev-deployment can can only be used with `--configure`.\",\n        });\n    }\n\n    const localOptions: {\n      ports?: { cloud: number; site: number };\n      backendVersion?: string | undefined;\n      forceUpgrade: boolean;\n    } = { forceUpgrade: false };\n    if (!cmdOptions.local && cmdOptions.devDeployment !== \"local\") {\n      if (\n        cmdOptions.localCloudPort !== undefined ||\n        cmdOptions.localSitePort !== undefined ||\n        cmdOptions.localBackendVersion !== undefined ||\n        cmdOptions.localForceUpgrade === true\n      ) {\n        return await ctx.crash({\n          exitCode: 1,\n          errorType: \"fatal\",\n          printedMessage:\n            \"`--local-*` options can only be used with `--configure --dev-deployment local` or `--local`.\",\n        });\n      }\n    } else {\n      if (cmdOptions.localCloudPort !== undefined) {\n        if (cmdOptions.localSitePort === undefined) {\n          return await ctx.crash({\n            exitCode: 1,\n            errorType: \"fatal\",\n            printedMessage:\n              \"`--local-cloud-port` requires `--local-site-port` to be set.\",\n          });\n        }\n        localOptions[\"ports\"] = {\n          cloud: parseInt(cmdOptions.localCloudPort),\n          site: parseInt(cmdOptions.localSitePort),\n        };\n      }\n      localOptions[\"backendVersion\"] = cmdOptions.localBackendVersion;\n      localOptions[\"forceUpgrade\"] = cmdOptions.localForceUpgrade;\n    }\n\n    const configure =\n      cmdOptions.configure === true ? \"ask\" : (cmdOptions.configure ?? null);\n    const deploymentSelection = await getDeploymentSelection(ctx, cmdOptions);\n    const credentials = await deploymentCredentialsOrConfigure(\n      ctx,\n      deploymentSelection,\n      configure,\n      {\n        ...cmdOptions,\n        localOptions,\n      },\n    );\n\n    await Promise.all([\n      ...(!cmdOptions.skipPush\n        ? [\n            devAgainstDeployment(\n              ctx,\n              {\n                url: credentials.url,\n                adminKey: credentials.adminKey,\n                deploymentName:\n                  credentials.deploymentFields?.deploymentName ?? null,\n                ...(credentials.deploymentFields?.deploymentType !== undefined\n                  ? {\n                      deploymentType:\n                        credentials.deploymentFields.deploymentType,\n                    }\n                  : {}),\n              },\n              devOptions,\n            ),\n          ]\n        : []),\n      ...(credentials.deploymentFields !== null\n        ? [\n            usageStateWarning(ctx, credentials.deploymentFields.deploymentName),\n            checkVersion(ctx),\n          ]\n        : []),\n    ]);\n  });\n", "/**\n * Extract deployment name from a Convex cloud URL for WorkOS provisioning.\n * Returns the deployment name if the URL matches the expected format, null otherwise.\n */\nexport function extractDeploymentNameForWorkOS(url: string): string | null {\n  return (\n    url.match(\n      /^https:\\/\\/([a-z]+-[a-z]+-[0-9]+)\\.(?:[^.]+\\.)?convex\\.cloud$/,\n    )?.[1] ?? null\n  );\n}\n", "import { chalkStderr } from \"chalk\";\nimport { Command, Option } from \"@commander-js/extra-typings\";\nimport { Context, oneoffContext } from \"../bundler/context.js\";\nimport { logFinishedStep, logMessage, showSpinner } from \"../bundler/log.js\";\nimport { loadSelectedDeploymentCredentials } from \"./lib/api.js\";\nimport {\n  gitBranchFromEnvironment,\n  isNonProdBuildEnvironment,\n  suggestedEnvVarNames,\n} from \"./lib/envvars.js\";\nimport { PushOptions } from \"./lib/components.js\";\nimport {\n  CONVEX_DEPLOY_KEY_ENV_VAR_NAME,\n  CONVEX_SELF_HOSTED_URL_VAR_NAME,\n  CONVEX_DEPLOYMENT_ENV_VAR_NAME,\n  bigBrainAPI,\n} from \"./lib/utils/utils.js\";\nimport { runFunctionAndLog } from \"./lib/run.js\";\nimport { usageStateWarning } from \"./lib/usage.js\";\nimport { getTeamAndProjectFromPreviewAdminKey } from \"./lib/deployment.js\";\nimport { runPush } from \"./lib/components.js\";\nimport { promptYesNo } from \"./lib/utils/prompts.js\";\nimport { deployToDeployment, runCommand } from \"./lib/deploy2.js\";\nimport { getDeploymentSelection } from \"./lib/deploymentSelection.js\";\nimport { deploymentNameAndTypeFromSelection } from \"./lib/deploymentSelection.js\";\nimport { checkVersion } from \"./lib/updates.js\";\nimport { readProjectConfig, getAuthKitConfig } from \"./lib/config.js\";\nimport { ensureAuthKitProvisionedBeforeBuild } from \"./lib/workos/workos.js\";\nimport { DASHBOARD_HOST } from \"./lib/dashboard.js\";\nimport { extractDeploymentNameForWorkOS } from \"./lib/extractDeploymentNameForWorkOS.js\";\n\nexport const deploy = new Command(\"deploy\")\n  .summary(\"Deploy to your prod deployment\")\n  .description(\n    \"Deploy to your deployment. By default, this deploys to your prod deployment.\\n\\n\" +\n      `Deploys to a preview deployment if the \\`${CONVEX_DEPLOY_KEY_ENV_VAR_NAME}\\` environment variable is set to a Preview Deploy Key.`,\n  )\n  .allowExcessArguments(false)\n  .addDeployOptions()\n  .addOption(\n    new Option(\n      \"--preview-run <functionName>\",\n      \"Function to run if deploying to a preview deployment. This is ignored if deploying to a production deployment.\",\n    ),\n  )\n  .addOption(\n    new Option(\n      \"--preview-create <name>\",\n      \"The name to associate with this deployment if deploying to a newly created preview deployment. Defaults to the current Git branch name in Vercel, Netlify and GitHub CI. This parameter can only be used with a preview deploy key (when used with another type of key, the command will return an error).\",\n    ).conflicts(\"preview-name\"),\n  )\n  .addOption(\n    new Option(\n      \"--check-build-environment <mode>\",\n      \"Whether to check for a non-production build environment before deploying to a production Convex deployment.\",\n    )\n      .choices([\"enable\", \"disable\"] as const)\n      .default(\"enable\" as const)\n      .hideHelp(),\n  )\n  // Hidden options to pass in admin key and url for tests and local development\n  .addOption(new Option(\"--admin-key <adminKey>\").hideHelp())\n  .addOption(new Option(\"--url <url>\").hideHelp())\n  .addOption(\n    new Option(\n      \"--preview-name <name>\",\n      \"[deprecated] Use `--preview-create` instead. The name to associate with this deployment if deploying to a preview deployment.\",\n    )\n      .hideHelp()\n      .conflicts(\"preview-create\"),\n  )\n  .addOption(\n    new Option(\n      \"--env-file <envFile>\",\n      `Path to a custom file of environment variables, for choosing the \\\ndeployment, e.g. ${CONVEX_DEPLOYMENT_ENV_VAR_NAME} or ${CONVEX_SELF_HOSTED_URL_VAR_NAME}. \\\nSame format as .env.local or .env files, and overrides them.`,\n    ),\n  )\n  .addOption(\n    new Option(\n      \"--skip-workos-check\",\n      \"Skip WorkOS AuthKit provisioning and credential checks during deploy.\",\n    ).hideHelp(),\n  )\n  .addOption(\n    new Option(\"--allow-deleting-large-indexes\")\n      .hideHelp()\n      .conflicts(\"preview-create\")\n      .conflicts(\"preview-name\"),\n  )\n  .showHelpAfterError()\n  .action(async (cmdOptions) => {\n    const ctx = await oneoffContext(cmdOptions);\n\n    const deploymentSelection = await getDeploymentSelection(ctx, cmdOptions);\n    if (\n      cmdOptions.checkBuildEnvironment === \"enable\" &&\n      isNonProdBuildEnvironment() &&\n      deploymentSelection.kind === \"existingDeployment\" &&\n      deploymentSelection.deploymentToActOn.source === \"deployKey\" &&\n      deploymentSelection.deploymentToActOn.deploymentFields?.deploymentType ===\n        \"prod\"\n    ) {\n      await ctx.crash({\n        exitCode: 1,\n        errorType: \"invalid filesystem data\",\n        printedMessage: `Detected a non-production build environment and \"${CONVEX_DEPLOY_KEY_ENV_VAR_NAME}\" for a production Convex deployment.\\n\n          This is probably unintentional.\n          `,\n      });\n    }\n\n    if (deploymentSelection.kind === \"anonymous\") {\n      logMessage(\n        \"You are currently developing anonymously with a locally running project.\\n\" +\n          \"To deploy your Convex app to the cloud, log in by running `npx convex login`.\\n\" +\n          \"See https://docs.convex.dev/production for more information on how Convex cloud works and instructions on how to set up hosting.\",\n      );\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: null,\n      });\n    }\n\n    if (deploymentSelection.kind === \"preview\") {\n      // TODO -- add usage state warnings here too once we can do it without a deployment name\n      // await usageStateWarning(ctx);\n      if (cmdOptions.previewName !== undefined) {\n        await ctx.crash({\n          exitCode: 1,\n          errorType: \"fatal\",\n          printedMessage:\n            \"The `--preview-name` flag has been deprecated in favor of `--preview-create`. Please re-run the command using `--preview-create` instead.\",\n        });\n      }\n\n      const teamAndProjectSlugs = await getTeamAndProjectFromPreviewAdminKey(\n        ctx,\n        deploymentSelection.previewDeployKey,\n      );\n      await deployToNewPreviewDeployment(\n        ctx,\n        {\n          previewDeployKey: deploymentSelection.previewDeployKey,\n          projectSelection: {\n            kind: \"teamAndProjectSlugs\",\n            teamSlug: teamAndProjectSlugs.teamSlug,\n            projectSlug: teamAndProjectSlugs.projectSlug,\n          },\n        },\n        {\n          ...cmdOptions,\n        },\n      );\n    } else {\n      if (cmdOptions.previewCreate !== undefined) {\n        const source =\n          deploymentSelection.kind === \"deploymentWithinProject\" &&\n          deploymentSelection.targetProject.kind === \"deploymentName\"\n            ? `at ${chalkStderr.blue.underline(`${DASHBOARD_HOST}/dp/${deploymentSelection.targetProject.deploymentName}/settings#preview-deploy-keys`)}`\n            : deploymentSelection.kind === \"existingDeployment\" &&\n                deploymentSelection.deploymentToActOn.deploymentFields !== null\n              ? `at ${chalkStderr.blue.underline(`${DASHBOARD_HOST}/dp/${deploymentSelection.deploymentToActOn.deploymentFields.deploymentName}/settings#preview-deploy-keys`)}`\n              : \"on the dashboard\";\n        await ctx.crash({\n          exitCode: 1,\n          errorType: \"fatal\",\n          printedMessage: `Preview deployments can only be created with preview deploy keys. Generate a preview deploy key ${source} and set the ${chalkStderr.bold(`CONVEX_DEPLOY_KEY`)} environment variable with it.`,\n        });\n      }\n\n      await deployToExistingDeployment(ctx, {\n        ...cmdOptions,\n        skipWorkosCheck: cmdOptions.skipWorkosCheck ?? false,\n        allowDeletingLargeIndexes:\n          cmdOptions.allowDeletingLargeIndexes ?? false,\n      });\n    }\n  });\n\nasync function deployToNewPreviewDeployment(\n  ctx: Context,\n  deploymentSelection: {\n    previewDeployKey: string;\n    projectSelection: {\n      kind: \"teamAndProjectSlugs\";\n      teamSlug: string;\n      projectSlug: string;\n    };\n  },\n  options: {\n    dryRun?: boolean | undefined;\n    previewCreate?: string | undefined;\n    previewRun?: string | undefined;\n    cmdUrlEnvVarName?: string | undefined;\n    cmd?: string | undefined;\n    verbose?: boolean | undefined;\n    typecheck: \"enable\" | \"try\" | \"disable\";\n    typecheckComponents: boolean;\n    codegen: \"enable\" | \"disable\";\n    pushAllModules?: boolean;\n\n    debug?: boolean | undefined;\n    debugBundlePath?: string | undefined;\n    skipWorkosCheck?: boolean | undefined;\n  },\n) {\n  const previewName = options.previewCreate ?? gitBranchFromEnvironment();\n  if (previewName === null) {\n    await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage:\n        \"`npx convex deploy` to a preview deployment could not determine the preview name. Provide one using `--preview-create`\",\n    });\n  }\n\n  if (options.dryRun) {\n    logFinishedStep(\n      `Would have claimed preview deployment for \"${previewName}\"`,\n    );\n    await runCommand(ctx, {\n      cmdUrlEnvVarName: options.cmdUrlEnvVarName,\n      cmd: options.cmd,\n      dryRun: !!options.dryRun,\n      url: \"https://<PREVIEW DEPLOYMENT>.convex.cloud\",\n      adminKey: \"preview-deployment-admin-key\",\n    });\n    logFinishedStep(\n      `Would have deployed Convex functions to preview deployment for \"${previewName}\"`,\n    );\n    if (options.previewRun !== undefined) {\n      logMessage(`Would have run function \"${options.previewRun}\"`);\n    }\n    return;\n  }\n  const data = await bigBrainAPI({\n    ctx,\n    method: \"POST\",\n    path: \"claim_preview_deployment\",\n    data: {\n      projectSelection: deploymentSelection.projectSelection,\n      identifier: previewName,\n    },\n  });\n\n  const previewAdminKey = data.adminKey;\n  const previewUrl = data.instanceUrl;\n\n  // Extract deployment name from URL for WorkOS provisioning\n  const deploymentNameForWorkOS = extractDeploymentNameForWorkOS(previewUrl);\n\n  // Provision WorkOS before building the client bundle (if configured)\n  const { projectConfig } = await readProjectConfig(ctx);\n  const authKitConfig = await getAuthKitConfig(ctx, projectConfig);\n\n  if (authKitConfig && deploymentNameForWorkOS && !options.skipWorkosCheck) {\n    await ensureAuthKitProvisionedBeforeBuild(\n      ctx,\n      deploymentNameForWorkOS,\n      { deploymentUrl: previewUrl, adminKey: previewAdminKey },\n      \"preview\",\n    );\n  }\n\n  await runCommand(ctx, {\n    ...options,\n    url: previewUrl,\n    adminKey: previewAdminKey,\n  });\n\n  const pushOptions: PushOptions = {\n    deploymentName: null,\n    adminKey: previewAdminKey,\n    verbose: !!options.verbose,\n    dryRun: false,\n    typecheck: options.typecheck,\n    typecheckComponents: options.typecheckComponents,\n    debug: !!options.debug,\n    debugBundlePath: options.debugBundlePath,\n    debugNodeApis: false,\n    codegen: options.codegen === \"enable\",\n    url: previewUrl,\n    liveComponentSources: false,\n    pushAllModules: !!options.pushAllModules,\n    largeIndexDeletionCheck: \"no verification\", // fine for preview deployments\n  };\n  showSpinner(`Deploying to ${previewUrl}...`);\n  await runPush(ctx, pushOptions);\n  logFinishedStep(`Deployed Convex functions to ${previewUrl}`);\n\n  if (options.previewRun !== undefined) {\n    await runFunctionAndLog(ctx, {\n      deploymentUrl: previewUrl,\n      adminKey: previewAdminKey,\n      functionName: options.previewRun,\n      argsString: \"{}\",\n      componentPath: undefined,\n      callbacks: {\n        onSuccess: () => {\n          logFinishedStep(`Finished running function \"${options.previewRun}\"`);\n        },\n      },\n    });\n  }\n}\n\nasync function deployToExistingDeployment(\n  ctx: Context,\n  options: {\n    verbose?: boolean | undefined;\n    dryRun?: boolean | undefined;\n    yes?: boolean | undefined;\n    typecheck: \"enable\" | \"try\" | \"disable\";\n    typecheckComponents: boolean;\n    codegen: \"enable\" | \"disable\";\n    cmd?: string | undefined;\n    cmdUrlEnvVarName?: string | undefined;\n    pushAllModules?: boolean;\n\n    debugBundlePath?: string | undefined;\n    debug?: boolean | undefined;\n    adminKey?: string | undefined;\n    url?: string | undefined;\n    writePushRequest?: string | undefined;\n    liveComponentSources?: boolean | undefined;\n    envFile?: string | undefined;\n    skipWorkosCheck?: boolean | undefined;\n    allowDeletingLargeIndexes: boolean;\n  },\n) {\n  const deploymentSelection = await getDeploymentSelection(ctx, {\n    ...options,\n    implicitProd: true,\n  });\n  const deploymentToActOn = await loadSelectedDeploymentCredentials(\n    ctx,\n    deploymentSelection,\n  );\n  const { deploymentFields } = deploymentToActOn;\n\n  const configuredDeployment =\n    deploymentNameAndTypeFromSelection(deploymentSelection);\n  if (configuredDeployment !== null && configuredDeployment.name !== null) {\n    const shouldPushToProd =\n      configuredDeployment.name === deploymentFields?.deploymentName ||\n      (options.yes ??\n        (await askToConfirmPush(\n          ctx,\n          {\n            configuredName: configuredDeployment.name,\n            configuredType: configuredDeployment.type,\n            requestedName: deploymentFields?.deploymentName!,\n            requestedType: deploymentFields?.deploymentType!,\n          },\n          deploymentToActOn.url,\n        )));\n    if (!shouldPushToProd) {\n      await ctx.crash({\n        exitCode: 1,\n        printedMessage: null,\n        errorType: \"fatal\",\n      });\n    }\n  }\n\n  const isCloudDeployment = deploymentFields !== null;\n  await Promise.all([\n    deployToDeployment(\n      ctx,\n      {\n        url: deploymentToActOn.url,\n        adminKey: deploymentToActOn.adminKey,\n        deploymentName: deploymentFields?.deploymentName ?? null,\n        ...(deploymentFields?.deploymentType !== undefined\n          ? { deploymentType: deploymentFields.deploymentType }\n          : {}),\n      },\n      { ...options, skipWorkosCheck: options.skipWorkosCheck },\n    ),\n    ...(isCloudDeployment\n      ? [\n          usageStateWarning(ctx, deploymentFields.deploymentName),\n          checkVersion(ctx),\n        ]\n      : []),\n  ]);\n}\n\nasync function askToConfirmPush(\n  ctx: Context,\n  deployment: {\n    configuredName: string;\n    configuredType: string | null;\n    requestedName: string;\n    requestedType: string;\n  },\n  prodUrl: string,\n) {\n  logMessage(\n    `\\\nYou're currently developing against your ${chalkStderr.bold(\n      deployment.configuredType ?? \"dev\",\n    )} deployment\n\n  ${deployment.configuredName} (set in CONVEX_DEPLOYMENT)\n\nYour ${chalkStderr.bold(deployment.requestedType)} deployment ${chalkStderr.bold(\n      deployment.requestedName,\n    )} serves traffic at:\n\n  ${(await suggestedEnvVarNames(ctx)).convexUrlEnvVar}=${chalkStderr.bold(prodUrl)}\n\nMake sure that your published client is configured with this URL (for instructions see https://docs.convex.dev/hosting)\\n`,\n  );\n  return promptYesNo(ctx, {\n    message: `Do you want to push your code to your ${deployment.requestedType} deployment ${deployment.requestedName} now?`,\n    default: true,\n  });\n}\n", "import { Command } from \"@commander-js/extra-typings\";\nimport { oneoffContext } from \"../bundler/context.js\";\nimport { loadSelectedDeploymentCredentials } from \"./lib/api.js\";\nimport { actionDescription } from \"./lib/command.js\";\nimport { logsForDeployment } from \"./lib/logs.js\";\nimport { getDeploymentSelection } from \"./lib/deploymentSelection.js\";\n\nexport const logs = new Command(\"logs\")\n  .summary(\"Watch logs from your deployment\")\n  .description(\n    \"Stream function logs from your Convex deployment.\\nBy default, this streams from your project's dev deployment.\",\n  )\n  .allowExcessArguments(false)\n  .addLogsOptions()\n  .addDeploymentSelectionOptions(actionDescription(\"Watch logs from\"))\n  .showHelpAfterError()\n  .action(async (cmdOptions) => {\n    const ctx = await oneoffContext(cmdOptions);\n\n    const deploymentSelection = await getDeploymentSelection(ctx, cmdOptions);\n    const deployment = await loadSelectedDeploymentCredentials(\n      ctx,\n      deploymentSelection,\n    );\n    const deploymentName = deployment.deploymentFields?.deploymentName\n      ? ` ${deployment.deploymentFields.deploymentName}`\n      : \"\";\n    const deploymentNotice = ` for ${cmdOptions.prod ? \"production\" : \"dev\"} deployment${deploymentName}`;\n    await logsForDeployment(ctx, deployment, {\n      history: cmdOptions.history,\n      success: cmdOptions.success,\n      jsonl: cmdOptions.jsonl,\n      deploymentNotice,\n    });\n  });\n", "import { Context } from \"../../bundler/context.js\";\nimport {\n  logFailure,\n  logFinishedStep,\n  logMessage,\n  logVerbose,\n  logWarning,\n} from \"../../bundler/log.js\";\nimport { chalkStderr } from \"chalk\";\nimport * as net from \"net\";\nimport * as dns from \"dns\";\nimport * as crypto from \"crypto\";\nimport {\n  bareDeploymentFetch,\n  formatDuration,\n  formatSize,\n  ThrowingFetchError,\n} from \"./utils/utils.js\";\nimport ws from \"ws\";\nimport { BaseConvexClient } from \"../../browser/index.js\";\nimport { DefaultLogger } from \"../../browser/logging.js\";\nconst ipFamilyNumbers = { ipv4: 4, ipv6: 6, auto: 0 } as const;\nconst ipFamilyNames = { 4: \"ipv4\", 6: \"ipv6\", 0: \"auto\" } as const;\n\nexport async function runNetworkTestOnUrl(\n  ctx: Context,\n  { url, adminKey }: { url: string; adminKey: string | null },\n  options: {\n    ipFamily?: string;\n    speedTest?: boolean;\n  },\n) {\n  // First, check DNS to see if we can resolve the URL's hostname.\n  await checkDns(ctx, url);\n\n  // Second, check to see if we can open a TCP connection to the hostname.\n  await checkTcp(ctx, url, options.ipFamily ?? \"auto\");\n\n  // Third, do a simple HTTPS request and check that we receive a 200.\n  await checkHttp(ctx, url);\n\n  // Fourth, check that we can open a WebSocket connection to the hostname.\n  await checkWs(ctx, { url, adminKey });\n\n  // Fifth, check a small echo request, much smaller than most networks' MTU.\n  await checkEcho(ctx, url, 128);\n\n  // Finally, try a large echo request, much larger than most networks' MTU.\n  await checkEcho(ctx, url, 4 * 1024 * 1024);\n  // Also do a 64MiB echo test if the user has requested a speed test.\n  if (options.speedTest) {\n    await checkEcho(ctx, url, 64 * 1024 * 1024);\n  }\n\n  logFinishedStep(\"Network test passed.\");\n}\n\nasync function checkDns(ctx: Context, url: string) {\n  try {\n    const hostname = new URL(\"/\", url).hostname;\n    const start = performance.now();\n    type DnsResult = { duration: number; address: string; family: number };\n    const result = await new Promise<DnsResult>((resolve, reject) => {\n      dns.lookup(hostname, (err, address, family) => {\n        if (err) {\n          reject(err);\n        } else {\n          resolve({ duration: performance.now() - start, address, family });\n        }\n      });\n    });\n    logMessage(\n      `${chalkStderr.green(`\u2714`)} OK: DNS lookup => ${result.address}:${\n        ipFamilyNames[result.family as keyof typeof ipFamilyNames]\n      } (${formatDuration(result.duration)})`,\n    );\n  } catch (e: any) {\n    return ctx.crash({\n      exitCode: 1,\n      errorType: \"transient\",\n      printedMessage: `FAIL: DNS lookup (${e})`,\n    });\n  }\n}\n\nasync function checkTcp(ctx: Context, urlString: string, ipFamilyOpt: string) {\n  const url = new URL(urlString);\n  if (url.protocol === \"http:\") {\n    const port = Number.parseInt(url.port || \"80\");\n    await checkTcpHostPort(ctx, url.hostname, port, ipFamilyOpt);\n  } else if (url.protocol === \"https:\") {\n    const port = Number.parseInt(url.port || \"443\");\n    await checkTcpHostPort(ctx, url.hostname, port, ipFamilyOpt);\n    // If we didn't specify a port, also try port 80.\n    if (!url.port) {\n      await checkTcpHostPort(ctx, url.hostname, 80, ipFamilyOpt);\n    }\n  } else {\n    // eslint-disable-next-line no-restricted-syntax\n    throw new Error(`Unknown protocol: ${url.protocol}`);\n  }\n}\n\nasync function checkTcpHostPort(\n  ctx: Context,\n  host: string,\n  port: number,\n  ipFamilyOpt: string,\n) {\n  const ipFamily = ipFamilyNumbers[ipFamilyOpt as keyof typeof ipFamilyNumbers];\n  const tcpString =\n    `TCP` + (ipFamilyOpt === \"auto\" ? \"\" : `/${ipFamilyOpt} ${host}:${port}`);\n  try {\n    const start = performance.now();\n    const duration = await new Promise<number>((resolve, reject) => {\n      const socket = net.connect(\n        {\n          host,\n          port,\n          noDelay: true,\n          family: ipFamily,\n        },\n        () => resolve(performance.now() - start),\n      );\n      socket.on(\"error\", (e) => reject(e));\n    });\n    logMessage(\n      `${chalkStderr.green(`\u2714`)} OK: ${tcpString} connect (${formatDuration(\n        duration,\n      )})`,\n    );\n  } catch (e: any) {\n    let errorMessage = `${e}`;\n    if (e instanceof AggregateError) {\n      const individualErrors = e.errors\n        .map((err, i) => `  ${i + 1}. ${err}`)\n        .join(\"\\n\");\n      errorMessage = `AggregateError with ${e.errors.length} errors:\\n${individualErrors}`;\n    }\n    return ctx.crash({\n      exitCode: 1,\n      errorType: \"transient\",\n      printedMessage: `FAIL: ${tcpString} connect (${errorMessage})`,\n    });\n  }\n}\n\nasync function checkHttp(ctx: Context, urlString: string) {\n  const url = new URL(urlString);\n  const isHttps = url.protocol === \"https:\";\n  if (isHttps) {\n    url.protocol = \"http:\";\n    url.port = \"80\";\n    await checkHttpOnce(ctx, \"HTTP\", url.toString(), false);\n  }\n  await checkHttpOnce(ctx, isHttps ? \"HTTPS\" : \"HTTP\", urlString, true);\n}\n\n// Be sure to test this function against *prod* (with both HTTP & HTTPS) when\n// making changes.\nasync function checkHttpOnce(\n  ctx: Context,\n  name: string,\n  url: string,\n  allowRedirects: boolean,\n) {\n  const start = performance.now();\n  try {\n    // Be sure to use the same `deploymentFetch` we use elsewhere so we're actually\n    // getting coverage of our network stack.\n    const fetch = bareDeploymentFetch(ctx, { deploymentUrl: url });\n    const instanceNameUrl = new URL(\"/instance_name\", url);\n    const resp = await fetch(instanceNameUrl.toString(), {\n      redirect: allowRedirects ? \"follow\" : \"manual\",\n    });\n    if (resp.status !== 200) {\n      // eslint-disable-next-line no-restricted-syntax\n      throw new Error(`Unexpected status code: ${resp.status}`);\n    }\n  } catch (e: any) {\n    // Redirects return a 301, which causes `bareDeploymentFetch` to throw an\n    // ThrowingFetchError. Catch that here and succeed if we're not following\n    // redirects.\n    const isOkayRedirect =\n      !allowRedirects &&\n      e instanceof ThrowingFetchError &&\n      e.response.status === 301;\n    if (!isOkayRedirect) {\n      return ctx.crash({\n        exitCode: 1,\n        errorType: \"transient\",\n        printedMessage: `FAIL: ${name} check (${e})`,\n      });\n    }\n  }\n  const duration = performance.now() - start;\n  logMessage(\n    `${chalkStderr.green(`\u2714`)} OK: ${name} check (${formatDuration(duration)})`,\n  );\n}\n\nasync function checkWs(\n  ctx: Context,\n  { url, adminKey }: { url: string; adminKey: string | null },\n) {\n  if (adminKey === null) {\n    logWarning(\"Skipping WebSocket check because no admin key was provided.\");\n    return;\n  }\n  let queryPromiseResolver: ((value: string) => void) | null = null;\n  const queryPromise = new Promise<string | null>((resolve) => {\n    queryPromiseResolver = resolve;\n  });\n  const logger = new DefaultLogger({\n    verbose: process.env.CONVEX_VERBOSE !== undefined,\n  });\n  logger.addLogLineListener((level, ...args) => {\n    switch (level) {\n      case \"debug\":\n        logVerbose(...args);\n        break;\n      case \"info\":\n        logVerbose(...args);\n        break;\n      case \"warn\":\n        logWarning(...args);\n        break;\n      case \"error\":\n        // TODO: logFailure is a little hard to use here because it also interacts\n        // with the spinner and requires a string.\n        logWarning(...args);\n        break;\n    }\n  });\n  const convexClient = new BaseConvexClient(\n    url,\n    (updatedQueries) => {\n      for (const queryToken of updatedQueries) {\n        const result = convexClient.localQueryResultByToken(queryToken);\n        if (typeof result === \"string\" && queryPromiseResolver !== null) {\n          queryPromiseResolver(result);\n          queryPromiseResolver = null;\n        }\n      }\n    },\n    {\n      webSocketConstructor: ws as unknown as typeof WebSocket,\n      unsavedChangesWarning: false,\n      logger,\n    },\n  );\n  convexClient.setAdminAuth(adminKey);\n  convexClient.subscribe(\"_system/cli/convexUrl:cloudUrl\", {});\n  const racePromise = Promise.race([\n    queryPromise,\n    new Promise((resolve) => setTimeout(() => resolve(null), 10000)),\n  ]);\n  const cloudUrl = await racePromise;\n  if (cloudUrl === null) {\n    return ctx.crash({\n      exitCode: 1,\n      errorType: \"transient\",\n      printedMessage: \"FAIL: Failed to connect to deployment over WebSocket.\",\n    });\n  } else {\n    logMessage(\n      `${chalkStderr.green(`\u2714`)} OK: WebSocket connection established.`,\n    );\n  }\n}\n\nasync function checkEcho(ctx: Context, url: string, size: number) {\n  try {\n    const start = performance.now();\n    const fetch = bareDeploymentFetch(ctx, {\n      deploymentUrl: url,\n      onError: (err) => {\n        logFailure(\n          chalkStderr.red(\n            `FAIL: echo ${formatSize(size)} (${err}), retrying...`,\n          ),\n        );\n      },\n    });\n    const echoUrl = new URL(`/echo`, url);\n    const data = crypto.randomBytes(size);\n    const resp = await fetch(echoUrl.toString(), {\n      body: data,\n      method: \"POST\",\n    });\n    if (resp.status !== 200) {\n      // eslint-disable-next-line no-restricted-syntax\n      throw new Error(`Unexpected status code: ${resp.status}`);\n    }\n    const respData = await resp.arrayBuffer();\n    if (!data.equals(Buffer.from(respData))) {\n      // eslint-disable-next-line no-restricted-syntax\n      throw new Error(`Response data mismatch`);\n    }\n    const duration = performance.now() - start;\n    const bytesPerSecond = size / (duration / 1000);\n    logMessage(\n      `${chalkStderr.green(`\u2714`)} OK: echo ${formatSize(size)} (${formatDuration(\n        duration,\n      )}, ${formatSize(bytesPerSecond)}/s)`,\n    );\n  } catch (e: any) {\n    return ctx.crash({\n      exitCode: 1,\n      errorType: \"transient\",\n      printedMessage: `FAIL: echo ${formatSize(size)} (${e})`,\n    });\n  }\n}\n\nexport async function withTimeout<T>(\n  ctx: Context,\n  name: string,\n  timeoutMs: number,\n  f: Promise<T>,\n) {\n  let timer: NodeJS.Timeout | null = null;\n  try {\n    type TimeoutPromise = { kind: \"ok\"; result: T } | { kind: \"timeout\" };\n    const result = await Promise.race<TimeoutPromise>([\n      f.then((r) => {\n        return { kind: \"ok\", result: r };\n      }),\n      new Promise((resolve) => {\n        timer = setTimeout(() => {\n          resolve({ kind: \"timeout\" as const });\n          timer = null;\n        }, timeoutMs);\n      }),\n    ]);\n    if (result.kind === \"ok\") {\n      return result.result;\n    } else {\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"transient\",\n        printedMessage: `FAIL: ${name} timed out after ${formatDuration(timeoutMs)}.`,\n      });\n    }\n  } finally {\n    if (timer !== null) {\n      clearTimeout(timer);\n    }\n  }\n}\n", "import { Command } from \"@commander-js/extra-typings\";\nimport { loadSelectedDeploymentCredentials } from \"./lib/api.js\";\nimport { Context, oneoffContext } from \"../bundler/context.js\";\nimport { showSpinner, logMessage } from \"../bundler/log.js\";\nimport { chalkStderr } from \"chalk\";\nimport { actionDescription } from \"./lib/command.js\";\nimport { runNetworkTestOnUrl, withTimeout } from \"./lib/networkTest.js\";\nimport { getDeploymentSelection } from \"./lib/deploymentSelection.js\";\n\nexport const networkTest = new Command(\"network-test\")\n  .description(\"Run a network test to Convex's servers\")\n  .allowExcessArguments(false)\n  .addNetworkTestOptions()\n  .addDeploymentSelectionOptions(\n    actionDescription(\"Perform the network test on\"),\n    { showUrlHelp: true },\n  )\n  .action(async (options) => {\n    const ctx = await oneoffContext(options);\n    const timeoutSeconds = options.timeout\n      ? Number.parseFloat(options.timeout)\n      : 30;\n    await withTimeout(\n      ctx,\n      \"Network test\",\n      timeoutSeconds * 1000,\n      runNetworkTest(ctx, options),\n    );\n  });\n\nasync function runNetworkTest(\n  ctx: Context,\n  options: {\n    prod?: boolean | undefined;\n    previewName?: string | undefined;\n    deploymentName?: string | undefined;\n    url?: string | undefined;\n    adminKey?: string | undefined;\n    ipFamily?: string;\n    speedTest?: boolean;\n  },\n) {\n  showSpinner(\"Performing network test...\");\n  // Try to fetch the URL following the usual paths, but special case the\n  // `--url` argument in case the developer doesn't have network connectivity.\n  let url: string;\n  let adminKey: string | null;\n  if (options.url !== undefined && options.adminKey !== undefined) {\n    url = options.url;\n    adminKey = options.adminKey;\n  } else if (options.url !== undefined) {\n    url = options.url;\n    adminKey = null;\n  } else {\n    const deploymentSelection = await getDeploymentSelection(ctx, options);\n    const credentials = await loadSelectedDeploymentCredentials(\n      ctx,\n      deploymentSelection,\n    );\n    url = credentials.url;\n    adminKey = credentials.adminKey;\n  }\n  logMessage(`${chalkStderr.green(`\u2714`)} Deployment URL: ${url}`);\n  await runNetworkTestOnUrl(ctx, { url, adminKey }, options);\n}\n", "import { Command } from \"@commander-js/extra-typings\";\nimport { chalkStderr } from \"chalk\";\nimport { ensureHasConvexDependency } from \"./lib/utils/utils.js\";\nimport { oneoffContext } from \"../bundler/context.js\";\nimport { loadSelectedDeploymentCredentials } from \"./lib/api.js\";\nimport { deploymentDashboardUrlPage } from \"./lib/dashboard.js\";\nimport { actionDescription } from \"./lib/command.js\";\nimport { exportFromDeployment } from \"./lib/convexExport.js\";\nimport { getDeploymentSelection } from \"./lib/deploymentSelection.js\";\nexport const convexExport = new Command(\"export\")\n  .summary(\"Export data from your deployment to a ZIP file\")\n  .description(\n    \"Export data, and optionally file storage, from your Convex deployment to a ZIP file.\\n\" +\n      \"By default, this exports from your dev deployment.\",\n  )\n  .allowExcessArguments(false)\n  .addExportOptions()\n  .addDeploymentSelectionOptions(actionDescription(\"Export data from\"))\n  .showHelpAfterError()\n  .action(async (options) => {\n    const ctx = await oneoffContext(options);\n    await ensureHasConvexDependency(ctx, \"export\");\n\n    const deploymentSelection = await getDeploymentSelection(ctx, options);\n    const deployment = await loadSelectedDeploymentCredentials(\n      ctx,\n      deploymentSelection,\n    );\n\n    const deploymentNotice = options.prod\n      ? ` in your ${chalkStderr.bold(\"prod\")} deployment`\n      : \"\";\n    await exportFromDeployment(ctx, {\n      ...options,\n      deploymentUrl: deployment.url,\n      adminKey: deployment.adminKey,\n      deploymentNotice,\n      snapshotExportDashboardLink: deploymentDashboardUrlPage(\n        deployment.deploymentFields?.deploymentName ?? null,\n        \"/settings/snapshot-export\",\n      ),\n    });\n  });\n", "import { chalkStderr } from \"chalk\";\nimport { ensureHasConvexDependency } from \"./lib/utils/utils.js\";\nimport { oneoffContext } from \"../bundler/context.js\";\nimport { loadSelectedDeploymentCredentials } from \"./lib/api.js\";\nimport { Command } from \"@commander-js/extra-typings\";\nimport { actionDescription } from \"./lib/command.js\";\nimport { DASHBOARD_HOST, deploymentDashboardUrlPage } from \"./lib/dashboard.js\";\nimport { importIntoDeployment } from \"./lib/convexImport.js\";\nimport { getDeploymentSelection } from \"./lib/deploymentSelection.js\";\n\nexport const convexImport = new Command(\"import\")\n  .summary(\"Import data from a file to your deployment\")\n  .description(\n    \"Import data from a file to your Convex deployment.\\n\\n\" +\n      \"  From a snapshot: `npx convex import snapshot.zip`\\n\" +\n      \"  For a single table: `npx convex import --table tableName file.json`\\n\\n\" +\n      \"By default, this imports into your dev deployment.\",\n  )\n  .allowExcessArguments(false)\n  .addImportOptions()\n  .addDeploymentSelectionOptions(actionDescription(\"Import data into\"))\n  .showHelpAfterError()\n  .action(async (filePath, options) => {\n    const ctx = await oneoffContext(options);\n\n    await ensureHasConvexDependency(ctx, \"import\");\n\n    const deploymentSelection = await getDeploymentSelection(ctx, options);\n    const deployment = await loadSelectedDeploymentCredentials(\n      ctx,\n      deploymentSelection,\n    );\n\n    const deploymentNotice = options.prod\n      ? ` in your ${chalkStderr.bold(\"prod\")} deployment`\n      : \"\";\n\n    await importIntoDeployment(ctx, filePath, {\n      ...options,\n      deploymentUrl: deployment.url,\n      adminKey: deployment.adminKey,\n      deploymentNotice,\n      snapshotImportDashboardLink: snapshotImportDashboardLink(\n        deployment.deploymentFields?.deploymentName ?? null,\n      ),\n    });\n  });\n\nfunction snapshotImportDashboardLink(deploymentName: string | null) {\n  return deploymentName === null\n    ? `${DASHBOARD_HOST}/deployment/settings/snapshots`\n    : deploymentDashboardUrlPage(deploymentName, \"/settings/snapshots\");\n}\n", "import { Command } from \"@commander-js/extra-typings\";\nimport { chalkStderr } from \"chalk\";\nimport { Context, oneoffContext } from \"../bundler/context.js\";\nimport {\n  DeploymentSelectionOptions,\n  DetailedDeploymentCredentials,\n  loadSelectedDeploymentCredentials,\n} from \"./lib/api.js\";\nimport { actionDescription } from \"./lib/command.js\";\nimport { ensureHasConvexDependency } from \"./lib/utils/utils.js\";\nimport {\n  envGetInDeploymentAction,\n  envListInDeployment,\n  envRemoveInDeployment,\n  envSetInDeployment,\n} from \"./lib/env.js\";\nimport { getDeploymentSelection } from \"./lib/deploymentSelection.js\";\nimport { withRunningBackend } from \"./lib/localDeployment/run.js\";\n\nconst envSet = new Command(\"set\")\n  // Pretend value is required\n  .usage(\"[options] <name> <value>\")\n  .arguments(\"[name] [value]\")\n  .summary(\"Set a variable\")\n  .description(\n    \"Set environment variables on your deployment.\\n\\n\" +\n      \"  npx convex env set NAME 'value'\\n\" +\n      \"  npx convex env set NAME # omit a value to set one interactively\\n\" +\n      \"  npx convex env set NAME --from-file value.txt\\n\" +\n      \"  npx convex env set --from-file .env.defaults\\n\" +\n      \"When setting multiple values, it will refuse all changes if any \" +\n      \"variables are already set to different values by default. \" +\n      \"Pass --force to overwrite the provided values.\\n\",\n  )\n  .option(\n    \"--from-file <file>\",\n    \"Read environment variables from a .env file. Without --force, fails if any existing variable has a different value.\",\n  )\n  .option(\n    \"--force\",\n    \"When setting multiple variables, overwrite existing environment variable values instead of failing on mismatch.\",\n  )\n  .configureHelp({ showGlobalOptions: true })\n  .allowExcessArguments(false)\n  .action(async (name, value, cmdOptions, cmd) => {\n    // Note: We use `as` here because optsWithGlobals() type inference doesn't\n    // include global options from the parent command (added via addDeploymentSelectionOptions)\n    const options = cmd.optsWithGlobals() as DeploymentSelectionOptions;\n    const { ctx, deployment } = await selectEnvDeployment(options);\n    await ensureHasConvexDependency(ctx, \"env set\");\n    await withRunningBackend({\n      ctx,\n      deployment,\n      action: async () => {\n        const didAnything = await envSetInDeployment(\n          ctx,\n          deployment,\n          name,\n          value,\n          cmdOptions,\n        );\n        if (didAnything === false) {\n          cmd.outputHelp({ error: true });\n          return await ctx.crash({\n            exitCode: 1,\n            errorType: \"fatal\",\n            printedMessage:\n              \"error: No environment variables specified to be set.\",\n          });\n        }\n      },\n    });\n  });\n\nasync function selectEnvDeployment(\n  options: DeploymentSelectionOptions,\n): Promise<{\n  ctx: Context;\n  deployment: {\n    deploymentUrl: string;\n    adminKey: string;\n    deploymentNotice: string;\n    deploymentFields: DetailedDeploymentCredentials[\"deploymentFields\"];\n  };\n}> {\n  const ctx = await oneoffContext(options);\n  const deploymentSelection = await getDeploymentSelection(ctx, options);\n  const {\n    adminKey,\n    url: deploymentUrl,\n    deploymentFields,\n  } = await loadSelectedDeploymentCredentials(ctx, deploymentSelection, {\n    ensureLocalRunning: false,\n  });\n\n  const deploymentNotice =\n    deploymentFields !== null\n      ? ` (on ${chalkStderr.bold(deploymentFields.deploymentType)} deployment ${chalkStderr.bold(deploymentFields.deploymentName)})`\n      : \"\";\n  const result = {\n    ctx,\n    deployment: {\n      deploymentUrl,\n      adminKey,\n      deploymentNotice,\n      deploymentFields,\n    },\n  };\n  return result;\n}\n\nconst envGet = new Command(\"get\")\n  .arguments(\"<name>\")\n  .summary(\"Print a variable's value\")\n  .description(\"Print a variable's value: `npx convex env get NAME`\")\n  .configureHelp({ showGlobalOptions: true })\n  .allowExcessArguments(false)\n  .action(async (envVarName, _options, cmd) => {\n    const options = cmd.optsWithGlobals();\n    const { ctx, deployment } = await selectEnvDeployment(options);\n    await ensureHasConvexDependency(ctx, \"env get\");\n    await withRunningBackend({\n      ctx,\n      deployment,\n      action: async () => {\n        await envGetInDeploymentAction(ctx, deployment, envVarName);\n      },\n    });\n  });\n\nconst envRemove = new Command(\"remove\")\n  .alias(\"rm\")\n  .alias(\"unset\")\n  .arguments(\"<name>\")\n  .summary(\"Unset a variable\")\n  .description(\n    \"Unset a variable: `npx convex env remove NAME`\\n\" +\n      \"If the variable doesn't exist, the command doesn't do anything and succeeds.\",\n  )\n  .configureHelp({ showGlobalOptions: true })\n  .allowExcessArguments(false)\n  .action(async (name, _options, cmd) => {\n    const options = cmd.optsWithGlobals();\n    const { ctx, deployment } = await selectEnvDeployment(options);\n    await ensureHasConvexDependency(ctx, \"env remove\");\n    await withRunningBackend({\n      ctx,\n      deployment,\n      action: async () => {\n        await envRemoveInDeployment(ctx, deployment, name);\n      },\n    });\n  });\n\nconst envList = new Command(\"list\")\n  .summary(\"List all variables\")\n  .description(\"List all variables: `npx convex env list`\")\n  .configureHelp({ showGlobalOptions: true })\n  .allowExcessArguments(false)\n  .action(async (_options, cmd) => {\n    const options = cmd.optsWithGlobals();\n    const { ctx, deployment } = await selectEnvDeployment(options);\n    await ensureHasConvexDependency(ctx, \"env list\");\n    await withRunningBackend({\n      ctx,\n      deployment,\n      action: async () => {\n        await envListInDeployment(ctx, deployment);\n      },\n    });\n  });\n\nexport const env = new Command(\"env\")\n  .summary(\"Set and view environment variables\")\n  .description(\n    \"Set and view environment variables on your deployment\\n\\n\" +\n      \"  Set a variable: `npx convex env set NAME 'value'`\\n\" +\n      \"  Set interactively: `npx convex env set NAME`\\n\" +\n      \"  Set multiple from file: `npx convex env set --from-file .env`\\n\" +\n      \"  Unset a variable: `npx convex env remove NAME`\\n\" +\n      \"  List all variables: `npx convex env list`\\n\" +\n      \"  Print a variable's value: `npx convex env get NAME`\\n\\n\" +\n      \"By default, this sets and views variables on your dev deployment.\",\n  )\n  .addCommand(envSet)\n  .addCommand(envGet)\n  .addCommand(envRemove)\n  .addCommand(envList)\n  .helpCommand(false)\n  .addDeploymentSelectionOptions(\n    actionDescription(\"Set and view environment variables on\"),\n  );\n", "import { chalkStderr } from \"chalk\";\nimport { Context } from \"../../bundler/context.js\";\nimport { logError, logOutput, logWarning } from \"../../bundler/log.js\";\nimport { Base64 } from \"../../values/index.js\";\nimport { Value } from \"../../values/value.js\";\nimport { runSystemPaginatedQuery } from \"./run.js\";\n\nexport async function dataInDeployment(\n  ctx: Context,\n  options: {\n    deploymentUrl: string;\n    adminKey: string;\n    deploymentNotice: string;\n    tableName?: string | undefined;\n    limit: number;\n    order: \"asc\" | \"desc\";\n    component?: string | undefined;\n    format?:\n      | \"json\"\n      | \"jsonArray\"\n      | \"jsonLines\"\n      | \"jsonl\"\n      | \"pretty\"\n      | undefined;\n  },\n) {\n  if (options.tableName !== undefined) {\n    await listDocuments(\n      ctx,\n      options.deploymentUrl,\n      options.adminKey,\n      options.tableName,\n      {\n        limit: options.limit,\n        order: options.order as \"asc\" | \"desc\",\n        componentPath: options.component ?? \"\",\n        format: options.format,\n      },\n    );\n  } else {\n    await listTables(\n      ctx,\n      options.deploymentUrl,\n      options.adminKey,\n      options.deploymentNotice,\n      options.component ?? \"\",\n    );\n  }\n}\n\nasync function listTables(\n  ctx: Context,\n  deploymentUrl: string,\n  adminKey: string,\n  deploymentNotice: string,\n  componentPath: string,\n) {\n  const tables = (await runSystemPaginatedQuery(ctx, {\n    deploymentUrl,\n    adminKey,\n    functionName: \"_system/cli/tables\",\n    componentPath,\n    args: {},\n  })) as { name: string }[];\n  if (tables.length === 0) {\n    logError(`There are no tables in the ${deploymentNotice}database.`);\n    return;\n  }\n  const tableNames = tables.map((table) => table.name);\n  tableNames.sort();\n  logOutput(tableNames.join(\"\\n\"));\n}\n\nasync function listDocuments(\n  ctx: Context,\n  deploymentUrl: string,\n  adminKey: string,\n  tableName: string,\n  options: {\n    limit: number;\n    order: \"asc\" | \"desc\";\n    componentPath: string;\n    format?:\n      | \"json\"\n      | \"jsonArray\"\n      | \"jsonLines\"\n      | \"jsonl\"\n      | \"pretty\"\n      | undefined;\n  },\n) {\n  const data = (await runSystemPaginatedQuery(ctx, {\n    deploymentUrl,\n    adminKey,\n    functionName: \"_system/cli/tableData\",\n    componentPath: options.componentPath,\n    args: {\n      table: tableName,\n      order: options.order ?? \"desc\",\n    },\n    limit: options.limit + 1,\n  })) as Record<string, Value>[];\n\n  if (data.length === 0) {\n    logError(\"There are no documents in this table.\");\n    return;\n  }\n\n  if (options.format === \"json\" || options.format === \"jsonArray\") {\n    logOutput(\n      \"[\\n\" + data.slice(0, options.limit).map(stringify).join(\",\\n\") + \"\\n]\",\n    );\n  } else if (options.format === \"jsonLines\" || options.format === \"jsonl\") {\n    logOutput(\n      data\n        .slice(0, options.limit)\n        .map((document) => stringify(document))\n        .join(\"\\n\"),\n    );\n  } else {\n    logDocumentsTable(\n      ctx,\n      data.slice(0, options.limit).map((document) => {\n        const printed: Record<string, string> = {};\n        for (const key in document) {\n          printed[key] = stringify(document[key]);\n        }\n        return printed;\n      }),\n    );\n    if (data.length > options.limit) {\n      logWarning(\n        chalkStderr.yellow(\n          `Showing the ${options.limit} ${\n            options.order === \"desc\" ? \"most recently\" : \"oldest\"\n          } created document${\n            options.limit > 1 ? \"s\" : \"\"\n          }. Use the --limit option to see more.`,\n        ),\n      );\n    }\n  }\n}\n\nfunction logDocumentsTable(_ctx: Context, rows: Record<string, string>[]) {\n  const columnsToWidths: Record<string, number> = {};\n  for (const row of rows) {\n    for (const column in row) {\n      const value = row[column];\n      columnsToWidths[column] = Math.max(\n        value.length,\n        columnsToWidths[column] ?? 0,\n      );\n    }\n  }\n  const unsortedFields = Object.keys(columnsToWidths);\n  unsortedFields.sort();\n  const fields = Array.from(\n    new Set([\"_id\", \"_creationTime\", ...unsortedFields]),\n  );\n  const columnWidths = fields.map((field) => columnsToWidths[field]);\n  const lineLimit = process.stdout.isTTY ? process.stdout.columns : undefined;\n\n  let didTruncate = false;\n\n  function limitLine(line: string, limit: number | undefined) {\n    if (limit === undefined) {\n      return line;\n    }\n    const limitWithBufferForUnicode = limit - 10;\n    if (line.length > limitWithBufferForUnicode) {\n      didTruncate = true;\n    }\n    return line.slice(0, limitWithBufferForUnicode);\n  }\n\n  logOutput(\n    limitLine(\n      fields.map((field, i) => field.padEnd(columnWidths[i])).join(\" | \"),\n      lineLimit,\n    ),\n  );\n  logOutput(\n    limitLine(\n      columnWidths.map((width) => \"-\".repeat(width)).join(\"-|-\"),\n      lineLimit,\n    ),\n  );\n  for (const row of rows) {\n    logOutput(\n      limitLine(\n        fields\n          .map((field, i) => (row[field] ?? \"\").padEnd(columnWidths[i]))\n          .join(\" | \"),\n        lineLimit,\n      ),\n    );\n  }\n  if (didTruncate) {\n    logWarning(\n      chalkStderr.yellow(\n        \"Lines were truncated to fit the terminal width. Pipe the command to see \" +\n          \"the full output, such as:\\n  `npx convex data tableName | less -S`\",\n      ),\n    );\n  }\n}\n\nfunction stringify(value: Value): string {\n  if (value === null) {\n    return \"null\";\n  }\n  if (typeof value === \"bigint\") {\n    return `${value.toString()}n`;\n  }\n  if (typeof value === \"number\") {\n    return value.toString();\n  }\n  if (typeof value === \"boolean\") {\n    return value.toString();\n  }\n  if (typeof value === \"string\") {\n    return JSON.stringify(value);\n  }\n  if (value instanceof ArrayBuffer) {\n    const base64Encoded = Base64.fromByteArray(new Uint8Array(value));\n    return `Bytes(\"${base64Encoded}\")`;\n  }\n  if (value instanceof Array) {\n    return `[${value.map(stringify).join(\", \")}]`;\n  }\n  const pairs = Object.entries(value)\n    .map(([k, v]) => `\"${k}\": ${stringify(v!)}`)\n    .join(\", \");\n  return `{ ${pairs} }`;\n}\n", "import { chalkStderr } from \"chalk\";\nimport { oneoffContext } from \"../bundler/context.js\";\nimport { loadSelectedDeploymentCredentials } from \"./lib/api.js\";\nimport { Command } from \"@commander-js/extra-typings\";\nimport { actionDescription } from \"./lib/command.js\";\nimport { dataInDeployment } from \"./lib/data.js\";\nimport { getDeploymentSelection } from \"./lib/deploymentSelection.js\";\n\nexport const data = new Command(\"data\")\n  .summary(\"List tables and print data from your database\")\n  .description(\n    \"Inspect your Convex deployment's database.\\n\\n\" +\n      \"  List tables: `npx convex data`\\n\" +\n      \"  List documents in a table: `npx convex data tableName`\\n\\n\" +\n      \"By default, this inspects your dev deployment.\",\n  )\n  .allowExcessArguments(false)\n  .addDataOptions()\n  .addDeploymentSelectionOptions(actionDescription(\"Inspect the database in\"))\n  .showHelpAfterError()\n  .action(async (tableName, options) => {\n    const ctx = await oneoffContext(options);\n\n    const deploymentSelection = await getDeploymentSelection(ctx, options);\n    const deployment = await loadSelectedDeploymentCredentials(\n      ctx,\n      deploymentSelection,\n    );\n\n    const deploymentNotice = deployment.deploymentFields?.deploymentName\n      ? `${chalkStderr.bold(deployment.deploymentFields.deploymentName)} deployment's `\n      : \"\";\n\n    await dataInDeployment(ctx, {\n      deploymentUrl: deployment.url,\n      adminKey: deployment.adminKey,\n      deploymentNotice,\n      tableName,\n      ...options,\n    });\n  });\n", "// eslint-disable-next-line no-restricted-imports -- chalk used for formatting stdout via logOutput()\nimport chalk from \"chalk\";\nimport { logOutput } from \"../../bundler/log.js\";\nimport { runSystemQuery } from \"./run.js\";\nimport { Context } from \"../../bundler/context.js\";\n\nexport async function functionSpecForDeployment(\n  ctx: Context,\n  options: {\n    deploymentUrl: string;\n    adminKey: string;\n    file: boolean;\n  },\n) {\n  const functions = (await runSystemQuery(ctx, {\n    deploymentUrl: options.deploymentUrl,\n    adminKey: options.adminKey,\n    functionName: \"_system/cli/modules:apiSpec\",\n    componentPath: undefined,\n    args: {},\n  })) as any[];\n  const url = (await runSystemQuery(ctx, {\n    deploymentUrl: options.deploymentUrl,\n    adminKey: options.adminKey,\n    functionName: \"_system/cli/convexUrl:cloudUrl\",\n    componentPath: undefined,\n    args: {},\n  })) as string;\n\n  const output = JSON.stringify({ url, functions }, null, 2);\n\n  if (options.file) {\n    const fileName = `function_spec_${Date.now().valueOf()}.json`;\n    ctx.fs.writeUtf8File(fileName, output);\n    logOutput(chalk.green(`Wrote function spec to ${fileName}`));\n  } else {\n    logOutput(output);\n  }\n}\n", "import { oneoffContext } from \"../bundler/context.js\";\nimport { loadSelectedDeploymentCredentials } from \"./lib/api.js\";\nimport { Command, Option } from \"@commander-js/extra-typings\";\nimport { actionDescription } from \"./lib/command.js\";\nimport { functionSpecForDeployment } from \"./lib/functionSpec.js\";\nimport { getDeploymentSelection } from \"./lib/deploymentSelection.js\";\nexport const functionSpec = new Command(\"function-spec\")\n  .summary(\"List function metadata from your deployment\")\n  .description(\n    \"List argument and return values to your Convex functions.\\n\\n\" +\n      \"By default, this inspects your dev deployment.\",\n  )\n  .allowExcessArguments(false)\n  .addOption(new Option(\"--file\", \"Output as JSON to a file.\"))\n  .addDeploymentSelectionOptions(\n    actionDescription(\"Read function metadata from\"),\n  )\n  .showHelpAfterError()\n  .action(async (options) => {\n    const ctx = await oneoffContext(options);\n    const deploymentSelection = await getDeploymentSelection(ctx, options);\n    const { adminKey, url: deploymentUrl } =\n      await loadSelectedDeploymentCredentials(ctx, deploymentSelection);\n\n    await functionSpecForDeployment(ctx, {\n      deploymentUrl,\n      adminKey,\n      file: !!options.file,\n    });\n  });\n", "import { Context } from \"../../bundler/context.js\";\nimport { fetchTeamAndProject } from \"./api.js\";\nimport { BIG_BRAIN_URL, bigBrainFetch, provisionHost } from \"./utils/utils.js\";\n\nexport const ROOT_COMPONENT_PATH = \"-root-component-\";\n// Query ID for the insights dataset (shared with dashboard/src/api/insights.ts).\nexport const INSIGHTS_QUERY_ID = \"9ab3b74e-a725-480b-88a6-43e6bd70bd82\";\n\nexport type OccRecentEvent = {\n  timestamp: string;\n  id: string;\n  request_id: string;\n  occ_document_id?: string;\n  occ_write_source?: string;\n  occ_retry_count: number;\n};\n\nexport type ResourceRecentEvent = {\n  timestamp: string;\n  id: string;\n  request_id: string;\n  calls: {\n    table_name: string;\n    bytes_read: number;\n    documents_read: number;\n  }[];\n  success: boolean;\n};\n\nexport type OccInsight = {\n  kind: \"occRetried\" | \"occFailedPermanently\";\n  severity: \"error\" | \"warning\";\n  functionId: string;\n  componentPath: string | null;\n  occCalls: number;\n  occTableName?: string | undefined;\n  recentEvents?: OccRecentEvent[] | undefined;\n};\n\nexport type ResourceInsight = {\n  kind:\n    | \"bytesReadLimit\"\n    | \"bytesReadThreshold\"\n    | \"documentsReadLimit\"\n    | \"documentsReadThreshold\";\n  severity: \"error\" | \"warning\";\n  functionId: string;\n  componentPath: string | null;\n  count: number;\n  recentEvents?: ResourceRecentEvent[] | undefined;\n};\n\nexport type Insight = OccInsight | ResourceInsight;\n\n// Sorted from most to least severe.\nconst insightKinds: { kind: string; severity: \"error\" | \"warning\" }[] = [\n  { kind: \"documentsReadLimit\", severity: \"error\" },\n  { kind: \"bytesReadLimit\", severity: \"error\" },\n  { kind: \"occFailedPermanently\", severity: \"error\" },\n  { kind: \"documentsReadThreshold\", severity: \"warning\" },\n  { kind: \"bytesReadThreshold\", severity: \"warning\" },\n  { kind: \"occRetried\", severity: \"warning\" },\n];\n\nconst insightKindMap = new Map(\n  insightKinds.map((ik, i) => [ik.kind, { severity: ik.severity, order: i }]),\n);\n\nexport function orderForKind(kind: string): number {\n  return insightKindMap.get(kind)?.order ?? insightKinds.length;\n}\n\nexport function severityForKind(kind: string): \"error\" | \"warning\" | undefined {\n  return insightKindMap.get(kind)?.severity;\n}\n\nconst MAX_RECENT_EVENTS = 5;\n\nfunction parseRow(row: string[], includeRecentEvents: boolean): Insight | null {\n  const kind = row[0];\n  const functionId = row[1];\n  const componentPath = row[2] === ROOT_COMPONENT_PATH ? null : row[2];\n  const details = JSON.parse(row[3]);\n  const common = { functionId, componentPath };\n  const recentEvents = includeRecentEvents\n    ? (details.recentEvents as any[]).slice(0, MAX_RECENT_EVENTS)\n    : undefined;\n\n  switch (kind) {\n    case \"occRetried\":\n      return {\n        kind,\n        severity: \"warning\" as const,\n        ...common,\n        occCalls: details.occCalls,\n        occTableName: details.occTableName,\n        recentEvents,\n      };\n    case \"occFailedPermanently\":\n      return {\n        kind,\n        severity: \"error\" as const,\n        ...common,\n        occCalls: details.occCalls,\n        occTableName: details.occTableName,\n        recentEvents,\n      };\n    case \"bytesReadLimit\":\n      return {\n        kind,\n        severity: \"error\" as const,\n        ...common,\n        count: details.count,\n        recentEvents,\n      };\n    case \"bytesReadThreshold\":\n      return {\n        kind,\n        severity: \"warning\" as const,\n        ...common,\n        count: details.count,\n        recentEvents,\n      };\n    case \"documentsReadLimit\":\n      return {\n        kind,\n        severity: \"error\" as const,\n        ...common,\n        count: details.count,\n        recentEvents,\n      };\n    case \"documentsReadThreshold\":\n      return {\n        kind,\n        severity: \"warning\" as const,\n        ...common,\n        count: details.count,\n        recentEvents,\n      };\n    default:\n      return null;\n  }\n}\n\n/**\n * Fetch raw insight rows from the Big Brain usage API.\n * Returns the raw string[][] from the API response.\n */\nexport async function fetchRawInsightsData(\n  ctx: Context,\n  deploymentName: string,\n): Promise<string[][]> {\n  const { teamId } = await fetchTeamAndProject(ctx, deploymentName);\n\n  const now = new Date();\n  const hoursAgo72 = new Date(now.getTime() - 72 * 60 * 60 * 1000);\n  const fromDate = hoursAgo72.toISOString().split(\"T\")[0];\n  const toDate = now.toISOString().split(\"T\")[0];\n\n  const queryParams = new URLSearchParams({\n    queryId: INSIGHTS_QUERY_ID,\n    deploymentName,\n    from: fromDate,\n    to: toDate,\n  });\n  const bbFetch = await bigBrainFetch(ctx);\n  const res = await bbFetch(\n    new URL(\n      `dashboard/teams/${teamId}/usage/query?${queryParams.toString()}`,\n      BIG_BRAIN_URL,\n    ),\n    {\n      method: \"GET\",\n      headers: { Origin: provisionHost },\n    },\n  );\n  return (await res.json()) as string[][];\n}\n\n/**\n * Fetch and parse insights from the Big Brain usage API for a deployment.\n * Returns insights sorted by severity (errors first).\n *\n * Pass `includeRecentEvents: true` to include up to 5 recent events per insight.\n */\nexport async function fetchInsights(\n  ctx: Context,\n  deploymentName: string,\n  options?: { includeRecentEvents?: boolean },\n): Promise<Insight[]> {\n  const rawData = await fetchRawInsightsData(ctx, deploymentName);\n  const includeRecentEvents = options?.includeRecentEvents ?? false;\n\n  const insights: Insight[] = rawData.flatMap((row) => {\n    const parsed = parseRow(row, includeRecentEvents);\n    return parsed ? [parsed] : [];\n  });\n\n  insights.sort((a, b) => orderForKind(a.kind) - orderForKind(b.kind));\n  return insights;\n}\n", "import { Command } from \"@commander-js/extra-typings\";\n// eslint-disable-next-line no-restricted-imports -- stdout output uses default chalk\nimport chalk from \"chalk\";\nimport { oneoffContext } from \"../bundler/context.js\";\nimport { logOutput } from \"../bundler/log.js\";\nimport { loadSelectedDeploymentCredentials } from \"./lib/api.js\";\nimport { actionDescription } from \"./lib/command.js\";\nimport { deploymentDashboardUrlPage } from \"./lib/dashboard.js\";\nimport { getDeploymentSelection } from \"./lib/deploymentSelection.js\";\nimport { type Insight, fetchInsights } from \"./lib/insights.js\";\n\nfunction formatInsightKind(kind: string): string {\n  switch (kind) {\n    case \"occRetried\":\n      return \"OCC Retried\";\n    case \"occFailedPermanently\":\n      return \"OCC Failed Permanently\";\n    case \"bytesReadLimit\":\n      return \"Bytes Read Limit Exceeded\";\n    case \"bytesReadThreshold\":\n      return \"Bytes Read Near Limit\";\n    case \"documentsReadLimit\":\n      return \"Documents Read Limit Exceeded\";\n    case \"documentsReadThreshold\":\n      return \"Documents Read Near Limit\";\n    default:\n      return kind;\n  }\n}\n\nfunction formatFunctionName(insight: Insight): string {\n  if (insight.componentPath) {\n    return `${insight.componentPath}:${insight.functionId}`;\n  }\n  return insight.functionId;\n}\n\nfunction formatInsight(insight: Insight, details: boolean): string {\n  const severity =\n    insight.severity === \"error\"\n      ? chalk.red(`[ERROR]`)\n      : chalk.yellow(`[WARNING]`);\n  const kind = formatInsightKind(insight.kind);\n  const fn = chalk.bold(formatFunctionName(insight));\n\n  let detail: string;\n  if (\"occCalls\" in insight) {\n    const table = insight.occTableName\n      ? ` on table ${chalk.cyan(insight.occTableName)}`\n      : \"\";\n    detail = `${insight.occCalls} OCC conflict${insight.occCalls !== 1 ? \"s\" : \"\"}${table}`;\n  } else {\n    detail = `${insight.count} occurrence${insight.count !== 1 ? \"s\" : \"\"}`;\n  }\n\n  let output = `${severity} ${kind}: ${fn} \u2014 ${detail}`;\n\n  if (details && insight.recentEvents && insight.recentEvents.length > 0) {\n    output += \"\\n\";\n    for (const event of insight.recentEvents) {\n      const time = chalk.dim(new Date(event.timestamp).toLocaleString());\n      const reqId = chalk.dim(`req:${event.request_id}`);\n\n      if (\"occ_retry_count\" in event) {\n        const docId = event.occ_document_id\n          ? ` doc:${event.occ_document_id}`\n          : \"\";\n        const source = event.occ_write_source\n          ? ` source:${event.occ_write_source}`\n          : \"\";\n        output += `    ${time}  ${reqId}  retries:${event.occ_retry_count}${docId}${source}\\n`;\n      } else {\n        const status = event.success ? chalk.green(\"ok\") : chalk.red(\"fail\");\n        const calls = event.calls\n          .map(\n            (c) =>\n              `${c.table_name}(${c.documents_read} docs, ${c.bytes_read} bytes)`,\n          )\n          .join(\", \");\n        output += `    ${time}  ${reqId}  ${status}  ${calls}\\n`;\n      }\n    }\n  }\n\n  return output;\n}\n\nexport const insights = new Command(\"insights\")\n  .summary(\"Show health insights for your deployment\")\n  .description(\n    \"Show health insights for a Convex deployment over the last 72 hours.\\n\" +\n      \"Displays OCC conflicts and resource limit issues that may indicate performance problems.\\n\\n\" +\n      \"Only available for cloud deployments with user-level authentication.\",\n  )\n  .allowExcessArguments(false)\n  .option(\"--details\", \"Show recent events for each insight\", false)\n  .addDeploymentSelectionOptions(actionDescription(\"Show insights for\"))\n  .showHelpAfterError()\n  .action(async (cmdOptions) => {\n    const ctx = await oneoffContext(cmdOptions);\n\n    const deploymentSelection = await getDeploymentSelection(ctx, cmdOptions);\n    const credentials = await loadSelectedDeploymentCredentials(\n      ctx,\n      deploymentSelection,\n    );\n\n    const deploymentName = credentials.deploymentFields?.deploymentName ?? null;\n    if (deploymentName === null) {\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage:\n          \"Insights are only available for cloud deployments. Local deployments do not have insights data.\",\n      });\n    }\n\n    const auth = ctx.bigBrainAuth();\n    if (\n      auth === null ||\n      auth.kind === \"deploymentKey\" ||\n      auth.kind === \"projectKey\"\n    ) {\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage:\n          \"Insights require user-level authentication. Deploy keys and project keys cannot access team usage data.\",\n      });\n    }\n\n    const insightsList = await fetchInsights(ctx, deploymentName, {\n      includeRecentEvents: cmdOptions.details,\n    });\n\n    const dashboardUrl = deploymentDashboardUrlPage(\n      deploymentName,\n      \"?view=insights\",\n    );\n\n    if (insightsList.length === 0) {\n      logOutput(\n        chalk.green(\n          \"No issues found. The deployment is healthy over the last 72 hours.\",\n        ),\n      );\n    } else {\n      const errorCount = insightsList.filter(\n        (i) => i.severity === \"error\",\n      ).length;\n      const warningCount = insightsList.filter(\n        (i) => i.severity === \"warning\",\n      ).length;\n\n      const parts: string[] = [];\n      if (errorCount > 0)\n        parts.push(\n          chalk.red(`${errorCount} error${errorCount > 1 ? \"s\" : \"\"}`),\n        );\n      if (warningCount > 0)\n        parts.push(\n          chalk.yellow(`${warningCount} warning${warningCount > 1 ? \"s\" : \"\"}`),\n        );\n      logOutput(`Found ${parts.join(\" and \")} in the last 72 hours:\\n`);\n\n      for (const insight of insightsList) {\n        logOutput(formatInsight(insight, cmdOptions.details));\n      }\n    }\n\n    logOutput(`\\nDashboard: ${chalk.cyan(dashboardUrl)}`);\n  });\n", "import { Command } from \"@commander-js/extra-typings\";\nimport { oneoffContext } from \"../bundler/context.js\";\nimport { logFinishedStep } from \"../bundler/log.js\";\nimport { deploymentCredentialsOrConfigure } from \"./configure.js\";\nimport {\n  modifyGlobalConfig,\n  readGlobalConfig,\n} from \"./lib/utils/globalConfig.js\";\nimport {\n  deploymentNameAndTypeFromSelection,\n  getDeploymentSelection,\n} from \"./lib/deploymentSelection.js\";\n\nexport const disableLocalDeployments = new Command(\"disable-local-deployments\")\n  .description(\n    \"Stop using a local deployment for the current project, or globally disable local depoyments with --global\",\n  )\n  .option(\n    \"--global\",\n    \"Disable local deployments on this machine until a future release when this feature is more stable.\",\n  )\n  .option(\"--undo-global\", \"Re-enable local deployments on this machine.\")\n  .allowExcessArguments(false)\n  .action(async (cmdOptions) => {\n    const ctx = await oneoffContext({\n      url: undefined,\n      adminKey: undefined,\n      envFile: undefined,\n    });\n\n    if (cmdOptions.undoGlobal) {\n      return disableLocalDeploymentsGloballyUntilBetaOver(true);\n    }\n    if (cmdOptions.global) {\n      return disableLocalDeploymentsGloballyUntilBetaOver(\n        !!cmdOptions.undoGlobal,\n      );\n    }\n\n    const deploymentSelection = await getDeploymentSelection(ctx, {\n      url: undefined,\n      adminKey: undefined,\n      envFile: undefined,\n    });\n    const configuredDeployment =\n      deploymentNameAndTypeFromSelection(deploymentSelection);\n    if (\n      configuredDeployment?.type !== null &&\n      configuredDeployment?.type !== \"local\"\n    ) {\n      logFinishedStep(\"Local development is already not being used.\");\n      return;\n    }\n\n    await deploymentCredentialsOrConfigure(ctx, deploymentSelection, \"ask\", {\n      prod: false,\n      localOptions: {\n        forceUpgrade: false,\n      },\n      cloud: true,\n    });\n\n    logFinishedStep(\n      \"You are no longer using a local deployment for development.\",\n    );\n  });\n\nasync function disableLocalDeploymentsGloballyUntilBetaOver(\n  reenable: boolean,\n): Promise<void> {\n  const ctx = await oneoffContext({\n    url: undefined,\n    adminKey: undefined,\n    envFile: undefined,\n  });\n\n  // Ensure this is not used in CI or scripts, since it has global effects and will be deprecated\n  // in the future.\n  if (!process.stdin.isTTY) {\n    return ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage:\n        \"`disable-local-deployments --global` is not for scripting, it is temporary and only for interactive use.\",\n    });\n  }\n  const config = readGlobalConfig(ctx);\n  if (config === null) {\n    return ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: \"Log in first with `npx convex login\",\n    });\n  }\n\n  if (reenable) {\n    if (\n      !(\"optOutOfLocalDevDeploymentsUntilBetaOver\" in config) ||\n      !config.optOutOfLocalDevDeploymentsUntilBetaOver\n    ) {\n      logFinishedStep(\n        \"You are already opted into allowing local deployents on this machine.\",\n      );\n      return;\n    }\n    await modifyGlobalConfig(ctx, {\n      ...config,\n      optOutOfLocalDevDeploymentsUntilBetaOver: false,\n    });\n\n    logFinishedStep(\n      \"You have been opted back into allowing local deployents on this machine.\",\n    );\n    return;\n  }\n\n  if (\n    \"optOutOfLocalDevDeploymentsUntilBetaOver\" in config &&\n    config.optOutOfLocalDevDeploymentsUntilBetaOver\n  ) {\n    logFinishedStep(\n      \"You are already opted out of local deployents on this machine.\",\n    );\n    return;\n  }\n  await modifyGlobalConfig(ctx, {\n    ...config,\n    optOutOfLocalDevDeploymentsUntilBetaOver: true,\n  });\n\n  logFinishedStep(\n    \"You have been opted out of local deployents on this machine until the beta is over. Run `npx convex disable-local-deployments --undo-global` to opt back in.\",\n  );\n}\n", "/** A special constant with type `never` */\nexport const NEVER = Object.freeze({\n    status: \"aborted\",\n});\nexport /*@__NO_SIDE_EFFECTS__*/ function $constructor(name, initializer, params) {\n    function init(inst, def) {\n        var _a;\n        Object.defineProperty(inst, \"_zod\", {\n            value: inst._zod ?? {},\n            enumerable: false,\n        });\n        (_a = inst._zod).traits ?? (_a.traits = new Set());\n        inst._zod.traits.add(name);\n        initializer(inst, def);\n        // support prototype modifications\n        for (const k in _.prototype) {\n            if (!(k in inst))\n                Object.defineProperty(inst, k, { value: _.prototype[k].bind(inst) });\n        }\n        inst._zod.constr = _;\n        inst._zod.def = def;\n    }\n    // doesn't work if Parent has a constructor with arguments\n    const Parent = params?.Parent ?? Object;\n    class Definition extends Parent {\n    }\n    Object.defineProperty(Definition, \"name\", { value: name });\n    function _(def) {\n        var _a;\n        const inst = params?.Parent ? new Definition() : this;\n        init(inst, def);\n        (_a = inst._zod).deferred ?? (_a.deferred = []);\n        for (const fn of inst._zod.deferred) {\n            fn();\n        }\n        return inst;\n    }\n    Object.defineProperty(_, \"init\", { value: init });\n    Object.defineProperty(_, Symbol.hasInstance, {\n        value: (inst) => {\n            if (params?.Parent && inst instanceof params.Parent)\n                return true;\n            return inst?._zod?.traits?.has(name);\n        },\n    });\n    Object.defineProperty(_, \"name\", { value: name });\n    return _;\n}\n//////////////////////////////   UTILITIES   ///////////////////////////////////////\nexport const $brand = Symbol(\"zod_brand\");\nexport class $ZodAsyncError extends Error {\n    constructor() {\n        super(`Encountered Promise during synchronous parse. Use .parseAsync() instead.`);\n    }\n}\nexport const globalConfig = {};\nexport function config(newConfig) {\n    if (newConfig)\n        Object.assign(globalConfig, newConfig);\n    return globalConfig;\n}\n", "// functions\nexport function assertEqual(val) {\n    return val;\n}\nexport function assertNotEqual(val) {\n    return val;\n}\nexport function assertIs(_arg) { }\nexport function assertNever(_x) {\n    throw new Error();\n}\nexport function assert(_) { }\nexport function getEnumValues(entries) {\n    const numericValues = Object.values(entries).filter((v) => typeof v === \"number\");\n    const values = Object.entries(entries)\n        .filter(([k, _]) => numericValues.indexOf(+k) === -1)\n        .map(([_, v]) => v);\n    return values;\n}\nexport function joinValues(array, separator = \"|\") {\n    return array.map((val) => stringifyPrimitive(val)).join(separator);\n}\nexport function jsonStringifyReplacer(_, value) {\n    if (typeof value === \"bigint\")\n        return value.toString();\n    return value;\n}\nexport function cached(getter) {\n    const set = false;\n    return {\n        get value() {\n            if (!set) {\n                const value = getter();\n                Object.defineProperty(this, \"value\", { value });\n                return value;\n            }\n            throw new Error(\"cached value already set\");\n        },\n    };\n}\nexport function nullish(input) {\n    return input === null || input === undefined;\n}\nexport function cleanRegex(source) {\n    const start = source.startsWith(\"^\") ? 1 : 0;\n    const end = source.endsWith(\"$\") ? source.length - 1 : source.length;\n    return source.slice(start, end);\n}\nexport function floatSafeRemainder(val, step) {\n    const valDecCount = (val.toString().split(\".\")[1] || \"\").length;\n    const stepDecCount = (step.toString().split(\".\")[1] || \"\").length;\n    const decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount;\n    const valInt = Number.parseInt(val.toFixed(decCount).replace(\".\", \"\"));\n    const stepInt = Number.parseInt(step.toFixed(decCount).replace(\".\", \"\"));\n    return (valInt % stepInt) / 10 ** decCount;\n}\nexport function defineLazy(object, key, getter) {\n    const set = false;\n    Object.defineProperty(object, key, {\n        get() {\n            if (!set) {\n                const value = getter();\n                object[key] = value;\n                return value;\n            }\n            throw new Error(\"cached value already set\");\n        },\n        set(v) {\n            Object.defineProperty(object, key, {\n                value: v,\n                // configurable: true,\n            });\n            // object[key] = v;\n        },\n        configurable: true,\n    });\n}\nexport function assignProp(target, prop, value) {\n    Object.defineProperty(target, prop, {\n        value,\n        writable: true,\n        enumerable: true,\n        configurable: true,\n    });\n}\nexport function getElementAtPath(obj, path) {\n    if (!path)\n        return obj;\n    return path.reduce((acc, key) => acc?.[key], obj);\n}\nexport function promiseAllObject(promisesObj) {\n    const keys = Object.keys(promisesObj);\n    const promises = keys.map((key) => promisesObj[key]);\n    return Promise.all(promises).then((results) => {\n        const resolvedObj = {};\n        for (let i = 0; i < keys.length; i++) {\n            resolvedObj[keys[i]] = results[i];\n        }\n        return resolvedObj;\n    });\n}\nexport function randomString(length = 10) {\n    const chars = \"abcdefghijklmnopqrstuvwxyz\";\n    let str = \"\";\n    for (let i = 0; i < length; i++) {\n        str += chars[Math.floor(Math.random() * chars.length)];\n    }\n    return str;\n}\nexport function esc(str) {\n    return JSON.stringify(str);\n}\nexport const captureStackTrace = Error.captureStackTrace\n    ? Error.captureStackTrace\n    : (..._args) => { };\nexport function isObject(data) {\n    return typeof data === \"object\" && data !== null && !Array.isArray(data);\n}\nexport const allowsEval = cached(() => {\n    if (typeof navigator !== \"undefined\" && navigator?.userAgent?.includes(\"Cloudflare\")) {\n        return false;\n    }\n    try {\n        const F = Function;\n        new F(\"\");\n        return true;\n    }\n    catch (_) {\n        return false;\n    }\n});\nexport function isPlainObject(o) {\n    if (isObject(o) === false)\n        return false;\n    // modified constructor\n    const ctor = o.constructor;\n    if (ctor === undefined)\n        return true;\n    // modified prototype\n    const prot = ctor.prototype;\n    if (isObject(prot) === false)\n        return false;\n    // ctor doesn't have static `isPrototypeOf`\n    if (Object.prototype.hasOwnProperty.call(prot, \"isPrototypeOf\") === false) {\n        return false;\n    }\n    return true;\n}\nexport function numKeys(data) {\n    let keyCount = 0;\n    for (const key in data) {\n        if (Object.prototype.hasOwnProperty.call(data, key)) {\n            keyCount++;\n        }\n    }\n    return keyCount;\n}\nexport const getParsedType = (data) => {\n    const t = typeof data;\n    switch (t) {\n        case \"undefined\":\n            return \"undefined\";\n        case \"string\":\n            return \"string\";\n        case \"number\":\n            return Number.isNaN(data) ? \"nan\" : \"number\";\n        case \"boolean\":\n            return \"boolean\";\n        case \"function\":\n            return \"function\";\n        case \"bigint\":\n            return \"bigint\";\n        case \"symbol\":\n            return \"symbol\";\n        case \"object\":\n            if (Array.isArray(data)) {\n                return \"array\";\n            }\n            if (data === null) {\n                return \"null\";\n            }\n            if (data.then && typeof data.then === \"function\" && data.catch && typeof data.catch === \"function\") {\n                return \"promise\";\n            }\n            if (typeof Map !== \"undefined\" && data instanceof Map) {\n                return \"map\";\n            }\n            if (typeof Set !== \"undefined\" && data instanceof Set) {\n                return \"set\";\n            }\n            if (typeof Date !== \"undefined\" && data instanceof Date) {\n                return \"date\";\n            }\n            if (typeof File !== \"undefined\" && data instanceof File) {\n                return \"file\";\n            }\n            return \"object\";\n        default:\n            throw new Error(`Unknown data type: ${t}`);\n    }\n};\nexport const propertyKeyTypes = new Set([\"string\", \"number\", \"symbol\"]);\nexport const primitiveTypes = new Set([\"string\", \"number\", \"bigint\", \"boolean\", \"symbol\", \"undefined\"]);\nexport function escapeRegex(str) {\n    return str.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n// zod-specific utils\nexport function clone(inst, def, params) {\n    const cl = new inst._zod.constr(def ?? inst._zod.def);\n    if (!def || params?.parent)\n        cl._zod.parent = inst;\n    return cl;\n}\nexport function normalizeParams(_params) {\n    const params = _params;\n    if (!params)\n        return {};\n    if (typeof params === \"string\")\n        return { error: () => params };\n    if (params?.message !== undefined) {\n        if (params?.error !== undefined)\n            throw new Error(\"Cannot specify both `message` and `error` params\");\n        params.error = params.message;\n    }\n    delete params.message;\n    if (typeof params.error === \"string\")\n        return { ...params, error: () => params.error };\n    return params;\n}\nexport function createTransparentProxy(getter) {\n    let target;\n    return new Proxy({}, {\n        get(_, prop, receiver) {\n            target ?? (target = getter());\n            return Reflect.get(target, prop, receiver);\n        },\n        set(_, prop, value, receiver) {\n            target ?? (target = getter());\n            return Reflect.set(target, prop, value, receiver);\n        },\n        has(_, prop) {\n            target ?? (target = getter());\n            return Reflect.has(target, prop);\n        },\n        deleteProperty(_, prop) {\n            target ?? (target = getter());\n            return Reflect.deleteProperty(target, prop);\n        },\n        ownKeys(_) {\n            target ?? (target = getter());\n            return Reflect.ownKeys(target);\n        },\n        getOwnPropertyDescriptor(_, prop) {\n            target ?? (target = getter());\n            return Reflect.getOwnPropertyDescriptor(target, prop);\n        },\n        defineProperty(_, prop, descriptor) {\n            target ?? (target = getter());\n            return Reflect.defineProperty(target, prop, descriptor);\n        },\n    });\n}\nexport function stringifyPrimitive(value) {\n    if (typeof value === \"bigint\")\n        return value.toString() + \"n\";\n    if (typeof value === \"string\")\n        return `\"${value}\"`;\n    return `${value}`;\n}\nexport function optionalKeys(shape) {\n    return Object.keys(shape).filter((k) => {\n        return shape[k]._zod.optin === \"optional\" && shape[k]._zod.optout === \"optional\";\n    });\n}\nexport const NUMBER_FORMAT_RANGES = {\n    safeint: [Number.MIN_SAFE_INTEGER, Number.MAX_SAFE_INTEGER],\n    int32: [-2147483648, 2147483647],\n    uint32: [0, 4294967295],\n    float32: [-3.4028234663852886e38, 3.4028234663852886e38],\n    float64: [-Number.MAX_VALUE, Number.MAX_VALUE],\n};\nexport const BIGINT_FORMAT_RANGES = {\n    int64: [/* @__PURE__*/ BigInt(\"-9223372036854775808\"), /* @__PURE__*/ BigInt(\"9223372036854775807\")],\n    uint64: [/* @__PURE__*/ BigInt(0), /* @__PURE__*/ BigInt(\"18446744073709551615\")],\n};\nexport function pick(schema, mask) {\n    const newShape = {};\n    const currDef = schema._zod.def; //.shape;\n    for (const key in mask) {\n        if (!(key in currDef.shape)) {\n            throw new Error(`Unrecognized key: \"${key}\"`);\n        }\n        if (!mask[key])\n            continue;\n        // pick key\n        newShape[key] = currDef.shape[key];\n    }\n    return clone(schema, {\n        ...schema._zod.def,\n        shape: newShape,\n        checks: [],\n    });\n}\nexport function omit(schema, mask) {\n    const newShape = { ...schema._zod.def.shape };\n    const currDef = schema._zod.def; //.shape;\n    for (const key in mask) {\n        if (!(key in currDef.shape)) {\n            throw new Error(`Unrecognized key: \"${key}\"`);\n        }\n        if (!mask[key])\n            continue;\n        delete newShape[key];\n    }\n    return clone(schema, {\n        ...schema._zod.def,\n        shape: newShape,\n        checks: [],\n    });\n}\nexport function extend(schema, shape) {\n    if (!isPlainObject(shape)) {\n        throw new Error(\"Invalid input to extend: expected a plain object\");\n    }\n    const def = {\n        ...schema._zod.def,\n        get shape() {\n            const _shape = { ...schema._zod.def.shape, ...shape };\n            assignProp(this, \"shape\", _shape); // self-caching\n            return _shape;\n        },\n        checks: [], // delete existing checks\n    };\n    return clone(schema, def);\n}\nexport function merge(a, b) {\n    return clone(a, {\n        ...a._zod.def,\n        get shape() {\n            const _shape = { ...a._zod.def.shape, ...b._zod.def.shape };\n            assignProp(this, \"shape\", _shape); // self-caching\n            return _shape;\n        },\n        catchall: b._zod.def.catchall,\n        checks: [], // delete existing checks\n    });\n}\nexport function partial(Class, schema, mask) {\n    const oldShape = schema._zod.def.shape;\n    const shape = { ...oldShape };\n    if (mask) {\n        for (const key in mask) {\n            if (!(key in oldShape)) {\n                throw new Error(`Unrecognized key: \"${key}\"`);\n            }\n            if (!mask[key])\n                continue;\n            // if (oldShape[key]!._zod.optin === \"optional\") continue;\n            shape[key] = Class\n                ? new Class({\n                    type: \"optional\",\n                    innerType: oldShape[key],\n                })\n                : oldShape[key];\n        }\n    }\n    else {\n        for (const key in oldShape) {\n            // if (oldShape[key]!._zod.optin === \"optional\") continue;\n            shape[key] = Class\n                ? new Class({\n                    type: \"optional\",\n                    innerType: oldShape[key],\n                })\n                : oldShape[key];\n        }\n    }\n    return clone(schema, {\n        ...schema._zod.def,\n        shape,\n        checks: [],\n    });\n}\nexport function required(Class, schema, mask) {\n    const oldShape = schema._zod.def.shape;\n    const shape = { ...oldShape };\n    if (mask) {\n        for (const key in mask) {\n            if (!(key in shape)) {\n                throw new Error(`Unrecognized key: \"${key}\"`);\n            }\n            if (!mask[key])\n                continue;\n            // overwrite with non-optional\n            shape[key] = new Class({\n                type: \"nonoptional\",\n                innerType: oldShape[key],\n            });\n        }\n    }\n    else {\n        for (const key in oldShape) {\n            // overwrite with non-optional\n            shape[key] = new Class({\n                type: \"nonoptional\",\n                innerType: oldShape[key],\n            });\n        }\n    }\n    return clone(schema, {\n        ...schema._zod.def,\n        shape,\n        // optional: [],\n        checks: [],\n    });\n}\nexport function aborted(x, startIndex = 0) {\n    for (let i = startIndex; i < x.issues.length; i++) {\n        if (x.issues[i]?.continue !== true)\n            return true;\n    }\n    return false;\n}\nexport function prefixIssues(path, issues) {\n    return issues.map((iss) => {\n        var _a;\n        (_a = iss).path ?? (_a.path = []);\n        iss.path.unshift(path);\n        return iss;\n    });\n}\nexport function unwrapMessage(message) {\n    return typeof message === \"string\" ? message : message?.message;\n}\nexport function finalizeIssue(iss, ctx, config) {\n    const full = { ...iss, path: iss.path ?? [] };\n    // for backwards compatibility\n    if (!iss.message) {\n        const message = unwrapMessage(iss.inst?._zod.def?.error?.(iss)) ??\n            unwrapMessage(ctx?.error?.(iss)) ??\n            unwrapMessage(config.customError?.(iss)) ??\n            unwrapMessage(config.localeError?.(iss)) ??\n            \"Invalid input\";\n        full.message = message;\n    }\n    // delete (full as any).def;\n    delete full.inst;\n    delete full.continue;\n    if (!ctx?.reportInput) {\n        delete full.input;\n    }\n    return full;\n}\nexport function getSizableOrigin(input) {\n    if (input instanceof Set)\n        return \"set\";\n    if (input instanceof Map)\n        return \"map\";\n    if (input instanceof File)\n        return \"file\";\n    return \"unknown\";\n}\nexport function getLengthableOrigin(input) {\n    if (Array.isArray(input))\n        return \"array\";\n    if (typeof input === \"string\")\n        return \"string\";\n    return \"unknown\";\n}\nexport function issue(...args) {\n    const [iss, input, inst] = args;\n    if (typeof iss === \"string\") {\n        return {\n            message: iss,\n            code: \"custom\",\n            input,\n            inst,\n        };\n    }\n    return { ...iss };\n}\nexport function cleanEnum(obj) {\n    return Object.entries(obj)\n        .filter(([k, _]) => {\n        // return true if NaN, meaning it's not a number, thus a string key\n        return Number.isNaN(Number.parseInt(k, 10));\n    })\n        .map((el) => el[1]);\n}\n// instanceof\nexport class Class {\n    constructor(..._args) { }\n}\n", "import { $constructor } from \"./core.js\";\nimport * as util from \"./util.js\";\nconst initializer = (inst, def) => {\n    inst.name = \"$ZodError\";\n    Object.defineProperty(inst, \"_zod\", {\n        value: inst._zod,\n        enumerable: false,\n    });\n    Object.defineProperty(inst, \"issues\", {\n        value: def,\n        enumerable: false,\n    });\n    Object.defineProperty(inst, \"message\", {\n        get() {\n            return JSON.stringify(def, util.jsonStringifyReplacer, 2);\n        },\n        enumerable: true,\n        // configurable: false,\n    });\n    Object.defineProperty(inst, \"toString\", {\n        value: () => inst.message,\n        enumerable: false,\n    });\n};\nexport const $ZodError = $constructor(\"$ZodError\", initializer);\nexport const $ZodRealError = $constructor(\"$ZodError\", initializer, { Parent: Error });\nexport function flattenError(error, mapper = (issue) => issue.message) {\n    const fieldErrors = {};\n    const formErrors = [];\n    for (const sub of error.issues) {\n        if (sub.path.length > 0) {\n            fieldErrors[sub.path[0]] = fieldErrors[sub.path[0]] || [];\n            fieldErrors[sub.path[0]].push(mapper(sub));\n        }\n        else {\n            formErrors.push(mapper(sub));\n        }\n    }\n    return { formErrors, fieldErrors };\n}\nexport function formatError(error, _mapper) {\n    const mapper = _mapper ||\n        function (issue) {\n            return issue.message;\n        };\n    const fieldErrors = { _errors: [] };\n    const processError = (error) => {\n        for (const issue of error.issues) {\n            if (issue.code === \"invalid_union\" && issue.errors.length) {\n                issue.errors.map((issues) => processError({ issues }));\n            }\n            else if (issue.code === \"invalid_key\") {\n                processError({ issues: issue.issues });\n            }\n            else if (issue.code === \"invalid_element\") {\n                processError({ issues: issue.issues });\n            }\n            else if (issue.path.length === 0) {\n                fieldErrors._errors.push(mapper(issue));\n            }\n            else {\n                let curr = fieldErrors;\n                let i = 0;\n                while (i < issue.path.length) {\n                    const el = issue.path[i];\n                    const terminal = i === issue.path.length - 1;\n                    if (!terminal) {\n                        curr[el] = curr[el] || { _errors: [] };\n                    }\n                    else {\n                        curr[el] = curr[el] || { _errors: [] };\n                        curr[el]._errors.push(mapper(issue));\n                    }\n                    curr = curr[el];\n                    i++;\n                }\n            }\n        }\n    };\n    processError(error);\n    return fieldErrors;\n}\nexport function treeifyError(error, _mapper) {\n    const mapper = _mapper ||\n        function (issue) {\n            return issue.message;\n        };\n    const result = { errors: [] };\n    const processError = (error, path = []) => {\n        var _a, _b;\n        for (const issue of error.issues) {\n            if (issue.code === \"invalid_union\" && issue.errors.length) {\n                // regular union error\n                issue.errors.map((issues) => processError({ issues }, issue.path));\n            }\n            else if (issue.code === \"invalid_key\") {\n                processError({ issues: issue.issues }, issue.path);\n            }\n            else if (issue.code === \"invalid_element\") {\n                processError({ issues: issue.issues }, issue.path);\n            }\n            else {\n                const fullpath = [...path, ...issue.path];\n                if (fullpath.length === 0) {\n                    result.errors.push(mapper(issue));\n                    continue;\n                }\n                let curr = result;\n                let i = 0;\n                while (i < fullpath.length) {\n                    const el = fullpath[i];\n                    const terminal = i === fullpath.length - 1;\n                    if (typeof el === \"string\") {\n                        curr.properties ?? (curr.properties = {});\n                        (_a = curr.properties)[el] ?? (_a[el] = { errors: [] });\n                        curr = curr.properties[el];\n                    }\n                    else {\n                        curr.items ?? (curr.items = []);\n                        (_b = curr.items)[el] ?? (_b[el] = { errors: [] });\n                        curr = curr.items[el];\n                    }\n                    if (terminal) {\n                        curr.errors.push(mapper(issue));\n                    }\n                    i++;\n                }\n            }\n        }\n    };\n    processError(error);\n    return result;\n}\n/** Format a ZodError as a human-readable string in the following form.\n *\n * From\n *\n * ```ts\n * ZodError {\n *   issues: [\n *     {\n *       expected: 'string',\n *       code: 'invalid_type',\n *       path: [ 'username' ],\n *       message: 'Invalid input: expected string'\n *     },\n *     {\n *       expected: 'number',\n *       code: 'invalid_type',\n *       path: [ 'favoriteNumbers', 1 ],\n *       message: 'Invalid input: expected number'\n *     }\n *   ];\n * }\n * ```\n *\n * to\n *\n * ```\n * username\n *   \u2716 Expected number, received string at \"username\n * favoriteNumbers[0]\n *   \u2716 Invalid input: expected number\n * ```\n */\nexport function toDotPath(path) {\n    const segs = [];\n    for (const seg of path) {\n        if (typeof seg === \"number\")\n            segs.push(`[${seg}]`);\n        else if (typeof seg === \"symbol\")\n            segs.push(`[${JSON.stringify(String(seg))}]`);\n        else if (/[^\\w$]/.test(seg))\n            segs.push(`[${JSON.stringify(seg)}]`);\n        else {\n            if (segs.length)\n                segs.push(\".\");\n            segs.push(seg);\n        }\n    }\n    return segs.join(\"\");\n}\nexport function prettifyError(error) {\n    const lines = [];\n    // sort by path length\n    const issues = [...error.issues].sort((a, b) => a.path.length - b.path.length);\n    // Process each issue\n    for (const issue of issues) {\n        lines.push(`\u2716 ${issue.message}`);\n        if (issue.path?.length)\n            lines.push(`  \u2192 at ${toDotPath(issue.path)}`);\n    }\n    // Convert Map to formatted string\n    return lines.join(\"\\n\");\n}\n", "import * as core from \"./core.js\";\nimport * as errors from \"./errors.js\";\nimport * as util from \"./util.js\";\nexport const _parse = (_Err) => (schema, value, _ctx, _params) => {\n    const ctx = _ctx ? Object.assign(_ctx, { async: false }) : { async: false };\n    const result = schema._zod.run({ value, issues: [] }, ctx);\n    if (result instanceof Promise) {\n        throw new core.$ZodAsyncError();\n    }\n    if (result.issues.length) {\n        const e = new (_params?.Err ?? _Err)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())));\n        util.captureStackTrace(e, _params?.callee);\n        throw e;\n    }\n    return result.value;\n};\nexport const parse = /* @__PURE__*/ _parse(errors.$ZodRealError);\nexport const _parseAsync = (_Err) => async (schema, value, _ctx, params) => {\n    const ctx = _ctx ? Object.assign(_ctx, { async: true }) : { async: true };\n    let result = schema._zod.run({ value, issues: [] }, ctx);\n    if (result instanceof Promise)\n        result = await result;\n    if (result.issues.length) {\n        const e = new (params?.Err ?? _Err)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())));\n        util.captureStackTrace(e, params?.callee);\n        throw e;\n    }\n    return result.value;\n};\nexport const parseAsync = /* @__PURE__*/ _parseAsync(errors.$ZodRealError);\nexport const _safeParse = (_Err) => (schema, value, _ctx) => {\n    const ctx = _ctx ? { ..._ctx, async: false } : { async: false };\n    const result = schema._zod.run({ value, issues: [] }, ctx);\n    if (result instanceof Promise) {\n        throw new core.$ZodAsyncError();\n    }\n    return result.issues.length\n        ? {\n            success: false,\n            error: new (_Err ?? errors.$ZodError)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n        }\n        : { success: true, data: result.value };\n};\nexport const safeParse = /* @__PURE__*/ _safeParse(errors.$ZodRealError);\nexport const _safeParseAsync = (_Err) => async (schema, value, _ctx) => {\n    const ctx = _ctx ? Object.assign(_ctx, { async: true }) : { async: true };\n    let result = schema._zod.run({ value, issues: [] }, ctx);\n    if (result instanceof Promise)\n        result = await result;\n    return result.issues.length\n        ? {\n            success: false,\n            error: new _Err(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n        }\n        : { success: true, data: result.value };\n};\nexport const safeParseAsync = /* @__PURE__*/ _safeParseAsync(errors.$ZodRealError);\n", "export const cuid = /^[cC][^\\s-]{8,}$/;\nexport const cuid2 = /^[0-9a-z]+$/;\nexport const ulid = /^[0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{26}$/;\nexport const xid = /^[0-9a-vA-V]{20}$/;\nexport const ksuid = /^[A-Za-z0-9]{27}$/;\nexport const nanoid = /^[a-zA-Z0-9_-]{21}$/;\n/** ISO 8601-1 duration regex. Does not support the 8601-2 extensions like negative durations or fractional/negative components. */\nexport const duration = /^P(?:(\\d+W)|(?!.*W)(?=\\d|T\\d)(\\d+Y)?(\\d+M)?(\\d+D)?(T(?=\\d)(\\d+H)?(\\d+M)?(\\d+([.,]\\d+)?S)?)?)$/;\n/** Implements ISO 8601-2 extensions like explicit +- prefixes, mixing weeks with other units, and fractional/negative components. */\nexport const extendedDuration = /^[-+]?P(?!$)(?:(?:[-+]?\\d+Y)|(?:[-+]?\\d+[.,]\\d+Y$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:(?:[-+]?\\d+W)|(?:[-+]?\\d+[.,]\\d+W$))?(?:(?:[-+]?\\d+D)|(?:[-+]?\\d+[.,]\\d+D$))?(?:T(?=[\\d+-])(?:(?:[-+]?\\d+H)|(?:[-+]?\\d+[.,]\\d+H$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:[-+]?\\d+(?:[.,]\\d+)?S)?)??$/;\n/** A regex for any UUID-like identifier: 8-4-4-4-12 hex pattern */\nexport const guid = /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/;\n/** Returns a regex for validating an RFC 4122 UUID.\n *\n * @param version Optionally specify a version 1-8. If no version is specified, all versions are supported. */\nexport const uuid = (version) => {\n    if (!version)\n        return /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000)$/;\n    return new RegExp(`^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-${version}[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$`);\n};\nexport const uuid4 = /*@__PURE__*/ uuid(4);\nexport const uuid6 = /*@__PURE__*/ uuid(6);\nexport const uuid7 = /*@__PURE__*/ uuid(7);\n/** Practical email validation */\nexport const email = /^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$/;\n/** Equivalent to the HTML5 input[type=email] validation implemented by browsers. Source: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/email */\nexport const html5Email = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n/** The classic emailregex.com regex for RFC 5322-compliant emails */\nexport const rfc5322Email = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n/** A loose regex that allows Unicode characters, enforces length limits, and that's about it. */\nexport const unicodeEmail = /^[^\\s@\"]{1,64}@[^\\s@]{1,255}$/u;\nexport const browserEmail = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression\nexport const _emoji = `^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$`;\nexport function emoji() {\n    return new RegExp(_emoji, \"u\");\n}\nexport const ipv4 = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;\nexport const ipv6 = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|::|([0-9a-fA-F]{1,4})?::([0-9a-fA-F]{1,4}:?){0,6})$/;\nexport const cidrv4 = /^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/([0-9]|[1-2][0-9]|3[0-2])$/;\nexport const cidrv6 = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|::|([0-9a-fA-F]{1,4})?::([0-9a-fA-F]{1,4}:?){0,6})\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/;\n// https://stackoverflow.com/questions/7860392/determine-if-string-is-in-base64-using-javascript\nexport const base64 = /^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$/;\nexport const base64url = /^[A-Za-z0-9_-]*$/;\n// based on https://stackoverflow.com/questions/106179/regular-expression-to-match-dns-hostname-or-ip-address\n// export const hostname: RegExp =\n//   /^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\\-]*[a-zA-Z0-9])\\.)+([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\\-]*[A-Za-z0-9])$/;\nexport const hostname = /^([a-zA-Z0-9-]+\\.)*[a-zA-Z0-9-]+$/;\nexport const domain = /^([a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\\.)+[a-zA-Z]{2,}$/;\n// https://blog.stevenlevithan.com/archives/validate-phone-number#r4-3 (regex sans spaces)\nexport const e164 = /^\\+(?:[0-9]){6,14}[0-9]$/;\n// const dateSource = `((\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\\\d|30)|(02)-(0[1-9]|1\\\\d|2[0-8])))`;\nconst dateSource = `(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))`;\nexport const date = /*@__PURE__*/ new RegExp(`^${dateSource}$`);\nfunction timeSource(args) {\n    const hhmm = `(?:[01]\\\\d|2[0-3]):[0-5]\\\\d`;\n    const regex = typeof args.precision === \"number\"\n        ? args.precision === -1\n            ? `${hhmm}`\n            : args.precision === 0\n                ? `${hhmm}:[0-5]\\\\d`\n                : `${hhmm}:[0-5]\\\\d\\\\.\\\\d{${args.precision}}`\n        : `${hhmm}(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?`;\n    return regex;\n}\nexport function time(args) {\n    return new RegExp(`^${timeSource(args)}$`);\n}\n// Adapted from https://stackoverflow.com/a/3143231\nexport function datetime(args) {\n    const time = timeSource({ precision: args.precision });\n    const opts = [\"Z\"];\n    if (args.local)\n        opts.push(\"\");\n    if (args.offset)\n        opts.push(`([+-]\\\\d{2}:\\\\d{2})`);\n    const timeRegex = `${time}(?:${opts.join(\"|\")})`;\n    return new RegExp(`^${dateSource}T(?:${timeRegex})$`);\n}\nexport const string = (params) => {\n    const regex = params ? `[\\\\s\\\\S]{${params?.minimum ?? 0},${params?.maximum ?? \"\"}}` : `[\\\\s\\\\S]*`;\n    return new RegExp(`^${regex}$`);\n};\nexport const bigint = /^\\d+n?$/;\nexport const integer = /^\\d+$/;\nexport const number = /^-?\\d+(?:\\.\\d+)?/i;\nexport const boolean = /true|false/i;\nconst _null = /null/i;\nexport { _null as null };\nconst _undefined = /undefined/i;\nexport { _undefined as undefined };\n// regex for string with no uppercase letters\nexport const lowercase = /^[^A-Z]*$/;\n// regex for string with no lowercase letters\nexport const uppercase = /^[^a-z]*$/;\n", "// import { $ZodType } from \"./schemas.js\";\nimport * as core from \"./core.js\";\nimport * as regexes from \"./regexes.js\";\nimport * as util from \"./util.js\";\nexport const $ZodCheck = /*@__PURE__*/ core.$constructor(\"$ZodCheck\", (inst, def) => {\n    var _a;\n    inst._zod ?? (inst._zod = {});\n    inst._zod.def = def;\n    (_a = inst._zod).onattach ?? (_a.onattach = []);\n});\nconst numericOriginMap = {\n    number: \"number\",\n    bigint: \"bigint\",\n    object: \"date\",\n};\nexport const $ZodCheckLessThan = /*@__PURE__*/ core.$constructor(\"$ZodCheckLessThan\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const origin = numericOriginMap[typeof def.value];\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        const curr = (def.inclusive ? bag.maximum : bag.exclusiveMaximum) ?? Number.POSITIVE_INFINITY;\n        if (def.value < curr) {\n            if (def.inclusive)\n                bag.maximum = def.value;\n            else\n                bag.exclusiveMaximum = def.value;\n        }\n    });\n    inst._zod.check = (payload) => {\n        if (def.inclusive ? payload.value <= def.value : payload.value < def.value) {\n            return;\n        }\n        payload.issues.push({\n            origin,\n            code: \"too_big\",\n            maximum: def.value,\n            input: payload.value,\n            inclusive: def.inclusive,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckGreaterThan = /*@__PURE__*/ core.$constructor(\"$ZodCheckGreaterThan\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const origin = numericOriginMap[typeof def.value];\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        const curr = (def.inclusive ? bag.minimum : bag.exclusiveMinimum) ?? Number.NEGATIVE_INFINITY;\n        if (def.value > curr) {\n            if (def.inclusive)\n                bag.minimum = def.value;\n            else\n                bag.exclusiveMinimum = def.value;\n        }\n    });\n    inst._zod.check = (payload) => {\n        if (def.inclusive ? payload.value >= def.value : payload.value > def.value) {\n            return;\n        }\n        payload.issues.push({\n            origin,\n            code: \"too_small\",\n            minimum: def.value,\n            input: payload.value,\n            inclusive: def.inclusive,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckMultipleOf = \n/*@__PURE__*/ core.$constructor(\"$ZodCheckMultipleOf\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    inst._zod.onattach.push((inst) => {\n        var _a;\n        (_a = inst._zod.bag).multipleOf ?? (_a.multipleOf = def.value);\n    });\n    inst._zod.check = (payload) => {\n        if (typeof payload.value !== typeof def.value)\n            throw new Error(\"Cannot mix number and bigint in multiple_of check.\");\n        const isMultiple = typeof payload.value === \"bigint\"\n            ? payload.value % def.value === BigInt(0)\n            : util.floatSafeRemainder(payload.value, def.value) === 0;\n        if (isMultiple)\n            return;\n        payload.issues.push({\n            origin: typeof payload.value,\n            code: \"not_multiple_of\",\n            divisor: def.value,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckNumberFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckNumberFormat\", (inst, def) => {\n    $ZodCheck.init(inst, def); // no format checks\n    def.format = def.format || \"float64\";\n    const isInt = def.format?.includes(\"int\");\n    const origin = isInt ? \"int\" : \"number\";\n    const [minimum, maximum] = util.NUMBER_FORMAT_RANGES[def.format];\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.format = def.format;\n        bag.minimum = minimum;\n        bag.maximum = maximum;\n        if (isInt)\n            bag.pattern = regexes.integer;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        if (isInt) {\n            if (!Number.isInteger(input)) {\n                // invalid_format issue\n                // payload.issues.push({\n                //   expected: def.format,\n                //   format: def.format,\n                //   code: \"invalid_format\",\n                //   input,\n                //   inst,\n                // });\n                // invalid_type issue\n                payload.issues.push({\n                    expected: origin,\n                    format: def.format,\n                    code: \"invalid_type\",\n                    input,\n                    inst,\n                });\n                return;\n                // not_multiple_of issue\n                // payload.issues.push({\n                //   code: \"not_multiple_of\",\n                //   origin: \"number\",\n                //   input,\n                //   inst,\n                //   divisor: 1,\n                // });\n            }\n            if (!Number.isSafeInteger(input)) {\n                if (input > 0) {\n                    // too_big\n                    payload.issues.push({\n                        input,\n                        code: \"too_big\",\n                        maximum: Number.MAX_SAFE_INTEGER,\n                        note: \"Integers must be within the safe integer range.\",\n                        inst,\n                        origin,\n                        continue: !def.abort,\n                    });\n                }\n                else {\n                    // too_small\n                    payload.issues.push({\n                        input,\n                        code: \"too_small\",\n                        minimum: Number.MIN_SAFE_INTEGER,\n                        note: \"Integers must be within the safe integer range.\",\n                        inst,\n                        origin,\n                        continue: !def.abort,\n                    });\n                }\n                return;\n            }\n        }\n        if (input < minimum) {\n            payload.issues.push({\n                origin: \"number\",\n                input,\n                code: \"too_small\",\n                minimum,\n                inclusive: true,\n                inst,\n                continue: !def.abort,\n            });\n        }\n        if (input > maximum) {\n            payload.issues.push({\n                origin: \"number\",\n                input,\n                code: \"too_big\",\n                maximum,\n                inst,\n            });\n        }\n    };\n});\nexport const $ZodCheckBigIntFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckBigIntFormat\", (inst, def) => {\n    $ZodCheck.init(inst, def); // no format checks\n    const [minimum, maximum] = util.BIGINT_FORMAT_RANGES[def.format];\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.format = def.format;\n        bag.minimum = minimum;\n        bag.maximum = maximum;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        if (input < minimum) {\n            payload.issues.push({\n                origin: \"bigint\",\n                input,\n                code: \"too_small\",\n                minimum: minimum,\n                inclusive: true,\n                inst,\n                continue: !def.abort,\n            });\n        }\n        if (input > maximum) {\n            payload.issues.push({\n                origin: \"bigint\",\n                input,\n                code: \"too_big\",\n                maximum,\n                inst,\n            });\n        }\n    };\n});\nexport const $ZodCheckMaxSize = /*@__PURE__*/ core.$constructor(\"$ZodCheckMaxSize\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n        const val = payload.value;\n        return !util.nullish(val) && val.size !== undefined;\n    });\n    inst._zod.onattach.push((inst) => {\n        const curr = (inst._zod.bag.maximum ?? Number.POSITIVE_INFINITY);\n        if (def.maximum < curr)\n            inst._zod.bag.maximum = def.maximum;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const size = input.size;\n        if (size <= def.maximum)\n            return;\n        payload.issues.push({\n            origin: util.getSizableOrigin(input),\n            code: \"too_big\",\n            maximum: def.maximum,\n            input,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckMinSize = /*@__PURE__*/ core.$constructor(\"$ZodCheckMinSize\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n        const val = payload.value;\n        return !util.nullish(val) && val.size !== undefined;\n    });\n    inst._zod.onattach.push((inst) => {\n        const curr = (inst._zod.bag.minimum ?? Number.NEGATIVE_INFINITY);\n        if (def.minimum > curr)\n            inst._zod.bag.minimum = def.minimum;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const size = input.size;\n        if (size >= def.minimum)\n            return;\n        payload.issues.push({\n            origin: util.getSizableOrigin(input),\n            code: \"too_small\",\n            minimum: def.minimum,\n            input,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckSizeEquals = /*@__PURE__*/ core.$constructor(\"$ZodCheckSizeEquals\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n        const val = payload.value;\n        return !util.nullish(val) && val.size !== undefined;\n    });\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.minimum = def.size;\n        bag.maximum = def.size;\n        bag.size = def.size;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const size = input.size;\n        if (size === def.size)\n            return;\n        const tooBig = size > def.size;\n        payload.issues.push({\n            origin: util.getSizableOrigin(input),\n            ...(tooBig ? { code: \"too_big\", maximum: def.size } : { code: \"too_small\", minimum: def.size }),\n            inclusive: true,\n            exact: true,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckMaxLength = /*@__PURE__*/ core.$constructor(\"$ZodCheckMaxLength\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n        const val = payload.value;\n        return !util.nullish(val) && val.length !== undefined;\n    });\n    inst._zod.onattach.push((inst) => {\n        const curr = (inst._zod.bag.maximum ?? Number.POSITIVE_INFINITY);\n        if (def.maximum < curr)\n            inst._zod.bag.maximum = def.maximum;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const length = input.length;\n        if (length <= def.maximum)\n            return;\n        const origin = util.getLengthableOrigin(input);\n        payload.issues.push({\n            origin,\n            code: \"too_big\",\n            maximum: def.maximum,\n            inclusive: true,\n            input,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckMinLength = /*@__PURE__*/ core.$constructor(\"$ZodCheckMinLength\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n        const val = payload.value;\n        return !util.nullish(val) && val.length !== undefined;\n    });\n    inst._zod.onattach.push((inst) => {\n        const curr = (inst._zod.bag.minimum ?? Number.NEGATIVE_INFINITY);\n        if (def.minimum > curr)\n            inst._zod.bag.minimum = def.minimum;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const length = input.length;\n        if (length >= def.minimum)\n            return;\n        const origin = util.getLengthableOrigin(input);\n        payload.issues.push({\n            origin,\n            code: \"too_small\",\n            minimum: def.minimum,\n            inclusive: true,\n            input,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckLengthEquals = /*@__PURE__*/ core.$constructor(\"$ZodCheckLengthEquals\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n        const val = payload.value;\n        return !util.nullish(val) && val.length !== undefined;\n    });\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.minimum = def.length;\n        bag.maximum = def.length;\n        bag.length = def.length;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const length = input.length;\n        if (length === def.length)\n            return;\n        const origin = util.getLengthableOrigin(input);\n        const tooBig = length > def.length;\n        payload.issues.push({\n            origin,\n            ...(tooBig ? { code: \"too_big\", maximum: def.length } : { code: \"too_small\", minimum: def.length }),\n            inclusive: true,\n            exact: true,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckStringFormat\", (inst, def) => {\n    var _a, _b;\n    $ZodCheck.init(inst, def);\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.format = def.format;\n        if (def.pattern) {\n            bag.patterns ?? (bag.patterns = new Set());\n            bag.patterns.add(def.pattern);\n        }\n    });\n    if (def.pattern)\n        (_a = inst._zod).check ?? (_a.check = (payload) => {\n            def.pattern.lastIndex = 0;\n            if (def.pattern.test(payload.value))\n                return;\n            payload.issues.push({\n                origin: \"string\",\n                code: \"invalid_format\",\n                format: def.format,\n                input: payload.value,\n                ...(def.pattern ? { pattern: def.pattern.toString() } : {}),\n                inst,\n                continue: !def.abort,\n            });\n        });\n    else\n        (_b = inst._zod).check ?? (_b.check = () => { });\n});\nexport const $ZodCheckRegex = /*@__PURE__*/ core.$constructor(\"$ZodCheckRegex\", (inst, def) => {\n    $ZodCheckStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        def.pattern.lastIndex = 0;\n        if (def.pattern.test(payload.value))\n            return;\n        payload.issues.push({\n            origin: \"string\",\n            code: \"invalid_format\",\n            format: \"regex\",\n            input: payload.value,\n            pattern: def.pattern.toString(),\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckLowerCase = /*@__PURE__*/ core.$constructor(\"$ZodCheckLowerCase\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.lowercase);\n    $ZodCheckStringFormat.init(inst, def);\n});\nexport const $ZodCheckUpperCase = /*@__PURE__*/ core.$constructor(\"$ZodCheckUpperCase\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.uppercase);\n    $ZodCheckStringFormat.init(inst, def);\n});\nexport const $ZodCheckIncludes = /*@__PURE__*/ core.$constructor(\"$ZodCheckIncludes\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const escapedRegex = util.escapeRegex(def.includes);\n    const pattern = new RegExp(typeof def.position === \"number\" ? `^.{${def.position}}${escapedRegex}` : escapedRegex);\n    def.pattern = pattern;\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.patterns ?? (bag.patterns = new Set());\n        bag.patterns.add(pattern);\n    });\n    inst._zod.check = (payload) => {\n        if (payload.value.includes(def.includes, def.position))\n            return;\n        payload.issues.push({\n            origin: \"string\",\n            code: \"invalid_format\",\n            format: \"includes\",\n            includes: def.includes,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckStartsWith = /*@__PURE__*/ core.$constructor(\"$ZodCheckStartsWith\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const pattern = new RegExp(`^${util.escapeRegex(def.prefix)}.*`);\n    def.pattern ?? (def.pattern = pattern);\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.patterns ?? (bag.patterns = new Set());\n        bag.patterns.add(pattern);\n    });\n    inst._zod.check = (payload) => {\n        if (payload.value.startsWith(def.prefix))\n            return;\n        payload.issues.push({\n            origin: \"string\",\n            code: \"invalid_format\",\n            format: \"starts_with\",\n            prefix: def.prefix,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckEndsWith = /*@__PURE__*/ core.$constructor(\"$ZodCheckEndsWith\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const pattern = new RegExp(`.*${util.escapeRegex(def.suffix)}$`);\n    def.pattern ?? (def.pattern = pattern);\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.patterns ?? (bag.patterns = new Set());\n        bag.patterns.add(pattern);\n    });\n    inst._zod.check = (payload) => {\n        if (payload.value.endsWith(def.suffix))\n            return;\n        payload.issues.push({\n            origin: \"string\",\n            code: \"invalid_format\",\n            format: \"ends_with\",\n            suffix: def.suffix,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\n///////////////////////////////////\n/////    $ZodCheckProperty    /////\n///////////////////////////////////\nfunction handleCheckPropertyResult(result, payload, property) {\n    if (result.issues.length) {\n        payload.issues.push(...util.prefixIssues(property, result.issues));\n    }\n}\nexport const $ZodCheckProperty = /*@__PURE__*/ core.$constructor(\"$ZodCheckProperty\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    inst._zod.check = (payload) => {\n        const result = def.schema._zod.run({\n            value: payload.value[def.property],\n            issues: [],\n        }, {});\n        if (result instanceof Promise) {\n            return result.then((result) => handleCheckPropertyResult(result, payload, def.property));\n        }\n        handleCheckPropertyResult(result, payload, def.property);\n        return;\n    };\n});\nexport const $ZodCheckMimeType = /*@__PURE__*/ core.$constructor(\"$ZodCheckMimeType\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const mimeSet = new Set(def.mime);\n    inst._zod.onattach.push((inst) => {\n        inst._zod.bag.mime = def.mime;\n    });\n    inst._zod.check = (payload) => {\n        if (mimeSet.has(payload.value.type))\n            return;\n        payload.issues.push({\n            code: \"invalid_value\",\n            values: def.mime,\n            input: payload.value.type,\n            inst,\n        });\n    };\n});\nexport const $ZodCheckOverwrite = /*@__PURE__*/ core.$constructor(\"$ZodCheckOverwrite\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    inst._zod.check = (payload) => {\n        payload.value = def.tx(payload.value);\n    };\n});\n", "export class Doc {\n    constructor(args = []) {\n        this.content = [];\n        this.indent = 0;\n        if (this)\n            this.args = args;\n    }\n    indented(fn) {\n        this.indent += 1;\n        fn(this);\n        this.indent -= 1;\n    }\n    write(arg) {\n        if (typeof arg === \"function\") {\n            arg(this, { execution: \"sync\" });\n            arg(this, { execution: \"async\" });\n            return;\n        }\n        const content = arg;\n        const lines = content.split(\"\\n\").filter((x) => x);\n        const minIndent = Math.min(...lines.map((x) => x.length - x.trimStart().length));\n        const dedented = lines.map((x) => x.slice(minIndent)).map((x) => \" \".repeat(this.indent * 2) + x);\n        for (const line of dedented) {\n            this.content.push(line);\n        }\n    }\n    compile() {\n        const F = Function;\n        const args = this?.args;\n        const content = this?.content ?? [``];\n        const lines = [...content.map((x) => `  ${x}`)];\n        // console.log(lines.join(\"\\n\"));\n        return new F(...args, lines.join(\"\\n\"));\n    }\n}\n", "export const version = {\n    major: 4,\n    minor: 0,\n    patch: 0,\n};\n", "import * as checks from \"./checks.js\";\nimport * as core from \"./core.js\";\nimport { Doc } from \"./doc.js\";\nimport { safeParse, safeParseAsync } from \"./parse.js\";\nimport * as regexes from \"./regexes.js\";\nimport * as util from \"./util.js\";\nimport { version } from \"./versions.js\";\nexport const $ZodType = /*@__PURE__*/ core.$constructor(\"$ZodType\", (inst, def) => {\n    var _a;\n    inst ?? (inst = {});\n    inst._zod.def = def; // set _def property\n    inst._zod.bag = inst._zod.bag || {}; // initialize _bag object\n    inst._zod.version = version;\n    const checks = [...(inst._zod.def.checks ?? [])];\n    // if inst is itself a checks.$ZodCheck, run it as a check\n    if (inst._zod.traits.has(\"$ZodCheck\")) {\n        checks.unshift(inst);\n    }\n    //\n    for (const ch of checks) {\n        for (const fn of ch._zod.onattach) {\n            fn(inst);\n        }\n    }\n    if (checks.length === 0) {\n        // deferred initializer\n        // inst._zod.parse is not yet defined\n        (_a = inst._zod).deferred ?? (_a.deferred = []);\n        inst._zod.deferred?.push(() => {\n            inst._zod.run = inst._zod.parse;\n        });\n    }\n    else {\n        const runChecks = (payload, checks, ctx) => {\n            let isAborted = util.aborted(payload);\n            let asyncResult;\n            for (const ch of checks) {\n                if (ch._zod.def.when) {\n                    const shouldRun = ch._zod.def.when(payload);\n                    if (!shouldRun)\n                        continue;\n                }\n                else if (isAborted) {\n                    continue;\n                }\n                const currLen = payload.issues.length;\n                const _ = ch._zod.check(payload);\n                if (_ instanceof Promise && ctx?.async === false) {\n                    throw new core.$ZodAsyncError();\n                }\n                if (asyncResult || _ instanceof Promise) {\n                    asyncResult = (asyncResult ?? Promise.resolve()).then(async () => {\n                        await _;\n                        const nextLen = payload.issues.length;\n                        if (nextLen === currLen)\n                            return;\n                        if (!isAborted)\n                            isAborted = util.aborted(payload, currLen);\n                    });\n                }\n                else {\n                    const nextLen = payload.issues.length;\n                    if (nextLen === currLen)\n                        continue;\n                    if (!isAborted)\n                        isAborted = util.aborted(payload, currLen);\n                }\n            }\n            if (asyncResult) {\n                return asyncResult.then(() => {\n                    return payload;\n                });\n            }\n            return payload;\n        };\n        inst._zod.run = (payload, ctx) => {\n            const result = inst._zod.parse(payload, ctx);\n            if (result instanceof Promise) {\n                if (ctx.async === false)\n                    throw new core.$ZodAsyncError();\n                return result.then((result) => runChecks(result, checks, ctx));\n            }\n            return runChecks(result, checks, ctx);\n        };\n    }\n    inst[\"~standard\"] = {\n        validate: (value) => {\n            try {\n                const r = safeParse(inst, value);\n                return r.success ? { value: r.data } : { issues: r.error?.issues };\n            }\n            catch (_) {\n                return safeParseAsync(inst, value).then((r) => (r.success ? { value: r.data } : { issues: r.error?.issues }));\n            }\n        },\n        vendor: \"zod\",\n        version: 1,\n    };\n});\nexport { clone } from \"./util.js\";\nexport const $ZodString = /*@__PURE__*/ core.$constructor(\"$ZodString\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.pattern = [...(inst?._zod.bag?.patterns ?? [])].pop() ?? regexes.string(inst._zod.bag);\n    inst._zod.parse = (payload, _) => {\n        if (def.coerce)\n            try {\n                payload.value = String(payload.value);\n            }\n            catch (_) { }\n        if (typeof payload.value === \"string\")\n            return payload;\n        payload.issues.push({\n            expected: \"string\",\n            code: \"invalid_type\",\n            input: payload.value,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodStringFormat\", (inst, def) => {\n    // check initialization must come first\n    checks.$ZodCheckStringFormat.init(inst, def);\n    $ZodString.init(inst, def);\n});\nexport const $ZodGUID = /*@__PURE__*/ core.$constructor(\"$ZodGUID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.guid);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodUUID = /*@__PURE__*/ core.$constructor(\"$ZodUUID\", (inst, def) => {\n    if (def.version) {\n        const versionMap = {\n            v1: 1,\n            v2: 2,\n            v3: 3,\n            v4: 4,\n            v5: 5,\n            v6: 6,\n            v7: 7,\n            v8: 8,\n        };\n        const v = versionMap[def.version];\n        if (v === undefined)\n            throw new Error(`Invalid UUID version: \"${def.version}\"`);\n        def.pattern ?? (def.pattern = regexes.uuid(v));\n    }\n    else\n        def.pattern ?? (def.pattern = regexes.uuid());\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodEmail = /*@__PURE__*/ core.$constructor(\"$ZodEmail\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.email);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodURL = /*@__PURE__*/ core.$constructor(\"$ZodURL\", (inst, def) => {\n    $ZodStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        try {\n            const orig = payload.value;\n            const url = new URL(orig);\n            const href = url.href;\n            if (def.hostname) {\n                def.hostname.lastIndex = 0;\n                if (!def.hostname.test(url.hostname)) {\n                    payload.issues.push({\n                        code: \"invalid_format\",\n                        format: \"url\",\n                        note: \"Invalid hostname\",\n                        pattern: regexes.hostname.source,\n                        input: payload.value,\n                        inst,\n                        continue: !def.abort,\n                    });\n                }\n            }\n            if (def.protocol) {\n                def.protocol.lastIndex = 0;\n                if (!def.protocol.test(url.protocol.endsWith(\":\") ? url.protocol.slice(0, -1) : url.protocol)) {\n                    payload.issues.push({\n                        code: \"invalid_format\",\n                        format: \"url\",\n                        note: \"Invalid protocol\",\n                        pattern: def.protocol.source,\n                        input: payload.value,\n                        inst,\n                        continue: !def.abort,\n                    });\n                }\n            }\n            // payload.value = url.href;\n            if (!orig.endsWith(\"/\") && href.endsWith(\"/\")) {\n                payload.value = href.slice(0, -1);\n            }\n            else {\n                payload.value = href;\n            }\n            return;\n        }\n        catch (_) {\n            payload.issues.push({\n                code: \"invalid_format\",\n                format: \"url\",\n                input: payload.value,\n                inst,\n                continue: !def.abort,\n            });\n        }\n    };\n});\nexport const $ZodEmoji = /*@__PURE__*/ core.$constructor(\"$ZodEmoji\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.emoji());\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodNanoID = /*@__PURE__*/ core.$constructor(\"$ZodNanoID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.nanoid);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodCUID = /*@__PURE__*/ core.$constructor(\"$ZodCUID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.cuid);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodCUID2 = /*@__PURE__*/ core.$constructor(\"$ZodCUID2\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.cuid2);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodULID = /*@__PURE__*/ core.$constructor(\"$ZodULID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.ulid);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodXID = /*@__PURE__*/ core.$constructor(\"$ZodXID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.xid);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodKSUID = /*@__PURE__*/ core.$constructor(\"$ZodKSUID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.ksuid);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISODateTime = /*@__PURE__*/ core.$constructor(\"$ZodISODateTime\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.datetime(def));\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISODate = /*@__PURE__*/ core.$constructor(\"$ZodISODate\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.date);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISOTime = /*@__PURE__*/ core.$constructor(\"$ZodISOTime\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.time(def));\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISODuration = /*@__PURE__*/ core.$constructor(\"$ZodISODuration\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.duration);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodIPv4 = /*@__PURE__*/ core.$constructor(\"$ZodIPv4\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.ipv4);\n    $ZodStringFormat.init(inst, def);\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.format = `ipv4`;\n    });\n});\nexport const $ZodIPv6 = /*@__PURE__*/ core.$constructor(\"$ZodIPv6\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.ipv6);\n    $ZodStringFormat.init(inst, def);\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.format = `ipv6`;\n    });\n    inst._zod.check = (payload) => {\n        try {\n            new URL(`http://[${payload.value}]`);\n            // return;\n        }\n        catch {\n            payload.issues.push({\n                code: \"invalid_format\",\n                format: \"ipv6\",\n                input: payload.value,\n                inst,\n                continue: !def.abort,\n            });\n        }\n    };\n});\nexport const $ZodCIDRv4 = /*@__PURE__*/ core.$constructor(\"$ZodCIDRv4\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.cidrv4);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodCIDRv6 = /*@__PURE__*/ core.$constructor(\"$ZodCIDRv6\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.cidrv6); // not used for validation\n    $ZodStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        const [address, prefix] = payload.value.split(\"/\");\n        try {\n            if (!prefix)\n                throw new Error();\n            const prefixNum = Number(prefix);\n            if (`${prefixNum}` !== prefix)\n                throw new Error();\n            if (prefixNum < 0 || prefixNum > 128)\n                throw new Error();\n            new URL(`http://[${address}]`);\n        }\n        catch {\n            payload.issues.push({\n                code: \"invalid_format\",\n                format: \"cidrv6\",\n                input: payload.value,\n                inst,\n                continue: !def.abort,\n            });\n        }\n    };\n});\n//////////////////////////////   ZodBase64   //////////////////////////////\nexport function isValidBase64(data) {\n    if (data === \"\")\n        return true;\n    if (data.length % 4 !== 0)\n        return false;\n    try {\n        atob(data);\n        return true;\n    }\n    catch {\n        return false;\n    }\n}\nexport const $ZodBase64 = /*@__PURE__*/ core.$constructor(\"$ZodBase64\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.base64);\n    $ZodStringFormat.init(inst, def);\n    inst._zod.onattach.push((inst) => {\n        inst._zod.bag.contentEncoding = \"base64\";\n    });\n    inst._zod.check = (payload) => {\n        if (isValidBase64(payload.value))\n            return;\n        payload.issues.push({\n            code: \"invalid_format\",\n            format: \"base64\",\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\n//////////////////////////////   ZodBase64   //////////////////////////////\nexport function isValidBase64URL(data) {\n    if (!regexes.base64url.test(data))\n        return false;\n    const base64 = data.replace(/[-_]/g, (c) => (c === \"-\" ? \"+\" : \"/\"));\n    const padded = base64.padEnd(Math.ceil(base64.length / 4) * 4, \"=\");\n    return isValidBase64(padded);\n}\nexport const $ZodBase64URL = /*@__PURE__*/ core.$constructor(\"$ZodBase64URL\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.base64url);\n    $ZodStringFormat.init(inst, def);\n    inst._zod.onattach.push((inst) => {\n        inst._zod.bag.contentEncoding = \"base64url\";\n    });\n    inst._zod.check = (payload) => {\n        if (isValidBase64URL(payload.value))\n            return;\n        payload.issues.push({\n            code: \"invalid_format\",\n            format: \"base64url\",\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodE164 = /*@__PURE__*/ core.$constructor(\"$ZodE164\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.e164);\n    $ZodStringFormat.init(inst, def);\n});\n//////////////////////////////   ZodJWT   //////////////////////////////\nexport function isValidJWT(token, algorithm = null) {\n    try {\n        const tokensParts = token.split(\".\");\n        if (tokensParts.length !== 3)\n            return false;\n        const [header] = tokensParts;\n        if (!header)\n            return false;\n        const parsedHeader = JSON.parse(atob(header));\n        if (\"typ\" in parsedHeader && parsedHeader?.typ !== \"JWT\")\n            return false;\n        if (!parsedHeader.alg)\n            return false;\n        if (algorithm && (!(\"alg\" in parsedHeader) || parsedHeader.alg !== algorithm))\n            return false;\n        return true;\n    }\n    catch {\n        return false;\n    }\n}\nexport const $ZodJWT = /*@__PURE__*/ core.$constructor(\"$ZodJWT\", (inst, def) => {\n    $ZodStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        if (isValidJWT(payload.value, def.alg))\n            return;\n        payload.issues.push({\n            code: \"invalid_format\",\n            format: \"jwt\",\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCustomStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodCustomStringFormat\", (inst, def) => {\n    $ZodStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        if (def.fn(payload.value))\n            return;\n        payload.issues.push({\n            code: \"invalid_format\",\n            format: def.format,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodNumber = /*@__PURE__*/ core.$constructor(\"$ZodNumber\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.pattern = inst._zod.bag.pattern ?? regexes.number;\n    inst._zod.parse = (payload, _ctx) => {\n        if (def.coerce)\n            try {\n                payload.value = Number(payload.value);\n            }\n            catch (_) { }\n        const input = payload.value;\n        if (typeof input === \"number\" && !Number.isNaN(input) && Number.isFinite(input)) {\n            return payload;\n        }\n        const received = typeof input === \"number\"\n            ? Number.isNaN(input)\n                ? \"NaN\"\n                : !Number.isFinite(input)\n                    ? \"Infinity\"\n                    : undefined\n            : undefined;\n        payload.issues.push({\n            expected: \"number\",\n            code: \"invalid_type\",\n            input,\n            inst,\n            ...(received ? { received } : {}),\n        });\n        return payload;\n    };\n});\nexport const $ZodNumberFormat = /*@__PURE__*/ core.$constructor(\"$ZodNumber\", (inst, def) => {\n    checks.$ZodCheckNumberFormat.init(inst, def);\n    $ZodNumber.init(inst, def); // no format checksp\n});\nexport const $ZodBoolean = /*@__PURE__*/ core.$constructor(\"$ZodBoolean\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.pattern = regexes.boolean;\n    inst._zod.parse = (payload, _ctx) => {\n        if (def.coerce)\n            try {\n                payload.value = Boolean(payload.value);\n            }\n            catch (_) { }\n        const input = payload.value;\n        if (typeof input === \"boolean\")\n            return payload;\n        payload.issues.push({\n            expected: \"boolean\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodBigInt = /*@__PURE__*/ core.$constructor(\"$ZodBigInt\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.pattern = regexes.bigint;\n    inst._zod.parse = (payload, _ctx) => {\n        if (def.coerce)\n            try {\n                payload.value = BigInt(payload.value);\n            }\n            catch (_) { }\n        if (typeof payload.value === \"bigint\")\n            return payload;\n        payload.issues.push({\n            expected: \"bigint\",\n            code: \"invalid_type\",\n            input: payload.value,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodBigIntFormat = /*@__PURE__*/ core.$constructor(\"$ZodBigInt\", (inst, def) => {\n    checks.$ZodCheckBigIntFormat.init(inst, def);\n    $ZodBigInt.init(inst, def); // no format checks\n});\nexport const $ZodSymbol = /*@__PURE__*/ core.$constructor(\"$ZodSymbol\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (typeof input === \"symbol\")\n            return payload;\n        payload.issues.push({\n            expected: \"symbol\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodUndefined = /*@__PURE__*/ core.$constructor(\"$ZodUndefined\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.pattern = regexes.undefined;\n    inst._zod.values = new Set([undefined]);\n    inst._zod.optin = \"optional\";\n    inst._zod.optout = \"optional\";\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (typeof input === \"undefined\")\n            return payload;\n        payload.issues.push({\n            expected: \"undefined\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodNull = /*@__PURE__*/ core.$constructor(\"$ZodNull\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.pattern = regexes.null;\n    inst._zod.values = new Set([null]);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (input === null)\n            return payload;\n        payload.issues.push({\n            expected: \"null\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodAny = /*@__PURE__*/ core.$constructor(\"$ZodAny\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload) => payload;\n});\nexport const $ZodUnknown = /*@__PURE__*/ core.$constructor(\"$ZodUnknown\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload) => payload;\n});\nexport const $ZodNever = /*@__PURE__*/ core.$constructor(\"$ZodNever\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        payload.issues.push({\n            expected: \"never\",\n            code: \"invalid_type\",\n            input: payload.value,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodVoid = /*@__PURE__*/ core.$constructor(\"$ZodVoid\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (typeof input === \"undefined\")\n            return payload;\n        payload.issues.push({\n            expected: \"void\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodDate = /*@__PURE__*/ core.$constructor(\"$ZodDate\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        if (def.coerce) {\n            try {\n                payload.value = new Date(payload.value);\n            }\n            catch (_err) { }\n        }\n        const input = payload.value;\n        const isDate = input instanceof Date;\n        const isValidDate = isDate && !Number.isNaN(input.getTime());\n        if (isValidDate)\n            return payload;\n        payload.issues.push({\n            expected: \"date\",\n            code: \"invalid_type\",\n            input,\n            ...(isDate ? { received: \"Invalid Date\" } : {}),\n            inst,\n        });\n        return payload;\n    };\n});\nfunction handleArrayResult(result, final, index) {\n    if (result.issues.length) {\n        final.issues.push(...util.prefixIssues(index, result.issues));\n    }\n    final.value[index] = result.value;\n}\nexport const $ZodArray = /*@__PURE__*/ core.$constructor(\"$ZodArray\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!Array.isArray(input)) {\n            payload.issues.push({\n                expected: \"array\",\n                code: \"invalid_type\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        payload.value = Array(input.length);\n        const proms = [];\n        for (let i = 0; i < input.length; i++) {\n            const item = input[i];\n            const result = def.element._zod.run({\n                value: item,\n                issues: [],\n            }, ctx);\n            if (result instanceof Promise) {\n                proms.push(result.then((result) => handleArrayResult(result, payload, i)));\n            }\n            else {\n                handleArrayResult(result, payload, i);\n            }\n        }\n        if (proms.length) {\n            return Promise.all(proms).then(() => payload);\n        }\n        return payload; //handleArrayResultsAsync(parseResults, final);\n    };\n});\nfunction handleObjectResult(result, final, key) {\n    // if(isOptional)\n    if (result.issues.length) {\n        final.issues.push(...util.prefixIssues(key, result.issues));\n    }\n    final.value[key] = result.value;\n}\nfunction handleOptionalObjectResult(result, final, key, input) {\n    if (result.issues.length) {\n        // validation failed against value schema\n        if (input[key] === undefined) {\n            // if input was undefined, ignore the error\n            if (key in input) {\n                final.value[key] = undefined;\n            }\n            else {\n                final.value[key] = result.value;\n            }\n        }\n        else {\n            final.issues.push(...util.prefixIssues(key, result.issues));\n        }\n    }\n    else if (result.value === undefined) {\n        // validation returned `undefined`\n        if (key in input)\n            final.value[key] = undefined;\n    }\n    else {\n        // non-undefined value\n        final.value[key] = result.value;\n    }\n}\nexport const $ZodObject = /*@__PURE__*/ core.$constructor(\"$ZodObject\", (inst, def) => {\n    // requires cast because technically $ZodObject doesn't extend\n    $ZodType.init(inst, def);\n    const _normalized = util.cached(() => {\n        const keys = Object.keys(def.shape);\n        for (const k of keys) {\n            if (!(def.shape[k] instanceof $ZodType)) {\n                throw new Error(`Invalid element at key \"${k}\": expected a Zod schema`);\n            }\n        }\n        const okeys = util.optionalKeys(def.shape);\n        return {\n            shape: def.shape,\n            keys,\n            keySet: new Set(keys),\n            numKeys: keys.length,\n            optionalKeys: new Set(okeys),\n        };\n    });\n    util.defineLazy(inst._zod, \"propValues\", () => {\n        const shape = def.shape;\n        const propValues = {};\n        for (const key in shape) {\n            const field = shape[key]._zod;\n            if (field.values) {\n                propValues[key] ?? (propValues[key] = new Set());\n                for (const v of field.values)\n                    propValues[key].add(v);\n            }\n        }\n        return propValues;\n    });\n    const generateFastpass = (shape) => {\n        const doc = new Doc([\"shape\", \"payload\", \"ctx\"]);\n        const normalized = _normalized.value;\n        const parseStr = (key) => {\n            const k = util.esc(key);\n            return `shape[${k}]._zod.run({ value: input[${k}], issues: [] }, ctx)`;\n        };\n        doc.write(`const input = payload.value;`);\n        const ids = Object.create(null);\n        let counter = 0;\n        for (const key of normalized.keys) {\n            ids[key] = `key_${counter++}`;\n        }\n        // A: preserve key order {\n        doc.write(`const newResult = {}`);\n        for (const key of normalized.keys) {\n            if (normalized.optionalKeys.has(key)) {\n                const id = ids[key];\n                doc.write(`const ${id} = ${parseStr(key)};`);\n                const k = util.esc(key);\n                doc.write(`\n        if (${id}.issues.length) {\n          if (input[${k}] === undefined) {\n            if (${k} in input) {\n              newResult[${k}] = undefined;\n            }\n          } else {\n            payload.issues = payload.issues.concat(\n              ${id}.issues.map((iss) => ({\n                ...iss,\n                path: iss.path ? [${k}, ...iss.path] : [${k}],\n              }))\n            );\n          }\n        } else if (${id}.value === undefined) {\n          if (${k} in input) newResult[${k}] = undefined;\n        } else {\n          newResult[${k}] = ${id}.value;\n        }\n        `);\n            }\n            else {\n                const id = ids[key];\n                //  const id = ids[key];\n                doc.write(`const ${id} = ${parseStr(key)};`);\n                doc.write(`\n          if (${id}.issues.length) payload.issues = payload.issues.concat(${id}.issues.map(iss => ({\n            ...iss,\n            path: iss.path ? [${util.esc(key)}, ...iss.path] : [${util.esc(key)}]\n          })));`);\n                doc.write(`newResult[${util.esc(key)}] = ${id}.value`);\n            }\n        }\n        doc.write(`payload.value = newResult;`);\n        doc.write(`return payload;`);\n        const fn = doc.compile();\n        return (payload, ctx) => fn(shape, payload, ctx);\n    };\n    let fastpass;\n    const isObject = util.isObject;\n    const jit = !core.globalConfig.jitless;\n    const allowsEval = util.allowsEval;\n    const fastEnabled = jit && allowsEval.value; // && !def.catchall;\n    const catchall = def.catchall;\n    let value;\n    inst._zod.parse = (payload, ctx) => {\n        value ?? (value = _normalized.value);\n        const input = payload.value;\n        if (!isObject(input)) {\n            payload.issues.push({\n                expected: \"object\",\n                code: \"invalid_type\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        const proms = [];\n        if (jit && fastEnabled && ctx?.async === false && ctx.jitless !== true) {\n            // always synchronous\n            if (!fastpass)\n                fastpass = generateFastpass(def.shape);\n            payload = fastpass(payload, ctx);\n        }\n        else {\n            payload.value = {};\n            const shape = value.shape;\n            for (const key of value.keys) {\n                const el = shape[key];\n                // do not add omitted optional keys\n                // if (!(key in input)) {\n                //   if (optionalKeys.has(key)) continue;\n                //   payload.issues.push({\n                //     code: \"invalid_type\",\n                //     path: [key],\n                //     expected: \"nonoptional\",\n                //     note: `Missing required key: \"${key}\"`,\n                //     input,\n                //     inst,\n                //   });\n                // }\n                const r = el._zod.run({ value: input[key], issues: [] }, ctx);\n                const isOptional = el._zod.optin === \"optional\" && el._zod.optout === \"optional\";\n                if (r instanceof Promise) {\n                    proms.push(r.then((r) => isOptional ? handleOptionalObjectResult(r, payload, key, input) : handleObjectResult(r, payload, key)));\n                }\n                else if (isOptional) {\n                    handleOptionalObjectResult(r, payload, key, input);\n                }\n                else {\n                    handleObjectResult(r, payload, key);\n                }\n            }\n        }\n        if (!catchall) {\n            // return payload;\n            return proms.length ? Promise.all(proms).then(() => payload) : payload;\n        }\n        const unrecognized = [];\n        // iterate over input keys\n        const keySet = value.keySet;\n        const _catchall = catchall._zod;\n        const t = _catchall.def.type;\n        for (const key of Object.keys(input)) {\n            if (keySet.has(key))\n                continue;\n            if (t === \"never\") {\n                unrecognized.push(key);\n                continue;\n            }\n            const r = _catchall.run({ value: input[key], issues: [] }, ctx);\n            if (r instanceof Promise) {\n                proms.push(r.then((r) => handleObjectResult(r, payload, key)));\n            }\n            else {\n                handleObjectResult(r, payload, key);\n            }\n        }\n        if (unrecognized.length) {\n            payload.issues.push({\n                code: \"unrecognized_keys\",\n                keys: unrecognized,\n                input,\n                inst,\n            });\n        }\n        if (!proms.length)\n            return payload;\n        return Promise.all(proms).then(() => {\n            return payload;\n        });\n    };\n});\nfunction handleUnionResults(results, final, inst, ctx) {\n    for (const result of results) {\n        if (result.issues.length === 0) {\n            final.value = result.value;\n            return final;\n        }\n    }\n    final.issues.push({\n        code: \"invalid_union\",\n        input: final.value,\n        inst,\n        errors: results.map((result) => result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n    });\n    return final;\n}\nexport const $ZodUnion = /*@__PURE__*/ core.$constructor(\"$ZodUnion\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazy(inst._zod, \"optin\", () => def.options.some((o) => o._zod.optin === \"optional\") ? \"optional\" : undefined);\n    util.defineLazy(inst._zod, \"optout\", () => def.options.some((o) => o._zod.optout === \"optional\") ? \"optional\" : undefined);\n    util.defineLazy(inst._zod, \"values\", () => {\n        if (def.options.every((o) => o._zod.values)) {\n            return new Set(def.options.flatMap((option) => Array.from(option._zod.values)));\n        }\n        return undefined;\n    });\n    util.defineLazy(inst._zod, \"pattern\", () => {\n        if (def.options.every((o) => o._zod.pattern)) {\n            const patterns = def.options.map((o) => o._zod.pattern);\n            return new RegExp(`^(${patterns.map((p) => util.cleanRegex(p.source)).join(\"|\")})$`);\n        }\n        return undefined;\n    });\n    inst._zod.parse = (payload, ctx) => {\n        let async = false;\n        const results = [];\n        for (const option of def.options) {\n            const result = option._zod.run({\n                value: payload.value,\n                issues: [],\n            }, ctx);\n            if (result instanceof Promise) {\n                results.push(result);\n                async = true;\n            }\n            else {\n                if (result.issues.length === 0)\n                    return result;\n                results.push(result);\n            }\n        }\n        if (!async)\n            return handleUnionResults(results, payload, inst, ctx);\n        return Promise.all(results).then((results) => {\n            return handleUnionResults(results, payload, inst, ctx);\n        });\n    };\n});\nexport const $ZodDiscriminatedUnion = \n/*@__PURE__*/\ncore.$constructor(\"$ZodDiscriminatedUnion\", (inst, def) => {\n    $ZodUnion.init(inst, def);\n    const _super = inst._zod.parse;\n    util.defineLazy(inst._zod, \"propValues\", () => {\n        const propValues = {};\n        for (const option of def.options) {\n            const pv = option._zod.propValues;\n            if (!pv || Object.keys(pv).length === 0)\n                throw new Error(`Invalid discriminated union option at index \"${def.options.indexOf(option)}\"`);\n            for (const [k, v] of Object.entries(pv)) {\n                if (!propValues[k])\n                    propValues[k] = new Set();\n                for (const val of v) {\n                    propValues[k].add(val);\n                }\n            }\n        }\n        return propValues;\n    });\n    const disc = util.cached(() => {\n        const opts = def.options;\n        const map = new Map();\n        for (const o of opts) {\n            const values = o._zod.propValues[def.discriminator];\n            if (!values || values.size === 0)\n                throw new Error(`Invalid discriminated union option at index \"${def.options.indexOf(o)}\"`);\n            for (const v of values) {\n                if (map.has(v)) {\n                    throw new Error(`Duplicate discriminator value \"${String(v)}\"`);\n                }\n                map.set(v, o);\n            }\n        }\n        return map;\n    });\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!util.isObject(input)) {\n            payload.issues.push({\n                code: \"invalid_type\",\n                expected: \"object\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        const opt = disc.value.get(input?.[def.discriminator]);\n        if (opt) {\n            return opt._zod.run(payload, ctx);\n        }\n        if (def.unionFallback) {\n            return _super(payload, ctx);\n        }\n        // no matching discriminator\n        payload.issues.push({\n            code: \"invalid_union\",\n            errors: [],\n            note: \"No matching discriminator\",\n            input,\n            path: [def.discriminator],\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodIntersection = /*@__PURE__*/ core.$constructor(\"$ZodIntersection\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        const left = def.left._zod.run({ value: input, issues: [] }, ctx);\n        const right = def.right._zod.run({ value: input, issues: [] }, ctx);\n        const async = left instanceof Promise || right instanceof Promise;\n        if (async) {\n            return Promise.all([left, right]).then(([left, right]) => {\n                return handleIntersectionResults(payload, left, right);\n            });\n        }\n        return handleIntersectionResults(payload, left, right);\n    };\n});\nfunction mergeValues(a, b) {\n    // const aType = parse.t(a);\n    // const bType = parse.t(b);\n    if (a === b) {\n        return { valid: true, data: a };\n    }\n    if (a instanceof Date && b instanceof Date && +a === +b) {\n        return { valid: true, data: a };\n    }\n    if (util.isPlainObject(a) && util.isPlainObject(b)) {\n        const bKeys = Object.keys(b);\n        const sharedKeys = Object.keys(a).filter((key) => bKeys.indexOf(key) !== -1);\n        const newObj = { ...a, ...b };\n        for (const key of sharedKeys) {\n            const sharedValue = mergeValues(a[key], b[key]);\n            if (!sharedValue.valid) {\n                return {\n                    valid: false,\n                    mergeErrorPath: [key, ...sharedValue.mergeErrorPath],\n                };\n            }\n            newObj[key] = sharedValue.data;\n        }\n        return { valid: true, data: newObj };\n    }\n    if (Array.isArray(a) && Array.isArray(b)) {\n        if (a.length !== b.length) {\n            return { valid: false, mergeErrorPath: [] };\n        }\n        const newArray = [];\n        for (let index = 0; index < a.length; index++) {\n            const itemA = a[index];\n            const itemB = b[index];\n            const sharedValue = mergeValues(itemA, itemB);\n            if (!sharedValue.valid) {\n                return {\n                    valid: false,\n                    mergeErrorPath: [index, ...sharedValue.mergeErrorPath],\n                };\n            }\n            newArray.push(sharedValue.data);\n        }\n        return { valid: true, data: newArray };\n    }\n    return { valid: false, mergeErrorPath: [] };\n}\nfunction handleIntersectionResults(result, left, right) {\n    if (left.issues.length) {\n        result.issues.push(...left.issues);\n    }\n    if (right.issues.length) {\n        result.issues.push(...right.issues);\n    }\n    if (util.aborted(result))\n        return result;\n    const merged = mergeValues(left.value, right.value);\n    if (!merged.valid) {\n        throw new Error(`Unmergable intersection. Error path: ` + `${JSON.stringify(merged.mergeErrorPath)}`);\n    }\n    result.value = merged.data;\n    return result;\n}\nexport const $ZodTuple = /*@__PURE__*/ core.$constructor(\"$ZodTuple\", (inst, def) => {\n    $ZodType.init(inst, def);\n    const items = def.items;\n    const optStart = items.length - [...items].reverse().findIndex((item) => item._zod.optin !== \"optional\");\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!Array.isArray(input)) {\n            payload.issues.push({\n                input,\n                inst,\n                expected: \"tuple\",\n                code: \"invalid_type\",\n            });\n            return payload;\n        }\n        payload.value = [];\n        const proms = [];\n        if (!def.rest) {\n            const tooBig = input.length > items.length;\n            const tooSmall = input.length < optStart - 1;\n            if (tooBig || tooSmall) {\n                payload.issues.push({\n                    input,\n                    inst,\n                    origin: \"array\",\n                    ...(tooBig ? { code: \"too_big\", maximum: items.length } : { code: \"too_small\", minimum: items.length }),\n                });\n                return payload;\n            }\n        }\n        let i = -1;\n        for (const item of items) {\n            i++;\n            if (i >= input.length)\n                if (i >= optStart)\n                    continue;\n            const result = item._zod.run({\n                value: input[i],\n                issues: [],\n            }, ctx);\n            if (result instanceof Promise) {\n                proms.push(result.then((result) => handleTupleResult(result, payload, i)));\n            }\n            else {\n                handleTupleResult(result, payload, i);\n            }\n        }\n        if (def.rest) {\n            const rest = input.slice(items.length);\n            for (const el of rest) {\n                i++;\n                const result = def.rest._zod.run({\n                    value: el,\n                    issues: [],\n                }, ctx);\n                if (result instanceof Promise) {\n                    proms.push(result.then((result) => handleTupleResult(result, payload, i)));\n                }\n                else {\n                    handleTupleResult(result, payload, i);\n                }\n            }\n        }\n        if (proms.length)\n            return Promise.all(proms).then(() => payload);\n        return payload;\n    };\n});\nfunction handleTupleResult(result, final, index) {\n    if (result.issues.length) {\n        final.issues.push(...util.prefixIssues(index, result.issues));\n    }\n    final.value[index] = result.value;\n}\nexport const $ZodRecord = /*@__PURE__*/ core.$constructor(\"$ZodRecord\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!util.isPlainObject(input)) {\n            payload.issues.push({\n                expected: \"record\",\n                code: \"invalid_type\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        const proms = [];\n        if (def.keyType._zod.values) {\n            const values = def.keyType._zod.values;\n            payload.value = {};\n            for (const key of values) {\n                if (typeof key === \"string\" || typeof key === \"number\" || typeof key === \"symbol\") {\n                    const result = def.valueType._zod.run({ value: input[key], issues: [] }, ctx);\n                    if (result instanceof Promise) {\n                        proms.push(result.then((result) => {\n                            if (result.issues.length) {\n                                payload.issues.push(...util.prefixIssues(key, result.issues));\n                            }\n                            payload.value[key] = result.value;\n                        }));\n                    }\n                    else {\n                        if (result.issues.length) {\n                            payload.issues.push(...util.prefixIssues(key, result.issues));\n                        }\n                        payload.value[key] = result.value;\n                    }\n                }\n            }\n            let unrecognized;\n            for (const key in input) {\n                if (!values.has(key)) {\n                    unrecognized = unrecognized ?? [];\n                    unrecognized.push(key);\n                }\n            }\n            if (unrecognized && unrecognized.length > 0) {\n                payload.issues.push({\n                    code: \"unrecognized_keys\",\n                    input,\n                    inst,\n                    keys: unrecognized,\n                });\n            }\n        }\n        else {\n            payload.value = {};\n            for (const key of Reflect.ownKeys(input)) {\n                if (key === \"__proto__\")\n                    continue;\n                const keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx);\n                if (keyResult instanceof Promise) {\n                    throw new Error(\"Async schemas not supported in object keys currently\");\n                }\n                if (keyResult.issues.length) {\n                    payload.issues.push({\n                        origin: \"record\",\n                        code: \"invalid_key\",\n                        issues: keyResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n                        input: key,\n                        path: [key],\n                        inst,\n                    });\n                    payload.value[keyResult.value] = keyResult.value;\n                    continue;\n                }\n                const result = def.valueType._zod.run({ value: input[key], issues: [] }, ctx);\n                if (result instanceof Promise) {\n                    proms.push(result.then((result) => {\n                        if (result.issues.length) {\n                            payload.issues.push(...util.prefixIssues(key, result.issues));\n                        }\n                        payload.value[keyResult.value] = result.value;\n                    }));\n                }\n                else {\n                    if (result.issues.length) {\n                        payload.issues.push(...util.prefixIssues(key, result.issues));\n                    }\n                    payload.value[keyResult.value] = result.value;\n                }\n            }\n        }\n        if (proms.length) {\n            return Promise.all(proms).then(() => payload);\n        }\n        return payload;\n    };\n});\nexport const $ZodMap = /*@__PURE__*/ core.$constructor(\"$ZodMap\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!(input instanceof Map)) {\n            payload.issues.push({\n                expected: \"map\",\n                code: \"invalid_type\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        const proms = [];\n        payload.value = new Map();\n        for (const [key, value] of input) {\n            const keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx);\n            const valueResult = def.valueType._zod.run({ value: value, issues: [] }, ctx);\n            if (keyResult instanceof Promise || valueResult instanceof Promise) {\n                proms.push(Promise.all([keyResult, valueResult]).then(([keyResult, valueResult]) => {\n                    handleMapResult(keyResult, valueResult, payload, key, input, inst, ctx);\n                }));\n            }\n            else {\n                handleMapResult(keyResult, valueResult, payload, key, input, inst, ctx);\n            }\n        }\n        if (proms.length)\n            return Promise.all(proms).then(() => payload);\n        return payload;\n    };\n});\nfunction handleMapResult(keyResult, valueResult, final, key, input, inst, ctx) {\n    if (keyResult.issues.length) {\n        if (util.propertyKeyTypes.has(typeof key)) {\n            final.issues.push(...util.prefixIssues(key, keyResult.issues));\n        }\n        else {\n            final.issues.push({\n                origin: \"map\",\n                code: \"invalid_key\",\n                input,\n                inst,\n                issues: keyResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n            });\n        }\n    }\n    if (valueResult.issues.length) {\n        if (util.propertyKeyTypes.has(typeof key)) {\n            final.issues.push(...util.prefixIssues(key, valueResult.issues));\n        }\n        else {\n            final.issues.push({\n                origin: \"map\",\n                code: \"invalid_element\",\n                input,\n                inst,\n                key: key,\n                issues: valueResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n            });\n        }\n    }\n    final.value.set(keyResult.value, valueResult.value);\n}\nexport const $ZodSet = /*@__PURE__*/ core.$constructor(\"$ZodSet\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!(input instanceof Set)) {\n            payload.issues.push({\n                input,\n                inst,\n                expected: \"set\",\n                code: \"invalid_type\",\n            });\n            return payload;\n        }\n        const proms = [];\n        payload.value = new Set();\n        for (const item of input) {\n            const result = def.valueType._zod.run({ value: item, issues: [] }, ctx);\n            if (result instanceof Promise) {\n                proms.push(result.then((result) => handleSetResult(result, payload)));\n            }\n            else\n                handleSetResult(result, payload);\n        }\n        if (proms.length)\n            return Promise.all(proms).then(() => payload);\n        return payload;\n    };\n});\nfunction handleSetResult(result, final) {\n    if (result.issues.length) {\n        final.issues.push(...result.issues);\n    }\n    final.value.add(result.value);\n}\nexport const $ZodEnum = /*@__PURE__*/ core.$constructor(\"$ZodEnum\", (inst, def) => {\n    $ZodType.init(inst, def);\n    const values = util.getEnumValues(def.entries);\n    inst._zod.values = new Set(values);\n    inst._zod.pattern = new RegExp(`^(${values\n        .filter((k) => util.propertyKeyTypes.has(typeof k))\n        .map((o) => (typeof o === \"string\" ? util.escapeRegex(o) : o.toString()))\n        .join(\"|\")})$`);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (inst._zod.values.has(input)) {\n            return payload;\n        }\n        payload.issues.push({\n            code: \"invalid_value\",\n            values,\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodLiteral = /*@__PURE__*/ core.$constructor(\"$ZodLiteral\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.values = new Set(def.values);\n    inst._zod.pattern = new RegExp(`^(${def.values\n        .map((o) => (typeof o === \"string\" ? util.escapeRegex(o) : o ? o.toString() : String(o)))\n        .join(\"|\")})$`);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (inst._zod.values.has(input)) {\n            return payload;\n        }\n        payload.issues.push({\n            code: \"invalid_value\",\n            values: def.values,\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodFile = /*@__PURE__*/ core.$constructor(\"$ZodFile\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (input instanceof File)\n            return payload;\n        payload.issues.push({\n            expected: \"file\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodTransform = /*@__PURE__*/ core.$constructor(\"$ZodTransform\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        const _out = def.transform(payload.value, payload);\n        if (_ctx.async) {\n            const output = _out instanceof Promise ? _out : Promise.resolve(_out);\n            return output.then((output) => {\n                payload.value = output;\n                return payload;\n            });\n        }\n        if (_out instanceof Promise) {\n            throw new core.$ZodAsyncError();\n        }\n        payload.value = _out;\n        return payload;\n    };\n});\nexport const $ZodOptional = /*@__PURE__*/ core.$constructor(\"$ZodOptional\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.optin = \"optional\";\n    inst._zod.optout = \"optional\";\n    util.defineLazy(inst._zod, \"values\", () => {\n        return def.innerType._zod.values ? new Set([...def.innerType._zod.values, undefined]) : undefined;\n    });\n    util.defineLazy(inst._zod, \"pattern\", () => {\n        const pattern = def.innerType._zod.pattern;\n        return pattern ? new RegExp(`^(${util.cleanRegex(pattern.source)})?$`) : undefined;\n    });\n    inst._zod.parse = (payload, ctx) => {\n        if (def.innerType._zod.optin === \"optional\") {\n            return def.innerType._zod.run(payload, ctx);\n        }\n        if (payload.value === undefined) {\n            return payload;\n        }\n        return def.innerType._zod.run(payload, ctx);\n    };\n});\nexport const $ZodNullable = /*@__PURE__*/ core.$constructor(\"$ZodNullable\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazy(inst._zod, \"optin\", () => def.innerType._zod.optin);\n    util.defineLazy(inst._zod, \"optout\", () => def.innerType._zod.optout);\n    util.defineLazy(inst._zod, \"pattern\", () => {\n        const pattern = def.innerType._zod.pattern;\n        return pattern ? new RegExp(`^(${util.cleanRegex(pattern.source)}|null)$`) : undefined;\n    });\n    util.defineLazy(inst._zod, \"values\", () => {\n        return def.innerType._zod.values ? new Set([...def.innerType._zod.values, null]) : undefined;\n    });\n    inst._zod.parse = (payload, ctx) => {\n        if (payload.value === null)\n            return payload;\n        return def.innerType._zod.run(payload, ctx);\n    };\n});\nexport const $ZodDefault = /*@__PURE__*/ core.$constructor(\"$ZodDefault\", (inst, def) => {\n    $ZodType.init(inst, def);\n    // inst._zod.qin = \"true\";\n    inst._zod.optin = \"optional\";\n    util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n    inst._zod.parse = (payload, ctx) => {\n        if (payload.value === undefined) {\n            payload.value = def.defaultValue;\n            /**\n             * $ZodDefault always returns the default value immediately.\n             * It doesn't pass the default value into the validator (\"prefault\"). There's no reason to pass the default value through validation. The validity of the default is enforced by TypeScript statically. Otherwise, it's the responsibility of the user to ensure the default is valid. In the case of pipes with divergent in/out types, you can specify the default on the `in` schema of your ZodPipe to set a \"prefault\" for the pipe.   */\n            return payload;\n        }\n        const result = def.innerType._zod.run(payload, ctx);\n        if (result instanceof Promise) {\n            return result.then((result) => handleDefaultResult(result, def));\n        }\n        return handleDefaultResult(result, def);\n    };\n});\nfunction handleDefaultResult(payload, def) {\n    if (payload.value === undefined) {\n        payload.value = def.defaultValue;\n    }\n    return payload;\n}\nexport const $ZodPrefault = /*@__PURE__*/ core.$constructor(\"$ZodPrefault\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.optin = \"optional\";\n    util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n    inst._zod.parse = (payload, ctx) => {\n        if (payload.value === undefined) {\n            payload.value = def.defaultValue;\n        }\n        return def.innerType._zod.run(payload, ctx);\n    };\n});\nexport const $ZodNonOptional = /*@__PURE__*/ core.$constructor(\"$ZodNonOptional\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazy(inst._zod, \"values\", () => {\n        const v = def.innerType._zod.values;\n        return v ? new Set([...v].filter((x) => x !== undefined)) : undefined;\n    });\n    inst._zod.parse = (payload, ctx) => {\n        const result = def.innerType._zod.run(payload, ctx);\n        if (result instanceof Promise) {\n            return result.then((result) => handleNonOptionalResult(result, inst));\n        }\n        return handleNonOptionalResult(result, inst);\n    };\n});\nfunction handleNonOptionalResult(payload, inst) {\n    if (!payload.issues.length && payload.value === undefined) {\n        payload.issues.push({\n            code: \"invalid_type\",\n            expected: \"nonoptional\",\n            input: payload.value,\n            inst,\n        });\n    }\n    return payload;\n}\nexport const $ZodSuccess = /*@__PURE__*/ core.$constructor(\"$ZodSuccess\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        const result = def.innerType._zod.run(payload, ctx);\n        if (result instanceof Promise) {\n            return result.then((result) => {\n                payload.value = result.issues.length === 0;\n                return payload;\n            });\n        }\n        payload.value = result.issues.length === 0;\n        return payload;\n    };\n});\nexport const $ZodCatch = /*@__PURE__*/ core.$constructor(\"$ZodCatch\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.optin = \"optional\";\n    util.defineLazy(inst._zod, \"optout\", () => def.innerType._zod.optout);\n    util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n    inst._zod.parse = (payload, ctx) => {\n        const result = def.innerType._zod.run(payload, ctx);\n        if (result instanceof Promise) {\n            return result.then((result) => {\n                payload.value = result.value;\n                if (result.issues.length) {\n                    payload.value = def.catchValue({\n                        ...payload,\n                        error: {\n                            issues: result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n                        },\n                        input: payload.value,\n                    });\n                    payload.issues = [];\n                }\n                return payload;\n            });\n        }\n        payload.value = result.value;\n        if (result.issues.length) {\n            payload.value = def.catchValue({\n                ...payload,\n                error: {\n                    issues: result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n                },\n                input: payload.value,\n            });\n            payload.issues = [];\n        }\n        return payload;\n    };\n});\nexport const $ZodNaN = /*@__PURE__*/ core.$constructor(\"$ZodNaN\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        if (typeof payload.value !== \"number\" || !Number.isNaN(payload.value)) {\n            payload.issues.push({\n                input: payload.value,\n                inst,\n                expected: \"nan\",\n                code: \"invalid_type\",\n            });\n            return payload;\n        }\n        return payload;\n    };\n});\nexport const $ZodPipe = /*@__PURE__*/ core.$constructor(\"$ZodPipe\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazy(inst._zod, \"values\", () => def.in._zod.values);\n    util.defineLazy(inst._zod, \"optin\", () => def.in._zod.optin);\n    util.defineLazy(inst._zod, \"optout\", () => def.out._zod.optout);\n    inst._zod.parse = (payload, ctx) => {\n        const left = def.in._zod.run(payload, ctx);\n        if (left instanceof Promise) {\n            return left.then((left) => handlePipeResult(left, def, ctx));\n        }\n        return handlePipeResult(left, def, ctx);\n    };\n});\nfunction handlePipeResult(left, def, ctx) {\n    if (util.aborted(left)) {\n        return left;\n    }\n    return def.out._zod.run({ value: left.value, issues: left.issues }, ctx);\n}\nexport const $ZodReadonly = /*@__PURE__*/ core.$constructor(\"$ZodReadonly\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazy(inst._zod, \"propValues\", () => def.innerType._zod.propValues);\n    util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n    util.defineLazy(inst._zod, \"optin\", () => def.innerType._zod.optin);\n    util.defineLazy(inst._zod, \"optout\", () => def.innerType._zod.optout);\n    inst._zod.parse = (payload, ctx) => {\n        const result = def.innerType._zod.run(payload, ctx);\n        if (result instanceof Promise) {\n            return result.then(handleReadonlyResult);\n        }\n        return handleReadonlyResult(result);\n    };\n});\nfunction handleReadonlyResult(payload) {\n    payload.value = Object.freeze(payload.value);\n    return payload;\n}\nexport const $ZodTemplateLiteral = /*@__PURE__*/ core.$constructor(\"$ZodTemplateLiteral\", (inst, def) => {\n    $ZodType.init(inst, def);\n    const regexParts = [];\n    for (const part of def.parts) {\n        if (part instanceof $ZodType) {\n            if (!part._zod.pattern) {\n                // if (!source)\n                throw new Error(`Invalid template literal part, no pattern found: ${[...part._zod.traits].shift()}`);\n            }\n            const source = part._zod.pattern instanceof RegExp ? part._zod.pattern.source : part._zod.pattern;\n            if (!source)\n                throw new Error(`Invalid template literal part: ${part._zod.traits}`);\n            const start = source.startsWith(\"^\") ? 1 : 0;\n            const end = source.endsWith(\"$\") ? source.length - 1 : source.length;\n            regexParts.push(source.slice(start, end));\n        }\n        else if (part === null || util.primitiveTypes.has(typeof part)) {\n            regexParts.push(util.escapeRegex(`${part}`));\n        }\n        else {\n            throw new Error(`Invalid template literal part: ${part}`);\n        }\n    }\n    inst._zod.pattern = new RegExp(`^${regexParts.join(\"\")}$`);\n    inst._zod.parse = (payload, _ctx) => {\n        if (typeof payload.value !== \"string\") {\n            payload.issues.push({\n                input: payload.value,\n                inst,\n                expected: \"template_literal\",\n                code: \"invalid_type\",\n            });\n            return payload;\n        }\n        inst._zod.pattern.lastIndex = 0;\n        if (!inst._zod.pattern.test(payload.value)) {\n            payload.issues.push({\n                input: payload.value,\n                inst,\n                code: \"invalid_format\",\n                format: \"template_literal\",\n                pattern: inst._zod.pattern.source,\n            });\n            return payload;\n        }\n        return payload;\n    };\n});\nexport const $ZodPromise = /*@__PURE__*/ core.$constructor(\"$ZodPromise\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        return Promise.resolve(payload.value).then((inner) => def.innerType._zod.run({ value: inner, issues: [] }, ctx));\n    };\n});\nexport const $ZodLazy = /*@__PURE__*/ core.$constructor(\"$ZodLazy\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazy(inst._zod, \"innerType\", () => def.getter());\n    util.defineLazy(inst._zod, \"pattern\", () => inst._zod.innerType._zod.pattern);\n    util.defineLazy(inst._zod, \"propValues\", () => inst._zod.innerType._zod.propValues);\n    util.defineLazy(inst._zod, \"optin\", () => inst._zod.innerType._zod.optin);\n    util.defineLazy(inst._zod, \"optout\", () => inst._zod.innerType._zod.optout);\n    inst._zod.parse = (payload, ctx) => {\n        const inner = inst._zod.innerType;\n        return inner._zod.run(payload, ctx);\n    };\n});\nexport const $ZodCustom = /*@__PURE__*/ core.$constructor(\"$ZodCustom\", (inst, def) => {\n    checks.$ZodCheck.init(inst, def);\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _) => {\n        return payload;\n    };\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const r = def.fn(input);\n        if (r instanceof Promise) {\n            return r.then((r) => handleRefineResult(r, payload, input, inst));\n        }\n        handleRefineResult(r, payload, input, inst);\n        return;\n    };\n});\nfunction handleRefineResult(result, payload, input, inst) {\n    if (!result) {\n        const _iss = {\n            code: \"custom\",\n            input,\n            inst, // incorporates params.error into issue reporting\n            path: [...(inst._zod.def.path ?? [])], // incorporates params.error into issue reporting\n            continue: !inst._zod.def.abort,\n            // params: inst._zod.def.params,\n        };\n        if (inst._zod.def.params)\n            _iss.params = inst._zod.def.params;\n        payload.issues.push(util.issue(_iss));\n    }\n}\n", "import * as util from \"../core/util.js\";\nexport const parsedType = (data) => {\n    const t = typeof data;\n    switch (t) {\n        case \"number\": {\n            return Number.isNaN(data) ? \"NaN\" : \"number\";\n        }\n        case \"object\": {\n            if (Array.isArray(data)) {\n                return \"array\";\n            }\n            if (data === null) {\n                return \"null\";\n            }\n            if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {\n                return data.constructor.name;\n            }\n        }\n    }\n    return t;\n};\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"characters\", verb: \"to have\" },\n        file: { unit: \"bytes\", verb: \"to have\" },\n        array: { unit: \"items\", verb: \"to have\" },\n        set: { unit: \"items\", verb: \"to have\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const Nouns = {\n        regex: \"input\",\n        email: \"email address\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO datetime\",\n        date: \"ISO date\",\n        time: \"ISO time\",\n        duration: \"ISO duration\",\n        ipv4: \"IPv4 address\",\n        ipv6: \"IPv6 address\",\n        cidrv4: \"IPv4 range\",\n        cidrv6: \"IPv6 range\",\n        base64: \"base64-encoded string\",\n        base64url: \"base64url-encoded string\",\n        json_string: \"JSON string\",\n        e164: \"E.164 number\",\n        jwt: \"JWT\",\n        template_literal: \"input\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\":\n                return `Invalid input: expected ${issue.expected}, received ${parsedType(issue.input)}`;\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Invalid input: expected ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Invalid option: expected one of ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Too big: expected ${issue.origin ?? \"value\"} to have ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elements\"}`;\n                return `Too big: expected ${issue.origin ?? \"value\"} to be ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Too small: expected ${issue.origin} to have ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Too small: expected ${issue.origin} to be ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `Invalid string: must start with \"${_issue.prefix}\"`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `Invalid string: must end with \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Invalid string: must include \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Invalid string: must match pattern ${_issue.pattern}`;\n                return `Invalid ${Nouns[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Invalid number: must be a multiple of ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Unrecognized key${issue.keys.length > 1 ? \"s\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Invalid key in ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Invalid input\";\n            case \"invalid_element\":\n                return `Invalid value in ${issue.origin}`;\n            default:\n                return `Invalid input`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "export const $output = Symbol(\"ZodOutput\");\nexport const $input = Symbol(\"ZodInput\");\nexport class $ZodRegistry {\n    constructor() {\n        this._map = new Map();\n        this._idmap = new Map();\n    }\n    add(schema, ..._meta) {\n        const meta = _meta[0];\n        this._map.set(schema, meta);\n        if (meta && typeof meta === \"object\" && \"id\" in meta) {\n            if (this._idmap.has(meta.id)) {\n                throw new Error(`ID ${meta.id} already exists in the registry`);\n            }\n            this._idmap.set(meta.id, schema);\n        }\n        return this;\n    }\n    clear() {\n        this._map = new Map();\n        this._idmap = new Map();\n        return this;\n    }\n    remove(schema) {\n        const meta = this._map.get(schema);\n        if (meta && typeof meta === \"object\" && \"id\" in meta) {\n            this._idmap.delete(meta.id);\n        }\n        this._map.delete(schema);\n        return this;\n    }\n    get(schema) {\n        // return this._map.get(schema) as any;\n        // inherit metadata\n        const p = schema._zod.parent;\n        if (p) {\n            const pm = { ...(this.get(p) ?? {}) };\n            delete pm.id; // do not inherit id\n            return { ...pm, ...this._map.get(schema) };\n        }\n        return this._map.get(schema);\n    }\n    has(schema) {\n        return this._map.has(schema);\n    }\n}\n// registries\nexport function registry() {\n    return new $ZodRegistry();\n}\nexport const globalRegistry = /*@__PURE__*/ registry();\n", "import * as checks from \"./checks.js\";\nimport * as schemas from \"./schemas.js\";\nimport * as util from \"./util.js\";\nexport function _string(Class, params) {\n    return new Class({\n        type: \"string\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _coercedString(Class, params) {\n    return new Class({\n        type: \"string\",\n        coerce: true,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _email(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"email\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _guid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"guid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _uuid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"uuid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _uuidv4(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"uuid\",\n        check: \"string_format\",\n        abort: false,\n        version: \"v4\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _uuidv6(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"uuid\",\n        check: \"string_format\",\n        abort: false,\n        version: \"v6\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _uuidv7(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"uuid\",\n        check: \"string_format\",\n        abort: false,\n        version: \"v7\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _url(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"url\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _emoji(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"emoji\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _nanoid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"nanoid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _cuid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"cuid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _cuid2(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"cuid2\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _ulid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"ulid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _xid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"xid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _ksuid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"ksuid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _ipv4(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"ipv4\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _ipv6(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"ipv6\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _cidrv4(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"cidrv4\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _cidrv6(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"cidrv6\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _base64(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"base64\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _base64url(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"base64url\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _e164(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"e164\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _jwt(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"jwt\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport const TimePrecision = {\n    Any: null,\n    Minute: -1,\n    Second: 0,\n    Millisecond: 3,\n    Microsecond: 6,\n};\nexport function _isoDateTime(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"datetime\",\n        check: \"string_format\",\n        offset: false,\n        local: false,\n        precision: null,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _isoDate(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"date\",\n        check: \"string_format\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _isoTime(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"time\",\n        check: \"string_format\",\n        precision: null,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _isoDuration(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"duration\",\n        check: \"string_format\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _number(Class, params) {\n    return new Class({\n        type: \"number\",\n        checks: [],\n        ...util.normalizeParams(params),\n    });\n}\nexport function _coercedNumber(Class, params) {\n    return new Class({\n        type: \"number\",\n        coerce: true,\n        checks: [],\n        ...util.normalizeParams(params),\n    });\n}\nexport function _int(Class, params) {\n    return new Class({\n        type: \"number\",\n        check: \"number_format\",\n        abort: false,\n        format: \"safeint\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _float32(Class, params) {\n    return new Class({\n        type: \"number\",\n        check: \"number_format\",\n        abort: false,\n        format: \"float32\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _float64(Class, params) {\n    return new Class({\n        type: \"number\",\n        check: \"number_format\",\n        abort: false,\n        format: \"float64\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _int32(Class, params) {\n    return new Class({\n        type: \"number\",\n        check: \"number_format\",\n        abort: false,\n        format: \"int32\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _uint32(Class, params) {\n    return new Class({\n        type: \"number\",\n        check: \"number_format\",\n        abort: false,\n        format: \"uint32\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _boolean(Class, params) {\n    return new Class({\n        type: \"boolean\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _coercedBoolean(Class, params) {\n    return new Class({\n        type: \"boolean\",\n        coerce: true,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _bigint(Class, params) {\n    return new Class({\n        type: \"bigint\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _coercedBigint(Class, params) {\n    return new Class({\n        type: \"bigint\",\n        coerce: true,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _int64(Class, params) {\n    return new Class({\n        type: \"bigint\",\n        check: \"bigint_format\",\n        abort: false,\n        format: \"int64\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _uint64(Class, params) {\n    return new Class({\n        type: \"bigint\",\n        check: \"bigint_format\",\n        abort: false,\n        format: \"uint64\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _symbol(Class, params) {\n    return new Class({\n        type: \"symbol\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _undefined(Class, params) {\n    return new Class({\n        type: \"undefined\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _null(Class, params) {\n    return new Class({\n        type: \"null\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _any(Class) {\n    return new Class({\n        type: \"any\",\n    });\n}\nexport function _unknown(Class) {\n    return new Class({\n        type: \"unknown\",\n    });\n}\nexport function _never(Class, params) {\n    return new Class({\n        type: \"never\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _void(Class, params) {\n    return new Class({\n        type: \"void\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _date(Class, params) {\n    return new Class({\n        type: \"date\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _coercedDate(Class, params) {\n    return new Class({\n        type: \"date\",\n        coerce: true,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _nan(Class, params) {\n    return new Class({\n        type: \"nan\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _lt(value, params) {\n    return new checks.$ZodCheckLessThan({\n        check: \"less_than\",\n        ...util.normalizeParams(params),\n        value,\n        inclusive: false,\n    });\n}\nexport function _lte(value, params) {\n    return new checks.$ZodCheckLessThan({\n        check: \"less_than\",\n        ...util.normalizeParams(params),\n        value,\n        inclusive: true,\n    });\n}\nexport { \n/** @deprecated Use `z.lte()` instead. */\n_lte as _max, };\nexport function _gt(value, params) {\n    return new checks.$ZodCheckGreaterThan({\n        check: \"greater_than\",\n        ...util.normalizeParams(params),\n        value,\n        inclusive: false,\n    });\n}\nexport function _gte(value, params) {\n    return new checks.$ZodCheckGreaterThan({\n        check: \"greater_than\",\n        ...util.normalizeParams(params),\n        value,\n        inclusive: true,\n    });\n}\nexport { \n/** @deprecated Use `z.gte()` instead. */\n_gte as _min, };\nexport function _positive(params) {\n    return _gt(0, params);\n}\n// negative\nexport function _negative(params) {\n    return _lt(0, params);\n}\n// nonpositive\nexport function _nonpositive(params) {\n    return _lte(0, params);\n}\n// nonnegative\nexport function _nonnegative(params) {\n    return _gte(0, params);\n}\nexport function _multipleOf(value, params) {\n    return new checks.$ZodCheckMultipleOf({\n        check: \"multiple_of\",\n        ...util.normalizeParams(params),\n        value,\n    });\n}\nexport function _maxSize(maximum, params) {\n    return new checks.$ZodCheckMaxSize({\n        check: \"max_size\",\n        ...util.normalizeParams(params),\n        maximum,\n    });\n}\nexport function _minSize(minimum, params) {\n    return new checks.$ZodCheckMinSize({\n        check: \"min_size\",\n        ...util.normalizeParams(params),\n        minimum,\n    });\n}\nexport function _size(size, params) {\n    return new checks.$ZodCheckSizeEquals({\n        check: \"size_equals\",\n        ...util.normalizeParams(params),\n        size,\n    });\n}\nexport function _maxLength(maximum, params) {\n    const ch = new checks.$ZodCheckMaxLength({\n        check: \"max_length\",\n        ...util.normalizeParams(params),\n        maximum,\n    });\n    return ch;\n}\nexport function _minLength(minimum, params) {\n    return new checks.$ZodCheckMinLength({\n        check: \"min_length\",\n        ...util.normalizeParams(params),\n        minimum,\n    });\n}\nexport function _length(length, params) {\n    return new checks.$ZodCheckLengthEquals({\n        check: \"length_equals\",\n        ...util.normalizeParams(params),\n        length,\n    });\n}\nexport function _regex(pattern, params) {\n    return new checks.$ZodCheckRegex({\n        check: \"string_format\",\n        format: \"regex\",\n        ...util.normalizeParams(params),\n        pattern,\n    });\n}\nexport function _lowercase(params) {\n    return new checks.$ZodCheckLowerCase({\n        check: \"string_format\",\n        format: \"lowercase\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _uppercase(params) {\n    return new checks.$ZodCheckUpperCase({\n        check: \"string_format\",\n        format: \"uppercase\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _includes(includes, params) {\n    return new checks.$ZodCheckIncludes({\n        check: \"string_format\",\n        format: \"includes\",\n        ...util.normalizeParams(params),\n        includes,\n    });\n}\nexport function _startsWith(prefix, params) {\n    return new checks.$ZodCheckStartsWith({\n        check: \"string_format\",\n        format: \"starts_with\",\n        ...util.normalizeParams(params),\n        prefix,\n    });\n}\nexport function _endsWith(suffix, params) {\n    return new checks.$ZodCheckEndsWith({\n        check: \"string_format\",\n        format: \"ends_with\",\n        ...util.normalizeParams(params),\n        suffix,\n    });\n}\nexport function _property(property, schema, params) {\n    return new checks.$ZodCheckProperty({\n        check: \"property\",\n        property,\n        schema,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _mime(types, params) {\n    return new checks.$ZodCheckMimeType({\n        check: \"mime_type\",\n        mime: types,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _overwrite(tx) {\n    return new checks.$ZodCheckOverwrite({\n        check: \"overwrite\",\n        tx,\n    });\n}\n// normalize\nexport function _normalize(form) {\n    return _overwrite((input) => input.normalize(form));\n}\n// trim\nexport function _trim() {\n    return _overwrite((input) => input.trim());\n}\n// toLowerCase\nexport function _toLowerCase() {\n    return _overwrite((input) => input.toLowerCase());\n}\n// toUpperCase\nexport function _toUpperCase() {\n    return _overwrite((input) => input.toUpperCase());\n}\nexport function _array(Class, element, params) {\n    return new Class({\n        type: \"array\",\n        element,\n        // get element() {\n        //   return element;\n        // },\n        ...util.normalizeParams(params),\n    });\n}\nexport function _union(Class, options, params) {\n    return new Class({\n        type: \"union\",\n        options,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _discriminatedUnion(Class, discriminator, options, params) {\n    return new Class({\n        type: \"union\",\n        options,\n        discriminator,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _intersection(Class, left, right) {\n    return new Class({\n        type: \"intersection\",\n        left,\n        right,\n    });\n}\n// export function _tuple(\n//   Class: util.SchemaClass<schemas.$ZodTuple>,\n//   items: [],\n//   params?: string | $ZodTupleParams\n// ): schemas.$ZodTuple<[], null>;\nexport function _tuple(Class, items, _paramsOrRest, _params) {\n    const hasRest = _paramsOrRest instanceof schemas.$ZodType;\n    const params = hasRest ? _params : _paramsOrRest;\n    const rest = hasRest ? _paramsOrRest : null;\n    return new Class({\n        type: \"tuple\",\n        items,\n        rest,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _record(Class, keyType, valueType, params) {\n    return new Class({\n        type: \"record\",\n        keyType,\n        valueType,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _map(Class, keyType, valueType, params) {\n    return new Class({\n        type: \"map\",\n        keyType,\n        valueType,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _set(Class, valueType, params) {\n    return new Class({\n        type: \"set\",\n        valueType,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _enum(Class, values, params) {\n    const entries = Array.isArray(values) ? Object.fromEntries(values.map((v) => [v, v])) : values;\n    // if (Array.isArray(values)) {\n    //   for (const value of values) {\n    //     entries[value] = value;\n    //   }\n    // } else {\n    //   Object.assign(entries, values);\n    // }\n    // const entries: util.EnumLike = {};\n    // for (const val of values) {\n    //   entries[val] = val;\n    // }\n    return new Class({\n        type: \"enum\",\n        entries,\n        ...util.normalizeParams(params),\n    });\n}\n/** @deprecated This API has been merged into `z.enum()`. Use `z.enum()` instead.\n *\n * ```ts\n * enum Colors { red, green, blue }\n * z.enum(Colors);\n * ```\n */\nexport function _nativeEnum(Class, entries, params) {\n    return new Class({\n        type: \"enum\",\n        entries,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _literal(Class, value, params) {\n    return new Class({\n        type: \"literal\",\n        values: Array.isArray(value) ? value : [value],\n        ...util.normalizeParams(params),\n    });\n}\nexport function _file(Class, params) {\n    return new Class({\n        type: \"file\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _transform(Class, fn) {\n    return new Class({\n        type: \"transform\",\n        transform: fn,\n    });\n}\nexport function _optional(Class, innerType) {\n    return new Class({\n        type: \"optional\",\n        innerType,\n    });\n}\nexport function _nullable(Class, innerType) {\n    return new Class({\n        type: \"nullable\",\n        innerType,\n    });\n}\nexport function _default(Class, innerType, defaultValue) {\n    return new Class({\n        type: \"default\",\n        innerType,\n        get defaultValue() {\n            return typeof defaultValue === \"function\" ? defaultValue() : defaultValue;\n        },\n    });\n}\nexport function _nonoptional(Class, innerType, params) {\n    return new Class({\n        type: \"nonoptional\",\n        innerType,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _success(Class, innerType) {\n    return new Class({\n        type: \"success\",\n        innerType,\n    });\n}\nexport function _catch(Class, innerType, catchValue) {\n    return new Class({\n        type: \"catch\",\n        innerType,\n        catchValue: (typeof catchValue === \"function\" ? catchValue : () => catchValue),\n    });\n}\nexport function _pipe(Class, in_, out) {\n    return new Class({\n        type: \"pipe\",\n        in: in_,\n        out,\n    });\n}\nexport function _readonly(Class, innerType) {\n    return new Class({\n        type: \"readonly\",\n        innerType,\n    });\n}\nexport function _templateLiteral(Class, parts, params) {\n    return new Class({\n        type: \"template_literal\",\n        parts,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _lazy(Class, getter) {\n    return new Class({\n        type: \"lazy\",\n        getter,\n    });\n}\nexport function _promise(Class, innerType) {\n    return new Class({\n        type: \"promise\",\n        innerType,\n    });\n}\nexport function _custom(Class, fn, _params) {\n    const norm = util.normalizeParams(_params);\n    norm.abort ?? (norm.abort = true); // default to abort:false\n    const schema = new Class({\n        type: \"custom\",\n        check: \"custom\",\n        fn: fn,\n        ...norm,\n    });\n    return schema;\n}\n// export function _refine<T>(\n//   Class: util.SchemaClass<schemas.$ZodCustom>,\n//   fn: (arg: NoInfer<T>) => util.MaybeAsync<unknown>,\n//   _params: string | $ZodCustomParams = {}\n// ): checks.$ZodCheck<T> {\n//   return _custom(Class, fn, _params);\n// }\n// same as _custom but defaults to abort:false\nexport function _refine(Class, fn, _params) {\n    const schema = new Class({\n        type: \"custom\",\n        check: \"custom\",\n        fn: fn,\n        ...util.normalizeParams(_params),\n    });\n    return schema;\n}\nexport function _stringbool(Classes, _params) {\n    const params = util.normalizeParams(_params);\n    let truthyArray = params.truthy ?? [\"true\", \"1\", \"yes\", \"on\", \"y\", \"enabled\"];\n    let falsyArray = params.falsy ?? [\"false\", \"0\", \"no\", \"off\", \"n\", \"disabled\"];\n    if (params.case !== \"sensitive\") {\n        truthyArray = truthyArray.map((v) => (typeof v === \"string\" ? v.toLowerCase() : v));\n        falsyArray = falsyArray.map((v) => (typeof v === \"string\" ? v.toLowerCase() : v));\n    }\n    const truthySet = new Set(truthyArray);\n    const falsySet = new Set(falsyArray);\n    const _Pipe = Classes.Pipe ?? schemas.$ZodPipe;\n    const _Boolean = Classes.Boolean ?? schemas.$ZodBoolean;\n    const _String = Classes.String ?? schemas.$ZodString;\n    const _Transform = Classes.Transform ?? schemas.$ZodTransform;\n    const tx = new _Transform({\n        type: \"transform\",\n        transform: (input, payload) => {\n            let data = input;\n            if (params.case !== \"sensitive\")\n                data = data.toLowerCase();\n            if (truthySet.has(data)) {\n                return true;\n            }\n            else if (falsySet.has(data)) {\n                return false;\n            }\n            else {\n                payload.issues.push({\n                    code: \"invalid_value\",\n                    expected: \"stringbool\",\n                    values: [...truthySet, ...falsySet],\n                    input: payload.value,\n                    inst: tx,\n                });\n                return {};\n            }\n        },\n        error: params.error,\n    });\n    // params.error;\n    const innerPipe = new _Pipe({\n        type: \"pipe\",\n        in: new _String({ type: \"string\", error: params.error }),\n        out: tx,\n        error: params.error,\n    });\n    const outerPipe = new _Pipe({\n        type: \"pipe\",\n        in: innerPipe,\n        out: new _Boolean({\n            type: \"boolean\",\n            error: params.error,\n        }),\n        error: params.error,\n    });\n    return outerPipe;\n}\nexport function _stringFormat(Class, format, fnOrRegex, _params = {}) {\n    const params = util.normalizeParams(_params);\n    const def = {\n        ...util.normalizeParams(_params),\n        check: \"string_format\",\n        type: \"string\",\n        format,\n        fn: typeof fnOrRegex === \"function\" ? fnOrRegex : (val) => fnOrRegex.test(val),\n        ...params,\n    };\n    if (fnOrRegex instanceof RegExp) {\n        def.pattern = fnOrRegex;\n    }\n    const inst = new Class(def);\n    return inst;\n}\n", null, "import * as core from \"../core/index.js\";\nimport * as schemas from \"./schemas.js\";\nexport const ZodISODateTime = /*@__PURE__*/ core.$constructor(\"ZodISODateTime\", (inst, def) => {\n    core.$ZodISODateTime.init(inst, def);\n    schemas.ZodStringFormat.init(inst, def);\n});\nexport function datetime(params) {\n    return core._isoDateTime(ZodISODateTime, params);\n}\nexport const ZodISODate = /*@__PURE__*/ core.$constructor(\"ZodISODate\", (inst, def) => {\n    core.$ZodISODate.init(inst, def);\n    schemas.ZodStringFormat.init(inst, def);\n});\nexport function date(params) {\n    return core._isoDate(ZodISODate, params);\n}\nexport const ZodISOTime = /*@__PURE__*/ core.$constructor(\"ZodISOTime\", (inst, def) => {\n    core.$ZodISOTime.init(inst, def);\n    schemas.ZodStringFormat.init(inst, def);\n});\nexport function time(params) {\n    return core._isoTime(ZodISOTime, params);\n}\nexport const ZodISODuration = /*@__PURE__*/ core.$constructor(\"ZodISODuration\", (inst, def) => {\n    core.$ZodISODuration.init(inst, def);\n    schemas.ZodStringFormat.init(inst, def);\n});\nexport function duration(params) {\n    return core._isoDuration(ZodISODuration, params);\n}\n", "import * as core from \"../core/index.js\";\nimport { $ZodError } from \"../core/index.js\";\nconst initializer = (inst, issues) => {\n    $ZodError.init(inst, issues);\n    inst.name = \"ZodError\";\n    Object.defineProperties(inst, {\n        format: {\n            value: (mapper) => core.formatError(inst, mapper),\n            // enumerable: false,\n        },\n        flatten: {\n            value: (mapper) => core.flattenError(inst, mapper),\n            // enumerable: false,\n        },\n        addIssue: {\n            value: (issue) => inst.issues.push(issue),\n            // enumerable: false,\n        },\n        addIssues: {\n            value: (issues) => inst.issues.push(...issues),\n            // enumerable: false,\n        },\n        isEmpty: {\n            get() {\n                return inst.issues.length === 0;\n            },\n            // enumerable: false,\n        },\n    });\n    // Object.defineProperty(inst, \"isEmpty\", {\n    //   get() {\n    //     return inst.issues.length === 0;\n    //   },\n    // });\n};\nexport const ZodError = core.$constructor(\"ZodError\", initializer);\nexport const ZodRealError = core.$constructor(\"ZodError\", initializer, {\n    Parent: Error,\n});\n// /** @deprecated Use `z.core.$ZodErrorMapCtx` instead. */\n// export type ErrorMapCtx = core.$ZodErrorMapCtx;\n", "import * as core from \"../core/index.js\";\nimport { ZodRealError } from \"./errors.js\";\nexport const parse = /* @__PURE__ */ core._parse(ZodRealError);\nexport const parseAsync = /* @__PURE__ */ core._parseAsync(ZodRealError);\nexport const safeParse = /* @__PURE__ */ core._safeParse(ZodRealError);\nexport const safeParseAsync = /* @__PURE__ */ core._safeParseAsync(ZodRealError);\n", "import * as core from \"../core/index.js\";\nimport { util } from \"../core/index.js\";\nimport * as checks from \"./checks.js\";\nimport * as iso from \"./iso.js\";\nimport * as parse from \"./parse.js\";\nexport const ZodType = /*@__PURE__*/ core.$constructor(\"ZodType\", (inst, def) => {\n    core.$ZodType.init(inst, def);\n    inst.def = def;\n    Object.defineProperty(inst, \"_def\", { value: def });\n    // base methods\n    inst.check = (...checks) => {\n        return inst.clone({\n            ...def,\n            checks: [\n                ...(def.checks ?? []),\n                ...checks.map((ch) => typeof ch === \"function\" ? { _zod: { check: ch, def: { check: \"custom\" }, onattach: [] } } : ch),\n            ],\n        }\n        // { parent: true }\n        );\n    };\n    inst.clone = (def, params) => core.clone(inst, def, params);\n    inst.brand = () => inst;\n    inst.register = ((reg, meta) => {\n        reg.add(inst, meta);\n        return inst;\n    });\n    // parsing\n    inst.parse = (data, params) => parse.parse(inst, data, params, { callee: inst.parse });\n    inst.safeParse = (data, params) => parse.safeParse(inst, data, params);\n    inst.parseAsync = async (data, params) => parse.parseAsync(inst, data, params, { callee: inst.parseAsync });\n    inst.safeParseAsync = async (data, params) => parse.safeParseAsync(inst, data, params);\n    inst.spa = inst.safeParseAsync;\n    // refinements\n    inst.refine = (check, params) => inst.check(refine(check, params));\n    inst.superRefine = (refinement) => inst.check(superRefine(refinement));\n    inst.overwrite = (fn) => inst.check(checks.overwrite(fn));\n    // wrappers\n    inst.optional = () => optional(inst);\n    inst.nullable = () => nullable(inst);\n    inst.nullish = () => optional(nullable(inst));\n    inst.nonoptional = (params) => nonoptional(inst, params);\n    inst.array = () => array(inst);\n    inst.or = (arg) => union([inst, arg]);\n    inst.and = (arg) => intersection(inst, arg);\n    inst.transform = (tx) => pipe(inst, transform(tx));\n    inst.default = (def) => _default(inst, def);\n    inst.prefault = (def) => prefault(inst, def);\n    // inst.coalesce = (def, params) => coalesce(inst, def, params);\n    inst.catch = (params) => _catch(inst, params);\n    inst.pipe = (target) => pipe(inst, target);\n    inst.readonly = () => readonly(inst);\n    // meta\n    inst.describe = (description) => {\n        const cl = inst.clone();\n        core.globalRegistry.add(cl, { description });\n        return cl;\n    };\n    Object.defineProperty(inst, \"description\", {\n        get() {\n            return core.globalRegistry.get(inst)?.description;\n        },\n        configurable: true,\n    });\n    inst.meta = (...args) => {\n        if (args.length === 0) {\n            return core.globalRegistry.get(inst);\n        }\n        const cl = inst.clone();\n        core.globalRegistry.add(cl, args[0]);\n        return cl;\n    };\n    // helpers\n    inst.isOptional = () => inst.safeParse(undefined).success;\n    inst.isNullable = () => inst.safeParse(null).success;\n    return inst;\n});\n/** @internal */\nexport const _ZodString = /*@__PURE__*/ core.$constructor(\"_ZodString\", (inst, def) => {\n    core.$ZodString.init(inst, def);\n    ZodType.init(inst, def);\n    const bag = inst._zod.bag;\n    inst.format = bag.format ?? null;\n    inst.minLength = bag.minimum ?? null;\n    inst.maxLength = bag.maximum ?? null;\n    // validations\n    inst.regex = (...args) => inst.check(checks.regex(...args));\n    inst.includes = (...args) => inst.check(checks.includes(...args));\n    inst.startsWith = (...args) => inst.check(checks.startsWith(...args));\n    inst.endsWith = (...args) => inst.check(checks.endsWith(...args));\n    inst.min = (...args) => inst.check(checks.minLength(...args));\n    inst.max = (...args) => inst.check(checks.maxLength(...args));\n    inst.length = (...args) => inst.check(checks.length(...args));\n    inst.nonempty = (...args) => inst.check(checks.minLength(1, ...args));\n    inst.lowercase = (params) => inst.check(checks.lowercase(params));\n    inst.uppercase = (params) => inst.check(checks.uppercase(params));\n    // transforms\n    inst.trim = () => inst.check(checks.trim());\n    inst.normalize = (...args) => inst.check(checks.normalize(...args));\n    inst.toLowerCase = () => inst.check(checks.toLowerCase());\n    inst.toUpperCase = () => inst.check(checks.toUpperCase());\n});\nexport const ZodString = /*@__PURE__*/ core.$constructor(\"ZodString\", (inst, def) => {\n    core.$ZodString.init(inst, def);\n    _ZodString.init(inst, def);\n    inst.email = (params) => inst.check(core._email(ZodEmail, params));\n    inst.url = (params) => inst.check(core._url(ZodURL, params));\n    inst.jwt = (params) => inst.check(core._jwt(ZodJWT, params));\n    inst.emoji = (params) => inst.check(core._emoji(ZodEmoji, params));\n    inst.guid = (params) => inst.check(core._guid(ZodGUID, params));\n    inst.uuid = (params) => inst.check(core._uuid(ZodUUID, params));\n    inst.uuidv4 = (params) => inst.check(core._uuidv4(ZodUUID, params));\n    inst.uuidv6 = (params) => inst.check(core._uuidv6(ZodUUID, params));\n    inst.uuidv7 = (params) => inst.check(core._uuidv7(ZodUUID, params));\n    inst.nanoid = (params) => inst.check(core._nanoid(ZodNanoID, params));\n    inst.guid = (params) => inst.check(core._guid(ZodGUID, params));\n    inst.cuid = (params) => inst.check(core._cuid(ZodCUID, params));\n    inst.cuid2 = (params) => inst.check(core._cuid2(ZodCUID2, params));\n    inst.ulid = (params) => inst.check(core._ulid(ZodULID, params));\n    inst.base64 = (params) => inst.check(core._base64(ZodBase64, params));\n    inst.base64url = (params) => inst.check(core._base64url(ZodBase64URL, params));\n    inst.xid = (params) => inst.check(core._xid(ZodXID, params));\n    inst.ksuid = (params) => inst.check(core._ksuid(ZodKSUID, params));\n    inst.ipv4 = (params) => inst.check(core._ipv4(ZodIPv4, params));\n    inst.ipv6 = (params) => inst.check(core._ipv6(ZodIPv6, params));\n    inst.cidrv4 = (params) => inst.check(core._cidrv4(ZodCIDRv4, params));\n    inst.cidrv6 = (params) => inst.check(core._cidrv6(ZodCIDRv6, params));\n    inst.e164 = (params) => inst.check(core._e164(ZodE164, params));\n    // iso\n    inst.datetime = (params) => inst.check(iso.datetime(params));\n    inst.date = (params) => inst.check(iso.date(params));\n    inst.time = (params) => inst.check(iso.time(params));\n    inst.duration = (params) => inst.check(iso.duration(params));\n});\nexport function string(params) {\n    return core._string(ZodString, params);\n}\nexport const ZodStringFormat = /*@__PURE__*/ core.$constructor(\"ZodStringFormat\", (inst, def) => {\n    core.$ZodStringFormat.init(inst, def);\n    _ZodString.init(inst, def);\n});\nexport const ZodEmail = /*@__PURE__*/ core.$constructor(\"ZodEmail\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodEmail.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function email(params) {\n    return core._email(ZodEmail, params);\n}\nexport const ZodGUID = /*@__PURE__*/ core.$constructor(\"ZodGUID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodGUID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function guid(params) {\n    return core._guid(ZodGUID, params);\n}\nexport const ZodUUID = /*@__PURE__*/ core.$constructor(\"ZodUUID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodUUID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function uuid(params) {\n    return core._uuid(ZodUUID, params);\n}\nexport function uuidv4(params) {\n    return core._uuidv4(ZodUUID, params);\n}\n// ZodUUIDv6\nexport function uuidv6(params) {\n    return core._uuidv6(ZodUUID, params);\n}\n// ZodUUIDv7\nexport function uuidv7(params) {\n    return core._uuidv7(ZodUUID, params);\n}\nexport const ZodURL = /*@__PURE__*/ core.$constructor(\"ZodURL\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodURL.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function url(params) {\n    return core._url(ZodURL, params);\n}\nexport const ZodEmoji = /*@__PURE__*/ core.$constructor(\"ZodEmoji\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodEmoji.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function emoji(params) {\n    return core._emoji(ZodEmoji, params);\n}\nexport const ZodNanoID = /*@__PURE__*/ core.$constructor(\"ZodNanoID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodNanoID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function nanoid(params) {\n    return core._nanoid(ZodNanoID, params);\n}\nexport const ZodCUID = /*@__PURE__*/ core.$constructor(\"ZodCUID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodCUID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function cuid(params) {\n    return core._cuid(ZodCUID, params);\n}\nexport const ZodCUID2 = /*@__PURE__*/ core.$constructor(\"ZodCUID2\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodCUID2.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function cuid2(params) {\n    return core._cuid2(ZodCUID2, params);\n}\nexport const ZodULID = /*@__PURE__*/ core.$constructor(\"ZodULID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodULID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function ulid(params) {\n    return core._ulid(ZodULID, params);\n}\nexport const ZodXID = /*@__PURE__*/ core.$constructor(\"ZodXID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodXID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function xid(params) {\n    return core._xid(ZodXID, params);\n}\nexport const ZodKSUID = /*@__PURE__*/ core.$constructor(\"ZodKSUID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodKSUID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function ksuid(params) {\n    return core._ksuid(ZodKSUID, params);\n}\nexport const ZodIPv4 = /*@__PURE__*/ core.$constructor(\"ZodIPv4\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodIPv4.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function ipv4(params) {\n    return core._ipv4(ZodIPv4, params);\n}\nexport const ZodIPv6 = /*@__PURE__*/ core.$constructor(\"ZodIPv6\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodIPv6.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function ipv6(params) {\n    return core._ipv6(ZodIPv6, params);\n}\nexport const ZodCIDRv4 = /*@__PURE__*/ core.$constructor(\"ZodCIDRv4\", (inst, def) => {\n    core.$ZodCIDRv4.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function cidrv4(params) {\n    return core._cidrv4(ZodCIDRv4, params);\n}\nexport const ZodCIDRv6 = /*@__PURE__*/ core.$constructor(\"ZodCIDRv6\", (inst, def) => {\n    core.$ZodCIDRv6.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function cidrv6(params) {\n    return core._cidrv6(ZodCIDRv6, params);\n}\nexport const ZodBase64 = /*@__PURE__*/ core.$constructor(\"ZodBase64\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodBase64.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function base64(params) {\n    return core._base64(ZodBase64, params);\n}\nexport const ZodBase64URL = /*@__PURE__*/ core.$constructor(\"ZodBase64URL\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodBase64URL.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function base64url(params) {\n    return core._base64url(ZodBase64URL, params);\n}\nexport const ZodE164 = /*@__PURE__*/ core.$constructor(\"ZodE164\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodE164.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function e164(params) {\n    return core._e164(ZodE164, params);\n}\nexport const ZodJWT = /*@__PURE__*/ core.$constructor(\"ZodJWT\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodJWT.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function jwt(params) {\n    return core._jwt(ZodJWT, params);\n}\nexport const ZodCustomStringFormat = /*@__PURE__*/ core.$constructor(\"ZodCustomStringFormat\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodCustomStringFormat.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function stringFormat(format, fnOrRegex, _params = {}) {\n    return core._stringFormat(ZodCustomStringFormat, format, fnOrRegex, _params);\n}\nexport const ZodNumber = /*@__PURE__*/ core.$constructor(\"ZodNumber\", (inst, def) => {\n    core.$ZodNumber.init(inst, def);\n    ZodType.init(inst, def);\n    inst.gt = (value, params) => inst.check(checks.gt(value, params));\n    inst.gte = (value, params) => inst.check(checks.gte(value, params));\n    inst.min = (value, params) => inst.check(checks.gte(value, params));\n    inst.lt = (value, params) => inst.check(checks.lt(value, params));\n    inst.lte = (value, params) => inst.check(checks.lte(value, params));\n    inst.max = (value, params) => inst.check(checks.lte(value, params));\n    inst.int = (params) => inst.check(int(params));\n    inst.safe = (params) => inst.check(int(params));\n    inst.positive = (params) => inst.check(checks.gt(0, params));\n    inst.nonnegative = (params) => inst.check(checks.gte(0, params));\n    inst.negative = (params) => inst.check(checks.lt(0, params));\n    inst.nonpositive = (params) => inst.check(checks.lte(0, params));\n    inst.multipleOf = (value, params) => inst.check(checks.multipleOf(value, params));\n    inst.step = (value, params) => inst.check(checks.multipleOf(value, params));\n    // inst.finite = (params) => inst.check(core.finite(params));\n    inst.finite = () => inst;\n    const bag = inst._zod.bag;\n    inst.minValue =\n        Math.max(bag.minimum ?? Number.NEGATIVE_INFINITY, bag.exclusiveMinimum ?? Number.NEGATIVE_INFINITY) ?? null;\n    inst.maxValue =\n        Math.min(bag.maximum ?? Number.POSITIVE_INFINITY, bag.exclusiveMaximum ?? Number.POSITIVE_INFINITY) ?? null;\n    inst.isInt = (bag.format ?? \"\").includes(\"int\") || Number.isSafeInteger(bag.multipleOf ?? 0.5);\n    inst.isFinite = true;\n    inst.format = bag.format ?? null;\n});\nexport function number(params) {\n    return core._number(ZodNumber, params);\n}\nexport const ZodNumberFormat = /*@__PURE__*/ core.$constructor(\"ZodNumberFormat\", (inst, def) => {\n    core.$ZodNumberFormat.init(inst, def);\n    ZodNumber.init(inst, def);\n});\nexport function int(params) {\n    return core._int(ZodNumberFormat, params);\n}\nexport function float32(params) {\n    return core._float32(ZodNumberFormat, params);\n}\nexport function float64(params) {\n    return core._float64(ZodNumberFormat, params);\n}\nexport function int32(params) {\n    return core._int32(ZodNumberFormat, params);\n}\nexport function uint32(params) {\n    return core._uint32(ZodNumberFormat, params);\n}\nexport const ZodBoolean = /*@__PURE__*/ core.$constructor(\"ZodBoolean\", (inst, def) => {\n    core.$ZodBoolean.init(inst, def);\n    ZodType.init(inst, def);\n});\nexport function boolean(params) {\n    return core._boolean(ZodBoolean, params);\n}\nexport const ZodBigInt = /*@__PURE__*/ core.$constructor(\"ZodBigInt\", (inst, def) => {\n    core.$ZodBigInt.init(inst, def);\n    ZodType.init(inst, def);\n    inst.gte = (value, params) => inst.check(checks.gte(value, params));\n    inst.min = (value, params) => inst.check(checks.gte(value, params));\n    inst.gt = (value, params) => inst.check(checks.gt(value, params));\n    inst.gte = (value, params) => inst.check(checks.gte(value, params));\n    inst.min = (value, params) => inst.check(checks.gte(value, params));\n    inst.lt = (value, params) => inst.check(checks.lt(value, params));\n    inst.lte = (value, params) => inst.check(checks.lte(value, params));\n    inst.max = (value, params) => inst.check(checks.lte(value, params));\n    inst.positive = (params) => inst.check(checks.gt(BigInt(0), params));\n    inst.negative = (params) => inst.check(checks.lt(BigInt(0), params));\n    inst.nonpositive = (params) => inst.check(checks.lte(BigInt(0), params));\n    inst.nonnegative = (params) => inst.check(checks.gte(BigInt(0), params));\n    inst.multipleOf = (value, params) => inst.check(checks.multipleOf(value, params));\n    const bag = inst._zod.bag;\n    inst.minValue = bag.minimum ?? null;\n    inst.maxValue = bag.maximum ?? null;\n    inst.format = bag.format ?? null;\n});\nexport function bigint(params) {\n    return core._bigint(ZodBigInt, params);\n}\nexport const ZodBigIntFormat = /*@__PURE__*/ core.$constructor(\"ZodBigIntFormat\", (inst, def) => {\n    core.$ZodBigIntFormat.init(inst, def);\n    ZodBigInt.init(inst, def);\n});\n// int64\nexport function int64(params) {\n    return core._int64(ZodBigIntFormat, params);\n}\n// uint64\nexport function uint64(params) {\n    return core._uint64(ZodBigIntFormat, params);\n}\nexport const ZodSymbol = /*@__PURE__*/ core.$constructor(\"ZodSymbol\", (inst, def) => {\n    core.$ZodSymbol.init(inst, def);\n    ZodType.init(inst, def);\n});\nexport function symbol(params) {\n    return core._symbol(ZodSymbol, params);\n}\nexport const ZodUndefined = /*@__PURE__*/ core.$constructor(\"ZodUndefined\", (inst, def) => {\n    core.$ZodUndefined.init(inst, def);\n    ZodType.init(inst, def);\n});\nfunction _undefined(params) {\n    return core._undefined(ZodUndefined, params);\n}\nexport { _undefined as undefined };\nexport const ZodNull = /*@__PURE__*/ core.$constructor(\"ZodNull\", (inst, def) => {\n    core.$ZodNull.init(inst, def);\n    ZodType.init(inst, def);\n});\nfunction _null(params) {\n    return core._null(ZodNull, params);\n}\nexport { _null as null };\nexport const ZodAny = /*@__PURE__*/ core.$constructor(\"ZodAny\", (inst, def) => {\n    core.$ZodAny.init(inst, def);\n    ZodType.init(inst, def);\n});\nexport function any() {\n    return core._any(ZodAny);\n}\nexport const ZodUnknown = /*@__PURE__*/ core.$constructor(\"ZodUnknown\", (inst, def) => {\n    core.$ZodUnknown.init(inst, def);\n    ZodType.init(inst, def);\n});\nexport function unknown() {\n    return core._unknown(ZodUnknown);\n}\nexport const ZodNever = /*@__PURE__*/ core.$constructor(\"ZodNever\", (inst, def) => {\n    core.$ZodNever.init(inst, def);\n    ZodType.init(inst, def);\n});\nexport function never(params) {\n    return core._never(ZodNever, params);\n}\nexport const ZodVoid = /*@__PURE__*/ core.$constructor(\"ZodVoid\", (inst, def) => {\n    core.$ZodVoid.init(inst, def);\n    ZodType.init(inst, def);\n});\nfunction _void(params) {\n    return core._void(ZodVoid, params);\n}\nexport { _void as void };\nexport const ZodDate = /*@__PURE__*/ core.$constructor(\"ZodDate\", (inst, def) => {\n    core.$ZodDate.init(inst, def);\n    ZodType.init(inst, def);\n    inst.min = (value, params) => inst.check(checks.gte(value, params));\n    inst.max = (value, params) => inst.check(checks.lte(value, params));\n    const c = inst._zod.bag;\n    inst.minDate = c.minimum ? new Date(c.minimum) : null;\n    inst.maxDate = c.maximum ? new Date(c.maximum) : null;\n});\nexport function date(params) {\n    return core._date(ZodDate, params);\n}\nexport const ZodArray = /*@__PURE__*/ core.$constructor(\"ZodArray\", (inst, def) => {\n    core.$ZodArray.init(inst, def);\n    ZodType.init(inst, def);\n    inst.element = def.element;\n    inst.min = (minLength, params) => inst.check(checks.minLength(minLength, params));\n    inst.nonempty = (params) => inst.check(checks.minLength(1, params));\n    inst.max = (maxLength, params) => inst.check(checks.maxLength(maxLength, params));\n    inst.length = (len, params) => inst.check(checks.length(len, params));\n    inst.unwrap = () => inst.element;\n});\nexport function array(element, params) {\n    return core._array(ZodArray, element, params);\n}\n// .keyof\nexport function keyof(schema) {\n    const shape = schema._zod.def.shape;\n    return literal(Object.keys(shape));\n}\nexport const ZodObject = /*@__PURE__*/ core.$constructor(\"ZodObject\", (inst, def) => {\n    core.$ZodObject.init(inst, def);\n    ZodType.init(inst, def);\n    util.defineLazy(inst, \"shape\", () => def.shape);\n    inst.keyof = () => _enum(Object.keys(inst._zod.def.shape));\n    inst.catchall = (catchall) => inst.clone({ ...inst._zod.def, catchall: catchall });\n    inst.passthrough = () => inst.clone({ ...inst._zod.def, catchall: unknown() });\n    // inst.nonstrict = () => inst.clone({ ...inst._zod.def, catchall: api.unknown() });\n    inst.loose = () => inst.clone({ ...inst._zod.def, catchall: unknown() });\n    inst.strict = () => inst.clone({ ...inst._zod.def, catchall: never() });\n    inst.strip = () => inst.clone({ ...inst._zod.def, catchall: undefined });\n    inst.extend = (incoming) => {\n        return util.extend(inst, incoming);\n    };\n    inst.merge = (other) => util.merge(inst, other);\n    inst.pick = (mask) => util.pick(inst, mask);\n    inst.omit = (mask) => util.omit(inst, mask);\n    inst.partial = (...args) => util.partial(ZodOptional, inst, args[0]);\n    inst.required = (...args) => util.required(ZodNonOptional, inst, args[0]);\n});\nexport function object(shape, params) {\n    const def = {\n        type: \"object\",\n        get shape() {\n            util.assignProp(this, \"shape\", { ...shape });\n            return this.shape;\n        },\n        ...util.normalizeParams(params),\n    };\n    return new ZodObject(def);\n}\n// strictObject\nexport function strictObject(shape, params) {\n    return new ZodObject({\n        type: \"object\",\n        get shape() {\n            util.assignProp(this, \"shape\", { ...shape });\n            return this.shape;\n        },\n        catchall: never(),\n        ...util.normalizeParams(params),\n    });\n}\n// looseObject\nexport function looseObject(shape, params) {\n    return new ZodObject({\n        type: \"object\",\n        get shape() {\n            util.assignProp(this, \"shape\", { ...shape });\n            return this.shape;\n        },\n        catchall: unknown(),\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodUnion = /*@__PURE__*/ core.$constructor(\"ZodUnion\", (inst, def) => {\n    core.$ZodUnion.init(inst, def);\n    ZodType.init(inst, def);\n    inst.options = def.options;\n});\nexport function union(options, params) {\n    return new ZodUnion({\n        type: \"union\",\n        options: options,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodDiscriminatedUnion = /*@__PURE__*/ core.$constructor(\"ZodDiscriminatedUnion\", (inst, def) => {\n    ZodUnion.init(inst, def);\n    core.$ZodDiscriminatedUnion.init(inst, def);\n});\nexport function discriminatedUnion(discriminator, options, params) {\n    // const [options, params] = args;\n    return new ZodDiscriminatedUnion({\n        type: \"union\",\n        options,\n        discriminator,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodIntersection = /*@__PURE__*/ core.$constructor(\"ZodIntersection\", (inst, def) => {\n    core.$ZodIntersection.init(inst, def);\n    ZodType.init(inst, def);\n});\nexport function intersection(left, right) {\n    return new ZodIntersection({\n        type: \"intersection\",\n        left: left,\n        right: right,\n    });\n}\nexport const ZodTuple = /*@__PURE__*/ core.$constructor(\"ZodTuple\", (inst, def) => {\n    core.$ZodTuple.init(inst, def);\n    ZodType.init(inst, def);\n    inst.rest = (rest) => inst.clone({\n        ...inst._zod.def,\n        rest: rest,\n    });\n});\nexport function tuple(items, _paramsOrRest, _params) {\n    const hasRest = _paramsOrRest instanceof core.$ZodType;\n    const params = hasRest ? _params : _paramsOrRest;\n    const rest = hasRest ? _paramsOrRest : null;\n    return new ZodTuple({\n        type: \"tuple\",\n        items: items,\n        rest,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodRecord = /*@__PURE__*/ core.$constructor(\"ZodRecord\", (inst, def) => {\n    core.$ZodRecord.init(inst, def);\n    ZodType.init(inst, def);\n    inst.keyType = def.keyType;\n    inst.valueType = def.valueType;\n});\nexport function record(keyType, valueType, params) {\n    return new ZodRecord({\n        type: \"record\",\n        keyType,\n        valueType: valueType,\n        ...util.normalizeParams(params),\n    });\n}\n// type alksjf = core.output<core.$ZodRecordKey>;\nexport function partialRecord(keyType, valueType, params) {\n    return new ZodRecord({\n        type: \"record\",\n        keyType: union([keyType, never()]),\n        valueType: valueType,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodMap = /*@__PURE__*/ core.$constructor(\"ZodMap\", (inst, def) => {\n    core.$ZodMap.init(inst, def);\n    ZodType.init(inst, def);\n    inst.keyType = def.keyType;\n    inst.valueType = def.valueType;\n});\nexport function map(keyType, valueType, params) {\n    return new ZodMap({\n        type: \"map\",\n        keyType: keyType,\n        valueType: valueType,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodSet = /*@__PURE__*/ core.$constructor(\"ZodSet\", (inst, def) => {\n    core.$ZodSet.init(inst, def);\n    ZodType.init(inst, def);\n    inst.min = (...args) => inst.check(core._minSize(...args));\n    inst.nonempty = (params) => inst.check(core._minSize(1, params));\n    inst.max = (...args) => inst.check(core._maxSize(...args));\n    inst.size = (...args) => inst.check(core._size(...args));\n});\nexport function set(valueType, params) {\n    return new ZodSet({\n        type: \"set\",\n        valueType: valueType,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodEnum = /*@__PURE__*/ core.$constructor(\"ZodEnum\", (inst, def) => {\n    core.$ZodEnum.init(inst, def);\n    ZodType.init(inst, def);\n    inst.enum = def.entries;\n    inst.options = Object.values(def.entries);\n    const keys = new Set(Object.keys(def.entries));\n    inst.extract = (values, params) => {\n        const newEntries = {};\n        for (const value of values) {\n            if (keys.has(value)) {\n                newEntries[value] = def.entries[value];\n            }\n            else\n                throw new Error(`Key ${value} not found in enum`);\n        }\n        return new ZodEnum({\n            ...def,\n            checks: [],\n            ...util.normalizeParams(params),\n            entries: newEntries,\n        });\n    };\n    inst.exclude = (values, params) => {\n        const newEntries = { ...def.entries };\n        for (const value of values) {\n            if (keys.has(value)) {\n                delete newEntries[value];\n            }\n            else\n                throw new Error(`Key ${value} not found in enum`);\n        }\n        return new ZodEnum({\n            ...def,\n            checks: [],\n            ...util.normalizeParams(params),\n            entries: newEntries,\n        });\n    };\n});\nfunction _enum(values, params) {\n    const entries = Array.isArray(values) ? Object.fromEntries(values.map((v) => [v, v])) : values;\n    return new ZodEnum({\n        type: \"enum\",\n        entries,\n        ...util.normalizeParams(params),\n    });\n}\nexport { _enum as enum };\n/** @deprecated This API has been merged into `z.enum()`. Use `z.enum()` instead.\n *\n * ```ts\n * enum Colors { red, green, blue }\n * z.enum(Colors);\n * ```\n */\nexport function nativeEnum(entries, params) {\n    return new ZodEnum({\n        type: \"enum\",\n        entries,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodLiteral = /*@__PURE__*/ core.$constructor(\"ZodLiteral\", (inst, def) => {\n    core.$ZodLiteral.init(inst, def);\n    ZodType.init(inst, def);\n    inst.values = new Set(def.values);\n    Object.defineProperty(inst, \"value\", {\n        get() {\n            if (def.values.length > 1) {\n                throw new Error(\"This schema contains multiple valid literal values. Use `.values` instead.\");\n            }\n            return def.values[0];\n        },\n    });\n});\nexport function literal(value, params) {\n    return new ZodLiteral({\n        type: \"literal\",\n        values: Array.isArray(value) ? value : [value],\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodFile = /*@__PURE__*/ core.$constructor(\"ZodFile\", (inst, def) => {\n    core.$ZodFile.init(inst, def);\n    ZodType.init(inst, def);\n    inst.min = (size, params) => inst.check(core._minSize(size, params));\n    inst.max = (size, params) => inst.check(core._maxSize(size, params));\n    inst.mime = (types, params) => inst.check(core._mime(Array.isArray(types) ? types : [types], params));\n});\nexport function file(params) {\n    return core._file(ZodFile, params);\n}\nexport const ZodTransform = /*@__PURE__*/ core.$constructor(\"ZodTransform\", (inst, def) => {\n    core.$ZodTransform.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        payload.addIssue = (issue) => {\n            if (typeof issue === \"string\") {\n                payload.issues.push(util.issue(issue, payload.value, def));\n            }\n            else {\n                // for Zod 3 backwards compatibility\n                const _issue = issue;\n                if (_issue.fatal)\n                    _issue.continue = false;\n                _issue.code ?? (_issue.code = \"custom\");\n                _issue.input ?? (_issue.input = payload.value);\n                _issue.inst ?? (_issue.inst = inst);\n                _issue.continue ?? (_issue.continue = true);\n                payload.issues.push(util.issue(_issue));\n            }\n        };\n        const output = def.transform(payload.value, payload);\n        if (output instanceof Promise) {\n            return output.then((output) => {\n                payload.value = output;\n                return payload;\n            });\n        }\n        payload.value = output;\n        return payload;\n    };\n});\nexport function transform(fn) {\n    return new ZodTransform({\n        type: \"transform\",\n        transform: fn,\n    });\n}\nexport const ZodOptional = /*@__PURE__*/ core.$constructor(\"ZodOptional\", (inst, def) => {\n    core.$ZodOptional.init(inst, def);\n    ZodType.init(inst, def);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function optional(innerType) {\n    return new ZodOptional({\n        type: \"optional\",\n        innerType: innerType,\n    });\n}\nexport const ZodNullable = /*@__PURE__*/ core.$constructor(\"ZodNullable\", (inst, def) => {\n    core.$ZodNullable.init(inst, def);\n    ZodType.init(inst, def);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function nullable(innerType) {\n    return new ZodNullable({\n        type: \"nullable\",\n        innerType: innerType,\n    });\n}\n// nullish\nexport function nullish(innerType) {\n    return optional(nullable(innerType));\n}\nexport const ZodDefault = /*@__PURE__*/ core.$constructor(\"ZodDefault\", (inst, def) => {\n    core.$ZodDefault.init(inst, def);\n    ZodType.init(inst, def);\n    inst.unwrap = () => inst._zod.def.innerType;\n    inst.removeDefault = inst.unwrap;\n});\nexport function _default(innerType, defaultValue) {\n    return new ZodDefault({\n        type: \"default\",\n        innerType: innerType,\n        get defaultValue() {\n            return typeof defaultValue === \"function\" ? defaultValue() : defaultValue;\n        },\n    });\n}\nexport const ZodPrefault = /*@__PURE__*/ core.$constructor(\"ZodPrefault\", (inst, def) => {\n    core.$ZodPrefault.init(inst, def);\n    ZodType.init(inst, def);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function prefault(innerType, defaultValue) {\n    return new ZodPrefault({\n        type: \"prefault\",\n        innerType: innerType,\n        get defaultValue() {\n            return typeof defaultValue === \"function\" ? defaultValue() : defaultValue;\n        },\n    });\n}\nexport const ZodNonOptional = /*@__PURE__*/ core.$constructor(\"ZodNonOptional\", (inst, def) => {\n    core.$ZodNonOptional.init(inst, def);\n    ZodType.init(inst, def);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function nonoptional(innerType, params) {\n    return new ZodNonOptional({\n        type: \"nonoptional\",\n        innerType: innerType,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodSuccess = /*@__PURE__*/ core.$constructor(\"ZodSuccess\", (inst, def) => {\n    core.$ZodSuccess.init(inst, def);\n    ZodType.init(inst, def);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function success(innerType) {\n    return new ZodSuccess({\n        type: \"success\",\n        innerType: innerType,\n    });\n}\nexport const ZodCatch = /*@__PURE__*/ core.$constructor(\"ZodCatch\", (inst, def) => {\n    core.$ZodCatch.init(inst, def);\n    ZodType.init(inst, def);\n    inst.unwrap = () => inst._zod.def.innerType;\n    inst.removeCatch = inst.unwrap;\n});\nfunction _catch(innerType, catchValue) {\n    return new ZodCatch({\n        type: \"catch\",\n        innerType: innerType,\n        catchValue: (typeof catchValue === \"function\" ? catchValue : () => catchValue),\n    });\n}\nexport { _catch as catch };\nexport const ZodNaN = /*@__PURE__*/ core.$constructor(\"ZodNaN\", (inst, def) => {\n    core.$ZodNaN.init(inst, def);\n    ZodType.init(inst, def);\n});\nexport function nan(params) {\n    return core._nan(ZodNaN, params);\n}\nexport const ZodPipe = /*@__PURE__*/ core.$constructor(\"ZodPipe\", (inst, def) => {\n    core.$ZodPipe.init(inst, def);\n    ZodType.init(inst, def);\n    inst.in = def.in;\n    inst.out = def.out;\n});\nexport function pipe(in_, out) {\n    return new ZodPipe({\n        type: \"pipe\",\n        in: in_,\n        out: out,\n        // ...util.normalizeParams(params),\n    });\n}\nexport const ZodReadonly = /*@__PURE__*/ core.$constructor(\"ZodReadonly\", (inst, def) => {\n    core.$ZodReadonly.init(inst, def);\n    ZodType.init(inst, def);\n});\nexport function readonly(innerType) {\n    return new ZodReadonly({\n        type: \"readonly\",\n        innerType: innerType,\n    });\n}\nexport const ZodTemplateLiteral = /*@__PURE__*/ core.$constructor(\"ZodTemplateLiteral\", (inst, def) => {\n    core.$ZodTemplateLiteral.init(inst, def);\n    ZodType.init(inst, def);\n});\nexport function templateLiteral(parts, params) {\n    return new ZodTemplateLiteral({\n        type: \"template_literal\",\n        parts,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodLazy = /*@__PURE__*/ core.$constructor(\"ZodLazy\", (inst, def) => {\n    core.$ZodLazy.init(inst, def);\n    ZodType.init(inst, def);\n    inst.unwrap = () => inst._zod.def.getter();\n});\nexport function lazy(getter) {\n    return new ZodLazy({\n        type: \"lazy\",\n        getter: getter,\n    });\n}\nexport const ZodPromise = /*@__PURE__*/ core.$constructor(\"ZodPromise\", (inst, def) => {\n    core.$ZodPromise.init(inst, def);\n    ZodType.init(inst, def);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function promise(innerType) {\n    return new ZodPromise({\n        type: \"promise\",\n        innerType: innerType,\n    });\n}\nexport const ZodCustom = /*@__PURE__*/ core.$constructor(\"ZodCustom\", (inst, def) => {\n    core.$ZodCustom.init(inst, def);\n    ZodType.init(inst, def);\n});\n// custom checks\nexport function check(fn) {\n    const ch = new core.$ZodCheck({\n        check: \"custom\",\n        // ...util.normalizeParams(params),\n    });\n    ch._zod.check = fn;\n    return ch;\n}\nexport function custom(fn, _params) {\n    return core._custom(ZodCustom, fn ?? (() => true), _params);\n}\nexport function refine(fn, _params = {}) {\n    return core._refine(ZodCustom, fn, _params);\n}\n// superRefine\nexport function superRefine(fn) {\n    const ch = check((payload) => {\n        payload.addIssue = (issue) => {\n            if (typeof issue === \"string\") {\n                payload.issues.push(util.issue(issue, payload.value, ch._zod.def));\n            }\n            else {\n                // for Zod 3 backwards compatibility\n                const _issue = issue;\n                if (_issue.fatal)\n                    _issue.continue = false;\n                _issue.code ?? (_issue.code = \"custom\");\n                _issue.input ?? (_issue.input = payload.value);\n                _issue.inst ?? (_issue.inst = ch);\n                _issue.continue ?? (_issue.continue = !ch._zod.def.abort);\n                payload.issues.push(util.issue(_issue));\n            }\n        };\n        return fn(payload.value, payload);\n    });\n    return ch;\n}\nfunction _instanceof(cls, params = {\n    error: `Input not instance of ${cls.name}`,\n}) {\n    const inst = new ZodCustom({\n        type: \"custom\",\n        check: \"custom\",\n        fn: (data) => data instanceof cls,\n        abort: true,\n        ...util.normalizeParams(params),\n    });\n    inst._zod.bag.Class = cls;\n    return inst;\n}\nexport { _instanceof as instanceof };\n// stringbool\nexport const stringbool = (...args) => core._stringbool({\n    Pipe: ZodPipe,\n    Boolean: ZodBoolean,\n    String: ZodString,\n    Transform: ZodTransform,\n}, ...args);\nexport function json(params) {\n    const jsonSchema = lazy(() => {\n        return union([string(params), number(), boolean(), _null(), array(jsonSchema), record(string(), jsonSchema)]);\n    });\n    return jsonSchema;\n}\n// preprocess\n// /** @deprecated Use `z.pipe()` and `z.transform()` instead. */\nexport function preprocess(fn, schema) {\n    return pipe(transform(fn), schema);\n}\n", "export * as core from \"../core/index.js\";\nexport * from \"./schemas.js\";\nexport * from \"./checks.js\";\nexport * from \"./errors.js\";\nexport * from \"./parse.js\";\nexport * from \"./compat.js\";\n// zod-specified\nimport { config } from \"../core/index.js\";\nimport en from \"../locales/en.js\";\nconfig(en());\nexport { globalRegistry, registry, config, function, $output, $input, $brand, clone, regexes, treeifyError, prettifyError, formatError, flattenError, toJSONSchema, TimePrecision, NEVER, } from \"../core/index.js\";\nexport * as locales from \"../locales/index.js\";\n// iso\n// must be exported from top-level\n// https://github.com/colinhacks/zod/issues/4491\nexport { ZodISODateTime, ZodISODate, ZodISOTime, ZodISODuration } from \"./iso.js\";\nexport * as iso from \"./iso.js\";\nexport * as coerce from \"./coerce.js\";\n", null, null, "export const ignoreOverride = Symbol(\"Let zodToJsonSchema decide on which parser to use\");\nexport const jsonDescription = (jsonSchema, def) => {\n    if (def.description) {\n        try {\n            return {\n                ...jsonSchema,\n                ...JSON.parse(def.description),\n            };\n        }\n        catch { }\n    }\n    return jsonSchema;\n};\nexport const defaultOptions = {\n    name: undefined,\n    $refStrategy: \"root\",\n    basePath: [\"#\"],\n    effectStrategy: \"input\",\n    pipeStrategy: \"all\",\n    dateStrategy: \"format:date-time\",\n    mapStrategy: \"entries\",\n    removeAdditionalStrategy: \"passthrough\",\n    allowedAdditionalProperties: true,\n    rejectedAdditionalProperties: false,\n    definitionPath: \"definitions\",\n    target: \"jsonSchema7\",\n    strictUnions: false,\n    definitions: {},\n    errorMessages: false,\n    markdownDescription: false,\n    patternStrategy: \"escape\",\n    applyRegexFlags: false,\n    emailStrategy: \"format:email\",\n    base64Strategy: \"contentEncoding:base64\",\n    nameStrategy: \"ref\",\n    openAiAnyTypeName: \"OpenAiAnyType\"\n};\nexport const getDefaultOptions = (options) => (typeof options === \"string\"\n    ? {\n        ...defaultOptions,\n        name: options,\n    }\n    : {\n        ...defaultOptions,\n        ...options,\n    });\n", "import { setResponseValueAndErrors } from \"../errorMessages.js\";\nlet emojiRegex = undefined;\n/**\n * Generated from the regular expressions found here as of 2024-05-22:\n * https://github.com/colinhacks/zod/blob/master/src/types.ts.\n *\n * Expressions with /i flag have been changed accordingly.\n */\nexport const zodPatterns = {\n    /**\n     * `c` was changed to `[cC]` to replicate /i flag\n     */\n    cuid: /^[cC][^\\s-]{8,}$/,\n    cuid2: /^[0-9a-z]+$/,\n    ulid: /^[0-9A-HJKMNP-TV-Z]{26}$/,\n    /**\n     * `a-z` was added to replicate /i flag\n     */\n    email: /^(?!\\.)(?!.*\\.\\.)([a-zA-Z0-9_'+\\-\\.]*)[a-zA-Z0-9_+-]@([a-zA-Z0-9][a-zA-Z0-9\\-]*\\.)+[a-zA-Z]{2,}$/,\n    /**\n     * Constructed a valid Unicode RegExp\n     *\n     * Lazily instantiate since this type of regex isn't supported\n     * in all envs (e.g. React Native).\n     *\n     * See:\n     * https://github.com/colinhacks/zod/issues/2433\n     * Fix in Zod:\n     * https://github.com/colinhacks/zod/commit/9340fd51e48576a75adc919bff65dbc4a5d4c99b\n     */\n    emoji: () => {\n        if (emojiRegex === undefined) {\n            emojiRegex = RegExp(\"^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$\", \"u\");\n        }\n        return emojiRegex;\n    },\n    /**\n     * Unused\n     */\n    uuid: /^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$/,\n    /**\n     * Unused\n     */\n    ipv4: /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,\n    ipv4Cidr: /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/(3[0-2]|[12]?[0-9])$/,\n    /**\n     * Unused\n     */\n    ipv6: /^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/,\n    ipv6Cidr: /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,\n    base64: /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,\n    base64url: /^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,\n    nanoid: /^[a-zA-Z0-9_-]{21}$/,\n    jwt: /^[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]*$/,\n};\nexport function parseStringDef(def, refs) {\n    const res = {\n        type: \"string\",\n    };\n    if (def.checks) {\n        for (const check of def.checks) {\n            switch (check.kind) {\n                case \"min\":\n                    setResponseValueAndErrors(res, \"minLength\", typeof res.minLength === \"number\"\n                        ? Math.max(res.minLength, check.value)\n                        : check.value, check.message, refs);\n                    break;\n                case \"max\":\n                    setResponseValueAndErrors(res, \"maxLength\", typeof res.maxLength === \"number\"\n                        ? Math.min(res.maxLength, check.value)\n                        : check.value, check.message, refs);\n                    break;\n                case \"email\":\n                    switch (refs.emailStrategy) {\n                        case \"format:email\":\n                            addFormat(res, \"email\", check.message, refs);\n                            break;\n                        case \"format:idn-email\":\n                            addFormat(res, \"idn-email\", check.message, refs);\n                            break;\n                        case \"pattern:zod\":\n                            addPattern(res, zodPatterns.email, check.message, refs);\n                            break;\n                    }\n                    break;\n                case \"url\":\n                    addFormat(res, \"uri\", check.message, refs);\n                    break;\n                case \"uuid\":\n                    addFormat(res, \"uuid\", check.message, refs);\n                    break;\n                case \"regex\":\n                    addPattern(res, check.regex, check.message, refs);\n                    break;\n                case \"cuid\":\n                    addPattern(res, zodPatterns.cuid, check.message, refs);\n                    break;\n                case \"cuid2\":\n                    addPattern(res, zodPatterns.cuid2, check.message, refs);\n                    break;\n                case \"startsWith\":\n                    addPattern(res, RegExp(`^${escapeLiteralCheckValue(check.value, refs)}`), check.message, refs);\n                    break;\n                case \"endsWith\":\n                    addPattern(res, RegExp(`${escapeLiteralCheckValue(check.value, refs)}$`), check.message, refs);\n                    break;\n                case \"datetime\":\n                    addFormat(res, \"date-time\", check.message, refs);\n                    break;\n                case \"date\":\n                    addFormat(res, \"date\", check.message, refs);\n                    break;\n                case \"time\":\n                    addFormat(res, \"time\", check.message, refs);\n                    break;\n                case \"duration\":\n                    addFormat(res, \"duration\", check.message, refs);\n                    break;\n                case \"length\":\n                    setResponseValueAndErrors(res, \"minLength\", typeof res.minLength === \"number\"\n                        ? Math.max(res.minLength, check.value)\n                        : check.value, check.message, refs);\n                    setResponseValueAndErrors(res, \"maxLength\", typeof res.maxLength === \"number\"\n                        ? Math.min(res.maxLength, check.value)\n                        : check.value, check.message, refs);\n                    break;\n                case \"includes\": {\n                    addPattern(res, RegExp(escapeLiteralCheckValue(check.value, refs)), check.message, refs);\n                    break;\n                }\n                case \"ip\": {\n                    if (check.version !== \"v6\") {\n                        addFormat(res, \"ipv4\", check.message, refs);\n                    }\n                    if (check.version !== \"v4\") {\n                        addFormat(res, \"ipv6\", check.message, refs);\n                    }\n                    break;\n                }\n                case \"base64url\":\n                    addPattern(res, zodPatterns.base64url, check.message, refs);\n                    break;\n                case \"jwt\":\n                    addPattern(res, zodPatterns.jwt, check.message, refs);\n                    break;\n                case \"cidr\": {\n                    if (check.version !== \"v6\") {\n                        addPattern(res, zodPatterns.ipv4Cidr, check.message, refs);\n                    }\n                    if (check.version !== \"v4\") {\n                        addPattern(res, zodPatterns.ipv6Cidr, check.message, refs);\n                    }\n                    break;\n                }\n                case \"emoji\":\n                    addPattern(res, zodPatterns.emoji(), check.message, refs);\n                    break;\n                case \"ulid\": {\n                    addPattern(res, zodPatterns.ulid, check.message, refs);\n                    break;\n                }\n                case \"base64\": {\n                    switch (refs.base64Strategy) {\n                        case \"format:binary\": {\n                            addFormat(res, \"binary\", check.message, refs);\n                            break;\n                        }\n                        case \"contentEncoding:base64\": {\n                            setResponseValueAndErrors(res, \"contentEncoding\", \"base64\", check.message, refs);\n                            break;\n                        }\n                        case \"pattern:zod\": {\n                            addPattern(res, zodPatterns.base64, check.message, refs);\n                            break;\n                        }\n                    }\n                    break;\n                }\n                case \"nanoid\": {\n                    addPattern(res, zodPatterns.nanoid, check.message, refs);\n                }\n                case \"toLowerCase\":\n                case \"toUpperCase\":\n                case \"trim\":\n                    break;\n                default:\n                    ((_) => { })(check);\n            }\n        }\n    }\n    return res;\n}\nfunction escapeLiteralCheckValue(literal, refs) {\n    return refs.patternStrategy === \"escape\"\n        ? escapeNonAlphaNumeric(literal)\n        : literal;\n}\nconst ALPHA_NUMERIC = new Set(\"ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyz0123456789\");\nfunction escapeNonAlphaNumeric(source) {\n    let result = \"\";\n    for (let i = 0; i < source.length; i++) {\n        if (!ALPHA_NUMERIC.has(source[i])) {\n            result += \"\\\\\";\n        }\n        result += source[i];\n    }\n    return result;\n}\n// Adds a \"format\" keyword to the schema. If a format exists, both formats will be joined in an allOf-node, along with subsequent ones.\nfunction addFormat(schema, value, message, refs) {\n    if (schema.format || schema.anyOf?.some((x) => x.format)) {\n        if (!schema.anyOf) {\n            schema.anyOf = [];\n        }\n        if (schema.format) {\n            schema.anyOf.push({\n                format: schema.format,\n                ...(schema.errorMessage &&\n                    refs.errorMessages && {\n                    errorMessage: { format: schema.errorMessage.format },\n                }),\n            });\n            delete schema.format;\n            if (schema.errorMessage) {\n                delete schema.errorMessage.format;\n                if (Object.keys(schema.errorMessage).length === 0) {\n                    delete schema.errorMessage;\n                }\n            }\n        }\n        schema.anyOf.push({\n            format: value,\n            ...(message &&\n                refs.errorMessages && { errorMessage: { format: message } }),\n        });\n    }\n    else {\n        setResponseValueAndErrors(schema, \"format\", value, message, refs);\n    }\n}\n// Adds a \"pattern\" keyword to the schema. If a pattern exists, both patterns will be joined in an allOf-node, along with subsequent ones.\nfunction addPattern(schema, regex, message, refs) {\n    if (schema.pattern || schema.allOf?.some((x) => x.pattern)) {\n        if (!schema.allOf) {\n            schema.allOf = [];\n        }\n        if (schema.pattern) {\n            schema.allOf.push({\n                pattern: schema.pattern,\n                ...(schema.errorMessage &&\n                    refs.errorMessages && {\n                    errorMessage: { pattern: schema.errorMessage.pattern },\n                }),\n            });\n            delete schema.pattern;\n            if (schema.errorMessage) {\n                delete schema.errorMessage.pattern;\n                if (Object.keys(schema.errorMessage).length === 0) {\n                    delete schema.errorMessage;\n                }\n            }\n        }\n        schema.allOf.push({\n            pattern: stringifyRegExpWithFlags(regex, refs),\n            ...(message &&\n                refs.errorMessages && { errorMessage: { pattern: message } }),\n        });\n    }\n    else {\n        setResponseValueAndErrors(schema, \"pattern\", stringifyRegExpWithFlags(regex, refs), message, refs);\n    }\n}\n// Mutate z.string.regex() in a best attempt to accommodate for regex flags when applyRegexFlags is true\nfunction stringifyRegExpWithFlags(regex, refs) {\n    if (!refs.applyRegexFlags || !regex.flags) {\n        return regex.source;\n    }\n    // Currently handled flags\n    const flags = {\n        i: regex.flags.includes(\"i\"),\n        m: regex.flags.includes(\"m\"),\n        s: regex.flags.includes(\"s\"), // `.` matches newlines\n    };\n    // The general principle here is to step through each character, one at a time, applying mutations as flags require. We keep track when the current character is escaped, and when it's inside a group /like [this]/ or (also) a range like /[a-z]/. The following is fairly brittle imperative code; edit at your peril!\n    const source = flags.i ? regex.source.toLowerCase() : regex.source;\n    let pattern = \"\";\n    let isEscaped = false;\n    let inCharGroup = false;\n    let inCharRange = false;\n    for (let i = 0; i < source.length; i++) {\n        if (isEscaped) {\n            pattern += source[i];\n            isEscaped = false;\n            continue;\n        }\n        if (flags.i) {\n            if (inCharGroup) {\n                if (source[i].match(/[a-z]/)) {\n                    if (inCharRange) {\n                        pattern += source[i];\n                        pattern += `${source[i - 2]}-${source[i]}`.toUpperCase();\n                        inCharRange = false;\n                    }\n                    else if (source[i + 1] === \"-\" && source[i + 2]?.match(/[a-z]/)) {\n                        pattern += source[i];\n                        inCharRange = true;\n                    }\n                    else {\n                        pattern += `${source[i]}${source[i].toUpperCase()}`;\n                    }\n                    continue;\n                }\n            }\n            else if (source[i].match(/[a-z]/)) {\n                pattern += `[${source[i]}${source[i].toUpperCase()}]`;\n                continue;\n            }\n        }\n        if (flags.m) {\n            if (source[i] === \"^\") {\n                pattern += `(^|(?<=[\\r\\n]))`;\n                continue;\n            }\n            else if (source[i] === \"$\") {\n                pattern += `($|(?=[\\r\\n]))`;\n                continue;\n            }\n        }\n        if (flags.s && source[i] === \".\") {\n            pattern += inCharGroup ? `${source[i]}\\r\\n` : `[${source[i]}\\r\\n]`;\n            continue;\n        }\n        pattern += source[i];\n        if (source[i] === \"\\\\\") {\n            isEscaped = true;\n        }\n        else if (inCharGroup && source[i] === \"]\") {\n            inCharGroup = false;\n        }\n        else if (!inCharGroup && source[i] === \"[\") {\n            inCharGroup = true;\n        }\n    }\n    try {\n        new RegExp(pattern);\n    }\n    catch {\n        console.warn(`Could not convert regex pattern at ${refs.currentPath.join(\"/\")} to a flag-independent form! Falling back to the flag-ignorant source`);\n        return regex.source;\n    }\n    return pattern;\n}\n", null, null, null, null, null, null, null, null, "import { BigBrainAuth, Context, ErrorType } from \"../../../bundler/context.js\";\nimport { Filesystem, nodeFs } from \"../../../bundler/fs.js\";\nimport { Ora } from \"ora\";\nimport {\n  DeploymentSelectionWithinProject,\n  deploymentSelectionWithinProjectSchema,\n  DeploymentSelectionOptions,\n} from \"../api.js\";\nimport { z } from \"zod\";\nimport {\n  DeploymentSelection,\n  getDeploymentSelection,\n} from \"../deploymentSelection.js\";\n\nexport interface McpOptions extends DeploymentSelectionOptions {\n  projectDir?: string;\n  disableTools?: string;\n  dangerouslyEnableProductionDeployments?: boolean;\n  cautiouslyAllowProductionPii?: boolean;\n}\n\nexport class RequestContext implements Context {\n  fs: Filesystem;\n  deprecationMessagePrinted = false;\n  spinner: Ora | undefined;\n  _cleanupFns: Record<string, (exitCode: number, err?: any) => Promise<void>> =\n    {};\n  _bigBrainAuth: BigBrainAuth | null = null;\n  constructor(public options: McpOptions) {\n    this.fs = nodeFs;\n    this.deprecationMessagePrinted = false;\n  }\n\n  async crash(args: {\n    exitCode: number;\n    errorType?: ErrorType;\n    errForSentry?: any;\n    printedMessage: string | null;\n  }): Promise<never> {\n    const cleanupFns = this._cleanupFns;\n    this._cleanupFns = {};\n    for (const fn of Object.values(cleanupFns)) {\n      await fn(args.exitCode, args.errForSentry);\n    }\n    // eslint-disable-next-line no-restricted-syntax\n    throw new RequestCrash(args.exitCode, args.errorType, args.printedMessage);\n  }\n\n  flushAndExit() {\n    // eslint-disable-next-line no-restricted-syntax\n    throw new Error(\"Not implemented\");\n  }\n\n  registerCleanup(fn: (exitCode: number, err?: any) => Promise<void>): string {\n    const handle = crypto.randomUUID();\n    this._cleanupFns[handle] = fn;\n    return handle;\n  }\n\n  removeCleanup(handle: string) {\n    const value = this._cleanupFns[handle];\n    delete this._cleanupFns[handle];\n    return value ?? null;\n  }\n\n  bigBrainAuth(): BigBrainAuth | null {\n    return this._bigBrainAuth;\n  }\n\n  _updateBigBrainAuth(auth: BigBrainAuth | null): void {\n    this._bigBrainAuth = auth;\n  }\n\n  async decodeDeploymentSelector(encoded: string) {\n    const { projectDir, deployment } = decodeDeploymentSelector(encoded);\n    if (\n      deployment.kind === \"prod\" &&\n      !this.options.dangerouslyEnableProductionDeployments\n    ) {\n      return await this.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage:\n          \"This tool cannot be used with production deployments. Use a read-only tool like `insights` instead, or enable production access with --dangerously-enable-production-deployments.\",\n      });\n    }\n    return { projectDir, deployment };\n  }\n\n  /** Decode a deployment selector without checking the production guard. Use for read-only tools that don't expose PII (e.g. insights). */\n  decodeDeploymentSelectorUnchecked(encoded: string) {\n    return decodeDeploymentSelector(encoded);\n  }\n\n  /** Decode a deployment selector for read-only tools that may expose PII (e.g. data, logs, queries). Requires --cautiously-allow-production-pii. */\n  async decodeDeploymentSelectorReadOnly(encoded: string) {\n    const { projectDir, deployment } = decodeDeploymentSelector(encoded);\n    if (\n      deployment.kind === \"prod\" &&\n      !this.options.dangerouslyEnableProductionDeployments &&\n      !this.options.cautiouslyAllowProductionPii\n    ) {\n      return await this.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage:\n          \"This read-only tool may expose PII from production. Enable with --cautiously-allow-production-pii, or use --dangerously-enable-production-deployments for full access.\",\n      });\n    }\n    return { projectDir, deployment };\n  }\n\n  get productionDeploymentsDisabled() {\n    return !this.options.dangerouslyEnableProductionDeployments;\n  }\n\n  get productionPiiAllowed() {\n    return (\n      this.options.dangerouslyEnableProductionDeployments ||\n      this.options.cautiouslyAllowProductionPii\n    );\n  }\n}\n\nexport class RequestCrash {\n  printedMessage: string;\n  constructor(\n    private exitCode: number,\n    private errorType: ErrorType | undefined,\n    printedMessage: string | null,\n  ) {\n    this.printedMessage = printedMessage ?? \"Unknown error\";\n  }\n\n  toString(): string {\n    return this.printedMessage;\n  }\n}\n\n// Unfortunately, MCP clients don't seem to handle nested JSON objects very\n// well (even though this is within spec). To work around this, encode the\n// deployment selectors as an obfuscated string that the MCP client can\n// opaquely pass around.\nexport function encodeDeploymentSelector(\n  projectDir: string,\n  deployment: DeploymentSelectionWithinProject,\n) {\n  const payload = {\n    projectDir,\n    deployment,\n  };\n  return `${deployment.kind}:${btoa(JSON.stringify(payload))}`;\n}\n\nconst payloadSchema = z.object({\n  projectDir: z.string(),\n  deployment: deploymentSelectionWithinProjectSchema,\n});\n\nfunction decodeDeploymentSelector(encoded: string) {\n  const [_, serializedPayload] = encoded.split(\":\");\n  return payloadSchema.parse(JSON.parse(atob(serializedPayload)));\n}\n\n/**\n * Get the deployment selection for MCP tools. The agent can pass different\n * values of `selectionWithinProject` into a tool, so we overwrite the\n * `selectionWithinProject` of the `DeploymentSelection` if it exists.\n */\nexport async function getMcpDeploymentSelection(\n  ctx: RequestContext,\n  decodedDeploymentSelector: DeploymentSelectionWithinProject,\n): Promise<DeploymentSelection> {\n  const initialSelection = await getDeploymentSelection(ctx, ctx.options);\n  const hasSelectionWithinProject =\n    initialSelection.kind !== \"existingDeployment\";\n  return {\n    ...initialSelection,\n    ...(hasSelectionWithinProject && {\n      selectionWithinProject: decodedDeploymentSelector,\n    }),\n  };\n}\n", "export const ignoreOverride = Symbol(\"Let zodToJsonSchema decide on which parser to use\");\nexport const jsonDescription = (jsonSchema, def) => {\n    if (def.description) {\n        try {\n            return {\n                ...jsonSchema,\n                ...JSON.parse(def.description),\n            };\n        }\n        catch { }\n    }\n    return jsonSchema;\n};\nexport const defaultOptions = {\n    name: undefined,\n    $refStrategy: \"root\",\n    basePath: [\"#\"],\n    effectStrategy: \"input\",\n    pipeStrategy: \"all\",\n    dateStrategy: \"format:date-time\",\n    mapStrategy: \"entries\",\n    removeAdditionalStrategy: \"passthrough\",\n    allowedAdditionalProperties: true,\n    rejectedAdditionalProperties: false,\n    definitionPath: \"definitions\",\n    target: \"jsonSchema7\",\n    strictUnions: false,\n    definitions: {},\n    errorMessages: false,\n    markdownDescription: false,\n    patternStrategy: \"escape\",\n    applyRegexFlags: false,\n    emailStrategy: \"format:email\",\n    base64Strategy: \"contentEncoding:base64\",\n    nameStrategy: \"ref\",\n    openAiAnyTypeName: \"OpenAiAnyType\"\n};\nexport const getDefaultOptions = (options) => (typeof options === \"string\"\n    ? {\n        ...defaultOptions,\n        name: options,\n    }\n    : {\n        ...defaultOptions,\n        ...options,\n    });\n", "import { getDefaultOptions } from \"./Options.js\";\nexport const getRefs = (options) => {\n    const _options = getDefaultOptions(options);\n    const currentPath = _options.name !== undefined\n        ? [..._options.basePath, _options.definitionPath, _options.name]\n        : _options.basePath;\n    return {\n        ..._options,\n        flags: { hasReferencedOpenAiAnyType: false },\n        currentPath: currentPath,\n        propertyPath: undefined,\n        seen: new Map(Object.entries(_options.definitions).map(([name, def]) => [\n            def._def,\n            {\n                def: def._def,\n                path: [..._options.basePath, _options.definitionPath, name],\n                // Resolution of references will be forced even though seen, so it's ok that the schema is undefined here for now.\n                jsonSchema: undefined,\n            },\n        ])),\n    };\n};\n", "export function addErrorMessage(res, key, errorMessage, refs) {\n    if (!refs?.errorMessages)\n        return;\n    if (errorMessage) {\n        res.errorMessage = {\n            ...res.errorMessage,\n            [key]: errorMessage,\n        };\n    }\n}\nexport function setResponseValueAndErrors(res, key, value, errorMessage, refs) {\n    res[key] = value;\n    addErrorMessage(res, key, errorMessage, refs);\n}\n", "export const getRelativePath = (pathA, pathB) => {\n    let i = 0;\n    for (; i < pathA.length && i < pathB.length; i++) {\n        if (pathA[i] !== pathB[i])\n            break;\n    }\n    return [(pathA.length - i).toString(), ...pathB.slice(i)].join(\"/\");\n};\n", "import { getRelativePath } from \"../getRelativePath.js\";\nexport function parseAnyDef(refs) {\n    if (refs.target !== \"openAi\") {\n        return {};\n    }\n    const anyDefinitionPath = [\n        ...refs.basePath,\n        refs.definitionPath,\n        refs.openAiAnyTypeName,\n    ];\n    refs.flags.hasReferencedOpenAiAnyType = true;\n    return {\n        $ref: refs.$refStrategy === \"relative\"\n            ? getRelativePath(anyDefinitionPath, refs.currentPath)\n            : anyDefinitionPath.join(\"/\"),\n    };\n}\n", "import { ZodFirstPartyTypeKind } from \"zod\";\nimport { setResponseValueAndErrors } from \"../errorMessages.js\";\nimport { parseDef } from \"../parseDef.js\";\nexport function parseArrayDef(def, refs) {\n    const res = {\n        type: \"array\",\n    };\n    if (def.type?._def &&\n        def.type?._def?.typeName !== ZodFirstPartyTypeKind.ZodAny) {\n        res.items = parseDef(def.type._def, {\n            ...refs,\n            currentPath: [...refs.currentPath, \"items\"],\n        });\n    }\n    if (def.minLength) {\n        setResponseValueAndErrors(res, \"minItems\", def.minLength.value, def.minLength.message, refs);\n    }\n    if (def.maxLength) {\n        setResponseValueAndErrors(res, \"maxItems\", def.maxLength.value, def.maxLength.message, refs);\n    }\n    if (def.exactLength) {\n        setResponseValueAndErrors(res, \"minItems\", def.exactLength.value, def.exactLength.message, refs);\n        setResponseValueAndErrors(res, \"maxItems\", def.exactLength.value, def.exactLength.message, refs);\n    }\n    return res;\n}\n", "import { setResponseValueAndErrors } from \"../errorMessages.js\";\nexport function parseBigintDef(def, refs) {\n    const res = {\n        type: \"integer\",\n        format: \"int64\",\n    };\n    if (!def.checks)\n        return res;\n    for (const check of def.checks) {\n        switch (check.kind) {\n            case \"min\":\n                if (refs.target === \"jsonSchema7\") {\n                    if (check.inclusive) {\n                        setResponseValueAndErrors(res, \"minimum\", check.value, check.message, refs);\n                    }\n                    else {\n                        setResponseValueAndErrors(res, \"exclusiveMinimum\", check.value, check.message, refs);\n                    }\n                }\n                else {\n                    if (!check.inclusive) {\n                        res.exclusiveMinimum = true;\n                    }\n                    setResponseValueAndErrors(res, \"minimum\", check.value, check.message, refs);\n                }\n                break;\n            case \"max\":\n                if (refs.target === \"jsonSchema7\") {\n                    if (check.inclusive) {\n                        setResponseValueAndErrors(res, \"maximum\", check.value, check.message, refs);\n                    }\n                    else {\n                        setResponseValueAndErrors(res, \"exclusiveMaximum\", check.value, check.message, refs);\n                    }\n                }\n                else {\n                    if (!check.inclusive) {\n                        res.exclusiveMaximum = true;\n                    }\n                    setResponseValueAndErrors(res, \"maximum\", check.value, check.message, refs);\n                }\n                break;\n            case \"multipleOf\":\n                setResponseValueAndErrors(res, \"multipleOf\", check.value, check.message, refs);\n                break;\n        }\n    }\n    return res;\n}\n", "export function parseBooleanDef() {\n    return {\n        type: \"boolean\",\n    };\n}\n", "import { parseDef } from \"../parseDef.js\";\nexport function parseBrandedDef(_def, refs) {\n    return parseDef(_def.type._def, refs);\n}\n", "import { parseDef } from \"../parseDef.js\";\nexport const parseCatchDef = (def, refs) => {\n    return parseDef(def.innerType._def, refs);\n};\n", "import { setResponseValueAndErrors } from \"../errorMessages.js\";\nexport function parseDateDef(def, refs, overrideDateStrategy) {\n    const strategy = overrideDateStrategy ?? refs.dateStrategy;\n    if (Array.isArray(strategy)) {\n        return {\n            anyOf: strategy.map((item, i) => parseDateDef(def, refs, item)),\n        };\n    }\n    switch (strategy) {\n        case \"string\":\n        case \"format:date-time\":\n            return {\n                type: \"string\",\n                format: \"date-time\",\n            };\n        case \"format:date\":\n            return {\n                type: \"string\",\n                format: \"date\",\n            };\n        case \"integer\":\n            return integerDateParser(def, refs);\n    }\n}\nconst integerDateParser = (def, refs) => {\n    const res = {\n        type: \"integer\",\n        format: \"unix-time\",\n    };\n    if (refs.target === \"openApi3\") {\n        return res;\n    }\n    for (const check of def.checks) {\n        switch (check.kind) {\n            case \"min\":\n                setResponseValueAndErrors(res, \"minimum\", check.value, // This is in milliseconds\n                check.message, refs);\n                break;\n            case \"max\":\n                setResponseValueAndErrors(res, \"maximum\", check.value, // This is in milliseconds\n                check.message, refs);\n                break;\n        }\n    }\n    return res;\n};\n", "import { parseDef } from \"../parseDef.js\";\nexport function parseDefaultDef(_def, refs) {\n    return {\n        ...parseDef(_def.innerType._def, refs),\n        default: _def.defaultValue(),\n    };\n}\n", "import { parseDef } from \"../parseDef.js\";\nimport { parseAnyDef } from \"./any.js\";\nexport function parseEffectsDef(_def, refs) {\n    return refs.effectStrategy === \"input\"\n        ? parseDef(_def.schema._def, refs)\n        : parseAnyDef(refs);\n}\n", "export function parseEnumDef(def) {\n    return {\n        type: \"string\",\n        enum: Array.from(def.values),\n    };\n}\n", "import { parseDef } from \"../parseDef.js\";\nconst isJsonSchema7AllOfType = (type) => {\n    if (\"type\" in type && type.type === \"string\")\n        return false;\n    return \"allOf\" in type;\n};\nexport function parseIntersectionDef(def, refs) {\n    const allOf = [\n        parseDef(def.left._def, {\n            ...refs,\n            currentPath: [...refs.currentPath, \"allOf\", \"0\"],\n        }),\n        parseDef(def.right._def, {\n            ...refs,\n            currentPath: [...refs.currentPath, \"allOf\", \"1\"],\n        }),\n    ].filter((x) => !!x);\n    let unevaluatedProperties = refs.target === \"jsonSchema2019-09\"\n        ? { unevaluatedProperties: false }\n        : undefined;\n    const mergedAllOf = [];\n    // If either of the schemas is an allOf, merge them into a single allOf\n    allOf.forEach((schema) => {\n        if (isJsonSchema7AllOfType(schema)) {\n            mergedAllOf.push(...schema.allOf);\n            if (schema.unevaluatedProperties === undefined) {\n                // If one of the schemas has no unevaluatedProperties set,\n                // the merged schema should also have no unevaluatedProperties set\n                unevaluatedProperties = undefined;\n            }\n        }\n        else {\n            let nestedSchema = schema;\n            if (\"additionalProperties\" in schema &&\n                schema.additionalProperties === false) {\n                const { additionalProperties, ...rest } = schema;\n                nestedSchema = rest;\n            }\n            else {\n                // As soon as one of the schemas has additionalProperties set not to false, we allow unevaluatedProperties\n                unevaluatedProperties = undefined;\n            }\n            mergedAllOf.push(nestedSchema);\n        }\n    });\n    return mergedAllOf.length\n        ? {\n            allOf: mergedAllOf,\n            ...unevaluatedProperties,\n        }\n        : undefined;\n}\n", "export function parseLiteralDef(def, refs) {\n    const parsedType = typeof def.value;\n    if (parsedType !== \"bigint\" &&\n        parsedType !== \"number\" &&\n        parsedType !== \"boolean\" &&\n        parsedType !== \"string\") {\n        return {\n            type: Array.isArray(def.value) ? \"array\" : \"object\",\n        };\n    }\n    if (refs.target === \"openApi3\") {\n        return {\n            type: parsedType === \"bigint\" ? \"integer\" : parsedType,\n            enum: [def.value],\n        };\n    }\n    return {\n        type: parsedType === \"bigint\" ? \"integer\" : parsedType,\n        const: def.value,\n    };\n}\n", "import { setResponseValueAndErrors } from \"../errorMessages.js\";\nlet emojiRegex = undefined;\n/**\n * Generated from the regular expressions found here as of 2024-05-22:\n * https://github.com/colinhacks/zod/blob/master/src/types.ts.\n *\n * Expressions with /i flag have been changed accordingly.\n */\nexport const zodPatterns = {\n    /**\n     * `c` was changed to `[cC]` to replicate /i flag\n     */\n    cuid: /^[cC][^\\s-]{8,}$/,\n    cuid2: /^[0-9a-z]+$/,\n    ulid: /^[0-9A-HJKMNP-TV-Z]{26}$/,\n    /**\n     * `a-z` was added to replicate /i flag\n     */\n    email: /^(?!\\.)(?!.*\\.\\.)([a-zA-Z0-9_'+\\-\\.]*)[a-zA-Z0-9_+-]@([a-zA-Z0-9][a-zA-Z0-9\\-]*\\.)+[a-zA-Z]{2,}$/,\n    /**\n     * Constructed a valid Unicode RegExp\n     *\n     * Lazily instantiate since this type of regex isn't supported\n     * in all envs (e.g. React Native).\n     *\n     * See:\n     * https://github.com/colinhacks/zod/issues/2433\n     * Fix in Zod:\n     * https://github.com/colinhacks/zod/commit/9340fd51e48576a75adc919bff65dbc4a5d4c99b\n     */\n    emoji: () => {\n        if (emojiRegex === undefined) {\n            emojiRegex = RegExp(\"^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$\", \"u\");\n        }\n        return emojiRegex;\n    },\n    /**\n     * Unused\n     */\n    uuid: /^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$/,\n    /**\n     * Unused\n     */\n    ipv4: /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,\n    ipv4Cidr: /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/(3[0-2]|[12]?[0-9])$/,\n    /**\n     * Unused\n     */\n    ipv6: /^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/,\n    ipv6Cidr: /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,\n    base64: /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,\n    base64url: /^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,\n    nanoid: /^[a-zA-Z0-9_-]{21}$/,\n    jwt: /^[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]*$/,\n};\nexport function parseStringDef(def, refs) {\n    const res = {\n        type: \"string\",\n    };\n    if (def.checks) {\n        for (const check of def.checks) {\n            switch (check.kind) {\n                case \"min\":\n                    setResponseValueAndErrors(res, \"minLength\", typeof res.minLength === \"number\"\n                        ? Math.max(res.minLength, check.value)\n                        : check.value, check.message, refs);\n                    break;\n                case \"max\":\n                    setResponseValueAndErrors(res, \"maxLength\", typeof res.maxLength === \"number\"\n                        ? Math.min(res.maxLength, check.value)\n                        : check.value, check.message, refs);\n                    break;\n                case \"email\":\n                    switch (refs.emailStrategy) {\n                        case \"format:email\":\n                            addFormat(res, \"email\", check.message, refs);\n                            break;\n                        case \"format:idn-email\":\n                            addFormat(res, \"idn-email\", check.message, refs);\n                            break;\n                        case \"pattern:zod\":\n                            addPattern(res, zodPatterns.email, check.message, refs);\n                            break;\n                    }\n                    break;\n                case \"url\":\n                    addFormat(res, \"uri\", check.message, refs);\n                    break;\n                case \"uuid\":\n                    addFormat(res, \"uuid\", check.message, refs);\n                    break;\n                case \"regex\":\n                    addPattern(res, check.regex, check.message, refs);\n                    break;\n                case \"cuid\":\n                    addPattern(res, zodPatterns.cuid, check.message, refs);\n                    break;\n                case \"cuid2\":\n                    addPattern(res, zodPatterns.cuid2, check.message, refs);\n                    break;\n                case \"startsWith\":\n                    addPattern(res, RegExp(`^${escapeLiteralCheckValue(check.value, refs)}`), check.message, refs);\n                    break;\n                case \"endsWith\":\n                    addPattern(res, RegExp(`${escapeLiteralCheckValue(check.value, refs)}$`), check.message, refs);\n                    break;\n                case \"datetime\":\n                    addFormat(res, \"date-time\", check.message, refs);\n                    break;\n                case \"date\":\n                    addFormat(res, \"date\", check.message, refs);\n                    break;\n                case \"time\":\n                    addFormat(res, \"time\", check.message, refs);\n                    break;\n                case \"duration\":\n                    addFormat(res, \"duration\", check.message, refs);\n                    break;\n                case \"length\":\n                    setResponseValueAndErrors(res, \"minLength\", typeof res.minLength === \"number\"\n                        ? Math.max(res.minLength, check.value)\n                        : check.value, check.message, refs);\n                    setResponseValueAndErrors(res, \"maxLength\", typeof res.maxLength === \"number\"\n                        ? Math.min(res.maxLength, check.value)\n                        : check.value, check.message, refs);\n                    break;\n                case \"includes\": {\n                    addPattern(res, RegExp(escapeLiteralCheckValue(check.value, refs)), check.message, refs);\n                    break;\n                }\n                case \"ip\": {\n                    if (check.version !== \"v6\") {\n                        addFormat(res, \"ipv4\", check.message, refs);\n                    }\n                    if (check.version !== \"v4\") {\n                        addFormat(res, \"ipv6\", check.message, refs);\n                    }\n                    break;\n                }\n                case \"base64url\":\n                    addPattern(res, zodPatterns.base64url, check.message, refs);\n                    break;\n                case \"jwt\":\n                    addPattern(res, zodPatterns.jwt, check.message, refs);\n                    break;\n                case \"cidr\": {\n                    if (check.version !== \"v6\") {\n                        addPattern(res, zodPatterns.ipv4Cidr, check.message, refs);\n                    }\n                    if (check.version !== \"v4\") {\n                        addPattern(res, zodPatterns.ipv6Cidr, check.message, refs);\n                    }\n                    break;\n                }\n                case \"emoji\":\n                    addPattern(res, zodPatterns.emoji(), check.message, refs);\n                    break;\n                case \"ulid\": {\n                    addPattern(res, zodPatterns.ulid, check.message, refs);\n                    break;\n                }\n                case \"base64\": {\n                    switch (refs.base64Strategy) {\n                        case \"format:binary\": {\n                            addFormat(res, \"binary\", check.message, refs);\n                            break;\n                        }\n                        case \"contentEncoding:base64\": {\n                            setResponseValueAndErrors(res, \"contentEncoding\", \"base64\", check.message, refs);\n                            break;\n                        }\n                        case \"pattern:zod\": {\n                            addPattern(res, zodPatterns.base64, check.message, refs);\n                            break;\n                        }\n                    }\n                    break;\n                }\n                case \"nanoid\": {\n                    addPattern(res, zodPatterns.nanoid, check.message, refs);\n                }\n                case \"toLowerCase\":\n                case \"toUpperCase\":\n                case \"trim\":\n                    break;\n                default:\n                    /* c8 ignore next */\n                    ((_) => { })(check);\n            }\n        }\n    }\n    return res;\n}\nfunction escapeLiteralCheckValue(literal, refs) {\n    return refs.patternStrategy === \"escape\"\n        ? escapeNonAlphaNumeric(literal)\n        : literal;\n}\nconst ALPHA_NUMERIC = new Set(\"ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyz0123456789\");\nfunction escapeNonAlphaNumeric(source) {\n    let result = \"\";\n    for (let i = 0; i < source.length; i++) {\n        if (!ALPHA_NUMERIC.has(source[i])) {\n            result += \"\\\\\";\n        }\n        result += source[i];\n    }\n    return result;\n}\n// Adds a \"format\" keyword to the schema. If a format exists, both formats will be joined in an allOf-node, along with subsequent ones.\nfunction addFormat(schema, value, message, refs) {\n    if (schema.format || schema.anyOf?.some((x) => x.format)) {\n        if (!schema.anyOf) {\n            schema.anyOf = [];\n        }\n        if (schema.format) {\n            schema.anyOf.push({\n                format: schema.format,\n                ...(schema.errorMessage &&\n                    refs.errorMessages && {\n                    errorMessage: { format: schema.errorMessage.format },\n                }),\n            });\n            delete schema.format;\n            if (schema.errorMessage) {\n                delete schema.errorMessage.format;\n                if (Object.keys(schema.errorMessage).length === 0) {\n                    delete schema.errorMessage;\n                }\n            }\n        }\n        schema.anyOf.push({\n            format: value,\n            ...(message &&\n                refs.errorMessages && { errorMessage: { format: message } }),\n        });\n    }\n    else {\n        setResponseValueAndErrors(schema, \"format\", value, message, refs);\n    }\n}\n// Adds a \"pattern\" keyword to the schema. If a pattern exists, both patterns will be joined in an allOf-node, along with subsequent ones.\nfunction addPattern(schema, regex, message, refs) {\n    if (schema.pattern || schema.allOf?.some((x) => x.pattern)) {\n        if (!schema.allOf) {\n            schema.allOf = [];\n        }\n        if (schema.pattern) {\n            schema.allOf.push({\n                pattern: schema.pattern,\n                ...(schema.errorMessage &&\n                    refs.errorMessages && {\n                    errorMessage: { pattern: schema.errorMessage.pattern },\n                }),\n            });\n            delete schema.pattern;\n            if (schema.errorMessage) {\n                delete schema.errorMessage.pattern;\n                if (Object.keys(schema.errorMessage).length === 0) {\n                    delete schema.errorMessage;\n                }\n            }\n        }\n        schema.allOf.push({\n            pattern: stringifyRegExpWithFlags(regex, refs),\n            ...(message &&\n                refs.errorMessages && { errorMessage: { pattern: message } }),\n        });\n    }\n    else {\n        setResponseValueAndErrors(schema, \"pattern\", stringifyRegExpWithFlags(regex, refs), message, refs);\n    }\n}\n// Mutate z.string.regex() in a best attempt to accommodate for regex flags when applyRegexFlags is true\nfunction stringifyRegExpWithFlags(regex, refs) {\n    if (!refs.applyRegexFlags || !regex.flags) {\n        return regex.source;\n    }\n    // Currently handled flags\n    const flags = {\n        i: regex.flags.includes(\"i\"),\n        m: regex.flags.includes(\"m\"),\n        s: regex.flags.includes(\"s\"), // `.` matches newlines\n    };\n    // The general principle here is to step through each character, one at a time, applying mutations as flags require. We keep track when the current character is escaped, and when it's inside a group /like [this]/ or (also) a range like /[a-z]/. The following is fairly brittle imperative code; edit at your peril!\n    const source = flags.i ? regex.source.toLowerCase() : regex.source;\n    let pattern = \"\";\n    let isEscaped = false;\n    let inCharGroup = false;\n    let inCharRange = false;\n    for (let i = 0; i < source.length; i++) {\n        if (isEscaped) {\n            pattern += source[i];\n            isEscaped = false;\n            continue;\n        }\n        if (flags.i) {\n            if (inCharGroup) {\n                if (source[i].match(/[a-z]/)) {\n                    if (inCharRange) {\n                        pattern += source[i];\n                        pattern += `${source[i - 2]}-${source[i]}`.toUpperCase();\n                        inCharRange = false;\n                    }\n                    else if (source[i + 1] === \"-\" && source[i + 2]?.match(/[a-z]/)) {\n                        pattern += source[i];\n                        inCharRange = true;\n                    }\n                    else {\n                        pattern += `${source[i]}${source[i].toUpperCase()}`;\n                    }\n                    continue;\n                }\n            }\n            else if (source[i].match(/[a-z]/)) {\n                pattern += `[${source[i]}${source[i].toUpperCase()}]`;\n                continue;\n            }\n        }\n        if (flags.m) {\n            if (source[i] === \"^\") {\n                pattern += `(^|(?<=[\\r\\n]))`;\n                continue;\n            }\n            else if (source[i] === \"$\") {\n                pattern += `($|(?=[\\r\\n]))`;\n                continue;\n            }\n        }\n        if (flags.s && source[i] === \".\") {\n            pattern += inCharGroup ? `${source[i]}\\r\\n` : `[${source[i]}\\r\\n]`;\n            continue;\n        }\n        pattern += source[i];\n        if (source[i] === \"\\\\\") {\n            isEscaped = true;\n        }\n        else if (inCharGroup && source[i] === \"]\") {\n            inCharGroup = false;\n        }\n        else if (!inCharGroup && source[i] === \"[\") {\n            inCharGroup = true;\n        }\n    }\n    try {\n        new RegExp(pattern);\n    }\n    catch {\n        console.warn(`Could not convert regex pattern at ${refs.currentPath.join(\"/\")} to a flag-independent form! Falling back to the flag-ignorant source`);\n        return regex.source;\n    }\n    return pattern;\n}\n", "import { ZodFirstPartyTypeKind, } from \"zod\";\nimport { parseDef } from \"../parseDef.js\";\nimport { parseStringDef } from \"./string.js\";\nimport { parseBrandedDef } from \"./branded.js\";\nimport { parseAnyDef } from \"./any.js\";\nexport function parseRecordDef(def, refs) {\n    if (refs.target === \"openAi\") {\n        console.warn(\"Warning: OpenAI may not support records in schemas! Try an array of key-value pairs instead.\");\n    }\n    if (refs.target === \"openApi3\" &&\n        def.keyType?._def.typeName === ZodFirstPartyTypeKind.ZodEnum) {\n        return {\n            type: \"object\",\n            required: def.keyType._def.values,\n            properties: def.keyType._def.values.reduce((acc, key) => ({\n                ...acc,\n                [key]: parseDef(def.valueType._def, {\n                    ...refs,\n                    currentPath: [...refs.currentPath, \"properties\", key],\n                }) ?? parseAnyDef(refs),\n            }), {}),\n            additionalProperties: refs.rejectedAdditionalProperties,\n        };\n    }\n    const schema = {\n        type: \"object\",\n        additionalProperties: parseDef(def.valueType._def, {\n            ...refs,\n            currentPath: [...refs.currentPath, \"additionalProperties\"],\n        }) ?? refs.allowedAdditionalProperties,\n    };\n    if (refs.target === \"openApi3\") {\n        return schema;\n    }\n    if (def.keyType?._def.typeName === ZodFirstPartyTypeKind.ZodString &&\n        def.keyType._def.checks?.length) {\n        const { type, ...keyType } = parseStringDef(def.keyType._def, refs);\n        return {\n            ...schema,\n            propertyNames: keyType,\n        };\n    }\n    else if (def.keyType?._def.typeName === ZodFirstPartyTypeKind.ZodEnum) {\n        return {\n            ...schema,\n            propertyNames: {\n                enum: def.keyType._def.values,\n            },\n        };\n    }\n    else if (def.keyType?._def.typeName === ZodFirstPartyTypeKind.ZodBranded &&\n        def.keyType._def.type._def.typeName === ZodFirstPartyTypeKind.ZodString &&\n        def.keyType._def.type._def.checks?.length) {\n        const { type, ...keyType } = parseBrandedDef(def.keyType._def, refs);\n        return {\n            ...schema,\n            propertyNames: keyType,\n        };\n    }\n    return schema;\n}\n", "import { parseDef } from \"../parseDef.js\";\nimport { parseRecordDef } from \"./record.js\";\nimport { parseAnyDef } from \"./any.js\";\nexport function parseMapDef(def, refs) {\n    if (refs.mapStrategy === \"record\") {\n        return parseRecordDef(def, refs);\n    }\n    const keys = parseDef(def.keyType._def, {\n        ...refs,\n        currentPath: [...refs.currentPath, \"items\", \"items\", \"0\"],\n    }) || parseAnyDef(refs);\n    const values = parseDef(def.valueType._def, {\n        ...refs,\n        currentPath: [...refs.currentPath, \"items\", \"items\", \"1\"],\n    }) || parseAnyDef(refs);\n    return {\n        type: \"array\",\n        maxItems: 125,\n        items: {\n            type: \"array\",\n            items: [keys, values],\n            minItems: 2,\n            maxItems: 2,\n        },\n    };\n}\n", "export function parseNativeEnumDef(def) {\n    const object = def.values;\n    const actualKeys = Object.keys(def.values).filter((key) => {\n        return typeof object[object[key]] !== \"number\";\n    });\n    const actualValues = actualKeys.map((key) => object[key]);\n    const parsedTypes = Array.from(new Set(actualValues.map((values) => typeof values)));\n    return {\n        type: parsedTypes.length === 1\n            ? parsedTypes[0] === \"string\"\n                ? \"string\"\n                : \"number\"\n            : [\"string\", \"number\"],\n        enum: actualValues,\n    };\n}\n", "import { parseAnyDef } from \"./any.js\";\nexport function parseNeverDef(refs) {\n    return refs.target === \"openAi\"\n        ? undefined\n        : {\n            not: parseAnyDef({\n                ...refs,\n                currentPath: [...refs.currentPath, \"not\"],\n            }),\n        };\n}\n", "export function parseNullDef(refs) {\n    return refs.target === \"openApi3\"\n        ? {\n            enum: [\"null\"],\n            nullable: true,\n        }\n        : {\n            type: \"null\",\n        };\n}\n", "import { parseDef } from \"../parseDef.js\";\nexport const primitiveMappings = {\n    ZodString: \"string\",\n    ZodNumber: \"number\",\n    ZodBigInt: \"integer\",\n    ZodBoolean: \"boolean\",\n    ZodNull: \"null\",\n};\nexport function parseUnionDef(def, refs) {\n    if (refs.target === \"openApi3\")\n        return asAnyOf(def, refs);\n    const options = def.options instanceof Map ? Array.from(def.options.values()) : def.options;\n    // This blocks tries to look ahead a bit to produce nicer looking schemas with type array instead of anyOf.\n    if (options.every((x) => x._def.typeName in primitiveMappings &&\n        (!x._def.checks || !x._def.checks.length))) {\n        // all types in union are primitive and lack checks, so might as well squash into {type: [...]}\n        const types = options.reduce((types, x) => {\n            const type = primitiveMappings[x._def.typeName]; //Can be safely casted due to row 43\n            return type && !types.includes(type) ? [...types, type] : types;\n        }, []);\n        return {\n            type: types.length > 1 ? types : types[0],\n        };\n    }\n    else if (options.every((x) => x._def.typeName === \"ZodLiteral\" && !x.description)) {\n        // all options literals\n        const types = options.reduce((acc, x) => {\n            const type = typeof x._def.value;\n            switch (type) {\n                case \"string\":\n                case \"number\":\n                case \"boolean\":\n                    return [...acc, type];\n                case \"bigint\":\n                    return [...acc, \"integer\"];\n                case \"object\":\n                    if (x._def.value === null)\n                        return [...acc, \"null\"];\n                case \"symbol\":\n                case \"undefined\":\n                case \"function\":\n                default:\n                    return acc;\n            }\n        }, []);\n        if (types.length === options.length) {\n            // all the literals are primitive, as far as null can be considered primitive\n            const uniqueTypes = types.filter((x, i, a) => a.indexOf(x) === i);\n            return {\n                type: uniqueTypes.length > 1 ? uniqueTypes : uniqueTypes[0],\n                enum: options.reduce((acc, x) => {\n                    return acc.includes(x._def.value) ? acc : [...acc, x._def.value];\n                }, []),\n            };\n        }\n    }\n    else if (options.every((x) => x._def.typeName === \"ZodEnum\")) {\n        return {\n            type: \"string\",\n            enum: options.reduce((acc, x) => [\n                ...acc,\n                ...x._def.values.filter((x) => !acc.includes(x)),\n            ], []),\n        };\n    }\n    return asAnyOf(def, refs);\n}\nconst asAnyOf = (def, refs) => {\n    const anyOf = (def.options instanceof Map\n        ? Array.from(def.options.values())\n        : def.options)\n        .map((x, i) => parseDef(x._def, {\n        ...refs,\n        currentPath: [...refs.currentPath, \"anyOf\", `${i}`],\n    }))\n        .filter((x) => !!x &&\n        (!refs.strictUnions ||\n            (typeof x === \"object\" && Object.keys(x).length > 0)));\n    return anyOf.length ? { anyOf } : undefined;\n};\n", "import { parseDef } from \"../parseDef.js\";\nimport { primitiveMappings } from \"./union.js\";\nexport function parseNullableDef(def, refs) {\n    if ([\"ZodString\", \"ZodNumber\", \"ZodBigInt\", \"ZodBoolean\", \"ZodNull\"].includes(def.innerType._def.typeName) &&\n        (!def.innerType._def.checks || !def.innerType._def.checks.length)) {\n        if (refs.target === \"openApi3\") {\n            return {\n                type: primitiveMappings[def.innerType._def.typeName],\n                nullable: true,\n            };\n        }\n        return {\n            type: [\n                primitiveMappings[def.innerType._def.typeName],\n                \"null\",\n            ],\n        };\n    }\n    if (refs.target === \"openApi3\") {\n        const base = parseDef(def.innerType._def, {\n            ...refs,\n            currentPath: [...refs.currentPath],\n        });\n        if (base && \"$ref\" in base)\n            return { allOf: [base], nullable: true };\n        return base && { ...base, nullable: true };\n    }\n    const base = parseDef(def.innerType._def, {\n        ...refs,\n        currentPath: [...refs.currentPath, \"anyOf\", \"0\"],\n    });\n    return base && { anyOf: [base, { type: \"null\" }] };\n}\n", "import { addErrorMessage, setResponseValueAndErrors, } from \"../errorMessages.js\";\nexport function parseNumberDef(def, refs) {\n    const res = {\n        type: \"number\",\n    };\n    if (!def.checks)\n        return res;\n    for (const check of def.checks) {\n        switch (check.kind) {\n            case \"int\":\n                res.type = \"integer\";\n                addErrorMessage(res, \"type\", check.message, refs);\n                break;\n            case \"min\":\n                if (refs.target === \"jsonSchema7\") {\n                    if (check.inclusive) {\n                        setResponseValueAndErrors(res, \"minimum\", check.value, check.message, refs);\n                    }\n                    else {\n                        setResponseValueAndErrors(res, \"exclusiveMinimum\", check.value, check.message, refs);\n                    }\n                }\n                else {\n                    if (!check.inclusive) {\n                        res.exclusiveMinimum = true;\n                    }\n                    setResponseValueAndErrors(res, \"minimum\", check.value, check.message, refs);\n                }\n                break;\n            case \"max\":\n                if (refs.target === \"jsonSchema7\") {\n                    if (check.inclusive) {\n                        setResponseValueAndErrors(res, \"maximum\", check.value, check.message, refs);\n                    }\n                    else {\n                        setResponseValueAndErrors(res, \"exclusiveMaximum\", check.value, check.message, refs);\n                    }\n                }\n                else {\n                    if (!check.inclusive) {\n                        res.exclusiveMaximum = true;\n                    }\n                    setResponseValueAndErrors(res, \"maximum\", check.value, check.message, refs);\n                }\n                break;\n            case \"multipleOf\":\n                setResponseValueAndErrors(res, \"multipleOf\", check.value, check.message, refs);\n                break;\n        }\n    }\n    return res;\n}\n", "import { parseDef } from \"../parseDef.js\";\nexport function parseObjectDef(def, refs) {\n    const forceOptionalIntoNullable = refs.target === \"openAi\";\n    const result = {\n        type: \"object\",\n        properties: {},\n    };\n    const required = [];\n    const shape = def.shape();\n    for (const propName in shape) {\n        let propDef = shape[propName];\n        if (propDef === undefined || propDef._def === undefined) {\n            continue;\n        }\n        let propOptional = safeIsOptional(propDef);\n        if (propOptional && forceOptionalIntoNullable) {\n            if (propDef._def.typeName === \"ZodOptional\") {\n                propDef = propDef._def.innerType;\n            }\n            if (!propDef.isNullable()) {\n                propDef = propDef.nullable();\n            }\n            propOptional = false;\n        }\n        const parsedDef = parseDef(propDef._def, {\n            ...refs,\n            currentPath: [...refs.currentPath, \"properties\", propName],\n            propertyPath: [...refs.currentPath, \"properties\", propName],\n        });\n        if (parsedDef === undefined) {\n            continue;\n        }\n        result.properties[propName] = parsedDef;\n        if (!propOptional) {\n            required.push(propName);\n        }\n    }\n    if (required.length) {\n        result.required = required;\n    }\n    const additionalProperties = decideAdditionalProperties(def, refs);\n    if (additionalProperties !== undefined) {\n        result.additionalProperties = additionalProperties;\n    }\n    return result;\n}\nfunction decideAdditionalProperties(def, refs) {\n    if (def.catchall._def.typeName !== \"ZodNever\") {\n        return parseDef(def.catchall._def, {\n            ...refs,\n            currentPath: [...refs.currentPath, \"additionalProperties\"],\n        });\n    }\n    switch (def.unknownKeys) {\n        case \"passthrough\":\n            return refs.allowedAdditionalProperties;\n        case \"strict\":\n            return refs.rejectedAdditionalProperties;\n        case \"strip\":\n            return refs.removeAdditionalStrategy === \"strict\"\n                ? refs.allowedAdditionalProperties\n                : refs.rejectedAdditionalProperties;\n    }\n}\nfunction safeIsOptional(schema) {\n    try {\n        return schema.isOptional();\n    }\n    catch {\n        return true;\n    }\n}\n", "import { parseDef } from \"../parseDef.js\";\nimport { parseAnyDef } from \"./any.js\";\nexport const parseOptionalDef = (def, refs) => {\n    if (refs.currentPath.toString() === refs.propertyPath?.toString()) {\n        return parseDef(def.innerType._def, refs);\n    }\n    const innerSchema = parseDef(def.innerType._def, {\n        ...refs,\n        currentPath: [...refs.currentPath, \"anyOf\", \"1\"],\n    });\n    return innerSchema\n        ? {\n            anyOf: [\n                {\n                    not: parseAnyDef(refs),\n                },\n                innerSchema,\n            ],\n        }\n        : parseAnyDef(refs);\n};\n", "import { parseDef } from \"../parseDef.js\";\nexport const parsePipelineDef = (def, refs) => {\n    if (refs.pipeStrategy === \"input\") {\n        return parseDef(def.in._def, refs);\n    }\n    else if (refs.pipeStrategy === \"output\") {\n        return parseDef(def.out._def, refs);\n    }\n    const a = parseDef(def.in._def, {\n        ...refs,\n        currentPath: [...refs.currentPath, \"allOf\", \"0\"],\n    });\n    const b = parseDef(def.out._def, {\n        ...refs,\n        currentPath: [...refs.currentPath, \"allOf\", a ? \"1\" : \"0\"],\n    });\n    return {\n        allOf: [a, b].filter((x) => x !== undefined),\n    };\n};\n", "import { parseDef } from \"../parseDef.js\";\nexport function parsePromiseDef(def, refs) {\n    return parseDef(def.type._def, refs);\n}\n", "import { setResponseValueAndErrors } from \"../errorMessages.js\";\nimport { parseDef } from \"../parseDef.js\";\nexport function parseSetDef(def, refs) {\n    const items = parseDef(def.valueType._def, {\n        ...refs,\n        currentPath: [...refs.currentPath, \"items\"],\n    });\n    const schema = {\n        type: \"array\",\n        uniqueItems: true,\n        items,\n    };\n    if (def.minSize) {\n        setResponseValueAndErrors(schema, \"minItems\", def.minSize.value, def.minSize.message, refs);\n    }\n    if (def.maxSize) {\n        setResponseValueAndErrors(schema, \"maxItems\", def.maxSize.value, def.maxSize.message, refs);\n    }\n    return schema;\n}\n", "import { parseDef } from \"../parseDef.js\";\nexport function parseTupleDef(def, refs) {\n    if (def.rest) {\n        return {\n            type: \"array\",\n            minItems: def.items.length,\n            items: def.items\n                .map((x, i) => parseDef(x._def, {\n                ...refs,\n                currentPath: [...refs.currentPath, \"items\", `${i}`],\n            }))\n                .reduce((acc, x) => (x === undefined ? acc : [...acc, x]), []),\n            additionalItems: parseDef(def.rest._def, {\n                ...refs,\n                currentPath: [...refs.currentPath, \"additionalItems\"],\n            }),\n        };\n    }\n    else {\n        return {\n            type: \"array\",\n            minItems: def.items.length,\n            maxItems: def.items.length,\n            items: def.items\n                .map((x, i) => parseDef(x._def, {\n                ...refs,\n                currentPath: [...refs.currentPath, \"items\", `${i}`],\n            }))\n                .reduce((acc, x) => (x === undefined ? acc : [...acc, x]), []),\n        };\n    }\n}\n", "import { parseAnyDef } from \"./any.js\";\nexport function parseUndefinedDef(refs) {\n    return {\n        not: parseAnyDef(refs),\n    };\n}\n", "import { parseAnyDef } from \"./any.js\";\nexport function parseUnknownDef(refs) {\n    return parseAnyDef(refs);\n}\n", "import { parseDef } from \"../parseDef.js\";\nexport const parseReadonlyDef = (def, refs) => {\n    return parseDef(def.innerType._def, refs);\n};\n", "import { ZodFirstPartyTypeKind } from \"zod\";\nimport { parseAnyDef } from \"./parsers/any.js\";\nimport { parseArrayDef } from \"./parsers/array.js\";\nimport { parseBigintDef } from \"./parsers/bigint.js\";\nimport { parseBooleanDef } from \"./parsers/boolean.js\";\nimport { parseBrandedDef } from \"./parsers/branded.js\";\nimport { parseCatchDef } from \"./parsers/catch.js\";\nimport { parseDateDef } from \"./parsers/date.js\";\nimport { parseDefaultDef } from \"./parsers/default.js\";\nimport { parseEffectsDef } from \"./parsers/effects.js\";\nimport { parseEnumDef } from \"./parsers/enum.js\";\nimport { parseIntersectionDef } from \"./parsers/intersection.js\";\nimport { parseLiteralDef } from \"./parsers/literal.js\";\nimport { parseMapDef } from \"./parsers/map.js\";\nimport { parseNativeEnumDef } from \"./parsers/nativeEnum.js\";\nimport { parseNeverDef } from \"./parsers/never.js\";\nimport { parseNullDef } from \"./parsers/null.js\";\nimport { parseNullableDef } from \"./parsers/nullable.js\";\nimport { parseNumberDef } from \"./parsers/number.js\";\nimport { parseObjectDef } from \"./parsers/object.js\";\nimport { parseOptionalDef } from \"./parsers/optional.js\";\nimport { parsePipelineDef } from \"./parsers/pipeline.js\";\nimport { parsePromiseDef } from \"./parsers/promise.js\";\nimport { parseRecordDef } from \"./parsers/record.js\";\nimport { parseSetDef } from \"./parsers/set.js\";\nimport { parseStringDef } from \"./parsers/string.js\";\nimport { parseTupleDef } from \"./parsers/tuple.js\";\nimport { parseUndefinedDef } from \"./parsers/undefined.js\";\nimport { parseUnionDef } from \"./parsers/union.js\";\nimport { parseUnknownDef } from \"./parsers/unknown.js\";\nimport { parseReadonlyDef } from \"./parsers/readonly.js\";\nexport const selectParser = (def, typeName, refs) => {\n    switch (typeName) {\n        case ZodFirstPartyTypeKind.ZodString:\n            return parseStringDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodNumber:\n            return parseNumberDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodObject:\n            return parseObjectDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodBigInt:\n            return parseBigintDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodBoolean:\n            return parseBooleanDef();\n        case ZodFirstPartyTypeKind.ZodDate:\n            return parseDateDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodUndefined:\n            return parseUndefinedDef(refs);\n        case ZodFirstPartyTypeKind.ZodNull:\n            return parseNullDef(refs);\n        case ZodFirstPartyTypeKind.ZodArray:\n            return parseArrayDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodUnion:\n        case ZodFirstPartyTypeKind.ZodDiscriminatedUnion:\n            return parseUnionDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodIntersection:\n            return parseIntersectionDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodTuple:\n            return parseTupleDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodRecord:\n            return parseRecordDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodLiteral:\n            return parseLiteralDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodEnum:\n            return parseEnumDef(def);\n        case ZodFirstPartyTypeKind.ZodNativeEnum:\n            return parseNativeEnumDef(def);\n        case ZodFirstPartyTypeKind.ZodNullable:\n            return parseNullableDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodOptional:\n            return parseOptionalDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodMap:\n            return parseMapDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodSet:\n            return parseSetDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodLazy:\n            return () => def.getter()._def;\n        case ZodFirstPartyTypeKind.ZodPromise:\n            return parsePromiseDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodNaN:\n        case ZodFirstPartyTypeKind.ZodNever:\n            return parseNeverDef(refs);\n        case ZodFirstPartyTypeKind.ZodEffects:\n            return parseEffectsDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodAny:\n            return parseAnyDef(refs);\n        case ZodFirstPartyTypeKind.ZodUnknown:\n            return parseUnknownDef(refs);\n        case ZodFirstPartyTypeKind.ZodDefault:\n            return parseDefaultDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodBranded:\n            return parseBrandedDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodReadonly:\n            return parseReadonlyDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodCatch:\n            return parseCatchDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodPipeline:\n            return parsePipelineDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodFunction:\n        case ZodFirstPartyTypeKind.ZodVoid:\n        case ZodFirstPartyTypeKind.ZodSymbol:\n            return undefined;\n        default:\n            /* c8 ignore next */\n            return ((_) => undefined)(typeName);\n    }\n};\n", "import { ignoreOverride } from \"./Options.js\";\nimport { selectParser } from \"./selectParser.js\";\nimport { getRelativePath } from \"./getRelativePath.js\";\nimport { parseAnyDef } from \"./parsers/any.js\";\nexport function parseDef(def, refs, forceResolution = false) {\n    const seenItem = refs.seen.get(def);\n    if (refs.override) {\n        const overrideResult = refs.override?.(def, refs, seenItem, forceResolution);\n        if (overrideResult !== ignoreOverride) {\n            return overrideResult;\n        }\n    }\n    if (seenItem && !forceResolution) {\n        const seenSchema = get$ref(seenItem, refs);\n        if (seenSchema !== undefined) {\n            return seenSchema;\n        }\n    }\n    const newItem = { def, path: refs.currentPath, jsonSchema: undefined };\n    refs.seen.set(def, newItem);\n    const jsonSchemaOrGetter = selectParser(def, def.typeName, refs);\n    // If the return was a function, then the inner definition needs to be extracted before a call to parseDef (recursive)\n    const jsonSchema = typeof jsonSchemaOrGetter === \"function\"\n        ? parseDef(jsonSchemaOrGetter(), refs)\n        : jsonSchemaOrGetter;\n    if (jsonSchema) {\n        addMeta(def, refs, jsonSchema);\n    }\n    if (refs.postProcess) {\n        const postProcessResult = refs.postProcess(jsonSchema, def, refs);\n        newItem.jsonSchema = jsonSchema;\n        return postProcessResult;\n    }\n    newItem.jsonSchema = jsonSchema;\n    return jsonSchema;\n}\nconst get$ref = (item, refs) => {\n    switch (refs.$refStrategy) {\n        case \"root\":\n            return { $ref: item.path.join(\"/\") };\n        case \"relative\":\n            return { $ref: getRelativePath(refs.currentPath, item.path) };\n        case \"none\":\n        case \"seen\": {\n            if (item.path.length < refs.currentPath.length &&\n                item.path.every((value, index) => refs.currentPath[index] === value)) {\n                console.warn(`Recursive reference detected at ${refs.currentPath.join(\"/\")}! Defaulting to any`);\n                return parseAnyDef(refs);\n            }\n            return refs.$refStrategy === \"seen\" ? parseAnyDef(refs) : undefined;\n        }\n    }\n};\nconst addMeta = (def, refs, jsonSchema) => {\n    if (def.description) {\n        jsonSchema.description = def.description;\n        if (refs.markdownDescription) {\n            jsonSchema.markdownDescription = def.description;\n        }\n    }\n    return jsonSchema;\n};\n", "import { parseDef } from \"./parseDef.js\";\nimport { getRefs } from \"./Refs.js\";\nimport { parseAnyDef } from \"./parsers/any.js\";\nconst zodToJsonSchema = (schema, options) => {\n    const refs = getRefs(options);\n    let definitions = typeof options === \"object\" && options.definitions\n        ? Object.entries(options.definitions).reduce((acc, [name, schema]) => ({\n            ...acc,\n            [name]: parseDef(schema._def, {\n                ...refs,\n                currentPath: [...refs.basePath, refs.definitionPath, name],\n            }, true) ?? parseAnyDef(refs),\n        }), {})\n        : undefined;\n    const name = typeof options === \"string\"\n        ? options\n        : options?.nameStrategy === \"title\"\n            ? undefined\n            : options?.name;\n    const main = parseDef(schema._def, name === undefined\n        ? refs\n        : {\n            ...refs,\n            currentPath: [...refs.basePath, refs.definitionPath, name],\n        }, false) ?? parseAnyDef(refs);\n    const title = typeof options === \"object\" &&\n        options.name !== undefined &&\n        options.nameStrategy === \"title\"\n        ? options.name\n        : undefined;\n    if (title !== undefined) {\n        main.title = title;\n    }\n    if (refs.flags.hasReferencedOpenAiAnyType) {\n        if (!definitions) {\n            definitions = {};\n        }\n        if (!definitions[refs.openAiAnyTypeName]) {\n            definitions[refs.openAiAnyTypeName] = {\n                // Skipping \"object\" as no properties can be defined and additionalProperties must be \"false\"\n                type: [\"string\", \"number\", \"integer\", \"boolean\", \"array\", \"null\"],\n                items: {\n                    $ref: refs.$refStrategy === \"relative\"\n                        ? \"1\"\n                        : [\n                            ...refs.basePath,\n                            refs.definitionPath,\n                            refs.openAiAnyTypeName,\n                        ].join(\"/\"),\n                },\n            };\n        }\n    }\n    const combined = name === undefined\n        ? definitions\n            ? {\n                ...main,\n                [refs.definitionPath]: definitions,\n            }\n            : main\n        : {\n            $ref: [\n                ...(refs.$refStrategy === \"relative\" ? [] : refs.basePath),\n                refs.definitionPath,\n                name,\n            ].join(\"/\"),\n            [refs.definitionPath]: {\n                ...definitions,\n                [name]: main,\n            },\n        };\n    if (refs.target === \"jsonSchema7\") {\n        combined.$schema = \"http://json-schema.org/draft-07/schema#\";\n    }\n    else if (refs.target === \"jsonSchema2019-09\" || refs.target === \"openAi\") {\n        combined.$schema = \"https://json-schema.org/draft/2019-09/schema#\";\n    }\n    if (refs.target === \"openAi\" &&\n        (\"anyOf\" in combined ||\n            \"oneOf\" in combined ||\n            \"allOf\" in combined ||\n            (\"type\" in combined && Array.isArray(combined.type)))) {\n        console.warn(\"Warning: OpenAI may not support schemas with unions as roots! Try wrapping it in an object property.\");\n    }\n    return combined;\n};\nexport { zodToJsonSchema };\n", "export * from \"./Options.js\";\nexport * from \"./Refs.js\";\nexport * from \"./errorMessages.js\";\nexport * from \"./getRelativePath.js\";\nexport * from \"./parseDef.js\";\nexport * from \"./parseTypes.js\";\nexport * from \"./parsers/any.js\";\nexport * from \"./parsers/array.js\";\nexport * from \"./parsers/bigint.js\";\nexport * from \"./parsers/boolean.js\";\nexport * from \"./parsers/branded.js\";\nexport * from \"./parsers/catch.js\";\nexport * from \"./parsers/date.js\";\nexport * from \"./parsers/default.js\";\nexport * from \"./parsers/effects.js\";\nexport * from \"./parsers/enum.js\";\nexport * from \"./parsers/intersection.js\";\nexport * from \"./parsers/literal.js\";\nexport * from \"./parsers/map.js\";\nexport * from \"./parsers/nativeEnum.js\";\nexport * from \"./parsers/never.js\";\nexport * from \"./parsers/null.js\";\nexport * from \"./parsers/nullable.js\";\nexport * from \"./parsers/number.js\";\nexport * from \"./parsers/object.js\";\nexport * from \"./parsers/optional.js\";\nexport * from \"./parsers/pipeline.js\";\nexport * from \"./parsers/promise.js\";\nexport * from \"./parsers/readonly.js\";\nexport * from \"./parsers/record.js\";\nexport * from \"./parsers/set.js\";\nexport * from \"./parsers/string.js\";\nexport * from \"./parsers/tuple.js\";\nexport * from \"./parsers/undefined.js\";\nexport * from \"./parsers/union.js\";\nexport * from \"./parsers/unknown.js\";\nexport * from \"./selectParser.js\";\nexport * from \"./zodToJsonSchema.js\";\nimport { zodToJsonSchema } from \"./zodToJsonSchema.js\";\nexport default zodToJsonSchema;\n", "import { z } from \"zod\";\nimport { ConvexTool } from \"./index.js\";\nimport { loadSelectedDeploymentCredentials } from \"../../api.js\";\nimport { runSystemQuery } from \"../../run.js\";\nimport { deploymentFetch } from \"../../utils/utils.js\";\nimport { getMcpDeploymentSelection } from \"../requestContext.js\";\n\nconst inputSchema = z.object({\n  deploymentSelector: z\n    .string()\n    .describe(\n      \"Deployment selector (from the status tool) to read tables from.\",\n    ),\n});\n\nconst outputSchema = z.object({\n  tables: z.record(\n    z.string(),\n    z.object({\n      schema: z.any().optional(),\n      inferredSchema: z.any().optional(),\n    }),\n  ),\n});\n\nexport const TablesTool: ConvexTool<typeof inputSchema, typeof outputSchema> = {\n  name: \"tables\",\n  description:\n    \"List all tables in a particular Convex deployment and their inferred and declared schema.\",\n  inputSchema,\n  outputSchema,\n  handler: async (ctx, args) => {\n    const { projectDir, deployment } = ctx.decodeDeploymentSelectorUnchecked(\n      args.deploymentSelector,\n    );\n    process.chdir(projectDir);\n    const deploymentSelection = await getMcpDeploymentSelection(\n      ctx,\n      deployment,\n    );\n    const credentials = await loadSelectedDeploymentCredentials(\n      ctx,\n      deploymentSelection,\n    );\n    const schemaResponse: any = await runSystemQuery(ctx, {\n      deploymentUrl: credentials.url,\n      adminKey: credentials.adminKey,\n      functionName: \"_system/frontend/getSchemas\",\n      componentPath: undefined,\n      args: {},\n    });\n    const schema: Record<string, z.infer<typeof activeSchemaEntry>> = {};\n    if (schemaResponse.active) {\n      const parsed = activeSchema.parse(JSON.parse(schemaResponse.active));\n      for (const table of parsed.tables) {\n        schema[table.tableName] = table;\n      }\n    }\n    const fetch = deploymentFetch(ctx, {\n      deploymentUrl: credentials.url,\n      adminKey: credentials.adminKey,\n    });\n    const response = await fetch(\"/api/shapes2\", {});\n    const shapesResult: Record<string, any> = await response.json();\n\n    const allTablesSet = new Set([\n      ...Object.keys(shapesResult),\n      ...Object.keys(schema),\n    ]);\n    const allTables = Array.from(allTablesSet);\n    allTables.sort();\n\n    const result: z.infer<typeof outputSchema>[\"tables\"] = {};\n    for (const table of allTables) {\n      result[table] = {\n        schema: schema[table],\n        inferredSchema: shapesResult[table],\n      };\n    }\n    return { tables: result };\n  },\n};\n\nconst activeSchemaEntry = z.object({\n  tableName: z.string(),\n  indexes: z.array(z.any()),\n  searchIndexes: z.array(z.any()),\n  vectorIndexes: z.array(z.any()),\n  documentType: z.any(),\n});\n\nconst activeSchema = z.object({ tables: z.array(activeSchemaEntry) });\n", "import { z } from \"zod\";\nimport { runSystemQuery } from \"../../run.js\";\nimport { ConvexTool } from \"./index.js\";\nimport { PaginationResult } from \"../../../../server/pagination.js\";\nimport { loadSelectedDeploymentCredentials } from \"../../api.js\";\nimport { getMcpDeploymentSelection } from \"../requestContext.js\";\n\nconst inputSchema = z.object({\n  deploymentSelector: z\n    .string()\n    .describe(\"Deployment selector (from the status tool) to read data from.\"),\n  tableName: z.string().describe(\"The name of the table to read from.\"),\n  order: z.enum([\"asc\", \"desc\"]).describe(\"The order to sort the results in.\"),\n  cursor: z.string().optional().describe(\"The cursor to start reading from.\"),\n  limit: z\n    .number()\n    .max(1000)\n    .optional()\n    .describe(\"The maximum number of results to return, defaults to 100.\"),\n});\n\nconst outputSchema = z.object({\n  page: z.array(z.any()),\n  isDone: z.boolean(),\n  continueCursor: z.string(),\n});\n\nconst description = `\nRead a page of data from a table in the project's Convex deployment.\n\nOutput:\n- page: A page of results from the table.\n- isDone: Whether there are more results to read.\n- continueCursor: The cursor to use to read the next page of results.\n`.trim();\n\nexport const DataTool: ConvexTool<typeof inputSchema, typeof outputSchema> = {\n  name: \"data\",\n  description,\n  inputSchema,\n  outputSchema,\n  handler: async (ctx, args) => {\n    const { projectDir, deployment } =\n      await ctx.decodeDeploymentSelectorReadOnly(args.deploymentSelector);\n    process.chdir(projectDir);\n    const deploymentSelection = await getMcpDeploymentSelection(\n      ctx,\n      deployment,\n    );\n    const credentials = await loadSelectedDeploymentCredentials(\n      ctx,\n      deploymentSelection,\n    );\n    const paginationResult = (await runSystemQuery(ctx, {\n      deploymentUrl: credentials.url,\n      adminKey: credentials.adminKey,\n      functionName: \"_system/cli/tableData\",\n      componentPath: undefined,\n      args: {\n        table: args.tableName,\n        order: args.order,\n        paginationOpts: {\n          numItems: args.limit ?? 100,\n          cursor: args.cursor ?? null,\n        },\n      },\n    })) as unknown as PaginationResult<any>;\n    return {\n      page: paginationResult.page,\n      isDone: paginationResult.isDone,\n      continueCursor: paginationResult.continueCursor,\n    };\n  },\n};\n", "import {\n  encodeDeploymentSelector,\n  getMcpDeploymentSelection,\n  RequestContext,\n} from \"../requestContext.js\";\nimport {\n  DeploymentSelectionWithinProject,\n  deploymentSelectionWithinProjectFromOptions,\n  loadSelectedDeploymentCredentials,\n} from \"../../api.js\";\nimport { z } from \"zod\";\nimport { ConvexTool } from \"./index.js\";\nimport { deploymentDashboardUrlPage } from \"../../../lib/dashboard.js\";\nimport { getDeploymentSelection } from \"../../../lib/deploymentSelection.js\";\n\nconst projectDirDescription = `\nThe root directory of the Convex project. This is usually the editor's workspace directory\nand often includes the 'package.json' file and the 'convex/' folder.\n\nPass this option unless explicitly instructed not to.\n`;\n\nconst inputSchema = z.object({\n  projectDir: z.string().optional().describe(projectDirDescription),\n});\nconst outputSchema = z.object({\n  availableDeployments: z.array(\n    z.object({\n      kind: z.string(),\n      deploymentSelector: z.string(),\n      url: z.string(),\n      dashboardUrl: z.string().optional(),\n      readOnly: z.boolean().optional(),\n    }),\n  ),\n});\n\nconst description = `\nGet all available deployments for a given Convex project directory.\n\nUse this tool to find the deployment selector, URL, and dashboard URL for each\ndeployment associated with the project. Pass the deployment selector to other\ntools to target a specific deployment.\n\nWhen deployed to Convex Cloud, projects have a development ({\"kind\": \"ownDev\"}) and\nproduction ({\"kind\": \"prod\"}) deployment. Generally default to using the development\ndeployment unless you'd specifically like to debug issues in production.\n\nWhen running locally, there will be a single \"urlWithAdminKey\" deployment.\n\nIf a deployment has \"readOnly: true\", it can only be used with read-only tools\nthat don't expose PII (\\`insights\\`, \\`functionSpec\\`, \\`tables\\`). Tools that read\nuser data (\\`data\\`, \\`logs\\`, \\`runOneoffQuery\\`) and mutating tools will reject it.\n\nIf \"readOnly\" is false or absent, all tools can be used with the deployment.\n`.trim();\n\nexport const StatusTool: ConvexTool<typeof inputSchema, typeof outputSchema> = {\n  name: \"status\",\n  description,\n  inputSchema,\n  outputSchema,\n  handler: async (ctx: RequestContext, input) => {\n    const projectDir = input.projectDir ?? ctx.options.projectDir;\n    if (projectDir === undefined) {\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage:\n          \"No project directory provided. Either provide the `projectDir` argument or configure the MCP server with the `--project-dir` flag.\",\n      });\n    }\n    process.chdir(projectDir);\n    const selectionWithinProject = deploymentSelectionWithinProjectFromOptions(\n      ctx.options,\n    );\n    const deploymentSelection = await getDeploymentSelection(ctx, ctx.options);\n    const credentials = await loadSelectedDeploymentCredentials(\n      ctx,\n      deploymentSelection,\n    );\n    let availableDeployments = [\n      {\n        kind: selectionWithinProject.kind,\n        deploymentSelector: encodeDeploymentSelector(\n          projectDir,\n          selectionWithinProject,\n        ),\n        url: credentials.url,\n        dashboardUrl:\n          credentials.deploymentFields?.deploymentName &&\n          deploymentDashboardUrlPage(\n            credentials.deploymentFields.deploymentName,\n            \"\",\n          ),\n      },\n    ];\n    // Also get the prod cloud deployment if we're using a cloud-hosted dev-deployment\n    if (\n      selectionWithinProject.kind === \"ownDev\" &&\n      !(\n        deploymentSelection.kind === \"existingDeployment\" &&\n        deploymentSelection.deploymentToActOn.deploymentFields === null\n      )\n    ) {\n      const prodSelectionWithinProject: DeploymentSelectionWithinProject = {\n        kind: \"prod\",\n      };\n      const prodDeploymentSelection = await getMcpDeploymentSelection(\n        ctx,\n        prodSelectionWithinProject,\n      );\n      const prodCredentials = await loadSelectedDeploymentCredentials(\n        ctx,\n        prodDeploymentSelection,\n      );\n      if (\n        prodCredentials.deploymentFields?.deploymentName &&\n        prodCredentials.deploymentFields.deploymentType\n      ) {\n        availableDeployments.push({\n          kind: prodSelectionWithinProject.kind,\n          deploymentSelector: encodeDeploymentSelector(\n            projectDir,\n            prodSelectionWithinProject,\n          ),\n          url: prodCredentials.url,\n          dashboardUrl: deploymentDashboardUrlPage(\n            prodCredentials.deploymentFields.deploymentName,\n            \"\",\n          ),\n        });\n      }\n    }\n    if (ctx.productionDeploymentsDisabled) {\n      const readOnly = ctx.productionPiiAllowed ? false : true;\n      return {\n        availableDeployments: availableDeployments.map((d) =>\n          d.kind === \"prod\" ? { ...d, readOnly } : d,\n        ),\n      };\n    }\n    return { availableDeployments };\n  },\n};\n", "import { z } from \"zod\";\nimport { ConvexTool } from \"./index.js\";\nimport { loadSelectedDeploymentCredentials } from \"../../api.js\";\nimport { runSystemQuery } from \"../../run.js\";\nimport { getMcpDeploymentSelection } from \"../requestContext.js\";\n\nconst inputSchema = z.object({\n  deploymentSelector: z\n    .string()\n    .describe(\n      \"Deployment selector (from the status tool) to get function metadata from.\",\n    ),\n});\n\nconst outputSchema = z\n  .any()\n  .describe(\"Function metadata including arguments and return values\");\n\nconst description = `\nGet the function metadata from a Convex deployment.\n\nReturns an array of structured objects for each function the deployment. Each function's\nmetadata contains its identifier (which is its path within the convex/ folder joined\nwith its exported name), its argument validator, its return value validator, its type\n(i.e. is it a query, mutation, or action), and its visibility (i.e. is it public or\ninternal).\n`.trim();\n\nexport const FunctionSpecTool: ConvexTool<\n  typeof inputSchema,\n  typeof outputSchema\n> = {\n  name: \"functionSpec\",\n  description,\n  inputSchema,\n  outputSchema,\n  handler: async (ctx, args) => {\n    const { projectDir, deployment } = ctx.decodeDeploymentSelectorUnchecked(\n      args.deploymentSelector,\n    );\n    process.chdir(projectDir);\n    const deploymentSelection = await getMcpDeploymentSelection(\n      ctx,\n      deployment,\n    );\n    const credentials = await loadSelectedDeploymentCredentials(\n      ctx,\n      deploymentSelection,\n    );\n    const functions = await runSystemQuery(ctx, {\n      deploymentUrl: credentials.url,\n      adminKey: credentials.adminKey,\n      functionName: \"_system/cli/modules:apiSpec\",\n      componentPath: undefined,\n      args: {},\n    });\n    return functions;\n  },\n};\n", "import { z } from \"zod\";\nimport { ConvexTool } from \"./index.js\";\nimport { loadSelectedDeploymentCredentials } from \"../../api.js\";\nimport { parseArgs, parseFunctionName } from \"../../run.js\";\nimport { readProjectConfig } from \"../../config.js\";\nimport { ConvexHttpClient } from \"../../../../browser/index.js\";\nimport { Value } from \"../../../../values/index.js\";\nimport { DefaultLogger } from \"../../../../browser/logging.js\";\nimport { getMcpDeploymentSelection } from \"../requestContext.js\";\nconst inputSchema = z.object({\n  deploymentSelector: z\n    .string()\n    .describe(\n      \"Deployment selector (from the status tool) to run the function on.\",\n    ),\n  functionName: z\n    .string()\n    .describe(\n      \"The name of the function to run (e.g. 'path/to/my/module.js:myFunction').\",\n    ),\n  args: z\n    .string()\n    .describe(\n      \"The argument object to pass to the function, JSON-encoded as a string.\",\n    ),\n});\n\nconst outputSchema = z.object({\n  result: z.any().describe(\"The result returned by the function\"),\n  logLines: z\n    .array(z.string())\n    .describe(\"The log lines generated by the function\"),\n});\n\nconst description = `\nRun a Convex function (query, mutation, or action) on your deployment.\n\nReturns the result and any log lines generated by the function.\n`.trim();\n\nexport const RunTool: ConvexTool<typeof inputSchema, typeof outputSchema> = {\n  name: \"run\",\n  description,\n  inputSchema,\n  outputSchema,\n  handler: async (ctx, args) => {\n    const { projectDir, deployment } = await ctx.decodeDeploymentSelector(\n      args.deploymentSelector,\n    );\n    process.chdir(projectDir);\n    const metadata = await getMcpDeploymentSelection(ctx, deployment);\n    const credentials = await loadSelectedDeploymentCredentials(ctx, metadata);\n    const parsedArgs = await parseArgs(ctx, args.args);\n    const { projectConfig } = await readProjectConfig(ctx);\n    const parsedFunctionName = await parseFunctionName(\n      ctx,\n      args.functionName,\n      projectConfig.functions,\n    );\n    const logger = new DefaultLogger({ verbose: true });\n    const logLines: string[] = [];\n    logger.addLogLineListener((level, ...args) => {\n      logLines.push(`${level}: ${args.join(\" \")}`);\n    });\n    const client = new ConvexHttpClient(credentials.url, {\n      logger: logger,\n    });\n    client.setAdminAuth(credentials.adminKey);\n    let result: Value;\n    try {\n      result = await client.function(parsedFunctionName, undefined, parsedArgs);\n    } catch (err) {\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"invalid filesystem or env vars\",\n        printedMessage: `Failed to run function \"${args.functionName}\":\\n${(err as Error).toString().trim()}`,\n      });\n    }\n    return {\n      result,\n      logLines,\n    };\n  },\n};\n", "import { z } from \"zod\";\nimport { ConvexTool } from \"./index.js\";\nimport { loadSelectedDeploymentCredentials } from \"../../api.js\";\nimport {\n  envSetInDeployment,\n  envRemoveInDeployment,\n  EnvVar,\n} from \"../../env.js\";\nimport { runSystemQuery } from \"../../run.js\";\nimport { getMcpDeploymentSelection } from \"../requestContext.js\";\n\n// List Environment Variables\nconst envListInputSchema = z.object({\n  deploymentSelector: z\n    .string()\n    .describe(\n      \"Deployment selector (from the status tool) to list environment variables from.\",\n    ),\n});\n\nconst envListOutputSchema = z.object({\n  variables: z.array(\n    z.object({\n      name: z.string(),\n      value: z.string(),\n    }),\n  ),\n});\n\nexport const EnvListTool: ConvexTool<\n  typeof envListInputSchema,\n  typeof envListOutputSchema\n> = {\n  name: \"envList\",\n  description: \"List all environment variables in your Convex deployment.\",\n  inputSchema: envListInputSchema,\n  outputSchema: envListOutputSchema,\n  handler: async (ctx, args) => {\n    const { projectDir, deployment } = await ctx.decodeDeploymentSelector(\n      args.deploymentSelector,\n    );\n    process.chdir(projectDir);\n    const deploymentSelection = await getMcpDeploymentSelection(\n      ctx,\n      deployment,\n    );\n    const credentials = await loadSelectedDeploymentCredentials(\n      ctx,\n      deploymentSelection,\n    );\n    const variables = (await runSystemQuery(ctx, {\n      deploymentUrl: credentials.url,\n      adminKey: credentials.adminKey,\n      functionName: \"_system/cli/queryEnvironmentVariables\",\n      componentPath: undefined,\n      args: {},\n    })) as EnvVar[];\n    return { variables };\n  },\n};\n\n// Get Environment Variable\nconst envGetInputSchema = z.object({\n  deploymentSelector: z\n    .string()\n    .describe(\n      \"Deployment selector (from the status tool) to get environment variable from.\",\n    ),\n  name: z\n    .string()\n    .describe(\"The name of the environment variable to retrieve.\"),\n});\n\nconst envGetOutputSchema = z.object({\n  value: z.union([z.string(), z.null()]),\n});\n\nexport const EnvGetTool: ConvexTool<\n  typeof envGetInputSchema,\n  typeof envGetOutputSchema\n> = {\n  name: \"envGet\",\n  description:\n    \"Get a specific environment variable from your Convex deployment.\",\n  inputSchema: envGetInputSchema,\n  outputSchema: envGetOutputSchema,\n  handler: async (ctx, args) => {\n    const { projectDir, deployment } = await ctx.decodeDeploymentSelector(\n      args.deploymentSelector,\n    );\n    process.chdir(projectDir);\n    const deploymentSelection = await getMcpDeploymentSelection(\n      ctx,\n      deployment,\n    );\n    const credentials = await loadSelectedDeploymentCredentials(\n      ctx,\n      deploymentSelection,\n    );\n    const envVar = (await runSystemQuery(ctx, {\n      deploymentUrl: credentials.url,\n      adminKey: credentials.adminKey,\n      functionName: \"_system/cli/queryEnvironmentVariables:get\",\n      componentPath: undefined,\n      args: { name: args.name },\n    })) as { name: string; value: string } | null;\n    return { value: envVar?.value ?? null };\n  },\n};\n\n// Set Environment Variable\nconst envSetInputSchema = z.object({\n  deploymentSelector: z\n    .string()\n    .describe(\n      \"Deployment selector (from the status tool) to set environment variable on.\",\n    ),\n  name: z.string().describe(\"The name of the environment variable to set.\"),\n  value: z.string().describe(\"The value to set for the environment variable.\"),\n});\n\nconst envSetOutputSchema = z.object({\n  success: z.boolean(),\n});\n\nexport const EnvSetTool: ConvexTool<\n  typeof envSetInputSchema,\n  typeof envSetOutputSchema\n> = {\n  name: \"envSet\",\n  description: \"Set an environment variable in your Convex deployment.\",\n  inputSchema: envSetInputSchema,\n  outputSchema: envSetOutputSchema,\n  handler: async (ctx, args) => {\n    const { projectDir, deployment } = await ctx.decodeDeploymentSelector(\n      args.deploymentSelector,\n    );\n    process.chdir(projectDir);\n    const deploymentSelection = await getMcpDeploymentSelection(\n      ctx,\n      deployment,\n    );\n    const credentials = await loadSelectedDeploymentCredentials(\n      ctx,\n      deploymentSelection,\n    );\n    const deploymentInfo = {\n      deploymentUrl: credentials.url,\n      adminKey: credentials.adminKey,\n      deploymentNotice: \"\",\n    };\n    await envSetInDeployment(ctx, deploymentInfo, args.name, args.value);\n    return { success: true };\n  },\n};\n\n// Remove Environment Variable\nconst envRemoveInputSchema = z.object({\n  deploymentSelector: z\n    .string()\n    .describe(\n      \"Deployment selector (from the status tool) to remove environment variable from.\",\n    ),\n  name: z.string().describe(\"The name of the environment variable to remove.\"),\n});\n\nconst envRemoveOutputSchema = z.object({\n  success: z.boolean(),\n});\n\nexport const EnvRemoveTool: ConvexTool<\n  typeof envRemoveInputSchema,\n  typeof envRemoveOutputSchema\n> = {\n  name: \"envRemove\",\n  description: \"Remove an environment variable from your Convex deployment.\",\n  inputSchema: envRemoveInputSchema,\n  outputSchema: envRemoveOutputSchema,\n  handler: async (ctx, args) => {\n    const { projectDir, deployment } = await ctx.decodeDeploymentSelector(\n      args.deploymentSelector,\n    );\n    process.chdir(projectDir);\n    const deploymentSelection = await getMcpDeploymentSelection(\n      ctx,\n      deployment,\n    );\n    const credentials = await loadSelectedDeploymentCredentials(\n      ctx,\n      deploymentSelection,\n    );\n    const deploymentInfo = {\n      deploymentUrl: credentials.url,\n      adminKey: credentials.adminKey,\n      deploymentNotice: \"\",\n    };\n    await envRemoveInDeployment(ctx, deploymentInfo, args.name);\n    return { success: true };\n  },\n};\n", "import { z } from \"zod\";\nimport { ConvexTool } from \"./index.js\";\nimport { loadSelectedDeploymentCredentials } from \"../../api.js\";\nimport { getMcpDeploymentSelection } from \"../requestContext.js\";\n\nconst inputSchema = z.object({\n  deploymentSelector: z\n    .string()\n    .describe(\n      \"Deployment selector (from the status tool) to run the query on.\",\n    ),\n  query: z\n    .string()\n    .describe(\n      \"The query to run. This should be valid JavaScript code that returns a value.\",\n    ),\n});\n\nconst outputSchema = z.object({\n  result: z.any().describe(\"The result returned by the query\"),\n  logLines: z\n    .array(z.string())\n    .describe(\"The log lines generated by the query\"),\n});\n\nconst description = `\nRun a one-off readonly query on your Convex deployment.\n\nThis tool executes a JavaScript string as a query in your Convex deployment.\nThe query should follow Convex guidelines and use the following setup:\n\n\\`\\`\\`js\nimport { query, internalQuery } from \"convex:/_system/repl/wrappers.js\";\n\nexport default query({\n  handler: async (ctx) => {\n    console.log(\"Write and test your query function here!\");\n  },\n});\n\\`\\`\\`\n\nNote that there are no imports available in this environment. The only import\nyou can use is the built-in \"convex:/_system/repl/wrappers.js\" module in the\ntemplate.\n\nThe function call is also completely sandboxed, so it can only read data and\ncannot modify the database or access the network.\n\nReturns the result and any log lines generated by the query.\n`.trim();\n\nexport const RunOneoffQueryTool: ConvexTool<\n  typeof inputSchema,\n  typeof outputSchema\n> = {\n  name: \"runOneoffQuery\",\n  description,\n  inputSchema,\n  outputSchema,\n  handler: async (ctx, args) => {\n    const { projectDir, deployment } =\n      await ctx.decodeDeploymentSelectorReadOnly(args.deploymentSelector);\n    process.chdir(projectDir);\n    const deploymentSelection = await getMcpDeploymentSelection(\n      ctx,\n      deployment,\n    );\n    const credentials = await loadSelectedDeploymentCredentials(\n      ctx,\n      deploymentSelection,\n    );\n    try {\n      const response = await fetch(`${credentials.url}/api/run_test_function`, {\n        method: \"POST\",\n        headers: {\n          \"Content-Type\": \"application/json\",\n        },\n        body: JSON.stringify({\n          adminKey: credentials.adminKey,\n          args: {},\n          bundle: {\n            path: \"testQuery.js\",\n            source: args.query,\n          },\n          format: \"convex_encoded_json\",\n        }),\n      });\n      if (!response.ok) {\n        return await ctx.crash({\n          exitCode: 1,\n          errorType: \"fatal\",\n          printedMessage: `HTTP error ${response.status}: ${await response.text()}`,\n        });\n      }\n      const result = await response.json();\n      if (result.status !== \"success\") {\n        return await ctx.crash({\n          exitCode: 1,\n          errorType: \"fatal\",\n          printedMessage: `Query failed: ${JSON.stringify(result)}`,\n        });\n      }\n      return {\n        result: result.value,\n        logLines: result.logLines,\n      };\n    } catch (err) {\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: `Failed to run query: ${(err as Error).toString().trim()}`,\n      });\n    }\n  },\n};\n", "import { z } from \"zod\";\nimport { ConvexTool } from \"./index.js\";\nimport { loadSelectedDeploymentCredentials } from \"../../api.js\";\nimport { deploymentFetch } from \"../../utils/utils.js\";\nimport { FunctionExecution } from \"../../apiTypes.js\";\nimport { formatLogsAsText } from \"../../logs.js\";\nimport { getMcpDeploymentSelection } from \"../requestContext.js\";\n\nconst inputSchema = z.object({\n  deploymentSelector: z\n    .string()\n    .describe(\"Deployment selector (from the status tool) to read logs from.\"),\n  status: z\n    .enum([\"all\", \"success\", \"failure\"])\n    .default(\"all\")\n    .optional()\n    .describe(\n      'Filter by execution outcome. \"failure\" returns only executions that threw an error. \"success\" returns only successful executions. Defaults to \"all\".',\n    ),\n  cursor: z\n    .number()\n    .optional()\n    .describe(\n      \"Optional cursor (in ms) to start reading from. Use 0 to read from the beginning.\",\n    ),\n  entriesLimit: z\n    .number()\n    .int()\n    .positive()\n    .max(1000)\n    .optional()\n    .describe(\n      \"Maximum number of log entries to return (from the end). If omitted, returns all available in this chunk.\",\n    ),\n  tokensLimit: z\n    .number()\n    .int()\n    .positive()\n    .default(20000)\n    .optional()\n    .describe(\n      \"Approximate maximum number of tokens to return (applied to the JSON payload). Defaults to 20000.\",\n    ),\n  jsonl: z\n    .boolean()\n    .default(false)\n    .optional()\n    .describe(\n      \"If true, return raw log entries as JSONL. If false (default), return formatted text logs.\",\n    ),\n});\n\nconst outputSchema = z.object({\n  entries: z.string(),\n  newCursor: z.number(),\n});\n\nconst logsResponseSchema = z.object({\n  entries: z.array(z.any()),\n  newCursor: z.number(),\n});\n\nconst description = `\nFetch a chunk of recent log entries from your Convex deployment.\n\nReturns a batch of UDF execution log entries and a new cursor you can use to\nrequest the next batch. This tool does not tail; it performs a single fetch.\n\nTo see only errors and exceptions, set status to \"failure\". This filters to\nexecutions where a function threw an error, which is useful for debugging\ndeployment issues. Each failed entry includes the error message and stack trace.\n`.trim();\n\nexport const LogsTool: ConvexTool<typeof inputSchema, typeof outputSchema> = {\n  name: \"logs\",\n  description,\n  inputSchema,\n  outputSchema,\n  handler: async (ctx, args) => {\n    const { projectDir, deployment } =\n      await ctx.decodeDeploymentSelectorReadOnly(args.deploymentSelector);\n    process.chdir(projectDir);\n    const deploymentSelection = await getMcpDeploymentSelection(\n      ctx,\n      deployment,\n    );\n    const credentials = await loadSelectedDeploymentCredentials(\n      ctx,\n      deploymentSelection,\n    );\n\n    const fetch = deploymentFetch(ctx, {\n      deploymentUrl: credentials.url,\n      adminKey: credentials.adminKey,\n    });\n\n    const cursor = args.cursor ?? 0;\n    const response = await fetch(`/api/stream_function_logs?cursor=${cursor}`, {\n      method: \"GET\",\n    });\n\n    if (!response.ok) {\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: `HTTP error ${response.status}: ${await response.text()}`,\n      });\n    }\n\n    const { entries: allEntries, newCursor } = await response\n      .json()\n      .then(logsResponseSchema.parse);\n\n    const status = args.status ?? \"all\";\n    const entries =\n      status === \"all\"\n        ? allEntries\n        : allEntries.filter((entry: FunctionExecution) => {\n            if (entry.kind !== \"Completion\") return false;\n            const hasError = entry.error !== undefined && entry.error !== null;\n            return status === \"failure\" ? hasError : !hasError;\n          });\n\n    const limitedEntries = limitLogs({\n      entries,\n      tokensLimit: args.tokensLimit ?? 20000,\n      entriesLimit: args.entriesLimit ?? entries.length,\n    });\n\n    if (args.jsonl) {\n      return {\n        entries: limitedEntries\n          .map((entry) => JSON.stringify(entry))\n          .join(\"\\n\"),\n        newCursor,\n      };\n    }\n\n    return {\n      entries: formatLogsAsText(limitedEntries),\n      newCursor,\n    };\n  },\n};\n\nexport function limitLogs({\n  entries,\n  tokensLimit,\n  entriesLimit,\n}: {\n  entries: FunctionExecution[];\n  tokensLimit: number;\n  entriesLimit: number;\n}): FunctionExecution[] {\n  // 1) Apply entries limit first so we cut off neatly at entry boundaries (latest entries kept)\n  const limitedByEntries = entries.slice(entries.length - entriesLimit);\n\n  // 2) Apply token limit by iterating over log lines from newest to oldest and\n  //    only include lines while within token budget. We cut off at the nearest log line.\n  const limitedByTokens = limitEntriesByTokenBudget({\n    entries: limitedByEntries,\n    tokensLimit,\n  });\n\n  return limitedByTokens;\n}\n\nfunction limitEntriesByTokenBudget({\n  entries,\n  tokensLimit,\n}: {\n  entries: FunctionExecution[];\n  tokensLimit: number;\n}): FunctionExecution[] {\n  const result: FunctionExecution[] = [];\n  let tokens = 0;\n  for (const entry of entries) {\n    const entryString = JSON.stringify(entry);\n    const entryTokens = estimateTokenCount(entryString);\n    tokens += entryTokens;\n    if (tokens > tokensLimit) break;\n    result.push(entry);\n  }\n  return result;\n}\n\nfunction estimateTokenCount(entryString: string): number {\n  return entryString.length * 0.33;\n}\n", "import { z } from \"zod\";\nimport { ConvexTool } from \"./index.js\";\nimport { loadSelectedDeploymentCredentials } from \"../../api.js\";\nimport { deploymentDashboardUrlPage } from \"../../../lib/dashboard.js\";\nimport { fetchInsights } from \"../../insights.js\";\nimport { getMcpDeploymentSelection } from \"../requestContext.js\";\n\nconst inputSchema = z.object({\n  deploymentSelector: z\n    .string()\n    .describe(\n      \"Deployment selector (from the status tool) to fetch insights for.\",\n    ),\n});\n\nconst occRecentEventSchema = z.object({\n  timestamp: z.string(),\n  id: z.string(),\n  request_id: z.string(),\n  occ_document_id: z.string().optional(),\n  occ_write_source: z.string().optional(),\n  occ_retry_count: z.number(),\n});\n\nconst resourceRecentEventSchema = z.object({\n  timestamp: z.string(),\n  id: z.string(),\n  request_id: z.string(),\n  calls: z.array(\n    z.object({\n      table_name: z.string(),\n      bytes_read: z.number(),\n      documents_read: z.number(),\n    }),\n  ),\n  success: z.boolean(),\n});\n\nconst insightSchema = z.discriminatedUnion(\"kind\", [\n  z.object({\n    kind: z.literal(\"occRetried\"),\n    severity: z.literal(\"warning\"),\n    functionId: z.string(),\n    componentPath: z.string().nullable(),\n    occCalls: z.number(),\n    occTableName: z.string().optional(),\n    recentEvents: z.array(occRecentEventSchema),\n  }),\n  z.object({\n    kind: z.literal(\"occFailedPermanently\"),\n    severity: z.literal(\"error\"),\n    functionId: z.string(),\n    componentPath: z.string().nullable(),\n    occCalls: z.number(),\n    occTableName: z.string().optional(),\n    recentEvents: z.array(occRecentEventSchema),\n  }),\n  z.object({\n    kind: z.literal(\"bytesReadLimit\"),\n    severity: z.literal(\"error\"),\n    functionId: z.string(),\n    componentPath: z.string().nullable(),\n    count: z.number(),\n    recentEvents: z.array(resourceRecentEventSchema),\n  }),\n  z.object({\n    kind: z.literal(\"bytesReadThreshold\"),\n    severity: z.literal(\"warning\"),\n    functionId: z.string(),\n    componentPath: z.string().nullable(),\n    count: z.number(),\n    recentEvents: z.array(resourceRecentEventSchema),\n  }),\n  z.object({\n    kind: z.literal(\"documentsReadLimit\"),\n    severity: z.literal(\"error\"),\n    functionId: z.string(),\n    componentPath: z.string().nullable(),\n    count: z.number(),\n    recentEvents: z.array(resourceRecentEventSchema),\n  }),\n  z.object({\n    kind: z.literal(\"documentsReadThreshold\"),\n    severity: z.literal(\"warning\"),\n    functionId: z.string(),\n    componentPath: z.string().nullable(),\n    count: z.number(),\n    recentEvents: z.array(resourceRecentEventSchema),\n  }),\n]);\n\nconst outputSchema = z.object({\n  insights: z.array(insightSchema),\n  summary: z.string(),\n  dashboardUrl: z.string(),\n});\n\nconst description = `\nFetch health insights for a Convex deployment over the last 72 hours.\n\nReturns OCC (Optimistic Concurrency Control) conflicts and resource limit issues\nthat may indicate performance problems or failing functions.\n\n**OCC insights** (occRetried, occFailedPermanently):\n  Mutations that conflict on the same document. To fix: restructure mutations to\n  touch fewer shared documents, split hot documents, or reduce transaction scope.\n\n**Resource limit insights** (bytesReadLimit, documentsReadLimit, bytesReadThreshold, documentsReadThreshold):\n  Functions reading too much data. To fix: add indexes to avoid full table scans,\n  use pagination, or filter data more precisely in queries.\n\nSeverity levels:\n  - \"error\": Function executions are failing (permanent OCC failures or hard limits hit)\n  - \"warning\": Function executions succeed but are at risk (retried OCCs or approaching limits)\n\nUse the logs tool with status \"failure\" to see individual error messages and stack traces.\n\nOnly available for cloud deployments with user-level authentication.\n`.trim();\n\nexport const InsightsTool: ConvexTool<typeof inputSchema, typeof outputSchema> =\n  {\n    name: \"insights\",\n    description,\n    inputSchema,\n    outputSchema,\n    handler: async (ctx, args) => {\n      const { projectDir, deployment } = ctx.decodeDeploymentSelectorUnchecked(\n        args.deploymentSelector,\n      );\n      process.chdir(projectDir);\n      const deploymentSelection = await getMcpDeploymentSelection(\n        ctx,\n        deployment,\n      );\n      const credentials = await loadSelectedDeploymentCredentials(\n        ctx,\n        deploymentSelection,\n      );\n\n      const deploymentName =\n        credentials.deploymentFields?.deploymentName ?? null;\n      if (deploymentName === null) {\n        return await ctx.crash({\n          exitCode: 1,\n          errorType: \"fatal\",\n          printedMessage:\n            \"Insights are only available for cloud deployments. Local deployments do not have insights data.\",\n        });\n      }\n\n      const auth = ctx.bigBrainAuth();\n      if (\n        auth === null ||\n        auth.kind === \"deploymentKey\" ||\n        auth.kind === \"projectKey\"\n      ) {\n        return await ctx.crash({\n          exitCode: 1,\n          errorType: \"fatal\",\n          printedMessage:\n            \"Insights require user-level authentication. Deploy keys and project keys cannot access team usage data.\",\n        });\n      }\n\n      const insights = await fetchInsights(ctx, deploymentName, {\n        includeRecentEvents: true,\n      });\n\n      const errorCount = insights.filter((i) => i.severity === \"error\").length;\n      const warningCount = insights.filter(\n        (i) => i.severity === \"warning\",\n      ).length;\n\n      let summary: string;\n      if (insights.length === 0) {\n        summary =\n          \"No issues found. The deployment is healthy over the last 72 hours.\";\n      } else {\n        const parts: string[] = [];\n        if (errorCount > 0)\n          parts.push(`${errorCount} error${errorCount > 1 ? \"s\" : \"\"}`);\n        if (warningCount > 0)\n          parts.push(`${warningCount} warning${warningCount > 1 ? \"s\" : \"\"}`);\n        summary = `Found ${parts.join(\" and \")} in the last 72 hours.`;\n      }\n\n      const dashboardUrl = deploymentDashboardUrlPage(\n        deploymentName,\n        \"?view=insights\",\n      );\n\n      // Cast needed: fetchInsights returns Insight[] with optional recentEvents,\n      // but the zod schema requires them. They're always present when\n      // includeRecentEvents is true.\n      return {\n        insights: insights as z.infer<typeof insightSchema>[],\n        summary,\n        dashboardUrl,\n      };\n    },\n  };\n", "import { RequestContext } from \"../requestContext.js\";\nimport { ZodTypeAny, z } from \"zod\";\nimport zodToJsonSchema from \"zod-to-json-schema\";\nimport { TablesTool } from \"./tables.js\";\nimport { DataTool } from \"./data.js\";\nimport { StatusTool } from \"./status.js\";\nimport { FunctionSpecTool } from \"./functionSpec.js\";\nimport { RunTool } from \"./run.js\";\nimport { EnvListTool, EnvGetTool, EnvSetTool, EnvRemoveTool } from \"./env.js\";\nimport { RunOneoffQueryTool } from \"./runOneoffQuery.js\";\nimport { LogsTool } from \"./logs.js\";\nimport { InsightsTool } from \"./insights.js\";\nimport { Tool } from \"@modelcontextprotocol/sdk/types.js\";\n\nexport type ConvexTool<Input extends ZodTypeAny, Output extends ZodTypeAny> = {\n  name: string;\n  description: string;\n  inputSchema: Input;\n  outputSchema: Output;\n  handler: (\n    ctx: RequestContext,\n    input: z.infer<Input>,\n  ) => Promise<z.infer<Output>>;\n};\n\ntype ToolInput = Tool[\"inputSchema\"];\n\nexport function mcpTool(tool: ConvexTool<ZodTypeAny, ZodTypeAny>): Tool {\n  return {\n    name: tool.name,\n    description: tool.description,\n    inputSchema: zodToJsonSchema(tool.inputSchema) as ToolInput,\n  };\n}\n\nexport const convexTools: ConvexTool<any, any>[] = [\n  StatusTool,\n  DataTool,\n  TablesTool,\n  FunctionSpecTool,\n  RunTool,\n  EnvListTool,\n  EnvGetTool,\n  EnvSetTool,\n  EnvRemoveTool,\n  RunOneoffQueryTool,\n  LogsTool,\n  InsightsTool,\n];\n", "export class Mutex {\n  currentlyRunning: Promise<void> | null = null;\n  waiting: Array<() => Promise<void>> = [];\n\n  async runExclusive<T>(fn: () => Promise<T>): Promise<T> {\n    const outerPromise = new Promise<T>((resolve, reject) => {\n      const wrappedCallback: () => Promise<void> = () => {\n        return fn()\n          .then((v: T) => resolve(v))\n          .catch((e: any) => reject(e));\n      };\n      this.enqueueCallbackForMutex(wrappedCallback);\n    });\n    return outerPromise;\n  }\n\n  private enqueueCallbackForMutex(callback: () => Promise<void>) {\n    if (this.currentlyRunning === null) {\n      this.currentlyRunning = callback().finally(() => {\n        const nextCb = this.waiting.shift();\n        if (nextCb === undefined) {\n          this.currentlyRunning = null;\n        } else {\n          this.enqueueCallbackForMutex(nextCb);\n        }\n      });\n      this.waiting.length = 0;\n    } else {\n      this.waiting.push(callback);\n    }\n  }\n}\n", "import { Command, Option } from \"@commander-js/extra-typings\";\nimport { oneoffContext } from \"../bundler/context.js\";\nimport { Server } from \"@modelcontextprotocol/sdk/server/index.js\";\nimport { StdioServerTransport } from \"@modelcontextprotocol/sdk/server/stdio.js\";\nimport { actionDescription } from \"./lib/command.js\";\nimport { checkAuthorization } from \"./lib/login.js\";\nimport {\n  CallToolRequest,\n  CallToolRequestSchema,\n  ListToolsRequestSchema,\n} from \"@modelcontextprotocol/sdk/types.js\";\nimport {\n  McpOptions,\n  RequestContext,\n  RequestCrash,\n} from \"./lib/mcp/requestContext.js\";\nimport { mcpTool, convexTools, ConvexTool } from \"./lib/mcp/tools/index.js\";\nimport { Mutex } from \"./lib/utils/mutex.js\";\nimport { initializeBigBrainAuth } from \"./lib/deploymentSelection.js\";\n\nconst allToolNames = convexTools.map((t) => t.name).sort();\n\nexport const mcp = new Command(\"mcp\")\n  .summary(\"Manage the Model Context Protocol server for Convex [BETA]\")\n  .description(\n    \"Commands to initialize and run a Model Context Protocol server for Convex that can be used with AI tools.\\n\" +\n      \"This server exposes your Convex codebase to AI tools in a structured way.\",\n  )\n  .allowExcessArguments(false);\n\nmcp\n  .command(\"start\")\n  .summary(\"Start the MCP server\")\n  .description(\n    \"Start the Model Context Protocol server for Convex that can be used with AI tools.\",\n  )\n  .option(\n    \"--project-dir <project-dir>\",\n    \"Run the MCP server for a single project. By default, the MCP server can run for multiple projects, and each tool call specifies its project directory.\",\n  )\n  .option(\n    \"--disable-tools <tool-names>\",\n    `Comma separated list of tool names to disable (options: ${allToolNames.join(\", \")})`,\n  )\n  .option(\n    \"--cautiously-allow-production-pii\",\n    \"Allow read-only tools (data, logs, queries) on production deployments. These tools may expose PII. Defaults to false.\",\n    false,\n  )\n  .option(\n    \"--dangerously-enable-production-deployments\",\n    \"DANGEROUSLY allow the MCP server to access production deployments, including mutating tools. Defaults to false.\",\n    false,\n  )\n  // Deprecated option, we swapped the default. no-op.\n  .addOption(\n    new Option(\"--disable-production-deployments\")\n      .conflicts(\"--dangerously-enable-production-deployments\")\n      .hideHelp(),\n  )\n  .addDeploymentSelectionOptions(actionDescription(\"Run the MCP server on\"))\n  .action(async (options) => {\n    const ctx = await oneoffContext(options);\n    try {\n      const server = makeServer(options);\n      const transport = new StdioServerTransport();\n      await server.connect(transport);\n      // Keep the process running\n      await new Promise(() => {});\n    } catch (error: any) {\n      await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        errForSentry: `Failed to start MCP server: ${error}`,\n        printedMessage: `Failed to start MCP server: ${error}`,\n      });\n    }\n  });\n\nfunction makeServer(options: McpOptions) {\n  const disabledToolNames = new Set<string>();\n  for (const toolName of options.disableTools?.split(\",\") ?? []) {\n    const name = toolName.trim();\n    if (!allToolNames.includes(name)) {\n      // eslint-disable-next-line no-restricted-syntax\n      throw new Error(\n        `Disabled tool ${name} not found (valid tools: ${allToolNames.join(\", \")})`,\n      );\n    }\n    disabledToolNames.add(name);\n  }\n\n  const enabledToolsByName: Record<string, ConvexTool<any, any>> = {};\n  for (const tool of convexTools) {\n    if (!disabledToolNames.has(tool.name)) {\n      enabledToolsByName[tool.name] = tool;\n    }\n  }\n\n  const mutex = new Mutex();\n  const server = new Server(\n    {\n      name: \"Convex MCP Server\",\n      version: \"0.0.1\",\n    },\n    {\n      capabilities: {\n        tools: {},\n      },\n    },\n  );\n  server.setRequestHandler(\n    CallToolRequestSchema,\n    async (request: CallToolRequest) => {\n      const ctx = new RequestContext(options);\n      await initializeBigBrainAuth(ctx, options);\n      try {\n        const authorized = await checkAuthorization(ctx, false);\n        if (!authorized) {\n          await ctx.crash({\n            exitCode: 1,\n            errorType: \"fatal\",\n            printedMessage:\n              \"Not Authorized: Run `npx convex dev` to login to your Convex project.\",\n          });\n        }\n        if (!request.params.arguments) {\n          await ctx.crash({\n            exitCode: 1,\n            errorType: \"fatal\",\n            printedMessage: \"No arguments provided\",\n          });\n        }\n        const convexTool = enabledToolsByName[request.params.name];\n        if (!convexTool) {\n          await ctx.crash({\n            exitCode: 1,\n            errorType: \"fatal\",\n            printedMessage: `Tool ${request.params.name} not found`,\n          });\n        }\n        const input = convexTool.inputSchema.parse(request.params.arguments);\n\n        // Serialize tool handlers since they're mutating the current working directory.\n        const result = await mutex.runExclusive(async () => {\n          return await convexTool.handler(ctx, input);\n        });\n        return {\n          content: [\n            {\n              type: \"text\",\n              text: JSON.stringify(result),\n            },\n          ],\n        };\n      } catch (error: any) {\n        let message: string;\n        if (error instanceof RequestCrash) {\n          message = error.printedMessage;\n        } else if (error instanceof Error) {\n          message = error.message;\n        } else {\n          message = String(error);\n        }\n        return {\n          content: [\n            {\n              type: \"text\",\n              text: JSON.stringify({ error: message }),\n            },\n          ],\n          isError: true,\n        };\n      }\n    },\n  );\n  server.setRequestHandler(ListToolsRequestSchema, async () => {\n    return {\n      tools: Object.values(enabledToolsByName).map(mcpTool),\n    };\n  });\n  return server;\n}\n", "import { Command } from \"@commander-js/extra-typings\";\nimport { Context, oneoffContext } from \"../bundler/context.js\";\nimport { loadSelectedDeploymentCredentials } from \"./lib/api.js\";\nimport {\n  getDeploymentSelection,\n  deploymentNameFromSelection,\n} from \"./lib/deploymentSelection.js\";\nimport { parseDeploymentSelector } from \"./lib/deploymentSelector.js\";\nimport { updateEnvAndConfigForDeploymentSelection } from \"./configure.js\";\nimport { fetchDeploymentCanonicalSiteUrl } from \"./lib/env.js\";\nimport { chalkStderr } from \"chalk\";\n\nexport const deploymentSelect = new Command(\"select\")\n  .summary(\"Select the deployment to use when running commands\")\n  .description(\n    \"Select the deployment to use when running commands.\\n\\n\" +\n      \"The deployment will be used by all `npx convex` commands, except `npx convex deploy`. You can also run individual commands on another deployment by using the --deployment flag on that command.\\n\\n\" +\n      \"Examples:\\n\" +\n      \"  npx convex select dev                              # Select your personal dev deployment in the current project\\n\" +\n      \"  npx convex select dev/james                        # Select a deployment in the same project by its reference\\n\" +\n      \"  npx convex select dev/james                        # Select a deployment in the same project by its reference\\n\" +\n      \"  npx convex select some-project:dev/james           # Select a deployment in another project in the same team\\n\" +\n      \"  npx convex select some-team:some-project:dev/james # Select a deployment in a particular team/project\\n\",\n  )\n  .argument(\"<deployment>\", \"The deployment to use\")\n  .allowExcessArguments(false)\n  .action(async (selector) => {\n    const ctx = await oneoffContext({\n      url: undefined,\n      adminKey: undefined,\n      envFile: undefined,\n    });\n    await selectDeployment(ctx, selector);\n  });\n\nexport async function selectDeployment(\n  ctx: Context,\n  selector: string,\n): Promise<void> {\n  // Get the current deployment selection (no flags, just env/config state)\n  const currentSelection = await getDeploymentSelection(ctx, {});\n\n  // If no project is configured and the selector needs project context, show a specific error\n  const parsed = parseDeploymentSelector(selector);\n  if (\n    currentSelection.kind === \"chooseProject\" &&\n    parsed.kind !== \"inTeamProject\" &&\n    parsed.kind !== \"deploymentName\"\n  ) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: `No project configured. Run \\`npx convex dev\\` to set up a project first, or use a full selector like 'my-team:my-project:dev/james' or 'happy-capybara-123'.`,\n    });\n  }\n\n  // Resolve the new deployment using the selector relative to the current project\n  const newSelection = await getDeploymentSelection(ctx, {\n    url: undefined,\n    adminKey: undefined,\n    envFile: undefined,\n    deployment: selector,\n  });\n\n  const deployment = await loadSelectedDeploymentCredentials(\n    ctx,\n    newSelection,\n    {\n      ensureLocalRunning: false,\n    },\n  );\n\n  if (deployment.deploymentFields === null) {\n    // Should be unreachable since for now, `select` only allows users\n    // to select deployments that exist in Big Brain\n    return ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: null,\n      errForSentry: `Unexpected selection in select: ${JSON.stringify(deployment)}`,\n    });\n  }\n\n  if (deployment.deploymentFields.deploymentType === \"prod\") {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: `Selecting a production deployment is unsupported. To run commands on a production deployment, pass the ${chalkStderr.bold(`--deployment ${selector}`)} flag to each command.`,\n    });\n  }\n\n  const siteUrl = await fetchDeploymentCanonicalSiteUrl(ctx, {\n    adminKey: deployment.adminKey,\n    deploymentUrl: deployment.url,\n  });\n\n  await updateEnvAndConfigForDeploymentSelection(\n    ctx,\n    {\n      url: deployment.url,\n      siteUrl,\n      deploymentName: deployment.deploymentFields.deploymentName,\n      teamSlug: deployment.deploymentFields.teamSlug,\n      projectSlug: deployment.deploymentFields.projectSlug,\n      deploymentType: deployment.deploymentFields.deploymentType,\n    },\n    deploymentNameFromSelection(currentSelection),\n  );\n}\n", "import { Command, Option } from \"@commander-js/extra-typings\";\nimport { Context, oneoffContext } from \"../bundler/context.js\";\nimport {\n  logFailure,\n  logFinishedStep,\n  logMessage,\n  showSpinner,\n} from \"../bundler/log.js\";\nimport {\n  DeploymentSelection,\n  getDeploymentSelection,\n  getProjectDetails,\n} from \"./lib/deploymentSelection.js\";\nimport {\n  logNoDefaultRegionMessage,\n  selectRegion,\n  typedBigBrainClient,\n  typedPlatformClient,\n} from \"./lib/utils/utils.js\";\nimport { PlatformProjectDetails } from \"@convex-dev/platform/managementApi\";\nimport { getTeamAndProjectFromPreviewAdminKey } from \"./lib/deployment.js\";\nimport { selectDeployment } from \"./deploymentSelect.js\";\nimport { promptOptions, promptString } from \"./lib/utils/prompts.js\";\nimport { chalkStderr } from \"chalk\";\nimport { parseDeploymentSelector } from \"./lib/deploymentSelector.js\";\n\nexport const deploymentCreate = new Command(\"create\")\n  .summary(\"Create a new cloud deployment for a project\")\n  .description(\n    \"Create a new cloud deployment for a project.\\n\\n\" +\n      \"  Create a dev deployment and select it: `npx convex deployment create dev/my-new-feature --type dev --select`\\n\" +\n      \"  Create a prod staging deployment:      `npx convex deployment create staging --type prod`\\n\",\n  )\n  .argument(\"[ref]\")\n  .allowExcessArguments(false)\n  .addOption(\n    new Option(\"--type <type>\", \"Deployment type\").choices([\n      \"dev\",\n      \"prod\",\n      \"preview\",\n    ] as const),\n  )\n  .option(\"--region <region>\", \"Deployment region\")\n  .option(\n    \"--select\",\n    \"Select the new deployment. This will update the Convex environment variables in .env.local and `npx convex dev` will run against this deployment.\",\n  )\n  .option(\n    \"--default\",\n    \"Set the new deployment as your default development or production deployment.\",\n  )\n  .action(async (refParam, options) => {\n    const ctx = await oneoffContext({\n      url: undefined,\n      adminKey: undefined,\n      envFile: undefined,\n    });\n\n    const { ref, regionDetails, projectId, type, isDefault } = process.stdin\n      .isTTY\n      ? await resolveOptionsInteractively(ctx, refParam, options)\n      : await resolveOptionsNoninteractively(ctx, refParam, options);\n\n    showSpinner(\n      `Creating ${type} deployment` +\n        (regionDetails ? ` in region ${regionDetails.displayName}` : \"\") +\n        \"...\",\n    );\n\n    const created = (\n      await typedPlatformClient(ctx).POST(\n        \"/projects/{project_id}/create_deployment\",\n        {\n          params: {\n            path: { project_id: projectId },\n          },\n          body: {\n            type,\n            region: regionDetails?.name ?? null,\n            reference: ref ?? null,\n            isDefault,\n          },\n        },\n      )\n    ).data!;\n\n    if (created.kind !== \"cloud\") {\n      // This should be impossible\n      const err = `Expected cloud deployment to be created but got ${created.kind}`;\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: err,\n        errForSentry: err,\n      });\n    }\n\n    if (!options.select) {\n      logFinishedStep(\n        `Provisioned a ${created.isDefault ? \"default \" : \"\"}${created.deploymentType} deployment. Select this deployment to develop against using \\`npx convex deployment select ${created.reference}\\``,\n      );\n      logMessage(\n        chalkStderr.gray(\n          \"Hint: use `npx convex deployment create --select` to immediately select the newly created deployment.\",\n        ),\n      );\n    }\n\n    if (options.select) {\n      await selectDeployment(ctx, created.reference);\n    }\n  });\n\ntype RefParam = Parameters<Parameters<typeof deploymentCreate.action>[0]>[0];\ntype OptionsParam = Parameters<\n  Parameters<typeof deploymentCreate.action>[0]\n>[1];\n\nasync function resolveOptionsNoninteractively(\n  ctx: Context,\n  refParam: RefParam,\n  options: OptionsParam,\n) {\n  let ref: string | undefined;\n  let teamAndProject: { teamSlug: string; projectSlug: string } | undefined;\n  if (refParam) {\n    const result = parseSelectorForNewDeployment(refParam);\n    if (result.kind === \"invalid\") {\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: result.message,\n      });\n    }\n    ref = result.ref;\n    teamAndProject = result.teamAndProject;\n  }\n\n  if (!ref && !options.default) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage:\n        \"Specify a deployment ref or use --default:\\n\" +\n        \"  `npx convex deployment create my-deployment-ref --type dev`\\n\" +\n        \"  `npx convex deployment create --type prod --default`\",\n    });\n  }\n\n  if (!options.type) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: \"--type is required. Use --type dev or --type prod.\",\n    });\n  }\n\n  const project = teamAndProject\n    ? await getProjectDetails(ctx, {\n        kind: \"teamAndProjectSlugs\",\n        teamSlug: teamAndProject.teamSlug,\n        projectSlug: teamAndProject.projectSlug,\n      })\n    : await resolveProject(\n        ctx,\n        await getDeploymentSelection(ctx, {\n          url: undefined,\n          adminKey: undefined,\n          envFile: undefined,\n        }),\n      );\n  const projectId = project.id;\n\n  // If no region is passed in, the team's default region will be used\n  let regionDetails: AvailableRegion | null = null;\n  if (options.region) {\n    const availableRegions = await fetchAvailableRegions(ctx, project.teamId);\n    regionDetails = await resolveRegionDetailsOrCrash(\n      ctx,\n      availableRegions,\n      options.region,\n    );\n  }\n\n  return {\n    ref,\n    isDefault: options.default ?? null,\n    projectId,\n    regionDetails,\n    type: options.type,\n  };\n}\n\nasync function resolveOptionsInteractively(\n  ctx: Context,\n  refParam: RefParam,\n  options: OptionsParam,\n) {\n  let deploymentType: \"dev\" | \"prod\" | \"preview\";\n  if (options.type) {\n    deploymentType = logAndUse(\"type\", options.type);\n  } else {\n    const dtypeChoices = [\n      {\n        name: \"dev\",\n        value: \"dev\" as const,\n      },\n      {\n        name: \"preview\",\n        value: \"preview\" as const,\n      },\n      {\n        name: \"prod\",\n        value: \"prod\" as const,\n      },\n    ];\n    deploymentType = await promptOptions(ctx, {\n      message: \"Deployment type?\",\n      choices: dtypeChoices,\n    });\n  }\n\n  let ref: string | undefined;\n  let teamAndProject: { teamSlug: string; projectSlug: string } | undefined;\n  if (refParam) {\n    const result = parseSelectorForNewDeployment(refParam);\n    if (result.kind === \"invalid\") {\n      logFailure(result.message);\n    } else {\n      ref = logAndUse(\"ref\", result.ref);\n      teamAndProject = result.teamAndProject;\n    }\n  }\n  while (ref === undefined) {\n    const input = await promptString(ctx, { message: \"Deployment ref?\" });\n    const result = parseSelectorForNewDeployment(input);\n    if (result.kind === \"invalid\") {\n      logFailure(result.message);\n      continue;\n    }\n    ref = result.ref;\n    teamAndProject = result.teamAndProject;\n  }\n\n  const project = teamAndProject\n    ? await getProjectDetails(ctx, {\n        kind: \"teamAndProjectSlugs\",\n        teamSlug: teamAndProject.teamSlug,\n        projectSlug: teamAndProject.projectSlug,\n      })\n    : await resolveProject(\n        ctx,\n        await getDeploymentSelection(ctx, {\n          url: undefined,\n          adminKey: undefined,\n          envFile: undefined,\n        }),\n      );\n\n  const availableRegions = await fetchAvailableRegions(ctx, project.teamId);\n  let regionDetails: AvailableRegion;\n  if (options.region) {\n    regionDetails = await resolveRegionDetailsOrCrash(\n      ctx,\n      availableRegions,\n      options.region,\n    );\n    logAndUse(\"region\", regionDetails.displayName);\n  } else {\n    // Use the team's default region if set, or prompt the user to pick\n    // TODO: this duplicates some of the logic in selectRegionOrUseDefault (npm-packages/convex/src/cli/lib/utils/utils.ts)\n    const teams = (await typedBigBrainClient(ctx).GET(\"/teams\")).data!;\n    const team = teams.find((team) => team.slug === project.teamSlug);\n    if (!team) {\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: `Error: Team ${project.teamSlug} not found.`,\n      });\n    }\n    const regionName =\n      team.defaultRegion ?? (await selectRegion(ctx, team.id, deploymentType));\n    regionDetails = await resolveRegionDetailsOrCrash(\n      ctx,\n      availableRegions,\n      regionName,\n    );\n    if (team.defaultRegion) {\n      logFinishedStep(\n        `Using team default region of ${regionDetails.displayName}`,\n      );\n    } else {\n      logNoDefaultRegionMessage(team.slug);\n    }\n  }\n\n  return {\n    ref,\n    isDefault: options.default ?? null,\n    projectId: project.id,\n    regionDetails,\n    type: deploymentType,\n  };\n}\n\ntype NewDeploymentSelectorResult =\n  | {\n      kind: \"valid\";\n      ref: string;\n      teamAndProject?: { teamSlug: string; projectSlug: string };\n    }\n  | { kind: \"invalid\"; message: string };\n\nfunction parseSelectorForNewDeployment(\n  selectorString: string,\n): NewDeploymentSelectorResult {\n  const selector = parseDeploymentSelector(selectorString);\n  switch (selector.kind) {\n    case \"deploymentName\":\n      return {\n        kind: \"invalid\",\n        message: `\"${selector.deploymentName}\" is not a valid deployment reference. References cannot be in the format abc-xyz-123, as it is reserved for deployment names.`,\n      };\n    case \"inCurrentProject\": {\n      const inner = selector.selector;\n      if (inner.kind === \"dev\") {\n        return {\n          kind: \"invalid\",\n          message: `\"dev\" is not a valid deployment reference.`,\n        };\n      }\n      if (inner.kind === \"prod\") {\n        return {\n          kind: \"invalid\",\n          message: `\"prod\" is not a valid deployment reference.`,\n        };\n      }\n      return { kind: \"valid\", ref: inner.reference };\n    }\n    case \"inProject\": {\n      return {\n        kind: \"invalid\",\n        message: `Please use \"team:project:ref\" to specify the team when creating a new deployment in a different project.`,\n      };\n    }\n    case \"inTeamProject\": {\n      const inner = selector.selector;\n      if (inner.kind === \"dev\") {\n        return {\n          kind: \"invalid\",\n          message: `\"dev\" is not a valid deployment reference.`,\n        };\n      }\n      if (inner.kind === \"prod\") {\n        return {\n          kind: \"invalid\",\n          message: `\"prod\" is not a valid deployment reference.`,\n        };\n      }\n      return {\n        kind: \"valid\",\n        ref: inner.reference,\n        teamAndProject: {\n          teamSlug: selector.teamSlug,\n          projectSlug: selector.projectSlug,\n        },\n      };\n    }\n    default:\n      selector satisfies never;\n      return {\n        kind: \"invalid\",\n        message: \"Unknown state. This is a bug in Convex.\",\n      };\n  }\n}\n\nasync function resolveProject(\n  ctx: Context,\n  deploymentSelection: DeploymentSelection,\n): Promise<PlatformProjectDetails> {\n  switch (deploymentSelection.kind) {\n    case \"existingDeployment\": {\n      const { deploymentFields } = deploymentSelection.deploymentToActOn;\n      if (deploymentFields) {\n        return await getProjectDetails(ctx, {\n          kind: \"deploymentName\",\n          deploymentName: deploymentFields.deploymentName,\n          deploymentType: null,\n        });\n      }\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage:\n          \"Cannot infer project from the current deployment configuration. Use `team:project:ref` to specify team and project slugs.\",\n      });\n    }\n    case \"deploymentWithinProject\": {\n      return await getProjectDetails(ctx, deploymentSelection.targetProject);\n    }\n    case \"preview\": {\n      const slugs = await getTeamAndProjectFromPreviewAdminKey(\n        ctx,\n        deploymentSelection.previewDeployKey,\n      );\n      return await getProjectDetails(ctx, {\n        kind: \"teamAndProjectSlugs\",\n        teamSlug: slugs.teamSlug,\n        projectSlug: slugs.projectSlug,\n      });\n    }\n    case \"chooseProject\":\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage:\n          \"No project configured yet. Use `team:project:ref` to specify team and project slugs.\",\n      });\n    case \"anonymous\":\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage:\n          \"Cannot create a deployment in anonymous mode. \" +\n          \"Run `npx convex login` and configure a project first.\",\n      });\n    default: {\n      deploymentSelection satisfies never;\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: `Unexpected deployment selection kind.`,\n      });\n    }\n  }\n}\n\nconst REGION_NAME_TO_ALIAS: Record<string, string> = {\n  \"aws-us-east-1\": \"us\",\n  \"aws-eu-west-1\": \"eu\",\n};\n\nconst REGION_ALIAS_TO_NAME = Object.fromEntries(\n  Object.entries(REGION_NAME_TO_ALIAS).map(([name, alias]) => [alias, name]),\n);\n\nexport async function fetchAvailableRegions(ctx: Context, teamId: number) {\n  const regionsResponse = (\n    await typedPlatformClient(ctx).GET(\n      \"/teams/{team_id}/list_deployment_regions\",\n      {\n        params: {\n          path: { team_id: `${teamId}` },\n        },\n      },\n    )\n  ).data!;\n  return regionsResponse.items.filter((item) => item.available);\n}\n\ntype AvailableRegion = Awaited<\n  ReturnType<typeof fetchAvailableRegions>\n>[number];\n\nexport function resolveRegionDetails(\n  availableRegions: AvailableRegion[],\n  region: string,\n) {\n  const resolvedRegion = REGION_ALIAS_TO_NAME[region] ?? region;\n  return availableRegions.find((item) => item.name === resolvedRegion) ?? null;\n}\n\nasync function resolveRegionDetailsOrCrash(\n  ctx: Context,\n  availableRegions: AvailableRegion[],\n  region: string,\n) {\n  const regionDetails = resolveRegionDetails(availableRegions, region);\n  if (!regionDetails) {\n    return await crashInvalidRegion(ctx, availableRegions, region);\n  }\n  return regionDetails;\n}\n\nfunction invalidRegionMessage(\n  availableRegions: AvailableRegion[],\n  region: string,\n): string {\n  const formatted = availableRegions\n    .map(\n      (item) =>\n        `    Use \\`--region ${REGION_NAME_TO_ALIAS[item.name] ?? item.name}\\` for ${item.displayName}`,\n    )\n    .join(\"\\n\");\n  return `Invalid region \"${region}\".\\n\\n` + formatted;\n}\n\nasync function crashInvalidRegion(\n  ctx: Context,\n  availableRegions: AvailableRegion[],\n  region: string,\n): Promise<never> {\n  return await ctx.crash({\n    exitCode: 1,\n    errorType: \"fatal\",\n    printedMessage: invalidRegionMessage(availableRegions, region),\n  });\n}\n\n/**\n * Helper to log a value passed in as a CLI argument in the interactive flow.\n */\nfunction logAndUse<T extends string | boolean>(label: string, value: T): T {\n  logFinishedStep(`Using ${label}: ${chalkStderr.bold(value)}`);\n  return value;\n}\n", "import { Command } from \"@commander-js/extra-typings\";\nimport { deploymentSelect } from \"./deploymentSelect.js\";\nimport { deploymentCreate } from \"./deploymentCreate.js\";\n\nexport const deployment = new Command(\"deployment\")\n  .summary(\"Manage deployments\")\n  .description(\"Manage deployments in your project.\")\n  .addCommand(deploymentSelect)\n  .addCommand(deploymentCreate);\n", "import path from \"path\";\nimport { Command } from \"@commander-js/extra-typings\";\nimport { oneoffContext } from \"../bundler/context.js\";\nimport { readProjectConfig } from \"./lib/config.js\";\nimport { functionsDir } from \"./lib/utils/utils.js\";\nimport {\n  installAiFiles,\n  enableAiFiles,\n  removeAiFiles,\n  safelyAttemptToDisableAiFiles,\n} from \"./lib/aiFiles/index.js\";\nimport { statusAiFiles } from \"./lib/aiFiles/status.js\";\n\nasync function resolveProjectPaths() {\n  const ctx = await oneoffContext({});\n  const { configPath, projectConfig } = await readProjectConfig(ctx);\n  const convexDir = path.resolve(functionsDir(configPath, projectConfig));\n  const projectDir = path.resolve(path.dirname(configPath));\n  return { projectDir, convexDir };\n}\n\nconst aiInstall = new Command(\"install\")\n  .summary(\"Install or refresh Convex AI files\")\n  .description(\n    \"Installs the following (or refreshes them if already present):\\n\" +\n      \"  - convex/_generated/ai/guidelines.md\\n\" +\n      \"  - AGENTS.md (Convex section only)\\n\" +\n      \"  - CLAUDE.md (Convex section only)\\n\" +\n      \"  - Agent skills (installed to each coding agent's native path)\",\n  )\n  .allowExcessArguments(false)\n  .action(async () => {\n    const { projectDir, convexDir } = await resolveProjectPaths();\n    await installAiFiles({ projectDir, convexDir });\n  });\n\nconst aiEnable = new Command(\"enable\")\n  .summary(\"Enable Convex AI files\")\n  .description(\n    \"Re-enables Convex AI files by writing `aiFiles.enabled: true` to\\n\" +\n      \"`convex.json`, then installs or refreshes the managed AI files.\",\n  )\n  .allowExcessArguments(false)\n  .action(async () => {\n    const { projectDir, convexDir } = await resolveProjectPaths();\n    await enableAiFiles({ projectDir, convexDir });\n  });\n\nconst aiUpdate = new Command(\"update\")\n  .summary(\"Update Convex AI files to the latest version\")\n  .description(\n    \"Updates the following to their latest versions:\\n\" +\n      \"  - convex/_generated/ai/guidelines.md\\n\" +\n      \"  - AGENTS.md (Convex section only)\\n\" +\n      \"  - CLAUDE.md (Convex section only)\\n\" +\n      \"  - Agent skills (installed to each coding agent's native path)\\n\\n\",\n  )\n  .allowExcessArguments(false)\n  .action(async () => {\n    const { projectDir, convexDir } = await resolveProjectPaths();\n    await installAiFiles({ projectDir, convexDir });\n  });\n\nconst aiDisable = new Command(\"disable\")\n  .summary(\"Disable Convex AI files without removing them\")\n  .description(\n    \"Writes `aiFiles.enabled: false` to `convex.json` so `npx convex dev`\\n\" +\n      \"stops prompting to install AI files and suppresses staleness messages.\\n\\n\" +\n      \"Files already installed are left untouched - use `npx convex ai-files remove`\\n\" +\n      \"if you also want to delete them.\\n\\n\" +\n      \"Run `npx convex ai-files enable` to re-enable at any time.\",\n  )\n  .allowExcessArguments(false)\n  .action(async () => {\n    const { projectDir } = await resolveProjectPaths();\n    await safelyAttemptToDisableAiFiles(projectDir);\n  });\n\nconst aiStatus = new Command(\"status\")\n  .summary(\"Show the current status of Convex AI files\")\n  .description(\n    \"Prints whether Convex AI files are enabled, and for each component:\\n\" +\n      \"  - convex/_generated/ai/guidelines.md\\n\" +\n      \"  - AGENTS.md (Convex section)\\n\" +\n      \"  - CLAUDE.md (if installed by Convex)\\n\" +\n      \"  - Agent skills\\n\\n\" +\n      \"Fetches the latest hashes from version.convex.dev to report whether\\n\" +\n      \"each file is up to date. If the network is unavailable the staleness\\n\" +\n      \"check is skipped silently.\",\n  )\n  .allowExcessArguments(false)\n  .action(async () => {\n    const { projectDir, convexDir } = await resolveProjectPaths();\n    await statusAiFiles({ projectDir, convexDir });\n  });\n\nconst aiRemove = new Command(\"remove\")\n  .summary(\"Remove all Convex AI files from the project\")\n  .description(\n    \"Removes the following:\\n\" +\n      \"  - convex/_generated/ai/ directory (guidelines.md, ai-files.state.json)\\n\" +\n      \"  - Convex sections from AGENTS.md and CLAUDE.md\\n\" +\n      \"  - Agent skills installed by `convex ai-files install`\\n\\n\" +\n      \"If removing the managed section leaves AGENTS.md or CLAUDE.md empty, the\\n\" +\n      \"empty file is deleted. Otherwise the rest of the file is kept.\\n\\n\" +\n      \"Skills installed from other sources are not affected.\\n\\n\" +\n      \"Note: after `remove`, `npx convex dev` will suggest reinstalling AI files.\\n\" +\n      \"Use `npx convex ai-files disable` to opt out entirely without deleting files.\",\n  )\n  .allowExcessArguments(false)\n  .action(async () => {\n    const { projectDir, convexDir } = await resolveProjectPaths();\n    await removeAiFiles({ projectDir, convexDir });\n  });\n\nexport const aiFiles = new Command(\"ai-files\")\n  .summary(\"Manage Convex AI files\")\n  .description(\n    \"Convex AI files help AI coding assistants (Cursor, Claude Code, etc.) understand\\n\" +\n      \"Convex patterns and APIs. They are set up during your first `npx convex dev`\\n\" +\n      \"and can be managed at any time with the commands below.\",\n  )\n  .addCommand(aiStatus)\n  .addCommand(aiInstall)\n  .addCommand(aiEnable)\n  .addCommand(aiUpdate)\n  .addCommand(aiDisable)\n  .addCommand(aiRemove)\n  .addHelpCommand(false);\n", "import path from \"path\";\nimport { chalkStderr } from \"chalk\";\nimport { logMessage } from \"../../../bundler/log.js\";\nimport {\n  AGENTS_MD_START_MARKER,\n  AGENTS_MD_END_MARKER,\n  agentsMdConvexSection,\n} from \"../../codegen_templates/agentsmd.js\";\nimport {\n  CLAUDE_MD_START_MARKER,\n  CLAUDE_MD_END_MARKER,\n  claudeMdConvexSection,\n} from \"../../codegen_templates/claudemd.js\";\nimport { getVersion } from \"../versionApi.js\";\nimport { hashSha256 } from \"../utils/hash.js\";\nimport {\n  type AiFilesPaths,\n  agentsMdPath,\n  claudeMdPath,\n  guidelinesPathForConvexDir,\n} from \"./paths.js\";\nimport { type AiFilesConfig, readAiConfig } from \"./config.js\";\nimport { readFileSafe } from \"./utils.js\";\n\nfunction logGuidelinesStatus({\n  guidelinesFile,\n  guidelinesRelPath,\n  config,\n  canonicalGuidelinesHash,\n  networkAvailable,\n}: {\n  guidelinesFile: string | null;\n  guidelinesRelPath: string;\n  config: AiFilesConfig;\n  canonicalGuidelinesHash: string | null;\n  networkAvailable: boolean;\n}): void {\n  if (guidelinesFile === null) {\n    logMessage(\n      `  ${chalkStderr.yellow(\"\u26A0\")} ${guidelinesRelPath}: not on disk \u2014 run ${chalkStderr.bold(\"npx convex ai-files install\")} to reinstall`,\n    );\n    return;\n  }\n\n  const isLocallyModified =\n    config.guidelinesHash !== null &&\n    hashSha256(guidelinesFile) !== config.guidelinesHash;\n\n  if (isLocallyModified) {\n    logMessage(\n      `  ${chalkStderr.yellow(\"\u26A0\")} ${guidelinesRelPath}: installed, modified locally (changes will be overwritten on next update)`,\n    );\n    return;\n  }\n\n  const isOutOfDate =\n    networkAvailable &&\n    canonicalGuidelinesHash !== null &&\n    config.guidelinesHash !== null &&\n    config.guidelinesHash !== canonicalGuidelinesHash;\n\n  if (isOutOfDate) {\n    logMessage(\n      `  ${chalkStderr.yellow(\"\u26A0\")} ${guidelinesRelPath}: installed, out of date \u2014 run ${chalkStderr.bold(\"npx convex ai-files update\")}`,\n    );\n    return;\n  }\n\n  logMessage(\n    `  ${chalkStderr.green(\"\u2714\")} ${guidelinesRelPath}: installed${networkAvailable ? \", up to date\" : \"\"}`,\n  );\n}\n\nfunction logAgentsMdStatus({\n  agentsContent,\n  config,\n  convexDirName,\n}: {\n  agentsContent: string | null;\n  config: AiFilesConfig;\n  convexDirName: string;\n}): void {\n  const hasSection =\n    agentsContent !== null &&\n    agentsContent.includes(AGENTS_MD_START_MARKER) &&\n    agentsContent.includes(AGENTS_MD_END_MARKER);\n\n  if (!hasSection) {\n    logMessage(\n      `  ${chalkStderr.yellow(\"\u26A0\")} AGENTS.md: Convex section missing \u2014 run ${chalkStderr.bold(\"npx convex ai-files install\")} to reinstall`,\n    );\n    return;\n  }\n\n  const currentHash = hashSha256(agentsMdConvexSection(convexDirName));\n  if (\n    config.agentsMdSectionHash !== null &&\n    config.agentsMdSectionHash !== currentHash\n  ) {\n    logMessage(\n      `  ${chalkStderr.yellow(\"\u26A0\")} AGENTS.md: Convex section out of date \u2014 run ${chalkStderr.bold(\"npx convex ai-files update\")}`,\n    );\n  } else {\n    logMessage(\n      `  ${chalkStderr.green(\"\u2714\")} AGENTS.md: Convex section present, up to date`,\n    );\n  }\n}\n\nfunction logClaudeMdStatus({\n  claudeContent,\n  config,\n  convexDirName,\n}: {\n  claudeContent: string | null;\n  config: AiFilesConfig;\n  convexDirName: string;\n}): void {\n  const hasSection =\n    claudeContent !== null &&\n    claudeContent.includes(CLAUDE_MD_START_MARKER) &&\n    claudeContent.includes(CLAUDE_MD_END_MARKER);\n\n  if (!hasSection) {\n    if (claudeContent === null) {\n      logMessage(\n        `  ${chalkStderr.yellow(\"\u26A0\")} CLAUDE.md: missing - run ${chalkStderr.bold(\"npx convex ai-files install\")} to create it`,\n      );\n    } else {\n      logMessage(\n        `  ${chalkStderr.yellow(\"\u26A0\")} CLAUDE.md: no Convex section present - run ${chalkStderr.bold(\"npx convex ai-files update\")} to add it`,\n      );\n    }\n    return;\n  }\n\n  const currentHash = hashSha256(claudeMdConvexSection(convexDirName));\n  if (config.claudeMdHash !== null && config.claudeMdHash !== currentHash) {\n    logMessage(\n      `  ${chalkStderr.yellow(\"\u26A0\")} CLAUDE.md: Convex section out of date - run ${chalkStderr.bold(\"npx convex ai-files update\")}`,\n    );\n  } else {\n    logMessage(\n      `  ${chalkStderr.green(\"\u2714\")} CLAUDE.md: Convex section present, up to date`,\n    );\n  }\n}\n\nfunction logSkillsStatus({\n  config,\n  canonicalAgentSkillsSha,\n  networkAvailable,\n}: {\n  config: AiFilesConfig;\n  canonicalAgentSkillsSha: string | null;\n  networkAvailable: boolean;\n}): void {\n  if (config.installedSkillNames.length === 0) {\n    logMessage(\n      `  ${chalkStderr.yellow(\"\u26A0\")} Agent skills: not installed \u2014 run ${chalkStderr.bold(\"npx convex ai-files install\")} to install`,\n    );\n    return;\n  }\n\n  const skillsList = config.installedSkillNames.join(\", \");\n  const isStale =\n    networkAvailable &&\n    canonicalAgentSkillsSha !== null &&\n    config.agentSkillsSha !== null &&\n    config.agentSkillsSha !== canonicalAgentSkillsSha;\n\n  if (isStale) {\n    logMessage(\n      `  ${chalkStderr.yellow(\"\u26A0\")} Agent skills: ${skillsList} \u2014 out of date, run ${chalkStderr.bold(\"npx convex ai-files update\")}`,\n    );\n  } else {\n    logMessage(\n      `  ${chalkStderr.green(\"\u2714\")} Agent skills: ${skillsList}${networkAvailable ? \" (up to date)\" : \"\"}`,\n    );\n  }\n}\n\nexport async function statusAiFiles({\n  projectDir,\n  convexDir,\n}: AiFilesPaths): Promise<void> {\n  const convexDirName = path.relative(projectDir, convexDir);\n  const guidelinesRelPath = path.relative(\n    projectDir,\n    guidelinesPathForConvexDir(convexDir),\n  );\n\n  const config = await readAiConfig({ projectDir, convexDir });\n\n  if (config === null) {\n    logMessage(`Convex AI files: ${chalkStderr.yellow(\"not installed\")}`);\n    logMessage(\n      `  Run ${chalkStderr.bold(\"npx convex ai-files install\")} to get started, ` +\n        `or ${chalkStderr.bold(\"npx convex ai-files disable\")} to opt out.`,\n    );\n    return;\n  }\n\n  if (!config.enabled) {\n    logMessage(`Convex AI files: ${chalkStderr.yellow(\"disabled\")}`);\n    logMessage(\n      `  Run ${chalkStderr.bold(\"npx convex ai-files enable\")} to re-enable.`,\n    );\n    return;\n  }\n\n  logMessage(`Convex AI files: ${chalkStderr.green(\"enabled\")}`);\n\n  const [versionData, guidelinesFile, agentsContent, claudeContent] =\n    await Promise.all([\n      getVersion(),\n      readFileSafe(guidelinesPathForConvexDir(convexDir)),\n      readFileSafe(agentsMdPath(projectDir)),\n      readFileSafe(claudeMdPath(projectDir)),\n    ]);\n\n  const networkAvailable = versionData.kind === \"ok\";\n  const canonicalGuidelinesHash = networkAvailable\n    ? versionData.data.guidelinesHash\n    : null;\n  const canonicalAgentSkillsSha = networkAvailable\n    ? versionData.data.agentSkillsSha\n    : null;\n\n  logGuidelinesStatus({\n    guidelinesFile,\n    guidelinesRelPath,\n    config,\n    canonicalGuidelinesHash,\n    networkAvailable,\n  });\n  logAgentsMdStatus({ agentsContent, config, convexDirName });\n  logClaudeMdStatus({ claudeContent, config, convexDirName });\n  logSkillsStatus({ config, canonicalAgentSkillsSha, networkAvailable });\n}\n", "/**\n * Debugging commands for the WorkOS integration; these are unstable, undocumented, and will change or disappear as the WorkOS integration evolves.\n **/\nimport { Command } from \"@commander-js/extra-typings\";\nimport { Context, oneoffContext } from \"../bundler/context.js\";\nimport { chalkStderr } from \"chalk\";\nimport {\n  DeploymentSelectionOptions,\n  fetchTeamAndProject,\n  getTeamAndProjectSlugForDeployment,\n  loadSelectedDeploymentCredentials,\n} from \"./lib/api.js\";\nimport { actionDescription } from \"./lib/command.js\";\nimport { ensureHasConvexDependency } from \"./lib/utils/utils.js\";\nimport { getDeploymentSelection } from \"./lib/deploymentSelection.js\";\nimport {\n  ensureWorkosEnvironmentProvisioned,\n  provisionWorkosTeamInteractive,\n} from \"./lib/workos/workos.js\";\nimport {\n  disconnectWorkOSTeam,\n  getCandidateEmailsForWorkIntegration,\n  getDeploymentCanProvisionWorkOSEnvironments,\n  getInvitationEligibleEmails,\n  getWorkosEnvironmentHealth,\n  getWorkosTeamHealth,\n  inviteToWorkosTeam,\n  listProjectWorkOSEnvironments,\n  createProjectWorkOSEnvironment,\n  deleteProjectWorkOSEnvironment,\n} from \"./lib/workos/platformApi.js\";\nimport {\n  logFinishedStep,\n  logMessage,\n  logWarning,\n  showSpinner,\n  stopSpinner,\n} from \"../bundler/log.js\";\nimport { readProjectConfig, getAuthKitConfig } from \"./lib/config.js\";\nimport { promptOptions, promptYesNo } from \"./lib/utils/prompts.js\";\n\nasync function selectEnvDeployment(\n  options: DeploymentSelectionOptions,\n): Promise<{\n  ctx: Context;\n  deployment: {\n    deploymentUrl: string;\n    deploymentName: string;\n    deploymentType: \"dev\" | \"preview\" | \"prod\";\n    adminKey: string;\n    deploymentNotice: string;\n  };\n}> {\n  const ctx = await oneoffContext(options);\n  const deploymentSelection = await getDeploymentSelection(ctx, options);\n  const {\n    adminKey,\n    url: deploymentUrl,\n    deploymentFields,\n  } = await loadSelectedDeploymentCredentials(ctx, deploymentSelection);\n  // WorkOS integration only works with cloud deployments\n  if (!deploymentFields) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: \"WorkOS integration requires a configured deployment\",\n    });\n  }\n\n  const deploymentNotice = ` (on ${chalkStderr.bold(deploymentFields.deploymentType)} deployment ${chalkStderr.bold(deploymentFields.deploymentName)})`;\n\n  const deploymentType = deploymentFields.deploymentType;\n\n  if (deploymentType === \"custom\") {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: `The WorkOS integration is not available for custom deployments yet.`,\n    });\n  }\n\n  if (\n    deploymentType !== \"dev\" &&\n    deploymentType !== \"preview\" &&\n    deploymentType !== \"prod\"\n  ) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: `The WorkOS integration is only available for cloud deployments (dev, preview, prod), not ${deploymentType}`,\n    });\n  }\n\n  // Now TypeScript knows deploymentType is CloudDeploymentType\n  return {\n    ctx,\n    deployment: {\n      deploymentName: deploymentFields.deploymentName,\n      deploymentType,\n      deploymentUrl,\n      adminKey,\n      deploymentNotice,\n    },\n  };\n}\n\nconst workosTeamStatus = new Command(\"status\")\n  .summary(\"Status of associated WorkOS team and environment\")\n  .addDeploymentSelectionOptions(actionDescription(\"Check WorkOS status for\"))\n  .action(async (_options, cmd) => {\n    const options = cmd.optsWithGlobals();\n    const { ctx, deployment } = await selectEnvDeployment(options);\n\n    const info = await fetchTeamAndProject(ctx, deployment.deploymentName);\n\n    // Check team status\n    const teamHealth = await getWorkosTeamHealth(ctx, info.teamId);\n    if (!teamHealth) {\n      logMessage(`WorkOS team: Not provisioned`);\n      const { availableEmails } =\n        await getCandidateEmailsForWorkIntegration(ctx);\n      if (availableEmails.length > 0) {\n        logMessage(\n          `  Verified emails that can provision: ${availableEmails.join(\", \")}`,\n        );\n      }\n    } else if (teamHealth.productionState === \"inactive\") {\n      logMessage(\n        `WorkOS team: ${teamHealth.name} (no credit card added on workos.com, so production auth environments cannot be created)`,\n      );\n    } else {\n      logMessage(`WorkOS team: ${teamHealth.name}`);\n    }\n\n    // Check environment status\n    const envHealth = await getWorkosEnvironmentHealth(\n      ctx,\n      deployment.deploymentName,\n    );\n    if (!envHealth) {\n      logMessage(`WorkOS environment: Not provisioned`);\n    } else {\n      logMessage(`WorkOS environment: ${envHealth.name}`);\n      const workosUrl = `https://dashboard.workos.com/${envHealth.id}/authentication`;\n      logMessage(`${workosUrl}`);\n    }\n\n    try {\n      const { projectConfig } = await readProjectConfig(ctx);\n      const authKitConfig = await getAuthKitConfig(ctx, projectConfig);\n\n      if (!authKitConfig) {\n        logMessage(\n          `AuthKit config: ${chalkStderr.dim(\"Not configured in convex.json\")}`,\n        );\n      } else {\n        logMessage(`AuthKit config:`);\n\n        // Show config for each deployment type\n        for (const deploymentType of [\"dev\", \"preview\", \"prod\"] as const) {\n          const envConfig = authKitConfig[deploymentType];\n          if (!envConfig) {\n            logMessage(\n              `  ${deploymentType}: ${chalkStderr.dim(\"not configured\")}`,\n            );\n            continue;\n          }\n\n          // Build description based on what's configured\n          let description = \"\";\n\n          // Show environment type for prod deployments\n          if (deploymentType === \"prod\" && envConfig.environmentType) {\n            description = `environment type: ${envConfig.environmentType}`;\n          }\n\n          const configureStatus =\n            envConfig.configure === false\n              ? \", configure: disabled\"\n              : envConfig.configure\n                ? \", will configure WorkOS\"\n                : \"\";\n\n          const localEnvVarsStatus =\n            envConfig.localEnvVars === false\n              ? \"\"\n              : envConfig.localEnvVars\n                ? `, ${Object.keys(envConfig.localEnvVars).length} local env vars`\n                : \"\";\n\n          // Show deployment type with its configuration\n          const configInfo = [description, configureStatus, localEnvVarsStatus]\n            .filter((s) => s)\n            .join(\"\");\n\n          logMessage(`  ${deploymentType}: ${configInfo || \"configured\"}`);\n        }\n      }\n    } catch (error) {\n      logMessage(\n        `AuthKit config: ${chalkStderr.yellow(`Error reading config: ${String(error)}`)}`,\n      );\n    }\n  });\n\nconst workosProvisionEnvironment = new Command(\"provision-environment\")\n  .summary(\"Provision a WorkOS environment\")\n  .description(\n    \"Create or get the WorkOS environment and API key for this deployment\",\n  )\n  .configureHelp({ showGlobalOptions: true })\n  .allowExcessArguments(false)\n  .addDeploymentSelectionOptions(\n    actionDescription(\"Provision WorkOS environment for\"),\n  )\n  .option(\n    \"--name <name>\",\n    \"Custom name for the WorkOS environment (if not provided, uses deployment name)\",\n  )\n  .action(async (_options, cmd) => {\n    const options = cmd.optsWithGlobals();\n    const { ctx, deployment } = await selectEnvDeployment(options);\n    await ensureHasConvexDependency(\n      ctx,\n      \"integration workos provision-environment\",\n    );\n\n    try {\n      const { projectConfig } = await readProjectConfig(ctx);\n      const authKitConfig = await getAuthKitConfig(ctx, projectConfig);\n      const config = authKitConfig || { dev: {} };\n\n      if (!authKitConfig) {\n        logWarning(\n          \"Consider using the 'authKit' config in convex.json for automatic provisioning.\",\n        );\n        logMessage(\n          \"Learn more at https://docs.convex.dev/auth/authkit/auto-provision\",\n        );\n        logMessage(\"\");\n      }\n\n      await ensureWorkosEnvironmentProvisioned(\n        ctx,\n        deployment.deploymentName,\n        deployment,\n        config,\n        deployment.deploymentType,\n      );\n    } catch (error) {\n      await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        errForSentry: error,\n        printedMessage: `Failed to provision WorkOS environment: ${String(error)}`,\n      });\n    }\n  });\n\nconst workosProvisionTeam = new Command(\"provision-team\")\n  .summary(\"Provision a WorkOS team for this Convex team\")\n  .description(\n    \"Create a WorkOS team and associate it with this Convex team. \" +\n      \"This enables automatic provisioning of WorkOS environments for deployments on this team.\",\n  )\n  .configureHelp({ showGlobalOptions: true })\n  .allowExcessArguments(false)\n  .addDeploymentSelectionOptions(actionDescription(\"Provision WorkOS team for\"))\n  .action(async (_options, cmd) => {\n    const options = cmd.optsWithGlobals();\n    const { ctx, deployment } = await selectEnvDeployment(options);\n\n    // Check if there's already an associated WorkOS team\n    const { hasAssociatedWorkosTeam, teamId } =\n      await getDeploymentCanProvisionWorkOSEnvironments(\n        ctx,\n        deployment.deploymentName,\n      );\n\n    if (hasAssociatedWorkosTeam) {\n      logMessage(\n        chalkStderr.yellow(\n          \"This Convex team already has an associated WorkOS team.\",\n        ),\n      );\n      logMessage(\n        chalkStderr.dim(\n          \"Use 'npx convex integration workos status' to view details.\",\n        ),\n      );\n      return;\n    }\n\n    // Use the shared provisioning flow\n    const result = await provisionWorkosTeamInteractive(\n      ctx,\n      deployment.deploymentName,\n      teamId,\n      deployment.deploymentType,\n    );\n\n    if (!result.success) {\n      logMessage(chalkStderr.gray(\"Cancelled.\"));\n      return;\n    }\n\n    // Success!\n    logMessage(\n      chalkStderr.green(\n        `\\n\u2713 Successfully created WorkOS team \"${result.workosTeamName}\" (${result.workosTeamId})`,\n      ),\n    );\n    logMessage(\n      chalkStderr.dim(\n        \"You can now provision WorkOS environments for deployments on this team.\",\n      ),\n    );\n  });\n\nconst workosDisconnectTeam = new Command(\"disconnect-team\")\n  .summary(\"Disconnect WorkOS team from Convex team\")\n  .description(\n    \"Remove the associated WorkOS team from this Convex team. \" +\n      \"This is a destructive action that will prevent new WorkOS environments from being provisioned. \" +\n      \"Existing environments will continue to work with their current API keys.\",\n  )\n  .configureHelp({ showGlobalOptions: true })\n  .allowExcessArguments(false)\n  .addDeploymentSelectionOptions(\n    actionDescription(\"Disconnect WorkOS team for\"),\n  )\n  .action(async (_options, cmd) => {\n    const options = cmd.optsWithGlobals();\n    const { ctx, deployment } = await selectEnvDeployment(options);\n\n    // Check if there's an associated WorkOS team\n    const { hasAssociatedWorkosTeam, teamId } =\n      await getDeploymentCanProvisionWorkOSEnvironments(\n        ctx,\n        deployment.deploymentName,\n      );\n\n    if (!hasAssociatedWorkosTeam) {\n      logMessage(\n        chalkStderr.yellow(\n          \"This Convex team does not have an associated WorkOS team.\",\n        ),\n      );\n      return;\n    }\n\n    const info = await getTeamAndProjectSlugForDeployment(ctx, {\n      deploymentName: deployment.deploymentName,\n    });\n\n    logMessage(\n      chalkStderr.yellow(\n        `Warning: This will disconnect the WorkOS team from Convex team \"${info?.teamSlug}\".`,\n      ),\n    );\n    logMessage(\n      \"AuthKit environments provisioned for Convex deployments on this team will no longer use this WorkOS team to provision environments.\",\n    );\n    logMessage(\n      chalkStderr.dim(\n        \"Existing WorkOS environments will continue to work with their current API keys.\",\n      ),\n    );\n\n    const confirmed = await promptYesNo(ctx, {\n      message: \"Are you sure you want to disconnect this WorkOS team?\",\n      default: false,\n    });\n\n    if (!confirmed) {\n      logMessage(chalkStderr.gray(\"Cancelled.\"));\n      return;\n    }\n\n    const result = await disconnectWorkOSTeam(ctx, teamId);\n\n    if (!result.success) {\n      if (result.error === \"not_associated\") {\n        logMessage(\n          chalkStderr.yellow(\n            \"This Convex team does not have an associated WorkOS team.\",\n          ),\n        );\n        return;\n      }\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: `Failed to disconnect WorkOS team: ${result.message}`,\n      });\n    }\n\n    logFinishedStep(\n      `Successfully disconnected WorkOS team \"${result.workosTeamName}\" (${result.workosTeamId})`,\n    );\n  });\n\nconst workosInvite = new Command(\"invite\")\n  .summary(\"Invite yourself to the WorkOS team\")\n  .description(\n    \"Send an invitation to join the WorkOS team associated with your Convex team\",\n  )\n  .option(\"--email <email>\", \"Email address to invite (skips validation)\")\n  .configureHelp({ showGlobalOptions: true })\n  .allowExcessArguments(false)\n  .addDeploymentSelectionOptions(\n    actionDescription(\"Invite yourself to WorkOS team for\"),\n  )\n  .action(async (options, cmd) => {\n    const allOptions = cmd.optsWithGlobals();\n    const { ctx, deployment } = await selectEnvDeployment(allOptions);\n\n    // Get team info first\n    const info = await fetchTeamAndProject(ctx, deployment.deploymentName);\n\n    let emailToInvite: string;\n\n    // If email was provided as flag, use it directly (skip CLI validation)\n    if (options.email) {\n      emailToInvite = options.email;\n    } else {\n      // Get emails eligible for invitation (all verified emails except those that are admin of a different team)\n      const { eligibleEmails, adminEmail } = await getInvitationEligibleEmails(\n        ctx,\n        info.teamId,\n      );\n\n      // Combine eligible emails with admin email (admin email is always an option for re-invitation)\n      const allInvitableEmails = [...eligibleEmails];\n      if (adminEmail && !allInvitableEmails.includes(adminEmail)) {\n        allInvitableEmails.push(adminEmail);\n      }\n\n      if (allInvitableEmails.length === 0) {\n        logMessage(\n          \"You don't have any verified emails available for invitation.\",\n        );\n        logMessage(\n          \"This could be because all your verified emails are already admin of other WorkOS teams.\",\n        );\n        return;\n      }\n\n      // Let user select which email to use\n      emailToInvite = await promptOptions(ctx, {\n        message: \"Which email would you like to invite to the WorkOS team?\",\n        choices: allInvitableEmails.map((email) => ({\n          name: email + (email === adminEmail ? \" (admin email)\" : \"\"),\n          value: email,\n        })),\n        default: allInvitableEmails[0],\n      });\n\n      // Confirm before sending\n      const confirmed = await promptYesNo(ctx, {\n        message: `Send invitation to ${emailToInvite}?`,\n        default: true,\n      });\n\n      if (!confirmed) {\n        logMessage(\"Invitation cancelled.\");\n        return;\n      }\n    }\n\n    logMessage(`Sending invitation to ${emailToInvite}...`);\n\n    const result = await inviteToWorkosTeam(ctx, info.teamId, emailToInvite);\n\n    if (result.result === \"success\") {\n      logMessage(\n        `\u2713 Successfully sent invitation to ${result.email} with role ${result.roleSlug}`,\n      );\n      logMessage(\n        \"Check your email for the invitation link to join the WorkOS team.\",\n      );\n    } else if (result.result === \"teamNotProvisioned\") {\n      logMessage(\n        `\u2717 ${result.message}. Run 'npx convex integration workos provision-environment' first.`,\n      );\n    } else if (result.result === \"alreadyInWorkspace\") {\n      logMessage(\n        `\u2717 ${result.message}. This usually means the email is already used in another WorkOS workspace.`,\n      );\n    }\n  });\n\n// Project environment commands\nconst workosProjectEnvList = new Command(\"list-project-environments\")\n  .summary(\"List WorkOS environments for current project\")\n  .description(\n    \"List all WorkOS AuthKit environments created for the current project.\\n\" +\n      \"These environments can be used across multiple deployments.\",\n  )\n  .addDeploymentSelectionOptions(\n    actionDescription(\"List project environments for\"),\n  )\n  .action(async (_options, cmd) => {\n    const options = cmd.optsWithGlobals();\n    const { ctx, deployment } = await selectEnvDeployment(options);\n\n    const info = await fetchTeamAndProject(ctx, deployment.deploymentName);\n\n    logMessage(\"Fetching project WorkOS environments...\");\n\n    try {\n      const environments = await listProjectWorkOSEnvironments(\n        ctx,\n        info.projectId,\n      );\n\n      if (environments.length === 0) {\n        logMessage(\"No WorkOS environments found for this project.\");\n        logMessage(\n          chalkStderr.gray(\n            \"Create one with: npx convex integration workos create-project-environment --name <name>\",\n          ),\n        );\n      } else {\n        logMessage(chalkStderr.bold(\"WorkOS Project Environments:\"));\n        for (const env of environments) {\n          const prodLabel = env.isProduction\n            ? chalkStderr.yellow(\" (production)\")\n            : \"\";\n          logMessage(\n            `  ${chalkStderr.green(env.userEnvironmentName)}${prodLabel} - Client ID: ${env.workosClientId}`,\n          );\n        }\n      }\n    } catch (error) {\n      logMessage(\n        chalkStderr.red(`Failed to list environments: ${String(error)}`),\n      );\n    }\n  });\n\nconst workosProjectEnvCreate = new Command(\"create-project-environment\")\n  .summary(\"Create a new WorkOS environment for the project\")\n  .description(\n    \"Create a new WorkOS AuthKit environment for this project.\\n\" +\n      \"The environment can be used across multiple deployments.\",\n  )\n  .requiredOption(\"--name <name>\", \"Name for the new environment\")\n  .option(\"--production\", \"Mark this environment as a production environment\")\n  .addDeploymentSelectionOptions(\n    actionDescription(\"Create project environment for\"),\n  )\n  .action(async (_options, cmd) => {\n    const options = cmd.optsWithGlobals();\n    const environmentName = options.name as string;\n    const isProduction = options.production as boolean | undefined;\n    const { ctx, deployment } = await selectEnvDeployment(options);\n\n    const info = await fetchTeamAndProject(ctx, deployment.deploymentName);\n\n    showSpinner(\n      `Creating project-level WorkOS environment '${environmentName}'...`,\n    );\n\n    try {\n      const response = await createProjectWorkOSEnvironment(\n        ctx,\n        info.projectId,\n        environmentName,\n        isProduction,\n      );\n\n      stopSpinner();\n      logFinishedStep(`Created WorkOS environment '${environmentName}'`);\n\n      logMessage(\"\");\n      logMessage(chalkStderr.bold(\"Environment Details:\"));\n      logMessage(`  Name: ${response.userEnvironmentName}`);\n      logMessage(`  Client ID: ${response.workosClientId}`);\n      logMessage(`  API Key: ${response.workosApiKey}`);\n    } catch (error: any) {\n      stopSpinner();\n      if (error?.message?.includes(\"NoWorkOSTeam\")) {\n        logMessage(\n          chalkStderr.red(\n            \"Your team doesn't have a WorkOS integration configured yet.\",\n          ),\n        );\n        logMessage(\n          \"Please run 'npx convex integration workos provision-team' first.\",\n        );\n      } else if (error?.message?.includes(\"duplicate\")) {\n        logMessage(\n          chalkStderr.red(\n            `An environment named '${environmentName}' already exists for this project.`,\n          ),\n        );\n      } else if (error?.message?.includes(\"TooManyEnvironments\")) {\n        logMessage(\n          chalkStderr.red(\n            \"You've reached the limit of 10 WorkOS environments per project. If you need more, please contact support.\",\n          ),\n        );\n      } else {\n        logMessage(chalkStderr.red(`Failed to create environment: ${error}`));\n      }\n    }\n  });\n\nconst workosProjectEnvDelete = new Command(\"delete-project-environment\")\n  .summary(\"Delete a WorkOS environment from the project\")\n  .description(\n    \"Delete a WorkOS environment from this project.\\n\" +\n      \"This will permanently remove the environment and its credentials.\\n\" +\n      \"Use the client ID shown in list-project-environments output.\",\n  )\n  .requiredOption(\n    \"--client-id <clientId>\",\n    \"WorkOS client ID of the environment to delete (shown in list output)\",\n  )\n  .addDeploymentSelectionOptions(\n    actionDescription(\"Delete project environment for\"),\n  )\n  .action(async (_options, cmd) => {\n    const options = cmd.optsWithGlobals();\n    const clientId = options.clientId as string;\n    const { ctx, deployment } = await selectEnvDeployment(options);\n\n    const info = await fetchTeamAndProject(ctx, deployment.deploymentName);\n\n    // Confirm deletion\n    const confirmed = await promptYesNo(ctx, {\n      message: `Are you sure you want to delete environment with client ID '${clientId}'?`,\n      default: false,\n    });\n\n    if (!confirmed) {\n      logMessage(\"Deletion cancelled.\");\n      return;\n    }\n\n    showSpinner(\n      `Deleting project WorkOS environment (this can take a while)...`,\n    );\n\n    try {\n      await deleteProjectWorkOSEnvironment(ctx, info.projectId, clientId);\n      stopSpinner();\n      logFinishedStep(`Deleted environment with client ID '${clientId}'`);\n    } catch (error: any) {\n      stopSpinner();\n      if (error?.message?.includes(\"not found\")) {\n        logMessage(\n          chalkStderr.red(\n            `Environment with client ID '${clientId}' not found.`,\n          ),\n        );\n      } else {\n        logMessage(chalkStderr.red(`Failed to delete environment: ${error}`));\n      }\n    }\n  });\n\nconst workos = new Command(\"workos\")\n  .summary(\"WorkOS integration commands\")\n  .description(\"Manage WorkOS team provisioning and environment setup\")\n  .addCommand(workosProvisionEnvironment)\n  .addCommand(workosTeamStatus)\n  .addCommand(workosProvisionTeam)\n  .addCommand(workosDisconnectTeam)\n  .addCommand(workosInvite)\n  .addCommand(workosProjectEnvList)\n  .addCommand(workosProjectEnvCreate)\n  .addCommand(workosProjectEnvDelete);\n\nexport const integration = new Command(\"integration\")\n  .summary(\"Integration commands\")\n  .description(\"Commands for managing third-party integrations\")\n  .addCommand(workos);\n"],
  "mappings": "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,GAAE,GAAE,GAAE,IAAG,GAAE,GAAE,IAAG,GAAE,GAAE,GAAE,IAAG,IAAG,IAAG,GAAE,IAAG,GAAE,IAAG,IAAG,IAAG,GAAE,GAAE,GAAE,KAAI,IAAG,IAAG,GAAE,IAAG,IAAG,IAAG,GAAE,IAAG,IAAG,IAAG,GAAE,IAAG,IAAG,IAAG,GAAE,KAAI,IAAG,KAAI,IAAG,IAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,IAAG,IAAG,GAAE,GAAE,GAAE,IAAG,GAAE,GAAE,IAAG,IAAG,GAAE,GAAE,GAAE,IAAG,GAAE,IAAG,IAAG,GAAE,GAAE,IAAG,GAAE,IAAG,IAAG,IAAG,GAAE,IAAG,IAAG,KAAI,IAAG,IAAG,GAAE,GAAE,IAAG,IAAG,GAAE,IAAG,IAAG,KAAI,GAAE,GAAE,GAAE,GAAE,IAAG,IAAG,GAAE,IAAG,GAAE,GAAE,GAAE,GAAE,IAAG,IAAG,GAAE,IAAG,IAAG,KAAI,IAAG,IAAG,GAAE,GAAE,IAAG,GAAE,IAAG,KAAI,GAAE,IAAG,KAAI,KAAI,KAAI,IAAG,KAAI,MAAK,IAAG,IAAG,MAAK,IAAG,GAAE,IAAG,MAAK,GAAE,KAAI,MAAK,IAAG,MAAK,KAAI,GAAE,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,GAAE,IAAG,IAAG,GAAE,IAAG,KAAI,IAAG,KAAI,IAAG,IAAG,IAAG,GAAE,IAAG,IAAG,IAAG,GAAE,GAAE,IAAG,IAAG,IAAG,GAAE,GAAE,GAAE,IAAG,GAAE,IAAG,MAAK,IAAG,IAAG,IAAG,KAAI,MAAK,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,KAAI,IAAG,GAAE,IAAG,GAAE,GAAE,GAAE,IAAG,GAAE,GAAE,KAAI,MAAK,KAAI,GAAE,IAAG,GAAE,GAAE,GAAE,GAAE,MAAK,IAAG,GAAE,IAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,IAAG,GAAE,GAAE,GAAE,GAAE,GAAE,IAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,IAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,KAAI,GAAE,IAAG,GAAE,IAAG,GAAE,IAAG,GAAE,IAAG,GAAE,IAAG,GAAE,IAAG,GAAE,IAAG,GAAE,IAAG,GAAE,IAAG,GAAE,IAAG,GAAE,GAAE,MAAK,IAAG,GAAE,GAAE,KAAI,IAAG,KAAI,IAAG,IAAG,GAAE,IAAG,GAAE,KAAI,IAAG,IAAG,IAAG,KAAI,IAAG,KAAI,IAAG,GAAE,GAAE,KAAI,IAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,IAAG,GAAE,KAAI,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,IAAG,GAAE,KAAI,IAAG,IAAG,GAAE,GAAE,MAAK,GAAE,GAAE,IAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,IAAG,GAAE,GAAE,GAAE,GAAE,GAAE,IAAG,MAAK,OAAM,IAAG,MAAK,GAAE,MAAK,GAAE,MAAK,IAAG,KAAI,MAAK,KAAI,MAAK,MAAK,GAAE,IAAI;AAEhnD,QAAMC,wBAAwB,CAAC,KAAI,GAAE,KAAI,GAAE,KAAI,GAAE,KAAI,GAAE,MAAK,GAAE,GAAE,GAAE,GAAE,GAAE,IAAG,GAAE,GAAE,GAAE,KAAI,GAAE,KAAI,GAAE,GAAE,GAAE,GAAE,GAAE,IAAG,GAAE,KAAI,GAAE,IAAG,GAAE,IAAG,IAAG,IAAG,GAAE,KAAI,GAAE,IAAG,IAAG,IAAG,IAAG,GAAE,GAAE,IAAG,GAAE,IAAG,IAAG,GAAE,GAAE,IAAG,GAAE,GAAE,GAAE,IAAG,IAAG,GAAE,GAAE,GAAE,GAAE,IAAG,GAAE,IAAG,GAAE,IAAG,IAAG,GAAE,GAAE,GAAE,IAAG,IAAG,IAAG,GAAE,GAAE,GAAE,GAAE,KAAI,IAAG,GAAE,GAAE,GAAE,GAAE,IAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,IAAG,GAAE,IAAG,GAAE,GAAE,GAAE,GAAE,GAAE,IAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,IAAG,GAAE,IAAG,IAAG,IAAG,GAAE,GAAE,GAAE,IAAG,IAAG,IAAG,GAAE,KAAI,GAAE,GAAE,GAAE,IAAG,GAAE,IAAG,IAAG,IAAG,GAAE,IAAG,IAAG,GAAE,GAAE,GAAE,IAAG,IAAG,IAAG,GAAE,GAAE,KAAI,IAAG,KAAI,GAAE,IAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,IAAG,GAAE,KAAI,GAAE,GAAE,GAAE,GAAE,GAAE,IAAG,GAAE,IAAG,GAAE,GAAE,GAAE,GAAE,GAAE,IAAG,IAAG,IAAG,IAAG,KAAI,GAAE,KAAI,GAAE,IAAG,GAAE,GAAE,GAAE,IAAG,GAAE,IAAG,IAAG,GAAE,IAAG,KAAI,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,IAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,IAAG,GAAE,KAAI,GAAE,IAAG,GAAE,GAAE,GAAE,IAAG,GAAE,GAAE,GAAE,IAAG,IAAG,MAAK,GAAE,GAAE,IAAG,OAAM,IAAG,MAAK,GAAE,IAAG,GAAE,IAAG,GAAE,IAAG,GAAE,IAAG,GAAE,KAAI,GAAE,KAAI,GAAE,GAAE,IAAG,GAAE,GAAE,IAAG,GAAE,IAAG,GAAE,OAAM,GAAE,MAAK,GAAE,KAAI,IAAG,GAAE,IAAG,KAAI,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,IAAG,GAAE,KAAI,GAAE,MAAK,IAAG,KAAI,IAAG,GAAE,IAAG,GAAE,GAAE,IAAG,GAAE,IAAG,GAAE,GAAE,IAAG,MAAK,GAAE,GAAE,IAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,KAAI,GAAE,KAAI,GAAE,IAAG,GAAE,KAAI,GAAE,IAAG,IAAG,KAAI,IAAG,KAAI,GAAE,GAAE,GAAE,KAAI,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,KAAI,GAAE,KAAI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AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;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G;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,M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MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,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A,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACD;AAAA,EACD;AAAA,EACA,QAAU;AAAA,IACT,UAAY;AAAA,IACZ,QAAU;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACD;AAAA,EACD;AAAA,EACA,QAAU;AAAA,IACT,UAAY;AAAA,IACZ,QAAU;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACD;AAAA,EACD;AAAA,EACA,UAAY;AAAA,IACX,UAAY;AAAA,IACZ,QAAU;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACD;AAAA,EACD;AAAA,EACA,YAAc;AAAA,IACb,UAAY;AAAA,IACZ,QAAU;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAA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,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACD;AAAA,EACD;AAAA,EACA,OAAS;AAAA,IACR,UAAY;AAAA,IACZ,QAAU;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,IACD;AAAA,EACD;AAAA,EACA,UAAY;AAAA,IACX,UAAY;AAAA,IACZ,QAAU;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACD;AAAA,EACD;AAAA,EACA,MAAQ;AAAA,IACP,UAAY;AAAA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A;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACD;AAAA,EAC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",
  "names": ["exports", "CommanderError", "code", "InvalidArgumentError", "exports", "InvalidArgumentError", "Argument", "description", "exports", "Help", "cmd", "description", "exports", "InvalidArgumentError", "Option", "description", "str", "exports", "exports", "path", "fs", "process", "Argument", "CommanderError", "Help", "Option", "Command", "_a", "_b", "description", "code", "target", "config", "regex", "signals", "unknown", "option", "error", "hasColors", "exports", "Argument", "Command", "CommanderError", "InvalidArgumentError", "Help", "Option", "description", "exports", "module", "commander", "description", "isPlainObject", "isNaN", "isVueViewModel", "isString", "isRegExp", "isInstanceOf", "error", "truncate", "getGlobalObject", "height", "isString", "GLOBAL_OBJ", "console", "logger", "DEBUG_BUILD", "path", "consoleSandbox", "DEBUG_BUILD", "logger", "DEBUG_BUILD", "logger", "proto", "object", "isError", "isEvent", "isInstanceOf", "target", "isElement", "htmlTreeAsString", "truncate", "isPlainObject", "isPrimitive", "getModule", "object", "functionName", "getFunctionName", "getModule", "node", "data", "DEBUG_BUILD", "logger", "getFunctionName", "addHandler", "maybeInstrument", "GLOBAL_OBJ", "CONSOLE_LEVELS", "fill", "originalConsoleMethods", "triggerHandlers", "GLOBAL_OBJ", "crypto", "snipLine", "addNonEnumerableProperty", "GLOBAL_OBJ", "addHandler", "maybeInstrument", "triggerHandlers", "target", "proto", "fill", "addNonEnumerableProperty", "uuid4", "getGlobalObject", "DEBUG_BUILD", "logger", "addHandler", "maybeInstrument", "supportsNativeFetch", "fill", "GLOBAL_OBJ", "triggerHandlers", "error", "resource", "addHandler", "maybeInstrument", "GLOBAL_OBJ", "error", "triggerHandlers", "addHandler", "maybeInstrument", "GLOBAL_OBJ", "triggerHandlers", "getGlobalObject", "GLOBAL_OBJ", "addHandler", "maybeInstrument", "supportsHistory", "triggerHandlers", "fill", "GLOBAL_OBJ", "addHandler", "maybeInstrument", "fill", "isString", "triggerHandlers", "header", "addConsoleInstrumentationHandler", "addClickKeypressInstrumentationHandler", "addXhrInstrumentationHandler", "addFetchInstrumentationHandler", "addHistoryInstrumentationHandler", "addGlobalErrorInstrumentationHandler", "addGlobalUnhandledRejectionInstrumentationHandler", "DEBUG_BUILD", "logger", "isBrowserBundle", "mod", "module", "cwd", "isNodeEnv", "GLOBAL_OBJ", "object", "memo", "memoBuilder", "isNaN", "convertToPlainObject", "isVueViewModel", "isSyntheticEvent", "getFunctionName", "resolve", "path", "States", "resolve", "isThenable", "add", "rejectedSyncPromise", "SentryError", "drain", "SyncPromise", "resolve", "resolvedSyncPromise", "path", "path", "stripUrlQueryAndFragment", "parseCookie", "isString", "normalize", "isPlainObject", "ip", "DEBUG_BUILD", "logger", "performance", "GLOBAL_OBJ", "_browserPerformanceTimeOriginMode", "isString", "object", "DEBUG_BUILD", "logger", "baggage", "baggageHeaderToDynamicSamplingContext", "uuid4", "normalize", "env", "dropUndefinedKeys", "version", "dsn", "dsnToString", "dateTimestampInSeconds", "createEnvelope", "header", "integration", "error", "extractExceptionKeysForMessage", "isError", "isPlainObject", "normalizeToSize", "addExceptionTypeValue", "addExceptionMechanism", "isParameterizedString", "dropUndefinedKeys", "filenameIsInApp", "_maxSize", "_nullishCoalesce", "_asyncOptionalChain", "_optionalChain", "exports", "error", "object", "path", "string", "time", "env", "console", "fetch", "getGlobalSingleton", "SyncPromise", "resolve", "DEBUG_BUILD", "logger", "isThenable", "timestampInSeconds", "uuid4", "duration", "dropUndefinedKeys", "data", "dropUndefinedKeys", "generateSentryTraceHeader", "timestampInSeconds", "scope", "uuid4", "dateTimestampInSeconds", "addExceptionMechanism", "data", "getGlobalScope", "mergeScopeData", "applyScopeDataToEvent", "eventProcessors", "getGlobalEventProcessors", "notifyEventProcessors", "DEFAULT_ENVIRONMENT", "truncate", "GLOBAL_OBJ", "normalize", "spanToJSON", "Scope", "captureException", "getCurrentHub", "parseEventHintOrCaptureContext", "captureMessage", "hub", "runWithAsyncContext", "getIsolationScope", "DEBUG_BUILD", "logger", "uuid4", "timestampInSeconds", "isThenable", "close", "DEFAULT_ENVIRONMENT", "GLOBAL_OBJ", "session", "makeSession", "updateSession", "closeSession", "dropUndefinedKeys", "DEFAULT_ENVIRONMENT", "getClient", "spanToJSON", "getCurrentScope", "getRootSpan", "spanIsSampled", "data", "dropUndefinedKeys", "spanToTraceContext", "getRootSpan", "getDynamicSamplingContextFromSpan", "spanToJSON", "arrayify", "updateSession", "session", "isPlainObject", "dateTimestampInSeconds", "data", "applyScopeDataToEvent", "eventProcessors", "getGlobalEventProcessors", "notifyEventProcessors", "uuid4", "logger", "SDK_VERSION", "scope", "Scope", "version", "isThenable", "uuid4", "dateTimestampInSeconds", "consoleSandbox", "integration", "DEBUG_BUILD", "logger", "session", "closeSession", "DEFAULT_ENVIRONMENT", "GLOBAL_OBJ", "makeSession", "updateSession", "registry", "getGlobalSingleton", "hub", "getCurrentHub", "_extractTraceparentData", "addGlobalErrorInstrumentationHandler", "addGlobalUnhandledRejectionInstrumentationHandler", "getActiveTransaction", "DEBUG_BUILD", "logger", "SpanStatus", "isThenable", "getClient", "hub", "getCurrentHub", "getCurrentScope", "handleCallbackErrors", "error", "runWithAsyncContext", "withScope", "spanToJSON", "hasTracingEnabled", "dynamicSamplingContext", "tracingContextFromHeaders", "DEBUG_BUILD", "logger", "dropUndefinedKeys", "getIsolationScope", "getDynamicSamplingContextFromSpan", "spanIsSampled", "spanTimeInputToSeconds", "addNonEnumerableProperty", "dropUndefinedKeys", "getActiveSpan", "Span", "uuid4", "timestampInSeconds", "SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN", "SEMANTIC_ATTRIBUTE_SENTRY_OP", "description", "string", "TRACE_FLAG_SAMPLED", "TRACE_FLAG_NONE", "getRootSpan", "DEBUG_BUILD", "spanToJSON", "logMessage", "logger", "setHttpStatus", "spanTimeInputToSeconds", "spanToTraceHeader", "dropUndefinedKeys", "spanToTraceContext", "getMetricSummaryJsonForSpan", "SEMANTIC_ATTRIBUTE_PROFILE_ID", "data", "SpanClass", "hub", "getCurrentHub", "SEMANTIC_ATTRIBUTE_SENTRY_SOURCE", "SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE", "SpanRecorder", "spanTimeInputToSeconds", "dropUndefinedKeys", "getDynamicSamplingContextFromSpan", "DEBUG_BUILD", "logger", "span", "spanToJSON", "getCapturedScopesOnSpan", "spanToTraceContext", "getMetricSummaryJsonForSpan", "SpanRecorder", "span", "spanToJSON", "Transaction", "DEBUG_BUILD", "logger", "spanTimeInputToSeconds", "timestampInSeconds", "hasTracingEnabled", "SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE", "DEBUG_BUILD", "logger", "spanToJSON", "isNaN", "spanToTraceHeader", "DEBUG_BUILD", "logger", "transaction", "Transaction", "sampleTransaction", "hub", "IdleTransaction", "getMainCarrier", "registerErrorInstrumentation", "getActiveTransaction", "getSdkMetadataForEnvelopeHeader", "dsnToString", "createEnvelope", "createEventEnvelopeHeaders", "dropUndefinedKeys", "getCurrentScope", "date", "urlEncode", "makeDsn", "dsnToString", "integration", "arrayify", "DEBUG_BUILD", "logger", "addGlobalEventProcessor", "getCurrentHub", "getClient", "ConvertedIntegration", "dropUndefinedKeys", "simpleHash", "dsnToString", "createEnvelope", "serializeMetricBuckets", "BaseClient", "makeDsn", "DEBUG_BUILD", "logger", "getEnvelopeEndpointWithUrlEncodedAuth", "checkOrSetAlreadyCaught", "isParameterizedString", "isPrimitive", "session", "updateSession", "resolvedSyncPromise", "integration", "setupIntegration", "afterSetupIntegrations", "env", "createEventEnvelope", "addItemToEnvelope", "createAttachmentEnvelopeItem", "createSessionEnvelope", "createMetricEnvelope", "setupIntegrations", "SyncPromise", "resolve", "getIsolationScope", "prepareEvent", "dynamicSamplingContext", "getDynamicSamplingContextFromClient", "rejectedSyncPromise", "SentryError", "envelope", "isThenable", "isPlainObject", "getClient", "dsnToString", "dropUndefinedKeys", "createEnvelope", "simpleHash", "COUNTER_METRIC_TYPE", "GAUGE_METRIC_TYPE", "DISTRIBUTION_METRIC_TYPE", "SET_METRIC_TYPE", "DEFAULT_FLUSH_INTERVAL", "timestampInSeconds", "sanitizeMetricKey", "sanitizeTags", "sanitizeUnit", "getBucketKey", "SET_METRIC_TYPE", "METRIC_MAP", "updateMetricSummaryOnActiveSpan", "MAX_WEIGHT", "BaseClient", "addTracingExtensions", "MetricsAggregator", "resolvedSyncPromise", "eventFromUnknownInput", "getClient", "eventFromMessage", "DEBUG_BUILD", "logger", "SessionFlusher", "uuid4", "dynamicSamplingContext", "createCheckInEnvelope", "getRootSpan", "getDynamicSamplingContextFromSpan", "spanToTraceContext", "getDynamicSamplingContextFromClient", "DEBUG_BUILD", "logger", "consoleSandbox", "getCurrentScope", "hub", "getCurrentHub", "makePromiseBuffer", "forEachEnvelopeItem", "envelopeItemTypeToDataCategory", "isRateLimited", "resolvedSyncPromise", "createEnvelope", "serializeEnvelope", "DEBUG_BUILD", "logger", "updateRateLimits", "error", "SentryError", "error", "DEBUG_BUILD", "logger", "retryDelay", "env", "envelopeContainsItemType", "parseRetryAfterHeader", "env", "forEachEnvelopeItem", "createEnvelope", "dsnFromString", "getEnvelopeEndpointWithUrlEncodedAuth", "dsnToString", "createEnvelope", "removeTrailingSlash", "name", "SDK_VERSION", "GLOBAL_OBJ", "forEachEnvelopeItem", "stripMetadataFromStackFrames", "addMetadataToStackFrames", "defineIntegration", "convertIntegrationFnToClass", "addRequestDataToEvent", "_options", "spanToJSON", "extractPathForTransaction", "defineIntegration", "convertIntegrationFnToClass", "ip", "defineIntegration", "convertIntegrationFnToClass", "DEBUG_BUILD", "logger", "getEventDescription", "stringMatchesSomePattern", "getOriginalFunction", "getClient", "defineIntegration", "convertIntegrationFnToClass", "options", "applyAggregateErrorsToEvent", "exceptionFromError", "defineIntegration", "convertIntegrationFnToClass", "DEFAULT_BROWSER_FLUSH_INTERVAL", "timestampInSeconds", "sanitizeMetricKey", "sanitizeTags", "sanitizeUnit", "getBucketKey", "SET_METRIC_TYPE", "METRIC_MAP", "updateMetricSummaryOnActiveSpan", "BrowserMetricsAggregator", "defineIntegration", "convertIntegrationFnToClass", "data", "getClient", "getCurrentScope", "DEBUG_BUILD", "logger", "spanToJSON", "COUNTER_METRIC_TYPE", "DISTRIBUTION_METRIC_TYPE", "SET_METRIC_TYPE", "GAUGE_METRIC_TYPE", "MetricsAggregator", "metricsAggregatorIntegration", "INTEGRATIONS", "DEBUG_BUILD", "logger", "shouldDisableAutoInstrumentation", "getNumberOfUrlSegments", "stripUrlQueryAndFragment", "spanToJSON", "SEMANTIC_ATTRIBUTE_SENTRY_SOURCE", "extractPathForTransaction", "path", "isRegExp", "GLOBAL_OBJ", "loadModule", "shouldDisableAutoInstrumentation", "DEBUG_BUILD", "logger", "fill", "config", "data", "isThenable", "loadModule", "shouldDisableAutoInstrumentation", "DEBUG_BUILD", "logger", "data", "fill", "loadModule", "shouldDisableAutoInstrumentation", "DEBUG_BUILD", "logger", "fill", "span", "isThenable", "data", "addNonEnumerableProperty", "shouldDisableAutoInstrumentation", "getCurrentHub", "startSpan", "SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN", "DEBUG_BUILD", "logger", "loadModule", "shouldDisableAutoInstrumentation", "DEBUG_BUILD", "logger", "fill", "isThenable", "loadModule", "shouldDisableAutoInstrumentation", "DEBUG_BUILD", "logger", "fill", "orig", "arrayify", "isThenable", "integration", "dynamicRequire", "module", "GLOBAL_OBJ", "WINDOW", "getActiveTransaction", "spanToJSON", "DEBUG_BUILD", "logger", "WINDOW", "getNavigationEntry", "getNavigationEntry", "WINDOW", "getActivationStart", "generateUniqueID", "list", "WINDOW", "initMetric", "observe", "bindReporter", "onHidden", "WINDOW", "onHidden", "getVisibilityWatcher", "initMetric", "observe", "bindReporter", "onHidden", "observe", "getInteractionCount", "initInteractionCountPolyfill", "initMetric", "observe", "bindReporter", "onHidden", "getVisibilityWatcher", "initMetric", "getActivationStart", "observe", "bindReporter", "WINDOW", "onHidden", "WINDOW", "initMetric", "bindReporter", "getNavigationEntry", "getActivationStart", "data", "DEBUG_BUILD", "logger", "getFunctionName", "onCLS", "onFID", "onLCP", "onTTFB", "onINP", "observe", "time", "WINDOW", "performance", "browserPerformanceTimeOrigin", "addPerformanceInstrumentationHandler", "getActiveTransaction", "duration", "htmlTreeAsString", "getComponentName", "addClsInstrumentationHandler", "DEBUG_BUILD", "logger", "addLcpInstrumentationHandler", "addFidInstrumentationHandler", "addTtfbInstrumentationHandler", "addInpInstrumentationHandler", "entry", "getClient", "Span", "createSpanEnvelope", "spanToJSON", "getVisibilityWatcher", "_startChild", "setMeasurement", "description", "parseUrl", "data", "navigator", "isMeasurementValue", "_measurements", "getNavigationEntry", "hasTracingEnabled", "isValidSampleRate", "hasTracingEnabled", "span", "getCurrentScope", "getClient", "parseUrl", "startInactiveSpan", "SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN", "getIsolationScope", "spanToTraceHeader", "generateSentryTraceHeader", "dynamicSamplingContextToSentryBaggageHeader", "getDynamicSamplingContextFromSpan", "getDynamicSamplingContextFromClient", "isInstanceOf", "BAGGAGE_HEADER_NAME", "setHttpStatus", "_options", "addFetchInstrumentationHandler", "instrumentFetchRequest", "parseUrl", "addXhrInstrumentationHandler", "spanToJSON", "addPerformanceInstrumentationHandler", "data", "version", "time", "browserPerformanceTimeOrigin", "stringMatchesSomePattern", "shouldAttachHeaders", "SENTRY_XHR_DATA_KEY", "hasTracingEnabled", "span", "setHttpStatus", "getCurrentScope", "getIsolationScope", "startInactiveSpan", "SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN", "getClient", "spanToTraceHeader", "generateSentryTraceHeader", "dynamicSamplingContextToSentryBaggageHeader", "getDynamicSamplingContextFromSpan", "getDynamicSamplingContextFromClient", "BAGGAGE_HEADER_NAME", "WINDOW", "WINDOW", "DEBUG_BUILD", "logger", "browserPerformanceTimeOrigin", "addHistoryInstrumentationHandler", "TRACING_DEFAULTS", "instrumentRoutingWithDefaults", "defaultRequestInstrumentationOptions", "_options", "addTracingExtensions", "DEBUG_BUILD", "startTrackingWebVitals", "startTrackingINP", "startTrackingLongTasks", "startTrackingInteractions", "logger", "registerBackgroundTabDetection", "instrumentOutgoingRequests", "propagationContextFromHeaders", "WINDOW", "startIdleTransaction", "addPerformanceEntries", "getActiveTransaction", "SEMANTIC_ATTRIBUTE_SENTRY_SOURCE", "getClient", "getCurrentScope", "duration", "addPerformanceInstrumentationHandler", "getDomElement", "TRACING_DEFAULTS", "defaultRequestInstrumentationOptions", "_options", "DEBUG_BUILD", "addTracingExtensions", "startTrackingWebVitals", "startTrackingINP", "startTrackingLongTasks", "startTrackingInteractions", "getCurrentHub", "propagationContextFromHeaders", "logger", "WINDOW", "startIdleTransaction", "addPerformanceEntries", "spanToJSON", "browserPerformanceTimeOrigin", "SEMANTIC_ATTRIBUTE_SENTRY_SOURCE", "addHistoryInstrumentationHandler", "registerBackgroundTabDetection", "instrumentOutgoingRequests", "getActiveSpan", "getDomElement", "getActiveTransaction", "getClient", "getCurrentScope", "duration", "addPerformanceInstrumentationHandler", "getMainCarrier", "integration", "dynamicRequire", "module", "loadModule", "addTracingExtensions", "isNodeEnv", "require_cjs", "exports", "fetch", "lazyLoadedNodePerformanceMonitoringIntegrations", "integration", "logger", "ServerRuntimeClient", "applySdkMetadata", "TextEncoder", "os", "http", "debug", "logger", "resolve", "header", "debug", "logger", "Agent", "URL", "omit", "net", "auth", "parseProxyResponse", "connect", "Readable", "URL", "consoleSandbox", "createTransport", "http", "HttpsProxyAgent", "hostname", "resolve", "createGzip", "parseSemver", "ensureHubOnCarrier", "getHubFromCarrier", "setHubOnCarrier", "setAsyncContextStrategy", "ensureHubOnCarrier", "getHubFromCarrier", "setAsyncContextStrategy", "NODE_VERSION", "setHooksAsyncContextStrategy", "setDomainAsyncContextStrategy", "addConsoleInstrumentationHandler", "getClient", "addBreadcrumb", "severityLevelFromString", "util", "defineIntegration", "convertIntegrationFnToClass", "promisify", "readFile", "readdir", "_options", "defineIntegration", "Context", "convertIntegrationFnToClass", "os", "regex", "resolve", "execFile", "error", "join", "LRUMap", "path", "resolve", "readFile", "data", "defineIntegration", "convertIntegrationFnToClass", "addContextToFrame", "hostname", "path", "auth", "description", "url", "URL", "NODE_VERSION", "dropUndefinedKeys", "defineIntegration", "DEBUG_BUILD", "logger", "fill", "NODE_VERSION", "LRUMap", "stringMatchesSomePattern", "getCurrentHub", "addBreadcrumb", "normalizeRequestArgs", "extractRawUrl", "extractUrl", "getClient", "isSentryRequestUrl", "getCurrentScope", "getIsolationScope", "getActiveSpan", "data", "spanToTraceHeader", "generateSentryTraceHeader", "dynamicSamplingContextToSentryBaggageHeader", "getDynamicSamplingContextFromSpan", "getDynamicSamplingContextFromClient", "setHttpStatus", "cleanSpanDescription", "spanToJSON", "hasTracingEnabled", "add", "LRUMap", "data", "hashFromStack", "functionName", "hash", "hashFrames", "functionNamesMatch", "getClient", "NODE_VERSION", "logger", "createRateLimiter", "defineIntegration", "convertIntegrationFnToClass", "LocalVariablesSync", "localVariablesSyncIntegration", "path", "dirname", "join", "existsSync", "info", "readFileSync", "defineIntegration", "convertIntegrationFnToClass", "error", "consoleSandbox", "getClient", "DEBUG_BUILD", "logger", "_options", "defineIntegration", "convertIntegrationFnToClass", "error", "logAndExitProcess", "getClient", "captureException", "DEBUG_BUILD", "logger", "defineIntegration", "convertIntegrationFnToClass", "getClient", "captureException", "consoleSandbox", "logAndExitProcess", "_options", "logger", "defineIntegration", "convertIntegrationFnToClass", "serializeEnvelope", "url", "URL", "http", "ChannelName", "defineIntegration", "LRUMap", "_options", "NODE_VERSION", "hasTracingEnabled", "getClient", "isSentryRequestUrl", "getCurrentScope", "getIsolationScope", "getActiveSpan", "stringMatchesSomePattern", "spanToTraceHeader", "generateSentryTraceHeader", "dynamicSamplingContextToSentryBaggageHeader", "getDynamicSamplingContextFromSpan", "getDynamicSamplingContextFromClient", "setHttpStatus", "addBreadcrumb", "parseUrl", "data", "getSanitizedUrlString", "path", "dirname", "sep", "posix", "inboundFiltersIntegration", "functionToStringIntegration", "linkedErrorsIntegration", "requestDataIntegration", "consoleIntegration", "httpIntegration", "nativeNodeFetchintegration", "onUncaughtExceptionIntegration", "onUnhandledRejectionIntegration", "contextLinesIntegration", "localVariablesIntegration", "nodeContextIntegration", "modulesIntegration", "_options", "getMainCarrier", "init", "setNodeAsyncContextStrategy", "stackParserFromStackParserOptions", "getIntegrationsToSetup", "makeNodeTransport", "initAndBind", "NodeClient", "client", "getClient", "integration", "spotlightIntegration", "GLOBAL_OBJ", "createStackParser", "nodeStackLineParser", "createGetModuleFromFilename", "startSession", "getIsolationScope", "endSession", "propagationContextFromHeaders", "getCurrentScope", "path", "fs", "exports", "logger", "GLOBAL_OBJ", "getGlobalScope", "mergeScopeData", "getIsolationScope", "getCurrentScope", "dynamicRequire", "module", "NODE_VERSION", "defineIntegration", "convertIntegrationFnToClass", "URL", "base64WorkerScript", "code", "getClient", "integration", "Anr", "path", "getClient", "getCurrentScope", "SEMANTIC_ATTRIBUTE_SENTRY_SOURCE", "normalize", "captureException", "isThenable", "_extractRequestData", "addRequestDataToEvent", "getClient", "isString", "hasTracingEnabled", "extractPathForTransaction", "continueTrace", "startTransaction", "SEMANTIC_ATTRIBUTE_SENTRY_SOURCE", "extractRequestData", "getCurrentScope", "addRequestDataToTransaction", "setHttpStatus", "ip", "dropUndefinedKeys", "isAutoSessionTrackingEnabled", "flush", "DEBUG_BUILD", "logger", "runWithAsyncContext", "client", "error", "withScope", "getActiveSpan", "captureException", "newTrpcMiddleware", "captureException", "SDK_VERSION", "getActiveTransaction", "continueTrace", "startTransaction", "getCurrentScope", "spanToTraceHeader", "dynamicSamplingContextToSentryBaggageHeader", "getDynamicSamplingContextFromSpan", "setHttpStatus", "fill", "defineIntegration", "convertIntegrationFnToClass", "require_integrations", "exports", "CONSOLE_LEVELS", "GLOBAL_OBJ", "addConsoleInstrumentationHandler", "getClient", "defineIntegration", "convertIntegrationFnToClass", "severityLevelFromString", "withScope", "addExceptionMechanism", "message", "safeJoin", "captureMessage", "error", "captureException", "_options", "consoleSandbox", "defineIntegration", "convertIntegrationFnToClass", "DEBUG_BUILD", "logger", "defineIntegration", "convertIntegrationFnToClass", "defineIntegration", "convertIntegrationFnToClass", "isError", "normalize", "isPlainObject", "addNonEnumerableProperty", "error", "DEBUG_BUILD", "logger", "exports", "module", "define", "o", "e", "n", "global", "Promise", "self", "error", "resolve", "i", "key", "length", "idb", "base64", "forage", "value", "err", "keys", "db", "t", "reject", "sameValue", "includes", "array", "extend", "LocalForage", "config", "configureMissingMethods", "methodNotImplementedFactory", "promise", "setDriverSupport", "supportedDrivers", "GLOBAL_OBJ", "DEBUG_BUILD", "logger", "uuid4", "normalize", "GLOBAL_OBJ", "getClient", "withScope", "captureMessage", "supportsReportingObserver", "defineIntegration", "convertIntegrationFnToClass", "relative", "basename", "defineIntegration", "convertIntegrationFnToClass", "defineIntegration", "convertIntegrationFnToClass", "convertIntegrationFnToClass", "_options", "defineIntegration", "convertIntegrationFnToClass", "DEBUG_BUILD", "logger", "captureEvent", "target", "supportsNativeFetch", "addFetchInstrumentationHandler", "getClient", "GLOBAL_OBJ", "addXhrInstrumentationHandler", "SENTRY_XHR_DATA_KEY", "isSentryRequestUrl", "data", "addExceptionMechanism", "GLOBAL_OBJ", "defineIntegration", "convertIntegrationFnToClass", "stripUrlQueryAndFragment", "addContextToFrame", "require_cjs", "exports", "debug", "replacements", "target", "replaceCronNames", "onComplete", "withMonitor", "target", "withMonitor", "replaceCronNames", "target", "withMonitor", "replaceCronNames", "createGetModuleFromFilename", "CoreIntegrations", "NodeIntegrations", "TracingIntegrations", "instrumentCron", "instrumentNodeCron", "instrumentNodeSchedule", "exports", "module", "exports", "module", "fs", "path", "os", "crypto", "version", "parse", "error", "debug", "config", "exports", "module", "fetch", "init", "retryDelay", "resolve", "error", "exports", "module", "cliWidth", "exports", "module", "exports", "module", "MuteStream", "_a", "_b", "require_constants", "exports", "module", "require_errors", "exports", "errors", "require_utils", "exports", "module", "self", "path", "err", "fd", "list", "date", "time", "exports", "module", "path", "fs", "exports", "module", "data", "exports", "module", "exports", "module", "_size", "data", "exports", "module", "_size", "data", "exports", "exports", "module", "zlib", "data", "exports", "module", "version", "zlib", "data", "exports", "module", "config", "data", "header", "exports", "exports", "module", "Headers", "data", "error", "header", "exports", "module", "Headers", "list", "exports", "module", "defaultOptions", "data", "localPath", "options", "self", "err", "resolve", "update", "target", "content", "fileAttr", "BrowserTracingT", "addExtensionMethodsT", "getActiveTransactionT", "extractTraceparentDataT", "spanStatusfromHttpCodeT", "TransactionT", "Span", "SpanT", "BROWSER_TRACING_INTEGRATION_ID_T", "defaultRequestInstrumentationOptionsT", "hasTracingEnabledT", "stripUrlQueryAndFragmentT", "TRACEPARENT_REGEXP_T", "IdleTransactionT", "instrumentOutgoingRequestsT", "startIdleTransactionT", "SpanStatusT", "Apollo", "Express", "GraphQL", "Mongo", "Mysql", "Postgres", "Prisma", "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", "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", "ElementAfterRest", "EscapedCharNotAnIdentifier", "ExportBindingIsString", "localName", "ExportDefaultFromAsIdentifier", "ForInOfLoopInitializer", "ForInUsing", "ForOfAsync", "ForOfLet", "GeneratorInSingleStatementContext", "IllegalBreakContinue", "IllegalLanguageModeDirective", "IllegalReturn", "ImportAttributesUseAssert", "ImportBindingIsString", "importName", "ImportCallArity", "ImportCallNotNewExpression", "ImportCallSpreadArgument", "ImportJSONBindingNotDefault", "ImportReflectionHasAssertion", "ImportReflectionNotBinding", "IncompatibleRegExpUVFlags", "InvalidBigIntLiteral", "InvalidCodePoint", "InvalidCoverDiscardElement", "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", "UnexpectedVoidPattern", "UnsupportedBind", "UnsupportedDecoratorExport", "UnsupportedDefaultExport", "UnsupportedImport", "UnsupportedMetaProperty", "target", "onlyValidPropertyName", "UnsupportedParameterDecorator", "UnsupportedPropertyDecorator", "UnsupportedSuper", "UnterminatedComment", "UnterminatedRegExp", "UnterminatedString", "UnterminatedTemplate", "UsingDeclarationExport", "UsingDeclarationHasBindingPattern", "VarRedeclaration", "VoidPatternCatchClauseParam", "VoidPatternInitializer", "YieldBindingIdentifier", "YieldInParameter", "YieldNotInGeneratorFunction", "ZeroDigitNumericSeparator", "StrictModeErrors", "StrictDelete", "StrictEvalArguments", "referenceName", "StrictEvalArgumentsBinding", "bindingName", "StrictFunction", "StrictNumericEscape", "StrictOctalLiteral", "StrictWith", "ParseExpressionErrors", "ParseExpressionEmptyInput", "ParseExpressionExpectsEOF", "String", "fromCodePoint", "UnparenthesizedPipeBodyDescriptions", "Set", "Object", "assign", "PipeBodyIsTighter", "PipeTopicRequiresHackPipes", "PipeTopicUnbound", "PipeTopicUnconfiguredToken", "token", "PipeTopicUnused", "PipeUnparenthesizedBody", "PipelineBodyNoArrow", "PipelineBodySequenceExpression", "PipelineHeadSequenceExpression", "PipelineTopicUnused", "PrimaryTopicNotAllowed", "PrimaryTopicRequiresSmartPipeline", "defineHidden", "obj", "value", "defineProperty", "enumerable", "configurable", "toParseErrorConstructor", "toMessage", "reasonCode", "syntaxPlugin", "hasMissingPlugin", "oldReasonCodes", "AccessorCannotDeclareThisParameter", "AccessorCannotHaveTypeParameters", "ConstInitializerMustBeStringOrNumericLiteralOrLiteralEnumReference", "SetAccessorCannotHaveOptionalParameter", "SetAccessorCannotHaveRestParameter", "SetAccessorCannotHaveReturnType", "loc", "details", "error", "SyntaxError", "pos", "clone", "overrides", "_overrides$loc", "get", "set", "writable", "ParseErrorEnum", "argument", "Array", "isArray", "parseErrorTemplates", "ParseErrorConstructors", "keys", "template", "_ref", "rest", "_objectWithoutPropertiesLoose", "_excluded", "Errors", "PipelineOperatorErrors", "createDefaultOptions", "sourceType", "sourceFilename", "undefined", "startIndex", "startColumn", "startLine", "allowAwaitOutsideFunction", "allowReturnOutsideFunction", "allowNewTargetOutsideFunction", "allowImportExportEverywhere", "allowSuperOutsideMethod", "allowUndeclaredExports", "allowYieldOutsideFunction", "plugins", "strictMode", "ranges", "tokens", "createImportExpressions", "createParenthesizedExpressions", "errorRecovery", "attachComment", "annexB", "getOptions", "opts", "options", "Error", "toUnenumerable", "object", "toESTreeLocation", "estree", "superClass", "ESTreeParserMixin", "parse", "file", "optionFlags", "parseRegExpLiteral", "pattern", "flags", "regex", "RegExp", "_", "estreeParseLiteral", "parseBigIntLiteral", "bigInt", "BigInt", "_unused", "bigint", "parseDecimalLiteral", "decimal", "parseLiteral", "parseStringLiteral", "parseNumericLiteral", "parseNullLiteral", "parseBooleanLiteral", "estreeParseChainExpression", "endLoc", "chain", "startNodeAtNode", "expression", "finishNodeAt", "directiveToStmt", "directive", "castNodeTo", "raw", "extra", "expressionValue", "stmt", "rawValue", "fillOptionalPropertiesForTSESLint", "cloneEstreeStringLiteral", "range", "cloned", "create", "prototype", "initFunction", "isAsync", "checkDeclaration", "isObjectProperty", "getObjectOrClassMethodParams", "method", "params", "isValidDirective", "_stmt$expression$extr", "parenthesized", "parseBlockBody", "allowDirectives", "topLevel", "afterBlockParse", "directiveStatements", "directives", "d", "body", "concat", "parsePrivateName", "getPluginOption", "convertPrivateNameToPrivateIdentifier", "getPrivateNameSV", "id", "isPrivateName", "parseFunctionBody", "allowExpression", "isMethod", "parseMethod", "isGenerator", "isConstructor", "allowDirectSuper", "inClassScope", "funcNode", "startNode", "typeParameters", "resetStartLocationFromNode", "valueNode", "computed", "shorthand", "finishNode", "nameIsConstructor", "parseClassProperty", "args", "propertyNode", "parseClassPrivateProperty", "parseClassAccessorProperty", "accessorPropertyNode", "abstract", "hasPlugin", "parseObjectProperty", "prop", "startLoc", "isPattern", "refExpressionErrors", "finishObjectProperty", "isValidLVal", "disallowCallExpression", "isUnparenthesizedInAssign", "binding", "isAssignable", "isBinding", "toAssignable", "isLHS", "classScope", "usePrivateName", "toAssignableObjectExpressionProp", "isLast", "raise", "finishCallExpression", "unfinished", "optional", "callee", "source", "arguments", "_ref2", "attributes", "toReferencedArguments", "parseExport", "decorators", "exportStartLoc", "state", "lastTokStartLoc", "exported", "specifiers", "length", "_declaration$decorato", "declaration", "resetStartLocation", "stopParseSubscript", "base", "optionalChainMember", "parseMember", "isOptionalMemberExpression", "hasPropertyAsPrivateName", "isObjectMethod", "result", "cloneIdentifier", "cloneStringLiteral", "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", "push", "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", "placeholder", "string", "num", "regexp", "privateName", "eof", "jsxName", "jsxText", "jsxTagStart", "jsxTagEnd", "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", "allowNewTarget", "inClass", "inClassAndNotInNonArrowFunction", "inStaticBlock", "ScopeFlag", "inNonArrowFunction", "inBareCaseStatement", "treatFunctionsAsVar", "treatFunctionsAsVarInScope", "createScope", "enter", "exit", "scope", "declareName", "bindingType", "checkRedeclarationInScope", "maybeExportDefined", "delete", "isRedeclaredInScope", "checkLocalExport", "topLevelScope", "FlowScope", "declareFunctions", "FlowScopeHandler", "add", "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", "FlowParserMixin", "flowPragma", "getScopeHandler", "shouldParseTypes", "finishToken", "val", "addComment", "comment", "matches", "exec", "flowParseTypeInitialiser", "tok", "oldInType", "inType", "expect", "flowParseType", "flowParsePredicate", "moduloLoc", "expectContextual", "eat", "parseExpression", "flowParseTypeAndPredicateInitialiser", "predicate", "match", "flowParseDeclareClass", "flowParseInterfaceish", "flowParseDeclareFunction", "parseIdentifier", "typeNode", "typeContainer", "flowParseTypeParameterDeclaration", "tmp", "flowParseFunctionTypeParams", "this", "returnType", "typeAnnotation", "semicolon", "flowParseDeclare", "insideModule", "flowParseDeclareVariable", "eatContextual", "flowParseDeclareModuleExports", "flowParseDeclareModule", "isContextual", "flowParseDeclareTypeAlias", "flowParseDeclareOpaqueType", "flowParseDeclareInterface", "flowParseDeclareExportDeclaration", "flowParseTypeAnnotatableIdentifier", "parseExprAtom", "bodyNode", "parseImport", "hasModuleExport", "forEach", "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", "flowInTopLevelContext", "cb", "curContext", "oldContext", "flowParseTypeParameterInstantiationInExpression", "reScan_lt", "oldNoAnonFunctionType", "noAnonFunctionType", "reScan_lt_gt", "flowParseTypeParameterInstantiationCallOrNew", "flowParseTypeOrImplicitInstantiation", "flowParseInterfaceType", "flowParseObjectPropertyKey", "flowParseObjectTypeIndexer", "isStatic", "static", "lookahead", "flowParseObjectTypeInternalSlot", "flowParseObjectTypeMethodish", "startNodeAt", "flowParseFunctionTypeParam", "flowParseObjectTypeCallProperty", "nodeStart", "callProperties", "properties", "indexers", "internalSlots", "endDelim", "exact", "inexact", "protoStartLoc", "inexactStartLoc", "propOrInexact", "flowParseObjectTypeProperty", "flowObjectTypeSemicolon", "out", "isInexactToken", "proto", "flowCheckGetterSetterParams", "property", "paramCount", "node2", "qualification", "flowParseGenericType", "flowParseTypeofType", "flowParsePrimaryType", "flowParseTupleType", "first", "lh", "isThis", "reinterpretTypeAsFunctionTypeParam", "flowIdentToTypeAnnotation", "isGroupedType", "parseLiteralAtNode", "createIdentifier", "flowParsePostfixType", "seenOptionalIndexedAccess", "canInsertSemicolon", "elementType", "objectType", "indexType", "flowParsePrefixType", "flowParseAnonFunctionWithoutParens", "param", "flowParseIntersectionType", "flowParseUnionType", "allowPrimitiveOverride", "typeCastToParameter", "allowExpressionBody", "forwardNoArrowParamsConversionAt", "parseFunctionBodyAndFinish", "parseStatementLike", "flowParseEnumDeclaration", "parseExpressionStatement", "expr", "shouldParseExportDeclaration", "containsEsc", "isExportDefaultSpecifier", "parseExportDefaultExpression", "parseConditional", "maybeInArrowParameters", "nextCh", "lookaheadCharCode", "setOptionalParametersError", "originalNoArrowAt", "noArrowAt", "consequent", "failed", "tryParseConditionalConsequent", "valid", "invalid", "getArrowLikeExpressions", "alternate", "parseMaybeAssign", "noArrowParamsConversionAt", "parseMaybeAssignAllowIn", "disallowInvalid", "stack", "arrows", "finishArrowValidation", "every", "_node$extra", "toAssignableList", "trailingCommaLoc", "checkParams", "includes", "offsetToSourcePos", "parseParenItem", "newNode", "typeCastNode", "assertModuleNodeAllowed", "parseExportDeclaration", "declarationNode", "parseExportSpecifiers", "parseExportFrom", "eatExportStar", "maybeParseExportNamespaceSpecifier", "hasNamespace", "parseClassId", "isStatement", "optionalId", "parseClassMember", "classBody", "member", "parseClassMemberFromModifier", "isIterator", "readIterator", "readWord1", "fullWord", "curPosition", "getTokenFromCode", "input", "charCodeAt", "finishOp", "left", "exprList", "toReferencedList", "isParenthesizedExpr", "_expr$extra", "parseArrayLike", "close", "isTuple", "elements", "isParenthesized", "isClassMethod", "isClassProperty", "isNonstaticConstructor", "pushClassMethod", "allowsDirectSuper", "isThisParam", "pushClassPrivateMethod", "parseClassSuper", "superTypeParameters", "implemented", "checkGetterSetterParams", "parsePropertyNamePrefixOperator", "parseObjPropValue", "isAccessor", "parseFunctionParamType", "parseMaybeDefault", "checkImportReflection", "module", "parseImportSpecifierLocal", "specifier", "local", "finishImportSpecifier", "isPotentialImportPhase", "isExport", "ch", "applyImportPhase", "phase", "parseImportSpecifier", "importedIsString", "isInTypeOnlyImport", "isMaybeTypeOnly", "firstIdent", "imported", "specifierTypeKind", "isLookaheadContextual", "as_ident", "specifierIsTypeImport", "checkReservedWord", "parseBindingAtom", "parseFunctionParams", "parseVarId", "decl", "parseAsyncArrowFromCallExpression", "call", "shouldParseAsyncArrow", "afterLeftParse", "_jsx", "jsx", "tryParse", "currentContext", "_jsx2", "_jsx3", "abort", "_arrowExpression$extr", "arrowExpression", "maybeUnwrapTypeCastExpression", "aborted", "async", "failState", "thrown", "parseArrow", "shouldParseArrow", "setArrowFunctionParameters", "allowDuplicates", "isArrowFunction", "strictModeChanged", "parseParenAndDistinguishExpression", "canBeArrow", "sourceToOffsetPos", "parseSubscripts", "noCalls", "parseCallExpressionArguments", "parseAsyncArrowWithTypeParameters", "parseSubscript", "subscriptState", "isLookaheadToken_lt", "stop", "typeArguments", "parseNewCallee", "targs", "parseArrowExpression", "readToken_mult_modulo", "hasFlowComment", "nextToken", "readToken_pipe_amp", "parseTopLevel", "program", "fileNode", "skipBlockComment", "skipFlowComment", "hasFlowCommentCompletion", "commentSkip", "shiftToFirstNonWhiteSpace", "ch2", "ch3", "slice", "indexOf", "flowEnumErrorBooleanMemberNotInitialized", "flowEnumErrorInvalidMemberInitializer", "enumContext", "flowEnumErrorNumberMemberNotInitialized", "flowEnumErrorStringMemberInconsistentlyInitialized", "flowEnumMemberInit", "endOfInit", "literal", "flowEnumMemberRaw", "init", "flowEnumCheckExplicitTypeMismatch", "expectedType", "flowEnumMembers", "seenNames", "members", "booleanMembers", "numberMembers", "stringMembers", "defaultedMembers", "hasUnknownMembers", "memberNode", "toUpperCase", "flowEnumStringMembers", "initializedMembers", "flowEnumParseExplicitType", "flowEnumBody", "nameLoc", "empty", "boolsLen", "numsLen", "strsLen", "defaultedLen", "jsxParseOpeningElementAfterName", "nextTokenStart", "afterNext", "readToken_lt", "readToken_gt", "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", "lineBreak", "lineBreakG", "isNewLine", "hasNewLine", "skipWhiteSpace", "skipWhiteSpaceInLine", "isWhitespace", "JsxErrors", "AttributeIsEmpty", "MissingClosingTagElement", "openingTagName", "MissingClosingTagFragment", "UnexpectedSequenceExpression", "HTMLEntity", "UnsupportedJsxValue", "UnterminatedJsxContent", "UnwrappedAdjacentJSXElements", "isFragment", "getQualifiedJSXName", "namespace", "JSXParserMixin", "jsxReadToken", "chunkStart", "canStartJSXElement", "jsxReadEntity", "jsxReadNewLine", "normalizeCRLF", "curLine", "lineStart", "jsxReadString", "quote", "startPos", "codePointAtPos", "codePoint", "readInt", "count", "desc", "entity", "XHTMLEntities", "jsxReadWord", "jsxParseIdentifier", "jsxParseNamespacedName", "jsxParseElementName", "jsxParseAttributeValue", "setContext", "jsxParseExpressionContainer", "jsxParseEmptyExpression", "jsxParseSpreadChild", "previousContext", "jsxParseAttribute", "jsxParseOpeningElementAt", "selfClosing", "jsxParseClosingElementAt", "jsxParseElementAt", "children", "openingElement", "closingElement", "contents", "openingFragment", "closingFragment", "jsxParseElement", "newContext", "replaceToken", "skipSpace", "prevType", "splice", "TypeScriptScope", "tsNames", "TypeScriptScopeHandler", "importsStack", "hasImport", "allowShadow", "len", "isConst", "wasConst", "ProductionParameterHandler", "stacks", "currentFlags", "hasAwait", "hasYield", "hasReturn", "hasIn", "functionFlags", "BaseParser", "sawUnambiguousESM", "ambiguousScriptDifferentAst", "sourcePos", "offsetPos", "pluginConfig", "pluginName", "pluginOptions", "actualOptions", "plugin", "_this$plugins$get", "setTrailingComments", "comments", "trailingComments", "unshift", "setLeadingComments", "leadingComments", "setInnerComments", "innerComments", "adjustInnerComments", "commentWS", "lastElement", "CommentsParser", "commentsLen", "processComment", "commentStack", "commentStackLength", "lastCommentWS", "leadingNode", "commentEnd", "containingNode", "finalizeComment", "trailingNode", "_node$options", "commentStart", "finalizeRemainingComments", "resetPreviousNodeTrailingComments", "takeSurroundingComments", "State", "errors", "potentialArrowAt", "topicContext", "maxNumOfResolvableTopics", "maxTopicIndex", "labels", "ct", "firstInvalidTemplateEscapePos", "strictErrors", "tokensLength", "v", "isAmbientContext", "inAbstractClass", "inDisallowConditionalTypesContext", "soloAwait", "inFSharpPipelineDirectBody", "hasTopLevelAwait", "isDigit", "forbiddenNumericSeparatorSiblings", "decBinOct", "hex", "isAllowedNumericSeparatorSibling", "bin", "oct", "dec", "readStringContents", "initialPos", "initialLineStart", "initialCurLine", "firstInvalidLoc", "unterminated", "isStringEnd", "res", "readEscapedChar", "str", "containsInvalid", "inTemplate", "throwOnInvalid", "readHexChar", "readCodePoint", "strictNumericEscape", "octalStr", "octal", "parseInt", "forceLen", "n", "invalidEscapeSequence", "allowNumSeparator", "bailOnError", "forbiddenSiblings", "isAllowedSibling", "total", "e", "Infinity", "prev", "numericSeparatorInEscapeSequence", "Number", "isNaN", "unexpectedNumericSeparator", "_isDigit", "invalidDigit", "invalidCodePoint", "buildPosition", "VALID_REGEX_FLAGS", "Token", "Tokenizer", "isLookahead", "errorHandlers_readInt", "errorBuilder", "errorHandlers_readCodePoint", "errorHandlers_readStringContents_string", "recordStrictModeErrors", "errorHandlers_readStringContents_template", "pushToken", "checkKeywordEscapes", "createLookaheadState", "old", "curr", "nextTokenStartSince", "lastIndex", "lookaheadCharCodeSince", "nextTokenInLineStart", "nextTokenInLineStartSince", "lookaheadInLineCharCode", "cp", "trail", "setStrict", "toParseError", "clear", "skipLineComment", "startSkip", "spaceStart", "loop", "commentWhitespace", "readToken_numberSign", "readToken_interpreter", "nextPos", "expectPlugin", "readToken_dot", "readNumber", "readToken_slash", "width", "readToken_caret", "proposal", "topicToken", "lookaheadCh", "codePointAt", "readToken_atSign", "readToken_plus_min", "size", "readToken_eq_excl", "readToken_question", "readTemplateToken", "readRadixNumber", "readString", "readWord", "readRegexp", "escaped", "content", "mods", "char", "isBigInt", "replace", "startsWithDot", "isFloat", "hasExponent", "isOctal", "hasLeadingZero", "integer", "underscorePos", "isDecimal", "parseFloat", "readTemplateContinuation", "opening", "firstCode", "escStart", "identifierCheck", "esc", "keywordTypes", "raiseOverwrite", "expectOnePlugin", "pluginNames", "some", "ClassScope", "privateNames", "loneAccessors", "undefinedPrivateNames", "ClassScopeHandler", "oldClassScope", "from", "declarePrivateName", "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", "UtilParser", "addExtra", "isUnparsedContextual", "nameStart", "startsWith", "hasPrecedingLineBreak", "hasFollowingLineBreak", "isLineTerminator", "allowAsi", "fn", "oldState", "abortSignal", "checkExpressionErrors", "andThrow", "shorthandAssignLoc", "doubleProtoLoc", "privateKeyLoc", "optionalParametersLoc", "voidPatternLoc", "hasErrors", "isLiteralPropertyName", "initializeScopes", "oldLabels", "oldExportedIdentifiers", "exportedIdentifiers", "oldInModule", "oldScope", "oldProdParam", "prodParam", "oldExpressionScope", "expressionScope", "enterInitialScopes", "paramFlags", "isCommonJS", "scopeFlags", "checkDestructuringPrivate", "ExpressionErrors", "Node", "NodePrototype", "__clone", "NodeUtils", "locationNode", "unwrapParenthesizedExpression", "LValParser", "_node$extra3", "last", "_node$extra2", "operator", "arg", "checkToRestConversion", "elt", "toAssignableListItem", "element", "toReferencedListDeep", "parseSpread", "parseRestBinding", "parseBindingList", "ParseBindingListFlags", "parseObjectLike", "parseVoidPattern", "closeCharCode", "allowEmpty", "elts", "checkCommaAfterRest", "parseDecorator", "parseBindingElement", "parseBindingRestProperty", "parseBindingProperty", "parsePropertyName", "checkLVal", "checkClashes", "hasParenthesizedAncestor", "_expression$extra", "checkIdentifier", "unwrappedExpression", "validity", "ParseErrorClass", "isParenthesizedExpression", "nextAncestor", "child", "declareNameFromIdentifier", "identifier", "allowPattern", "keywordAndTSRelationalOperator", "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", "InvalidHeritageClauseType", "InvalidModifierOnAwaitUsingDeclaration", "InvalidModifierOnTypeMember", "InvalidModifierOnTypeParameter", "InvalidModifierOnTypeParameterPositions", "InvalidModifierOnUsingDeclaration", "InvalidModifiersOrder", "orderedModifiers", "InvalidPropertyAccessAfterInstantiationExpression", "InvalidTupleMemberLabel", "MissingInterfaceName", "NonAbstractClassHasAbstractMethod", "NonClassMethodPropertyHasAbstractModifier", "OptionalTypeBeforeRequired", "OverrideNotInSubClass", "PrivateElementHasAbstract", "PrivateElementHasAccessibility", "ReadonlyForMethodSignature", "ReservedArrowTypeParam", "ReservedTypeAssertion", "SingleTypeParameterWithoutTrailingComma", "typeParameterName", "StaticBlockCannotHaveModifier", "TupleOptionalAfterType", "TypeAnnotationAfterAssign", "TypeImportCannotSpecifyDefaultAndNamed", "TypeModifierIsUsedInTypeExports", "TypeModifierIsUsedInTypeImports", "UnexpectedParameterModifier", "UnexpectedReadonly", "UnexpectedTypeAnnotation", "UnexpectedTypeCastInParameter", "UnsupportedImportTypeArgument", "UnsupportedParameterPropertyKind", "UnsupportedSignatureParameterKind", "UsingDeclarationInAmbientContext", "keywordTypeFromName", "tsIsAccessModifier", "tsIsVarianceAnnotations", "typescript", "TypeScriptParserMixin", "tsParseInOutModifiers", "tsParseModifiers", "bind", "allowedModifiers", "disallowedModifiers", "errorTemplate", "tsParseConstModifier", "tsParseInOutConstModifiers", "tsIsIdentifier", "tsTokenCanFollowModifier", "tsNextTokenOnSameLineAndCanFollowModifier", "tsNextTokenCanFollowModifier", "tsParseModifier", "stopOnStartOfClassStaticBlock", "hasSeenStaticModifier", "tsIsStartOfStaticBlocks", "tsTryParse", "modified", "enforceOrder", "before", "after", "incompatible", "mod1", "mod2", "accessibility", "hasOwnProperty", "tsIsListTerminator", "tsParseList", "parseElement", "tsParseDelimitedList", "refTrailingCommaPos", "tsParseDelimitedListWorker", "expectSuccess", "trailingCommaPos", "tsParseBracketedList", "bracket", "skipFirstToken", "tsParseImportType", "tsParseImportTypeOptions", "qualifier", "tsParseEntityName", "tsParseEntityNameFlags", "tsParseTypeArguments", "withProperty", "tsParseImportTypeWithPropertyValue", "parsePropertyDefinition", "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", "firstParameter", "tsParseTypeMember", "idx", "tsParseTypeLiteral", "tsParseObjectTypeMembers", "tsIsStartOfMappedType", "tsParseMappedType", "tsExpectThenParseType", "nameType", "tsParseType", "tsTryParseType", "tsParseTupleType", "elementTypes", "tsParseTupleElementType", "seenOptionalElement", "elementNode", "restStartLoc", "labeled", "isWord", "chAfterWord", "wordName", "typeOrLabel", "tsParseNonArrayType", "labeledNode", "optionalTypeNode", "restNode", "tsParseParenthesizedType", "tsParseFunctionOrConstructorType", "tsInAllowConditionalTypesContext", "tsParseLiteralTypeNode", "tsParseTemplateLiteralType", "parseTemplate", "parseTemplateSubstitution", "tsParseThisTypeOrThisTypePredicate", "thisKeyword", "parseMaybeUnary", "nodeType", "tsParseArrayTypeOrHigher", "tsParseTypeOperator", "tsParseTypeOperatorOrHigher", "tsCheckTypeAnnotationForReadOnly", "tsParseInferType", "tsParseConstraintForInferType", "tsInDisallowConditionalTypesContext", "isTypeOperator", "tsParseUnionOrIntersectionType", "parseConstituentType", "hasLeadingOperator", "tsParseIntersectionTypeOrHigher", "tsParseUnionTypeOrHigher", "tsIsStartOfFunctionType", "tsIsUnambiguouslyStartOfFunctionType", "tsSkipParameterStart", "previousErrorCount", "_unused2", "tsInType", "t", "tsParseTypePredicateAsserts", "thisTypePredicate", "typePredicateVariable", "tsParseTypePredicatePrefix", "tsTryParseTypeOrTypePredicateAnnotation", "eatColon", "tsParseNonConditionalType", "checkType", "extendsType", "trueType", "falseType", "isAbstractConstructorSignature", "tsParseTypeAssertion", "tsParseHeritageClause", "originalStartLoc", "delimitedList", "tsParseInterfaceDeclaration", "tsParseTypeAliasDeclaration", "tsInTopLevelContext", "oldInDisallowConditionalTypesContext", "tsNextThenParseType", "tsParseEnumMember", "initializer", "tsParseEnumDeclaration", "tsParseEnumBody", "tsParseModuleBlock", "parseBlockOrModuleBlockBody", "tsParseModuleOrNamespaceDeclaration", "nested", "inner", "tsParseAmbientExternalModuleDeclaration", "global", "tsParseImportEqualsDeclaration", "maybeDefaultIdentifier", "moduleReference", "tsParseModuleReference", "tsIsExternalModuleReference", "tsParseExternalModuleReference", "f", "tsTryParseAndCatch", "tsTryParseDeclare", "startType", "tsInAmbientContext", "parseFunctionStatement", "parseClass", "parseVarStatement", "isUsing", "isAwaitUsing", "tsParseDeclaration", "tsTryParseExportDeclaration", "tsCheckLineTerminator", "tsParseAbstractDeclaration", "tsTryParseGenericAsyncArrowFunction", "oldMaybeInArrowParameters", "tsParseTypeArgumentsInExpression", "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", "nextTokenIsIdentifierAndNotTSRelationalOperatorOnSameLine", "nextTokenIsIdentifierOrStringLiteralOnSameLine", "nextTokenIsIdentifierOnSameLine", "parseAccessModifier", "tsHasSomeModifiers", "callParseClassMemberWithIsStatic", "parseClassStaticBlock", "parseClassMemberWithIsStatic", "hadSuperClass", "parsePostMemberNameModifiers", "methodOrProp", "isDeclare", "isIdentifier", "parseClassPropertyAnnotation", "definite", "declareClassPrivateMethodInScope", "_typeCast", "_typeCast2", "typeCast", "_typeParameters", "reportReservedArrowTypeParam", "trailingComma", "sawUnary", "toAssignableParenthesizedExpression", "parseMaybeDecoratorArguments", "canHaveLeadingDecorator", "getGetterSetterExpectedParamCount", "baseCount", "firstParam", "hasContextParam", "parseCatchClauseParam", "oldIsAmbientContext", "oldStrict", "oldInAbstractClass", "maybeTakeDecorators", "hasEstreePlugin", "methodFn", "shouldParseAsAmbientContext", "getExpression", "parseExportSpecifier", "isString", "isInTypeExport", "parseTypeOnlyImportExportSpecifier", "isImport", "isInTypeOnlyImportExport", "leftOfAsKey", "rightOfAsKey", "leftOfAs", "rightOfAs", "hasTypeSpecifier", "canParseAsKeyword", "firstAs", "secondAs", "parseModuleExportName", "kindKey", "_node$directive", "_node$decorators", "_node$optional", "_node$typeAnnotation", "_node$accessibility", "_node$decorators2", "_node$override", "_node$readonly", "_node$static", "_node$declare", "_node$returnType", "_node$typeParameters", "_node$optional2", "_node$optional3", "_node$accessibility2", "_node$readonly2", "_node$static2", "_node$declare2", "_node$definite", "_node$readonly3", "_node$typeAnnotation2", "_node$accessibility3", "_node$decorators3", "_node$override2", "_node$optional4", "_node$id", "_node$abstract", "_node$declare3", "_node$decorators4", "_node$implements", "_node$superTypeArgume", "_node$typeParameters2", "_node$declare4", "_node$definite2", "_node$const", "_node$declare5", "_node$computed", "_node$qualifier", "_node$declare6", "_node$extends", "_node$optional5", "_node$readonly4", "_node$declare7", "_node$global", "_node$const2", "_node$in", "_node$out", "superTypeArguments", "in", "chStartsBindingIdentifierAndNotRelationalOperator", "endCh", "chStartsBindingIdentifier", "isPossiblyLiteralEnum", "expressions", "isUncomputedMemberExpressionChain", "isNumber", "isNegativeNumber", "PlaceholderErrors", "ClassNameIsRequired", "UnexpectedSpace", "placeholders", "PlaceholdersParserMixin", "parsePlaceholder", "expectedNode", "assertNoSpace", "finishPlaceholder", "verifyBreakContinue", "isBreak", "parseStatementOrSloppyAnnexBFunctionDeclaration", "stmtPlaceholder", "parseBlock", "createNewLexicalScope", "parseFunctionId", "requireId", "parseClassBody", "maybeParseExportDefaultSpecifier", "_specifiers", "checkExport", "filter", "hasStarImport", "maybeParseStarImportSpecifier", "parseNamedImportSpecifiers", "parseImportSource", "v8intrinsic", "V8IntrinsicMixin", "parseV8Intrinsic", "v8IntrinsicStartLoc", "parseIdentifierName", "PIPELINE_PROPOSALS", "TOPIC_TOKENS", "validatePlugins", "pluginsMap", "decoratorsBeforeExport", "allowCallParenthesized", "_pluginsMap$get2", "proposalList", "p", "tokenList", "_pluginsMap$get", "syntaxType", "moduleAttributesVersionPluginOption", "version", "deprecatedAssertSyntax", "RECORD_AND_TUPLE_SYNTAX_TYPES", "missingPlugins", "mixinPlugins", "mixinPluginNames", "ExpressionParser", "checkProto", "isRecord", "sawProto", "shouldExitDescending", "disallowIn", "disallowInAnd", "parseExpressionBase", "allowInAnd", "parseMaybeAssignDisallowIn", "isYield", "parseYield", "ownExpressionErrors", "parseMaybeConditional", "isAmbiguousPrefixOrIdentifier", "parseExprOps", "parseMaybeUnaryOrPrivate", "op", "prec", "checkPipelineAtInfixOperator", "logical", "coalesce", "parseExprOpRightExpr", "finishedNode", "nextOp", "withTopicBindingContext", "parseHackPipeBody", "withSoloAwaitPermittingContext", "parseFSharpPipelineBody", "parseSmartPipelineBodyInStyle", "parseExprOpBaseRightExpr", "_body$extra", "requiredParentheses", "topicReferenceWasUsedInCurrentContext", "checkExponentialAfterUnary", "isAwait", "recordAwaitIfAllowed", "parseAwait", "update", "isDelete", "parseUpdate", "updateExpressionNode", "parseExprSubscripts", "maybeAsyncArrow", "parseBind", "parseCoverCallAndAsyncArrowHead", "parseNoCallExpr", "tag", "quasi", "allowPlaceholder", "nodeForExtra", "oldInFSharpPipelineDirectBody", "addTrailingCommaExtraToNode", "parseExprListItem", "_call$extra", "parseSuper", "parseImportMetaPropertyOrPhaseCall", "parseImportCall", "parseDo", "parseFunctionOrFunctionSent", "parseDecorators", "parseNewOrNewTarget", "parseTopicReferenceThenEqualsSign", "parseTopicReference", "pipeProposal", "parseModuleExpression", "parseAsyncFunctionExpression", "parseAsyncArrowUnaryFunction", "topicTokenType", "topicTokenValue", "finishTopicReference", "testTopicReferenceConfiguration", "topicReferenceIsAllowedInCurrentContext", "registerTopicReference", "meta", "parseMetaProperty", "parseFunction", "isSource", "createIdentifierAt", "innerStartLoc", "spreadStartLoc", "optionalCommaStartLoc", "spreadNodeStartLoc", "parseMaybeAssignAllowInOrVoidPattern", "innerEndLoc", "arrowNode", "wrapParenthesis", "parenExpression", "metaProp", "parseNew", "parseExprList", "parseTemplateElement", "isTagged", "elemStart", "elem", "isTail", "endOffset", "elemEnd", "cooked", "tail", "curElt", "quasis", "substitutions", "maybeAsyncOrAccessorProp", "keyName", "_params", "parseObjectMethod", "finishedProp", "generator", "isExpression", "hasStrictModeDirective", "nonSimple", "isSimpleParamList", "formalParameters", "reservedTest", "isAwaitAllowed", "delegating", "delegate", "childExpr", "isSimpleReference", "checkSmartPipeTopicBodyEarlyErrors", "callback", "outerContextTopicState", "withSmartMixTopicForbiddingContext", "outerContextSoloAwaitState", "prodParamToSet", "ParamKind", "prodParamToClear", "ret", "revertScopes", "parseProgram", "nextCode", "loopLabel", "switchLabel", "loneSurrogate", "keywordRelationalOperator", "babel7CompatTokens", "hashEndPos", "hashEndLoc", "backquoteEnd", "backquoteEndLoc", "startToken", "templateValue", "templateElementEnd", "templateElementEndLoc", "endToken", "StatementParser", "interpreter", "parseInterpreterDirective", "finishedProgram", "stmtToDirective", "directiveLiteral", "hasFollowingBindingAtom", "isForUsing", "nextCharAfterOf", "chStartsBindingPattern", "hasInLineFollowingBindingIdentifierOrBrace", "allowsUsing", "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", "_classNode$decorators", "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", "nextChar", "hasFrom", "nextAfterFrom", "maybeParseImportAttributes", "checkJSONModuleImport", "checkNames", "isDefault", "isFrom", "_node$specifiers", "_declaration$extra", "nodes", "surrogate", "isJSONModuleImport", "singleBindingType", "_node$assertions", "nonDefaultNamedSpecifier", "find", "phaseIdentifier", "phaseIdentifierName", "isImportPhase", "isPrecedingIdImportPhase", "parseImportSourceAndAttributes", "maybeParseDefaultImportSpecifier", "parseNext", "_node$specifiers2", "parseImportAttributes", "attrs", "attrNames", "parseModuleAttributes", "useWith", "importSpecifier", "Parser", "normalizedOptions", "_options", "getParser", "ast", "moduleError", "generateExportedTokenTypes", "internalTokenTypes", "tokTypes", "getParserClass", "parserClassCache", "pluginList", "exports", "module", "require_util", "exports", "module", "exports", "module", "util", "parse", "key", "token", "c", "literal", "escape", "buffer", "replacements", "exports", "module", "util", "stringify", "value", "replacements", "partial", "require_lib", "exports", "module", "parse", "stringify", "JSON5", "require_constants", "exports", "module", "require_debug", "exports", "module", "debug", "exports", "module", "debug", "exports", "module", "exports", "module", "exports", "module", "debug", "version", "identifier", "require_parse", "exports", "module", "parse", "version", "exports", "module", "parse", "version", "exports", "module", "parse", "version", "exports", "module", "version", "identifier", "exports", "module", "parse", "version2", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "parse", "version", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "list", "exports", "module", "list", "exports", "module", "exports", "module", "lt", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "lt", "exports", "module", "parse", "coerce", "version", "exports", "module", "exports", "module", "cached", "debug", "version", "exports", "module", "debug", "version", "exports", "module", "version", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "require_valid", "exports", "module", "exports", "module", "lt", "version", "exports", "module", "version", "exports", "module", "version", "exports", "module", "exports", "module", "version", "exports", "module", "lt", "require_semver", "exports", "module", "parse", "lt", "coerce", "require_constants", "exports", "module", "path", "require_utils", "exports", "path", "exports", "module", "code", "require_parse", "exports", "module", "parse", "opts", "value", "esc", "rest", "open", "source", "exports", "module", "path", "parse", "isObject", "state", "regex", "format", "require_picomatch", "exports", "module", "exports", "module", "fs", "Readable", "promisify", "error", "path", "resolve", "exports", "module", "path", "exports", "module", "string", "path", "testString", "returnIndex", "exports", "module", "exports", "module", "open", "close", "check", "exports", "module", "require_utils", "exports", "node", "require_stringify", "exports", "module", "stringify", "exports", "module", "exports", "module", "max", "intersection", "string", "integer", "exports", "module", "util", "isObject", "transform", "stringify", "format", "exports", "module", "exports", "module", "stringify", "require_constants", "exports", "module", "require_parse", "exports", "module", "stringify", "parse", "open", "index", "exports", "module", "stringify", "parse", "exports", "module", "require_binary_extensions", "exports", "module", "exports", "module", "path", "require_constants", "exports", "os", "exports", "module", "fs", "promisify", "open", "close", "main", "path", "error", "rawEmitter", "listener", "newStats", "target", "resolve", "stats", "exports", "module", "fs", "promisify", "error", "path", "info", "list", "transform", "exports", "fs", "promisify", "list", "string", "path", "cwd", "error", "code", "now", "stat", "exports", "module", "path", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "path", "list", "minimatch", "Minimatch", "filter", "makeRe", "braceExpand", "debug", "set", "parse", "self", "partial", "exports", "module", "parse", "path", "optional", "data", "options", "validate", "i", "exports", "module", "exports", "module", "exports", "lookup", "charset", "path", "extension", "exports", "module", "format", "parse", "exports", "module", "parse", "format", "string", "exports", "module", "path", "exports", "module", "exports", "module", "code", "require_error", "exports", "module", "error", "code", "exports", "module", "promisify", "path", "createHash", "resolve", "hash", "toPath", "target", "config", "headers", "mark", "code", "cwd", "require_errors", "exports", "module", "format", "error", "exports", "data", "exports", "exports", "require_errors", "exports", "_a", "exports", "exports", "exports", "exports", "util", "exports", "exports", "exports", "exports", "crypto", "util", "exports", "hash", "exports", "exports", "exports", "exports", "exports", "exports", "header", "exports", "isObject", "proto", "exports", "exports", "_a", "exports", "exports", "exports", "exports", "_a", "_b", "exports", "exports", "exports", "exports", "integer", "exports", "exports", "parse", "enc$1", "der", "keyObject", "exports", "_a", "exports", "exports", "exports", "exports", "exports", "exports", "require_decrypt", "exports", "_a", "protectedHeader", "require_decrypt", "exports", "require_decrypt", "exports", "exports", "exports", "der", "exports", "exports", "require_encrypt", "exports", "require_encrypt", "exports", "_a", "_b", "_c", "jwe", "target", "exports", "exports", "exports", "exports", "exports", "crypto", "data", "exports", "crypto", "data", "require_verify", "exports", "_a", "data", "require_verify", "exports", "require_verify", "exports", "exports", "date", "exports", "exports", "require_verify", "exports", "_a", "require_decrypt", "exports", "require_encrypt", "exports", "require_sign", "exports", "data", "require_sign", "exports", "require_sign", "exports", "exports", "require_sign", "exports", "_a", "require_encrypt", "exports", "exports", "check", "description", "data", "exports", "exports", "clone", "jwk", "error", "cached", "exports", "http", "exports", "exports", "base64url", "header", "require_base64url", "exports", "base64url", "exports", "exports", "exports", "_a", "_b", "exports", "exports", "exports", "require_runtime", "exports", "require_cjs", "exports", "require_lib", "exports", "module", "assert", "createHash", "format", "base64", "validate", "require_is_key_object", "exports", "module", "util", "crypto", "require_base64url", "exports", "module", "base64", "require_decode_jwt", "exports", "module", "base64url", "header", "exports", "module", "exports", "module", "isPlainObject", "target", "exports", "module", "exports", "module", "exports", "module", "pick", "object", "path", "exports", "module", "format", "exports", "module", "exports", "module", "base64url", "TokenSet", "exports", "module", "createHash", "randomBytes", "base64url", "exports", "module", "exports", "module", "Node", "list", "self", "exports", "module", "self", "require_package", "exports", "module", "exports", "module", "require_request", "exports", "module", "assert", "http", "URL", "pick", "exports", "module", "exports", "module", "exports", "module", "clone", "isPlainObject", "_a", "alg", "exports", "module", "isPlainObject", "merge", "target", "require_client", "exports", "module", "merge", "auth", "exports", "module", "crypto", "object", "hash", "self", "date", "string", "number", "regex", "exports", "module", "exports", "module", "resolve", "require_client", "exports", "module", "crypto", "assert", "URL", "URLSearchParams", "base64url", "pick", "isPlainObject", "TokenSet", "clone", "BaseClient", "target", "header", "required", "hash", "determineRsaAlgorithm", "determineEcAlgorithm", "exports", "module", "exports", "module", "require_issuer", "exports", "module", "registry", "clone", "resource", "Issuer", "exports", "module", "format", "BaseClient", "pick", "info", "error", "require_lib", "exports", "module", "Issuer", "Strategy", "TokenSet", "generators", "exports", "module", "fs", "exports", "module", "os", "fs", "exports", "module", "object", "define", "exports", "module", "path", "fs", "array", "error", "resolve", "open", "target", "exports", "code", "_a", "stringify", "UsedValueState", "exports", "_b", "_a", "code", "exports", "Node", "error", "code", "_a", "_b", "hash", "exports", "schema", "self", "mergeValues", "Type", "exports", "exports", "error", "data", "schema", "exports", "data", "exports", "schema", "self", "exports", "_a", "DataType", "exports", "schema", "data", "exports", "data", "data", "exports", "schema", "schema", "exports", "validate", "_a", "errors", "data", "self", "schema", "exports", "data", "exports", "module", "exports", "module", "schema", "schema", "exports", "exports", "schema", "self", "ValidationError", "data", "ValidationError", "errors", "exports", "exports", "env", "schema", "_a", "exports", "validate", "resolve", "exports", "module", "require_utils", "exports", "module", "code", "address", "ipv6", "path", "esc", "exports", "module", "path", "http", "ws", "exports", "module", "parse", "resolve", "target", "exports", "exports", "_a", "_c", "_b", "_d", "Ajv", "data", "schema", "format", "errors", "regex", "exports", "env", "self", "exports", "_a", "exports", "error", "data", "exports", "error", "data", "exports", "exports", "error", "data", "exports", "error", "data", "schema", "exports", "error", "data", "exports", "error", "schema", "data", "exports", "error", "data", "exports", "exports", "error", "data", "schema", "exports", "error", "data", "schema", "exports", "error", "data", "schema", "exports", "exports", "error", "schema", "data", "exports", "schema", "data", "exports", "exports", "error", "schema", "exports", "error", "schema", "data", "exports", "exports", "schema", "data", "error", "schema", "data", "exports", "error", "schema", "data", "errors", "exports", "schema", "data", "exports", "schema", "data", "exports", "schema", "exports", "exports", "error", "schema", "exports", "schema", "exports", "error", "schema", "exports", "exports", "exports", "error", "data", "schema", "self", "format", "code", "exports", "format", "exports", "exports", "exports", "DiscrError", "exports", "error", "data", "schema", "_a", "required", "exports", "exports", "module", "Ajv", "exports", "module", "validate", "exports", "date", "regex", "time", "error", "exports", "data", "self", "format", "list", "fs", "_a", "_b", "module", "exports", "exports", "module", "exports", "module", "require_errors", "exports", "module", "InvalidArgumentError", "code", "data", "require_constants", "exports", "module", "header", "exports", "module", "code", "_a", "_b", "require_util", "exports", "module", "assert", "net", "stringify", "InvalidArgumentError", "object", "path", "idx", "_a", "stream", "err", "exports", "module", "exports", "module", "util", "version", "error", "path", "address", "code", "require_request", "exports", "module", "InvalidArgumentError", "assert", "Request", "path", "reset", "header", "_a", "_b", "error", "exports", "module", "InvalidArgumentError", "_a", "_b", "data", "exports", "module", "target", "exports", "module", "InvalidArgumentError", "_a", "_b", "data", "exports", "module", "InvalidArgumentError", "resolve", "data", "err", "exports", "module", "net", "assert", "util", "InvalidArgumentError", "connect", "hostname", "session", "require_utils", "exports", "require_constants", "exports", "exports", "module", "Buffer", "exports", "module", "Buffer", "require_constants", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "assert", "data", "exports", "module", "assert", "exports", "module", "exports", "module", "assert", "_a", "keys", "required", "require_util", "exports", "module", "zlib", "performance", "assert", "code", "object", "_a", "_b", "header", "isAborted", "target", "byteLength", "data", "list", "exports", "module", "entry", "FormData", "exports", "module", "assert", "exports", "module", "resolve", "exports", "module", "util", "FormData", "assert", "object", "chunk", "_a", "value", "data", "exports", "module", "assert", "util", "mod", "_a", "data", "path", "reset", "header", "resolve", "exports", "module", "assert", "util", "InvalidArgumentError", "duration", "error", "code", "path", "hostname", "headers", "header", "pipe", "resolve", "require_client", "exports", "module", "assert", "net", "http", "util", "Request", "InvalidArgumentError", "_a", "connect", "resolve", "hostname", "ip", "err", "exports", "module", "data", "exports", "module", "client", "resolve", "exports", "module", "InvalidArgumentError", "util", "connect", "origin", "target", "error", "exports", "module", "InvalidArgumentError", "pool", "dispatcher", "exports", "module", "InvalidArgumentError", "util", "connect", "origin", "target", "error", "exports", "module", "InvalidArgumentError", "util", "connect", "result", "exports", "module", "Buffer", "net", "InvalidArgumentError", "address", "error", "exports", "module", "Buffer", "InvalidArgumentError", "debuglog", "debug", "data", "version", "address", "exports", "module", "net", "URL", "InvalidArgumentError", "debuglog", "debug", "_a", "resolve", "socket", "info", "exports", "module", "InvalidArgumentError", "connect", "data", "path", "origin", "protocol", "opts", "_a", "exports", "module", "EnvHttpProxyAgent", "hostname", "exports", "module", "assert", "_a", "_b", "_c", "_d", "code", "exports", "module", "_options", "exports", "module", "InvalidArgumentError", "connect", "exports", "module", "assert", "Readable", "InvalidArgumentError", "util", "resolve", "_a", "consume", "exports", "module", "assert", "AsyncResource", "Readable", "InvalidArgumentError", "util", "resolve", "data", "exports", "module", "self", "_a", "_b", "exports", "module", "assert", "AsyncResource", "InvalidArgumentError", "util", "_a", "res", "opaque", "resolve", "data", "exports", "module", "Readable", "assert", "AsyncResource", "InvalidArgumentError", "util", "body", "exports", "module", "InvalidArgumentError", "AsyncResource", "assert", "util", "resolve", "data", "exports", "module", "assert", "AsyncResource", "InvalidArgumentError", "util", "connect", "resolve", "data", "require_api", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "InvalidArgumentError", "clone", "mockDispatch", "path", "data", "removeTrailingSlash", "_a", "error", "aborted", "_b", "_c", "exports", "module", "InvalidArgumentError", "data", "replyParameters", "newMockDispatch", "error", "exports", "module", "promisify", "InvalidArgumentError", "exports", "module", "InvalidArgumentError", "error", "number", "exports", "module", "promisify", "InvalidArgumentError", "exports", "module", "path", "exports", "module", "InvalidArgumentError", "path", "result", "exports", "module", "InvalidArgumentError", "header", "crypto", "exports", "module", "resolve", "setTimeout", "clearTimeout", "InvalidArgumentError", "hash", "path", "data", "error", "_a", "exports", "module", "InvalidArgumentError", "error", "_a", "self", "require_global", "exports", "module", "InvalidArgumentError", "setGlobalDispatcher", "exports", "module", "assert", "_a", "_b", "exports", "module", "util", "assert", "InvalidArgumentError", "_a", "_b", "path", "error", "header", "exports", "module", "exports", "module", "_a", "exports", "module", "exports", "module", "InvalidArgumentError", "_maxSize", "_size", "_a", "exports", "module", "lookup", "InvalidArgumentError", "header", "hostname", "_maxItems", "ip", "_a", "record", "_b", "_c", "_d", "require_cache", "exports", "module", "header", "exports", "module", "date", "code", "exports", "module", "util", "_a", "_b", "_c", "header", "date", "exports", "module", "_maxSize", "_size", "key", "entries", "entry", "exports", "module", "assert", "_a", "_b", "_c", "_d", "require_cache", "exports", "module", "assert", "Readable", "util", "_a", "aborted", "isStale", "_b", "handleResult", "headers", "success", "opts", "result", "exports", "module", "error", "exports", "module", "_a", "_b", "_c", "_d", "exports", "module", "util", "opts", "exports", "module", "_a", "header", "require_headers", "exports", "module", "assert", "util", "code", "object", "header", "target", "init", "_a", "array", "list", "Headers", "exports", "module", "Headers", "util", "isAborted", "assert", "init", "data", "_a", "Response", "target", "require_request", "exports", "module", "Headers", "util", "assert", "init", "_a", "_b", "window", "list", "Request", "exports", "module", "assert", "crypto", "metadata", "require_fetch", "exports", "module", "Request", "zlib", "isAborted", "assert", "Readable", "_a", "error", "fetch", "init", "_b", "_c", "resolve", "require_util", "exports", "module", "assert", "header", "require_cache", "exports", "module", "assert", "Request", "request", "exports", "module", "cache", "require_constants", "exports", "module", "require_util", "exports", "module", "code", "path", "date", "stringify", "require_parse", "exports", "module", "assert", "header", "exports", "module", "stringify", "Headers", "exports", "module", "data", "init", "_a", "_b", "_c", "_d", "_eventInit", "ErrorEvent", "require_constants", "exports", "module", "require_util", "exports", "module", "target", "init", "data", "code", "exports", "module", "randomFillSync", "buffer", "_size", "data", "exports", "module", "Headers", "assert", "crypto", "_a", "_b", "_c", "_d", "object", "code", "validate", "exports", "module", "_options", "data", "exports", "module", "assert", "_options", "error", "data", "code", "body", "exports", "module", "node", "data", "exports", "module", "ErrorEvent", "_url", "_options", "data", "code", "ws", "_a", "init", "WebSocket", "exports", "module", "target", "init", "code", "error", "exports", "module", "_url", "data", "code", "string", "_a", "_b", "_c", "error", "require_util", "exports", "module", "exports", "module", "exports", "module", "_url", "error", "_a", "require_undici", "exports", "module", "EnvHttpProxyAgent", "errors", "util", "InvalidArgumentError", "setGlobalDispatcher", "path", "fetch", "init", "ErrorEvent", "WebSocket", "extraTypingsCommander", "Sentry", "code", "red", "green", "blue", "integer", "process", "os", "version", "tty", "string", "styles", "object", "chalk", "styles", "open", "close", "self", "string", "os", "path", "stdFs", "crypto", "toPath", "import_node_process", "import_node_process", "import_node_process", "functionName", "onetime", "process", "global", "list", "code", "process", "process", "import_node_tty", "tty", "open", "close", "string", "import_node_process", "env", "process", "string", "string", "import_node_process", "process", "process", "spinner", "format", "dotenv", "import_os", "import_path", "import_index", "program", "createCommand", "createArgument", "createOption", "CommanderError", "InvalidArgumentError", "InvalidOptionArgumentError", "Command", "Argument", "Option", "Help", "commander", "version", "import_node_async_hooks", "_a", "_b", "setState", "import_node_process", "isUnicodeSupported", "process", "proto", "spinner", "segmenter", "stringWidth", "string", "emojiRegex", "ANSI_BACKGROUND_OFFSET", "wrapAnsi16", "code", "wrapAnsi256", "wrapAnsi16m", "red", "green", "blue", "styles", "modifierNames", "foregroundColorNames", "backgroundColorNames", "colorNames", "assembleStyles", "integer", "ansiStyles", "ansi_styles_default", "code", "string", "stringWidth", "ansi_styles_default", "cliWidth", "_a", "readline", "import_node_async_hooks", "import_node_util", "resolve", "config", "MuteStream", "resolve", "code", "signal", "_a", "error", "import_node_util", "dist_default", "config", "validate", "value", "required", "isValid", "error", "import_node_util", "name", "dist_default", "config", "item", "description", "import_node_util", "isSelectable", "normalizeChoices", "dist_default", "config", "validate", "error", "isValid", "description", "header", "dist_default", "config", "error", "dist_default", "data", "_a", "_b", "fetch", "Request", "init", "error", "final", "joiner", "_a", "fetchRetryFactory", "InvalidArgumentError", "code", "resource", "teamSlug", "team", "path", "os", "_a", "version", "resource", "data", "options", "fetch", "target", "resolve", "path", "resolve", "data", "code", "error", "resource", "options", "version", "config", "deployment", "config", "import_path", "import_path", "path", "nodeFs", "import_crypto", "path", "path", "config", "version", "uuid", "crypto", "import_child_process", "import_util", "import_path", "child_process", "version", "latestVersionWithBinary", "data", "ctx", "path", "AdmZip", "config", "import_path", "import_child_process", "import_node_util", "import_node_os", "os", "os", "hostname", "port", "resolve", "import_node_util", "debug", "import_tracing", "import_path", "util", "assertIs", "assertNever", "object", "joinValues", "array", "objectUtil", "data", "issue", "error", "terminal", "issue", "data", "path", "issue", "errorUtil", "path", "error", "errorMap", "description", "data", "_a", "_b", "check", "transform", "target", "emojiRegex", "regex", "ip", "version", "header", "base64", "_ZodString", "parsedType", "ctx", "result", "schema", "issue", "issues", "elements", "processed", "preprocess", "parsedType", "data", "result", "check", "r", "ZodFirstPartyTypeKind", "data", "import_path", "import_path", "import_fs", "path", "fs", "import_path", "import_node_path", "import_node_process", "run", "resolve", "error", "cwd", "process", "fsPromises", "path", "import_node_util", "import_node_url", "execFileCallback", "toPath", "path", "toPath", "findUp", "findUp", "path", "importPath", "module", "error", "import_path", "path", "entryPoints", "target", "entryPoints", "esbuild", "path", "_a", "_b", "error", "i", "cleanPath", "fs", "path", "entryPoints", "error", "warning", "module", "version", "target", "parseAST", "config", "import_crypto", "crypto", "run", "error", "_a", "http", "resolve", "import_path", "import_path", "import_util", "reference", "address", "path", "_a", "isObject", "value", "_a", "data", "error", "address", "debug", "resolve", "error", "componentPath", "functionName", "componentPath", "add", "version", "auth", "_a", "resolve", "update", "_a", "debug", "ws", "error", "_a", "initialBackoff", "code", "config", "mark", "address", "error", "modification", "componentPath", "import_path", "import_path", "import_child_process", "import_node_util", "dashboardUrl", "import_crypto", "dotenv", "dotenv", "resolve", "data", "warning", "deployment", "error", "env", "warning", "fetch", "errorText", "_a", "data", "error", "email", "deployment", "_a", "_b", "_c", "auth", "error", "data", "email", "_d", "isInteractive", "crypto", "zlib", "data", "duration", "_a", "_b", "_c", "_d", "fetch", "error", "startPush", "dashboardUrl", "deployment", "env", "import_path", "import_path", "path", "componentDefinitionPath", "import_esbuild", "path", "componentPath", "importPath", "esbuild", "error", "warning", "_a", "schema", "entryPoints", "import_path", "startPush", "schema", "import_path", "Sentry", "import_path", "Sentry", "chokidar", "path", "resolve", "auth", "functionsDir", "result", "handleResult", "path", "_a", "version", "import_path", "startPush", "importPath", "path", "visibility", "_a", "module", "identifier", "exports", "name", "componentPath", "reference", "functionName", "canonicalizedModulePath", "analyzedModule", "analyzedFunction", "path", "functionsDir", "startPushResponse", "isPublishedPackage", "prettier", "import_path", "config", "path", "crypto", "schemaChange", "componentDefinitionPath", "indexDiff", "import_crypto", "_a", "_b", "bundle", "path", "version", "impl", "startPushRequest", "startPushResponse", "module", "componentPath", "componentDiff", "import_perf_hooks", "import_path", "import_node_util", "resolve", "_a", "fetch", "_a", "_b", "resolve", "functionName", "componentPath", "path", "result", "_a", "_b", "parseArgs", "identifier", "path", "JSON5", "functionName", "exportName", "string", "hash", "resolve", "util", "ws", "import_path", "import_stream", "fetch", "path", "import_path", "format", "_a", "snapshotImportDashboardLink", "path", "fetch", "data", "_a", "path", "fetch", "Sentry", "import_path", "import_fs", "import_path", "path", "import_fs", "Sentry", "version", "error", "import_crypto", "import_fs", "fs", "config", "fs", "Sentry", "import_fs", "import_path", "path", "fs", "config", "config", "target", "config", "import_child_process", "import_path", "import_fs", "path", "fs", "cwd", "config", "resolve", "_a", "_b", "child_process", "code", "import_path", "path", "fs", "config", "path", "error", "_a", "_b", "deployment", "version", "data", "isOffline", "path", "config", "deployments", "version", "serveHandler", "deployments", "data", "data", "_a", "_b", "_c", "_d", "schema", "error", "issue", "path", "entryPoints", "version", "config", "fetch", "version", "data", "error", "deployment", "dashboardUrl", "Sentry", "import_util", "import_crypto", "path", "uuid", "child_process", "code", "resolve", "error", "deployment", "config", "_a", "_b", "version", "isOffline", "config", "deployments", "data", "error", "_a", "_b", "auth", "reference", "config", "import_os", "import_path", "path", "config", "os", "dotenv", "config", "rawDeployKey", "deployKey", "globalConfig", "config", "result", "_a", "_b", "deployment", "auth", "dashboardUrl", "import_path", "import_index", "mod", "custom", "import_os", "import_child_process", "custom", "_a", "header", "version", "open", "data", "globalConfig", "path", "config", "path", "import_path", "version", "path", "auth", "init", "import_open", "deployment", "dashboardUrl", "open", "import_open", "fetch", "open", "functionName", "_a", "deployment", "_options", "globalConfig", "uuid", "dashboardUrl", "deployment", "Sentry", "_a", "_b", "_a", "_a", "data", "deployment", "_a", "deployment", "crypto", "import_ws", "hostname", "resolve", "address", "duration", "fetch", "ws", "data", "_a", "deployment", "_a", "deployment", "deployment", "_options", "env", "componentPath", "data", "document", "_a", "deployment", "import_util", "_a", "componentPath", "common", "insights", "time", "_a", "auth", "dashboardUrl", "config", "NEVER", "initializer", "init", "_a", "_b", "config", "floatSafeRemainder", "getParsedType", "isPlainObject", "array", "object", "target", "path", "data", "_a", "schema", "Class", "config", "_b", "_c", "_d", "error", "issue", "terminal", "schema", "config", "schema", "config", "schema", "config", "version", "hostname", "regex", "time", "timeRegex", "_a", "inst", "floatSafeRemainder", "_a", "inst", "_b", "version", "_a", "version", "checks", "isAborted", "result", "_", "hostname", "inst", "address", "data", "base64", "isValidJWT", "header", "result", "isObject", "allowsEval", "r", "config", "results", "left", "right", "mergeValues", "isPlainObject", "isPlainObject", "result", "config", "output", "result", "result", "config", "left", "r", "data", "error", "issue", "en_default", "schema", "Class", "Class", "_emoji", "Class", "Class", "Class", "_null", "Class", "Class", "Class", "Class", "schema", "schema", "safeParse", "schema", "data", "result", "schema", "_a", "_b", "schema", "_a", "def", "date", "datetime", "duration", "time", "datetime", "date", "time", "duration", "initializer", "issue", "issues", "ZodError", "parse", "parseAsync", "safeParse", "safeParseAsync", "ZodType", "def", "data", "parse", "safeParse", "parseAsync", "safeParseAsync", "check", "target", "description", "_a", "ZodString", "_emoji", "datetime", "date", "time", "duration", "string", "ZodNumber", "ZodType", "number", "ZodBoolean", "ZodType", "boolean", "ZodNull", "ZodType", "_null", "ZodUnknown", "ZodType", "ZodNever", "ZodArray", "ZodType", "ZodObject", "ZodType", "ZodOptional", "object", "looseObject", "ZodObject", "ZodUnion", "ZodType", "ZodDiscriminatedUnion", "ZodIntersection", "ZodRecord", "ZodType", "ZodEnum", "ZodType", "ZodLiteral", "ZodType", "ZodType", "issue", "output", "ZodOptional", "ZodNullable", "ZodDefault", "ZodType", "ZodCatch", "ZodType", "ZodType", "ZodReadonly", "ZodType", "custom", "issue", "schema", "config", "en_default", "custom", "string", "number", "looseObject", "_null", "object", "ErrorCode", "object", "number", "string", "string", "object", "boolean", "looseObject", "object", "string", "boolean", "object", "number", "string", "_null", "looseObject", "boolean", "object", "string", "looseObject", "string", "number", "boolean", "object", "code", "data", "_a", "schema", "data", "safeParse", "_options", "_a", "error", "info", "_b", "_c", "_d", "task", "resolve", "safeParse", "jsonrpcNotification", "isPlainObject", "Ajv", "_addFormats", "schema", "_a", "_b", "_a", "safeParse", "_b", "_c", "_d", "error", "import_node_process", "process", "error", "_a", "_b", "resolve", "auth", "deployment", "ignoreOverride", "getDefaultOptions", "getRefs", "_options", "getDefaultOptions", "addErrorMessage", "setResponseValueAndErrors", "getRelativePath", "parseAnyDef", "getRelativePath", "parseArrayDef", "_a", "_b", "_c", "parseDef", "setResponseValueAndErrors", "parseBigintDef", "check", "setResponseValueAndErrors", "parseBooleanDef", "parseBrandedDef", "parseDef", "parseCatchDef", "parseDef", "parseDateDef", "check", "setResponseValueAndErrors", "parseDefaultDef", "parseDef", "parseEffectsDef", "parseDef", "parseAnyDef", "parseEnumDef", "parseIntersectionDef", "parseDef", "schema", "parseLiteralDef", "parsedType", "emojiRegex", "parseStringDef", "check", "setResponseValueAndErrors", "literal", "ALPHA_NUMERIC", "schema", "_a", "regex", "parseRecordDef", "_a", "_b", "_c", "_d", "parseDef", "parseAnyDef", "schema", "parseStringDef", "parseBrandedDef", "parseMapDef", "parseRecordDef", "parseDef", "parseAnyDef", "parseNativeEnumDef", "object", "parseNeverDef", "parseAnyDef", "parseNullDef", "primitiveMappings", "parseUnionDef", "types", "x", "parseDef", "parseNullableDef", "primitiveMappings", "base", "parseDef", "parseNumberDef", "check", "addErrorMessage", "setResponseValueAndErrors", "parseObjectDef", "required", "parseDef", "schema", "parseOptionalDef", "_a", "parseDef", "parseAnyDef", "parsePipelineDef", "parseDef", "parsePromiseDef", "parseDef", "parseSetDef", "parseDef", "schema", "setResponseValueAndErrors", "parseTupleDef", "parseDef", "parseUndefinedDef", "parseAnyDef", "parseUnknownDef", "parseAnyDef", "parseReadonlyDef", "parseDef", "selectParser", "parseStringDef", "parseNumberDef", "parseObjectDef", "parseBigintDef", "parseBooleanDef", "parseDateDef", "parseUndefinedDef", "parseNullDef", "parseArrayDef", "parseUnionDef", "parseIntersectionDef", "parseTupleDef", "parseRecordDef", "parseLiteralDef", "parseEnumDef", "parseNativeEnumDef", "parseNullableDef", "parseOptionalDef", "parseMapDef", "parseSetDef", "parsePromiseDef", "parseNeverDef", "parseEffectsDef", "parseAnyDef", "parseUnknownDef", "parseDefaultDef", "parseBrandedDef", "parseReadonlyDef", "parseCatchDef", "parsePipelineDef", "parseDef", "_a", "ignoreOverride", "selectParser", "getRelativePath", "parseAnyDef", "zodToJsonSchema", "schema", "getRefs", "name", "parseDef", "parseAnyDef", "main", "esm_default", "zodToJsonSchema", "deployment", "schema", "fetch", "inputSchema", "outputSchema", "deployment", "inputSchema", "outputSchema", "description", "_a", "_b", "inputSchema", "outputSchema", "description", "deployment", "inputSchema", "outputSchema", "description", "deployment", "parseArgs", "args", "deployment", "inputSchema", "outputSchema", "description", "deployment", "inputSchema", "outputSchema", "description", "deployment", "fetch", "inputSchema", "outputSchema", "description", "_a", "deployment", "auth", "insights", "dashboardUrl", "esm_default", "resolve", "error", "_a", "deployment", "team", "import_path", "import_path", "config", "path", "path", "import_node_net", "selectEnvDeployment", "_options", "deployment", "info", "workosUrl", "description", "error", "config", "email", "env", "_a", "_b", "_c", "logToStderr", "_a", "_b", "dns", "net", "program", "init", "env", "version"]
}
